Name: series-workflownbplw Phase: Succeeded StartedAt: 2026-09-03 00:52:14 +0000 UTC FinishedAt: 2026-09-03 04:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[0] Phase: Succeeded StartedAt: 2026-09-03 00:52:14 +0000 UTC FinishedAt: 2026-09-03 00:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 00:52:14 +0000 UTC FinishedAt: 2026-09-03 00:55:45 +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": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "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": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "64372cb2-1b58-42da-a1da-4f4b8982cc49" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_start", "damon_set_schemes", "damon_commit_ctx", "damos_commit_quota_goals", "damon_sysfs_add_schemes" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbHMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGVhcmx5IHJldHVybiBjaGVja3Mgd2hlbiBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgb3IgYHF1b3RhLVx1MDAzZWVzemAgYXJlIHplcm8gaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzKClgLlxuXG5UaGVzZSBjaGFuZ2VzOlxuMS4gRG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuXG4yLiBEbyBub3QgY29weSBhbnkgZGF0YSB0byB1c2VyIHNwYWNlIG9yIGFsdGVyIGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4zLiBPbmx5IGFkZCBjb25kaXRpb25hbCBjaGVja3Mgb24gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgLlxuXG5CZWNhdXNlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHNjaGVtZSBxdW90YSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyAoc3BlY2lmaWNhbGx5IGRhbW9zX3F1b3RhX2lzX2Z1bGwgYW5kIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMpIHRvIGhhbmRsZSB6ZXJvIGNoYXJnZWQgc2l6ZSBhbmQgemVybyBlZmZlY3RpdmUgc2NoZW1lIHNpemUgY29uZGl0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIGtlcm5lbCBBUElzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY1YzhmYjk2MzliOGM4Yzg4NGNmYzI1Mzc0MDNiYmEzOTA1Njg4N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjUzOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggZGYyMjYyMTc2NTkxMS4uZjhjNzg0ZGYyNDYwMCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMjY1NSw2ICYjNDM7MjY1NSw4IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbiB7XG4gXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoIXF1b3RhLVx1MDAzZWNoYXJnZWRfc3opXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHQvKlxuQEAgLTI3NTAsNiAmIzQzOzI3NTIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0aWYgKCFxdW90YS1cdTAwM2Vlc3opXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG4gXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuIFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbHMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBzY2hlbWUgcXVvdGEgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9kYW1vbi9jb3JlLmMgKHNwZWNpZmljYWxseSBkYW1vc19xdW90YV9pc19mdWxsIGFuZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKSB0byBoYW5kbGUgemVybyBjaGFyZ2VkIHNpemUgYW5kIHplcm8gZWZmZWN0aXZlIHNjaGVtZSBzaXplIGNvbmRpdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlIGFuZCBrZXJuZWwgQVBJcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNWM4ZmI5NjM5YjhjOGM4ODRjZmMyNTM3NDAzYmJhMzkwNTY4ODdkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwMDo1Mzo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCBkZjIyNjIxNzY1OTExLi5mOGM3ODRkZjI0NjAwIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0yNjU1LDYgJiM0MzsyNjU1LDggQEAgc3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLAogewogCWlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSkKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoIXF1b3RhLSZndDtjaGFyZ2VkX3N6KQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCWlmIChxdW90YS0mZ3Q7Y2hhcmdlZF9zeiAmZ3Q7PSBxdW90YS0mZ3Q7ZXN6KQogCQlyZXR1cm4gdHJ1ZTsKIAkvKgpAQCAtMjc1MCw2ICYjNDM7Mjc1Miw5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYywKIAkJaWYgKCFzLSZndDt3bWFya3MuYWN0aXZhdGVkKQogCQkJY29udGludWU7CiAKJiM0MzsJCWlmICghcXVvdGEtJmd0O2VzeikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJLyogQ2hlY2sgdGhlIHF1b3RhICovCiAJCWlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLSZndDttaW5fcmVnaW9uX3N6KSkKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYwCgkJCQkJCQlvdXRwdXQ6IDY2CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gQ29kZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGxpZXMuIEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZC4gSSYjMzk7bSB0aGlua2luZyBhIHF1aWNrIGByZWFkLWZpbGVgIG9yIGV2ZW4gYSBgZ3JlcHBlcmAgcGFzcyB0aHJvdWdoIGBtbS9kYW1vbi9jb3JlLmNgIGlzIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBhIHByZWxpbWluYXJ5IG92ZXJ2aWV3LiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGVzZSBjaGFuZ2VzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBLY29uZmlnIG9wdGlvbnMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZWxwcyBtZSBuYXJyb3cgZG93biB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhlc2UgY2hhbmdlcyB3aWxsIGFwcGx5LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0IHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY1MDpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xuMjY1MTpcdH1cbjI2NTI6XHRcbjI2NTM6XHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4yNjU0Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbjI2NTU6XHR7XG4yNjU2Olx0XHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4yNjU3Olx0XHRcdHJldHVybiBmYWxzZTtcbjI2NTg6XHRcdGlmICghcXVvdGEtXHUwMDNlY2hhcmdlZF9zeilcbjI2NTk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjY2MDpcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opXG4yNjYxOlx0XHRcdHJldHVybiB0cnVlO1xuMjY2MjpcdFx0LypcbjI2NjM6XHRcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFx1MDAzY21pbl9yZWdpb25fc3ogcmVtYWluaW5nXG4yNjY0Olx0XHQgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC5cbjI2NjU6XHRcdCAqL1xuMjY2NjpcdFx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiAtIHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNjIG1pbl9yZWdpb25fc3o7XG4yNjY3Olx0fVxuMjY2ODpcdFxuMjY2OTpcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuMjY3MDpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXG4yNjcxOlx0e1xuMjY3MjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4yNjczOlx0XHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xuMjY3NDpcdFx0c3RydWN0IHRpbWVzcGVjNjQgYmVnaW4sIGVuZDtcbjI2NzU6XHRcdHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCA9IDA7XG4yNjc2Olx0XHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkID0gMDtcbjI2Nzc6XHRcdC8qXG4yNjc4Olx0XHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcbjI2Nzk6XHRcdCAqIGltcGxpZXMgd2l0aCAmIzM5O25yX2NvbnRleHRzJiMzOTsgZmlsZS4gIE5ldmVydGhlbGVzcywgb25seSBzaW5nbGUgY29udGV4dFxuMjY4MDpcdFx0ICogcGVyIGtkYW1vbmQgaXMgc3VwcG9ydGVkIGZvciBub3cuICBTbywgd2UgY2FuIHNpbXBseSB1c2UgJiMzOTswJiMzOTsgY29udGV4dFxuMjY4MTpcdFx0ICogaW5kZXggaGVyZS5cbjI2ODI6XHRcdCAqL1xuMjY4MzpcdFx0dW5zaWduZWQgaW50IGNpZHggPSAwO1xuMjY4NDpcdFx0c3RydWN0IGRhbW9zICpzaXRlcjtcdFx0Lyogc2NoZW1lcyBpdGVyYXRvciAqL1xuMjY4NTpcdFx0dW5zaWduZWQgaW50IHNpZHggPSAwO1xuMjY4NjpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7XHQvKiB0YXJnZXRzIGl0ZXJhdG9yICovXG4yNjg3Olx0XHR1bnNpZ25lZCBpbnQgdGlkeCA9IDAsIG5yX2FjY2Vzc2VzID0gMDtcbjI2ODg6XHRcdGJvb2wgZG9fdHJhY2UgPSBmYWxzZTtcbjI2ODk6XHRcbjI2OTA6XHRcdC8qIGdldCBpbmRpY2VzIGZvciB0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoKSAqL1xuMjY5MTpcdFx0aWYgKHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseV9lbmFibGVkKCkpIHtcbjI2OTI6XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNpdGVyLCBjKSB7XG4yNjkzOlx0XHRcdFx0aWYgKHNpdGVyID09IHMpXG4yNjk0Olx0XHRcdFx0XHRicmVhaztcbjI2OTU6XHRcdFx0XHRzaWR4JiM0MzsmIzQzOztcbjI2OTY6XHRcdFx0fVxuMjY5NzpcdFx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodGl0ZXIsIGMpIHtcbjI2OTg6XHRcdFx0XHRpZiAodGl0ZXIgPT0gdClcbjI2OTk6XHRcdFx0XHRcdGJyZWFrO1xuMjcwMDpcdFx0XHRcdHRpZHgmIzQzOyYjNDM7O1xuMjcwMTpcdFx0XHR9XG4yNzAyOlx0XHRcdG5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ociwgYyk7XG4yNzAzOlx0XHRcdGRvX3RyYWNlID0gdHJ1ZTtcbjI3MDQ6XHRcdH1cbjI3MDU6XHRcbjI3MDY6XHRcdGlmIChjLVx1MDAzZW9wcy5hcHBseV9zY2hlbWUpIHtcbjI3MDc6XHRcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXHUwMDI2XHUwMDI2XG4yNzA4Olx0XHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ICYjNDM7IHN6IFx1MDAzZSBxdW90YS1cdTAwM2Vlc3opIHtcbjI3MDk6XHRcdFx0XHRzeiA9IEFMSUdOX0RPV04ocXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeixcbjI3MTA6XHRcdFx0XHRcdFx0Yy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbjI3MTE6XHRcdFx0XHRpZiAoIXN6KVxuMjcxMjpcdFx0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbjI3MTM6XHRcdFx0XHRpZiAoZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KSlcbjI3MTQ6XHRcdFx0XHRcdGdvdG8gdXBkYXRlX3N0YXQ7XG4yNzE1Olx0XHRcdH1cbjI3MTY6XHRcdFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcbjI3MTc6XHRcdFx0XHRyZXR1cm47XG4yNzE4Olx0XHRcdGt0aW1lX2dldF9jb2Fyc2VfdHM2NChcdTAwMjZiZWdpbik7XG4yNzE5Olx0XHRcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcyxcbjI3MjA6XHRcdFx0XHRcdGRhbW9uX25yX3JlZ2lvbnModCksIGRvX3RyYWNlKTtcbjI3MjE6XHRcdFx0c3pfYXBwbGllZCA9IGMtXHUwMDNlb3BzLmFwcGx5X3NjaGVtZShjLCB0LCByLCBzLFxuMjcyMjpcdFx0XHRcdFx0XHUwMDI2c3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xuMjcyMzpcdFx0XHRkYW1vc193YWxrX2NhbGxfd2FsayhjLCB0LCByLCBzLCBzel9vcHNfZmlsdGVyX3Bhc3NlZCk7XG4yNzI0Olx0XHRcdGt0aW1lX2dldF9jb2Fyc2VfdHM2NChcdTAwMjZlbmQpO1xuMjcyNTpcdFx0XHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zICYjNDM7PSB0aW1lc3BlYzY0X3RvX25zKFx1MDAyNmVuZCkgLVxuMjcyNjpcdFx0XHRcdHRpbWVzcGVjNjRfdG9fbnMoXHUwMDI2YmVnaW4pO1xuMjcyNzpcdFx0XHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcbjI3Mjg6XHRcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcbjI3Mjk6XHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xuMjczMDpcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbjI3MzE6XHRcdFx0fVxuMjczMjpcdFx0fVxuMjczMzpcdFx0aWYgKHMtXHUwMDNlYWN0aW9uICE9IERBTU9TX1NUQVQpXG4yNzM0Olx0XHRcdHItXHUwMDNlYWdlID0gMDtcbjI3MzU6XHRcbjI3MzY6XHR1cGRhdGVfc3RhdDpcbjI3Mzc6XHRcdGRhbW9zX3VwZGF0ZV9zdGF0KHMsIHN6LCBzel9hcHBsaWVkLCBzel9vcHNfZmlsdGVyX3Bhc3NlZCk7XG4yNzM4Olx0fVxuMjczOTpcdFxuMjc0MDpcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbjI3NDE6XHRcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNzQyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMjc0MzpcdHtcbjI3NDQ6XHRcdHN0cnVjdCBkYW1vcyAqcztcbjI3NDU6XHRcbjI3NDY6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4yNzQ3Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjc0ODpcdFxuMjc0OTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBNZWNoYW5pc20qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uLiBMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEZpcnN0LCBpdCBjaGVja3MgaWYgdGhlIHF1b3RhIGlzIGFjdHVhbGx5IHNldCwgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSB1c2FnZS4gVGhlbiwgaXQgY29tcGFyZXMgdGhlIGNoYXJnZWQgc2l6ZSBhZ2FpbnN0IHRoZSBlc3RhYmxpc2hlZCBzaXplLCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUgaWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRha2luZyBpbnRvIGFjY291bnQgYW55IHNpemVzIHRvIGNoYXJnZSB0byB0aGUgcXVvdGEuIFRoZSBjcml0aWNhbCBwYXJ0IHNlZW1zIHRvIGJlIHRoZSBjaGVjazogYHF1b3RhLSZndDtlc3ogLSBxdW90YS0mZ3Q7Y2hhcmdlZF9zeiAmbHQ7IG1pbl9yZWdpb25fc3pgLiBUaGlzIGltcGxpZXMgdGhhdCBldmVuIGlmIHRoZXJlJiMzOTtzIGEgc21hbGwgYW1vdW50IHJlbWFpbmluZyBpbiB0aGUgcXVvdGEsIGxlc3MgdGhhbiB0aGUgbWluaW11bSByZWdpb24gc2l6ZSwgaXQgZWZmZWN0aXZlbHkgY29uc2lkZXJzIHRoZSBxdW90YSBleGhhdXN0ZWQuIFRoaXMgbWVhbnMgREFNT04gaXMgZGVzaWduZWQgdG8gaGFuZGxlIGFjdGlvbnMgb24gYSBwZXItcmVnaW9uIGJhc2lzLCBzbyBpZiB0aGUgcmVtYWluaW5nIHF1b3RhIGlzbiYjMzk7dCBsYXJnZSBlbm91Z2ggdG8gY292ZXIgYXQgbGVhc3QgYSBtaW5pbXVtIHJlZ2lvbiwgaXQgd29uJiMzOTt0IHByb2NlZWQuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgZnVuY3Rpb24gc2VlbXMgdG8gYmUgdXNpbmcgaXQuIEl0IGNoZWNrcyBpZiB0aGUgcXVvdGEmIzM5O3Mgc2l6ZSBpcyBzZXQsIGFuZCB0aGVuIGNhbGxzIGBkYW1vc19xdW90YV9pc19mdWxsYC4gSWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZSBjb2RlIGNvbnRpbnVlcyB0byB0aGUgbmV4dCBzY2hlbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgbG9naWMgaXMgaW1wbGVtZW50ZWQgdGhpcyB3YXkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgd2hhdCBjb21taXQgaW50cm9kdWNlZCB0aGlzLCBvciB3aGF0IHNwZWNpZmljIHByb2JsZW0gdGhpcyBxdW90YSBtZWNoYW5pc20gaXMgbWVhbnQgdG8gc29sdmUuIExldCYjMzk7cyBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGNvZGViYXNlIGZvciB1c2FnZXMgb2YgdGhlc2UgZnVuY3Rpb24gbmFtZXMgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhpcyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc0MDpcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbjI3NDE6XHRcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNzQyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMjc0MzpcdHtcbjI3NDQ6XHRcdHN0cnVjdCBkYW1vcyAqcztcbjI3NDU6XHRcbjI3NDY6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4yNzQ3Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjc0ODpcdFxuMjc0OTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4yNzUwOlx0XHRcdFx0Y29udGludWU7XG4yNzUxOlx0XG4yNzUyOlx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMjc1MzpcdFx0XHRcdGNvbnRpbnVlO1xuMjc1NDpcdFxuMjc1NTpcdFx0XHRpZiAoIXF1b3RhLVx1MDAzZWVzeilcbjI3NTY6XHRcdFx0XHRjb250aW51ZTtcbjI3NTc6XHRcbjI3NTg6XHRcdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG4yNzU5Olx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc2MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjc2MTpcdFxuMjc2MjpcdFx0XHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc2MzpcdFx0XHRcdGNvbnRpbnVlO1xuMjc2NDpcdFxuMjc2NTpcdFx0XHRpZiAocy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAyNlx1MDAyNlxuMjc2NjpcdFx0XHRcdFx0cy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAzYz0gcy1cdTAwM2VzdGF0Lm5yX3NuYXBzaG90cylcbjI3Njc6XHRcdFx0XHRjb250aW51ZTtcbjI3Njg6XHRcbjI3Njk6XHRcdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbjI3NzA6XHRcdFx0XHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XG4yNzcxOlx0XG4yNzcyOlx0XHRcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcbjI3NzM6XHRcdFx0XHRzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzJiM0MzsmIzQzOztcbjI3NzQ6XHRcdH1cbjI3NzU6XHR9XG4yNzc2Olx0XG4yNzc3Olx0LypcbjI3Nzg6XHQgKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXG4yNzc5Olx0ICogQGM6XHRcdFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cbjI3ODA6XHQgKiBAdDpcdFx0XHRtb25pdG9yaW5nIHRhcmdldCB0byBhcHBseSB0aGUgc2NoZW1lcyB0by5cbjI3ODE6XHQgKiBAbWF4X3JlZ2lvbl9zejpcdG1heGltdW0gcmVnaW9uIHNpemUgZm9yIEBjLlxuMjc4MjpcdCAqXG4yNzgzOlx0ICogVGhpcyBmdW5jdGlvbiBjb3VsZCBzcGxpdCByZWdpb25zIGZvciBrZWVwaW5nIHRoZSBxdW90YS4gIFRvIG1pbmltaXplXG4yNzg0Olx0ICogb3ZlcmhlYWQgZnJvbSB0aGUgc3BsaXQgb3BlcmF0aW9ucyBpbmNyZWFzZWQgbnVtYmVyIG9mIHJlZ2lvbnMsIHRoaXNcbjI3ODU6XHQgKiBmdW5jdGlvbiB3aWxsIGFsc28gbWVyZ2UgcmVnaW9ucyBhZnRlciB0aGUgc2NoZW1lcyBhcHBseWluZyBhdHRlbXB0IGlzIGRvbmUsXG4yNzg2Olx0ICogZm9yIGVhY2ggcmVnaW9uLiAgVGhlIG1lcmdlIG9wZXJhdGlvbiBpcyBtYWRlIG9ubHkgd2hlbiBpdCBkb2VzbiYjMzk7dCBsb3NlIHRoZVxuMjc4NzpcdCAqIG1vbml0b3JpbmcgaW5mb3JtYXRpb24gYW5kIG5vdCB2aW9sYXRpbmcgQG1heF9yZWdpb25fc3ouXG4yNzg4Olx0ICpcbjI3ODk6XHQgKiBIZW5jZSwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVnaW9ucyBjb3VsZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgREFNT04gUXVvdGEgTG9naWMgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgbG9naWMgY2hhbmdlIGluIHRoZSBxdW90YSBtYW5hZ2VtZW50IHdpdGhpbiBEQU1PTi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSYjMzk7bSBmb2N1c2luZyBvbiBzY2VuYXJpb3Mgd2hlcmUgYHF1b3RhLSZndDtlc3pgIChlZmZlY3RpdmUgc2l6ZSkgb3IgYHF1b3RhLSZndDtjaGFyZ2VkX3N6YCAoY2hhcmdlZCBzaXplKSBtaWdodCBiZSB6ZXJvLiBTcGVjaWZpY2FsbHksIHRoZSBsaW5lIHRoYXQganVtcHMgb3V0IGlzIGByZXR1cm4gcXVvdGEtJmd0O2VzeiAtIHF1b3RhLSZndDtjaGFyZ2VkX3N6ICZsdDsgbWluX3JlZ2lvbl9zejtgLiBJZiBib3RoIGBlc3pgIGFuZCBgY2hhcmdlZF9zemAgYXJlIHplcm8sIGFuIHVuc2lnbmVkIHVuZGVyZmxvdyBjb3VsZCBoYXBwZW4uIFByZXZpb3VzbHksIHRoZSBjaGVjayBgcXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzemAgd291bGQgaGF2ZSBldmFsdWF0ZWQgdG8gdHJ1ZSBpbiB0aGF0IHNjZW5hcmlvICgwICZndDs9IDAgaXMgdHJ1ZSEpLCBsZWFkaW5nIHRvIGFuIGluY29ycmVjdCBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgcmV0dXJuLiBUaGlzIG1lYW5zIHRoYXQgYSBxdW90YSBtaWdodCBoYXZlIGJlZW4gaW5jb3JyZWN0bHkgcmVwb3J0ZWQgYXMgZnVsbCB3aGVuIGl0IHdhcyBub3QuCgpOb3cgSSBzZWUgaXQsIHRoZSBmaXg6ICBgaWYgKCFxdW90YS0mZ3Q7Y2hhcmdlZF9zeikgcmV0dXJuIGZhbHNlO2AgIFRoaXMgbWVhbnMsIGlmIHRoZSBjaGFyZ2VkIHNpemUgaXMgemVybywgd2UmIzM5O3JlIGV4cGxpY2l0bHkgcmV0dXJuaW5nIGZhbHNlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHF1b3RhIGlzICpub3QqIGZ1bGwuIEFuZCBpbiB0aGUgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uLCB3ZSBub3cgaGF2ZSBgaWYgKCFxdW90YS0mZ3Q7ZXN6KSBjb250aW51ZTtgICBTbyBpZiB0aGUgZWZmZWN0aXZlIHNpemUgaXMgemVybywgd2UgZG9uJiMzOTt0IGFwcGx5IGEgc2NoZW1lLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHNhZmV0eSBuZXQuCgpTbywgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2UuIE5vdywgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIGlzIHRoZSBjaGFuZ2UgbWVyZWx5IGZpeGluZyBhIGxvZ2ljIGVycm9yPwoKSSBuZWVkIHRvIHNlZSBob3cgREFNT04gaXMgdXNlZCBpbiB0aGUga2VybmVsLiBIb3cgY2FuIEkgdHJpZ2dlciBpdCwgYW5kIGhvdyBpcyBpdCBjb25maWd1cmVkPyBJIG5lZWQgdG8gY2hlY2sgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYnkgZnV6emluZy9RRU1VIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gaWRlbnRpZnkgZW50cnlwb2ludHMgYnkgbG9va2luZyBhdCB0aGUgc3ltYm9scywgZXRjLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vZGFtb24vS2NvbmZpZ2AgYW5kIGBtbS9kYW1vbi9NYWtlZmlsZWAgdG8gc2VlIGhvdyBEQU1PTiBpcyBlbmFibGVkLCBhbmQgd2hhdCB0aGUgYnVpbGQgcHJvY2VzcyBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgREFNT04gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGZvciBEQU1PTiBhbmQgaXRzIHZhcmlvdXMgZmVhdHVyZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpbmdzIGxpa2UgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgdGhlIGxpa2UsIGFyZSBtZXRpY3Vsb3VzbHkgbGFpZCBvdXQuIEJ5IGV4YW1pbmluZyB0aGF0IEtjb25maWcgZmlsZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBwcmVjaXNlbHkgdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRob3NlIGZlYXR1cmVzLCBzZWUgd2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhcmUgcmVxdWlyZWQgZm9yIGVhY2ggb25lLCBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IG9wdGlvbnMgYXJlIHNlbGVjdGVkIHRvIGdldCB0aGUgZGVzaXJlZCBEQU1PTiBiZWhhdmlvci4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSBzdGFibGUgYW5kIHByb3Blcmx5LWZ1bmN0aW9uaW5nIERBTU9OIGltcGxlbWVudGF0aW9uLCBhbmQgYEtjb25maWdgIGlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiAgMjE6XHRcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbiAgMjI6XHRcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcbiAgMjc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyODpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAyOTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBJbnZlc3RpZ2F0aW9uOiBJbml0aWFsIFRob3VnaHRzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBEQU1PTiBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb25maWd1cmF0aW9uIGJhc2ljcy4gU28sIERBTU9OIGlzIGNsZWFybHkgY29uZmlndXJlZCB2aWEgc3lzZnMsIGFzIGluZGljYXRlZCBieSBgQ09ORklHX0RBTU9OX1NZU0ZTYCBhbmQgYENPTkZJR19EQU1PTmAuIFRoYXQgbWFrZXMgc2Vuc2U7IHN5c2ZzIGlzIHRoZSBzdGFuZGFyZCBpbnRlcmZhY2UgZm9yIHByb2JpbmcgYW5kIG1hbmlwdWxhdGluZyBrZXJuZWwgcGFyYW1ldGVycy4gVGhlIG1lbnRpb25zIG9mIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9WQUREUmAgaW1tZWRpYXRlbHkgc2lnbmFsIHRob3NlIGFyZSBvcGVyYXRpb24gc2V0cyB3aGljaCBuZWVkIGRlZXBlciBleGFtaW5hdGlvbi4KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gcGlucG9pbnQgaG93IERBTU9OIGlzICphY3R1YWxseSogZW5nYWdlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4gSXMgaXQgaW52b2tlZCB0aHJvdWdoIGEgdXNlcnNwYWNlIEFQST8gRG9lcyBhIGtlcm5lbCBBUEkgdHJpZ2dlciBpdD8gSSYjMzk7bGwgbmVlZCB0byByZXNlYXJjaCB0aGUgY2FsbCBzdGFjay4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGRldGVybWluZSB3aGVyZSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgaXMgY2FsbGVkIGZyb20uIFRoYXQgZnVuY3Rpb24gY2FsbCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGFjdGl2YXRpb24gbG9naWMuIExldCYjMzk7cyBzZWUgd2hlcmUgdGhhdCB0YWtlcyB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjY2OT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjczOS1cbm1tL2RhbW9uL2NvcmUuYzoyNzQwOnN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0yNzQxLVx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mjc5NT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgwMi1cbm1tL2RhbW9uL2NvcmUuYzoyODAzOlx0XHRkYW1vbl9kb19hcHBseV9zY2hlbWVzKGMsIHQsIHIpO1xubW0vZGFtb24vY29yZS5jLTI4MDQtXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVHJhY2luZyB0aGUgREFNT04gQXBwbGljYXRpb24gUGF0aCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGBkYW1vc19hcHBseV90YXJnZXRgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndobyogaXMgY2FsbGluZyBpdCwgYW5kIGZyb20gd2hlcmUsIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGNhbGwgc3RhY2sgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBleGVjdXRpb24gcGF0aC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGZ1bmN0aW9uLCBhbmQgZXZlcnkgZnVuY3Rpb24gdGhhdCBsZWFkcyB0byBpdCwgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQXJlIHdlIGxvb2tpbmcgYXQgZGlyZWN0IGNhbGxzLCBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsZXIuIFdoYXQgZGF0YSBpcyBiZWluZyBwYXNzZWQgdG8gYGRhbW9zX2FwcGx5X3RhcmdldGAsIGFuZCBob3cgaXMgaXQgdXNlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNhbGxzIGFyZSBoYXBwZW5pbmcgaW4gdGhlIHNhbWUgY29udGV4dCwgc2FtZSB0YXNrLCBvciBpZiB0aGUgY2FsbHMgYXJlIGhhcHBlbmluZyBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LiBUaGlzIHdpbGwgaW1wYWN0IHRoZSB0cmFjaW5nIGVmZm9ydHMsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIGJlIGFibGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2FwcGx5X3RhcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mjc0MD1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NzctLypcbm1tL2RhbW9uL2NvcmUuYzoyNzc4OiAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cbm1tL2RhbW9uL2NvcmUuYy0yNzc5LSAqIEBjOlx0XHRcdG1vbml0b3JpbmcgY29udGV4dCB0byBhcHBseSBpdHMgREFNT1Mgc2NoZW1lcyB0by4uXG4tLVxubW0vZGFtb24vY29yZS5jLTI3OTQtICovXG5tbS9kYW1vbi9jb3JlLmM6Mjc5NTpzdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0yNzk2LVx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTMzNTc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzODMtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MzM4NDpcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xubW0vZGFtb24vY29yZS5jLTMzODUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgYW5hbHl6ZSB0aGlzOgoKKipJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBEQU1PTiYjMzk7cyBTY2hlbWUgQXBwbGljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIGNvZGUuIFRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlIGlzIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiAgVGhlIGxvZyBjbGVhcmx5IGlkZW50aWZpZXMgdGhhdCBmdW5jdGlvbiYjMzk7cyBjYWxsIG9yaWdpbiDigJMgaXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGBrZGFtb25kX2ZuYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuICBHb29kLiBOb3cgdGhhdCBJIGtub3cgd2hlcmUgdGhlIGFjdGlvbiAqc3RhcnRzKiwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIHRoZSBhY3Rpb24gZG9lcyBhbmQgaG93IGl0cyBjb250cm9sbGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbnRyb2xzIHRoZSBzY2hlbWUgYXBwbGljYXRpb24uICAKCk15IG5leHQgbW92ZSBpcyB0byBicm9hZGVuIHRoZSBzZWFyY2guIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBmaWxlIGBtbS9kYW1vbi9jb3JlLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBvZiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gSSYjMzk7bGwgYWxzbyBjaGVjayBvdXQgYG1tL2RhbW9uL3N5c2ZzLmNgIGFuZCBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gVGhlc2Ugc3lzZnMgaW50ZXJmYWNlcyBhcmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciBzY2hlbWVzIGFyZSBsaWtlbHkgZGVmaW5lZCBhbmQgaG93IHRoZXkgYXJlIGNvbnRyb2xsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODM3NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vZGFtb24vY29yZS5jLTE5LVxubW0vZGFtb24vY29yZS5jOjIwOi8qIGZvciBkYW1vbl9nZXRfZm9saW8oKSB1c2VkIGJ5IG5vZGUgZWxpZ2libGUgbWVtb3J5IG1ldHJpY3MgKi9cbm1tL2RhbW9uL2NvcmUuYy0yMS0jaW5jbHVkZSBcJiMzNDtvcHMtY29tbW9uLmhcJiMzNDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjUtXG5tbS9kYW1vbi9jb3JlLmM6MjY6c3RhdGljIERFRklORV9NVVRFWChkYW1vbl9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yNy1zdGF0aWMgaW50IG5yX3J1bm5pbmdfY3R4cztcbm1tL2RhbW9uL2NvcmUuYz0yOD1zdGF0aWMgYm9vbCBydW5uaW5nX2V4Y2x1c2l2ZV9jdHhzO1xubW0vZGFtb24vY29yZS5jLTI5LVxubW0vZGFtb24vY29yZS5jOjMwOnN0YXRpYyBERUZJTkVfTVVURVgoZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vY29yZS5jOjMxOnN0YXRpYyBzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBkYW1vbl9yZWdpc3RlcmVkX29wc1tOUl9EQU1PTl9PUFNdO1xubW0vZGFtb24vY29yZS5jLTMyLVxubW0vZGFtb24vY29yZS5jOjMzOnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZGFtb25fcmVnaW9uX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2RhbW9uL2NvcmUuYy0zNC1cbm1tL2RhbW9uL2NvcmUuYzozNTovKiBTaG91bGQgYmUgY2FsbGVkIHVuZGVyIGRhbW9uX29wc19sb2NrIHdpdGggaWQgc21hbGxlciB0aGFuIE5SX0RBTU9OX09QUyAqL1xubW0vZGFtb24vY29yZS5jOjM2OnN0YXRpYyBib29sIF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXG5tbS9kYW1vbi9jb3JlLmMtMzcte1xubW0vZGFtb24vY29yZS5jOjM4Olx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgZW1wdHlfb3BzID0ge307XG5tbS9kYW1vbi9jb3JlLmMtMzktXG5tbS9kYW1vbi9jb3JlLmM6NDA6XHRpZiAoIW1lbWNtcChcdTAwMjZlbXB0eV9vcHMsIFx1MDAyNmRhbW9uX3JlZ2lzdGVyZWRfb3BzW2lkXSwgc2l6ZW9mKGVtcHR5X29wcykpKVxubW0vZGFtb24vY29yZS5jLTQxLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZGFtb24vY29yZS5jLTQ1LS8qKlxubW0vZGFtb24vY29yZS5jOjQ2OiAqIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKCkgLSBDaGVjayBpZiBhIGdpdmVuIGRhbW9uX29wZXJhdGlvbnMgaXMgcmVnaXN0ZXJlZC5cbm1tL2RhbW9uL2NvcmUuYzo0NzogKiBAaWQ6XHRJZCBvZiB0aGUgZGFtb25fb3BlcmF0aW9ucyB0byBjaGVjayBpZiByZWdpc3RlcmVkLlxubW0vZGFtb24vY29yZS5jLTQ4LSAqXG4tLVxubW0vZGFtb24vY29yZS5jLTUwLSAqL1xubW0vZGFtb24vY29yZS5jOjUxOmJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXG5tbS9kYW1vbi9jb3JlLmMtNTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy01Ni1cdFx0cmV0dXJuIGZhbHNlO1xubW0vZGFtb24vY29yZS5jOjU3Olx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmM6NTg6XHRyZWdpc3RlcmVkID0gX19kYW1vbl9pc19yZWdpc3RlcmVkX29wcyhpZCk7XG5tbS9kYW1vbi9jb3JlLmM6NTk6XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vY29yZS5jLTYwLVx0cmV0dXJuIHJlZ2lzdGVyZWQ7XG4tLVxubW0vZGFtb24vY29yZS5jLTYzLS8qKlxubW0vZGFtb24vY29yZS5jOjY0OiAqIGRhbW9uX3JlZ2lzdGVyX29wcygpIC0gUmVnaXN0ZXIgYSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgc2V0IHRvIERBTU9OLlxubW0vZGFtb24vY29yZS5jLTY1LSAqIEBvcHM6XHRtb25pdG9yaW5nIG9wZXJhdGlvbnMgc2V0IHRvIHJlZ2lzdGVyLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy02Ny0gKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBzZXQgb2YgdmFsaWQgXHUwMDI2c3RydWN0XG5tbS9kYW1vbi9jb3JlLmM6Njg6ICogZGFtb25fb3BlcmF0aW9ucy1cdTAwM2VpZCBzbyB0aGF0IG90aGVycyBjYW4gZmluZCBhbmQgdXNlIHRoZW0gbGF0ZXIuXG5tbS9kYW1vbi9jb3JlLmMtNjktICpcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzEtICovXG5tbS9kYW1vbi9jb3JlLmM6NzI6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxubW0vZGFtb24vY29yZS5jLTczLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzgtXG5tbS9kYW1vbi9jb3JlLmM6Nzk6XHRtdXRleF9sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy04MC1cdC8qIEZhaWwgZm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBvcHMgKi9cbm1tL2RhbW9uL2NvcmUuYzo4MTpcdGlmIChfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKG9wcy1cdTAwM2VpZCkpXG5tbS9kYW1vbi9jb3JlLmMtODItXHRcdGVyciA9IC1FSU5WQUw7XG5tbS9kYW1vbi9jb3JlLmMtODMtXHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6ODQ6XHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW29wcy1cdTAwM2VpZF0gPSAqb3BzO1xubW0vZGFtb24vY29yZS5jOjg1Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy04Ni1cdHJldHVybiBlcnI7XG4tLVxubW0vZGFtb24vY29yZS5jLTg5LS8qKlxubW0vZGFtb24vY29yZS5jOjkwOiAqIGRhbW9uX3NlbGVjdF9vcHMoKSAtIFNlbGVjdCBhIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyB0byB1c2Ugd2l0aCB0aGUgY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy05MS0gKiBAY3R4Olx0bW9uaXRvcmluZyBjb250ZXh0IHRvIHVzZSB0aGUgb3BlcmF0aW9ucy5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTgtICovXG5tbS9kYW1vbi9jb3JlLmM6OTk6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcbm1tL2RhbW9uL2NvcmUuYy0xMDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDUtXG5tbS9kYW1vbi9jb3JlLmM6MTA2Olx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmM6MTA3Olx0aWYgKCFfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGlkKSlcbm1tL2RhbW9uL2NvcmUuYy0xMDgtXHRcdGVyciA9IC1FSU5WQUw7XG5tbS9kYW1vbi9jb3JlLmMtMTA5LVx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjExMDpcdFx0Y3R4LVx1MDAzZW9wcyA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW2lkXTtcbm1tL2RhbW9uL2NvcmUuYzoxMTE6XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vY29yZS5jLTExMi1cdHJldHVybiBlcnI7XG4tLVxubW0vZGFtb24vY29yZS5jLTExNC1cbm1tL2RhbW9uL2NvcmUuYzoxMTU6c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxubW0vZGFtb24vY29yZS5jLTExNi17XG5tbS9kYW1vbi9jb3JlLmM6MTE3Olx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XG5tbS9kYW1vbi9jb3JlLmMtMTE4LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjYtXG5tbS9kYW1vbi9jb3JlLmM6MTI3OnZvaWQgZGFtb25fYWRkX3ByZXAoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcClcbm1tL2RhbW9uL2NvcmUuYy0xMjgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzEtXG5tbS9kYW1vbi9jb3JlLmM6MTMyOnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxubW0vZGFtb24vY29yZS5jLTEzMy17XG4tLVxubW0vZGFtb24vY29yZS5jLTEzNi1cbm1tL2RhbW9uL2NvcmUuYzoxMzc6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxubW0vZGFtb24vY29yZS5jLTEzOC17XG4tLVxubW0vZGFtb24vY29yZS5jLTE0MS1cbm1tL2RhbW9uL2NvcmUuYzoxNDI6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxubW0vZGFtb24vY29yZS5jLTE0My17XG5tbS9kYW1vbi9jb3JlLmM6MTQ0Olx0ZGFtb25fZGVsX3ByZXAocCk7XG5tbS9kYW1vbi9jb3JlLmM6MTQ1Olx0ZGFtb25fZnJlZV9wcmVwKHApO1xubW0vZGFtb24vY29yZS5jLTE0Ni19XG5tbS9kYW1vbi9jb3JlLmMtMTQ3LVxubW0vZGFtb24vY29yZS5jOjE0ODpzdGF0aWMgc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX250aF9wcmVwKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG5tbS9kYW1vbi9jb3JlLmMtMTQ5LXtcbm1tL2RhbW9uL2NvcmUuYzoxNTA6XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcbm1tL2RhbW9uL2NvcmUuYy0xNTEtXHRpbnQgaSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTUyLVxubW0vZGFtb24vY29yZS5jOjE1MzpcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcCkge1xubW0vZGFtb24vY29yZS5jLTE1NC1cdFx0aWYgKGkmIzQzOyYjNDM7ID09IG4pXG4tLVxubW0vZGFtb24vY29yZS5jLTE1OS1cbm1tL2RhbW9uL2NvcmUuYzoxNjA6c3RhdGljIGJvb2wgZGFtb25faGFzX3ByZXAoc3RydWN0IGRhbW9uX2N0eCAqYylcbm1tL2RhbW9uL2NvcmUuYy0xNjEte1xubW0vZGFtb24vY29yZS5jOjE2MjpcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xubW0vZGFtb24vY29yZS5jOjE2MzpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG5tbS9kYW1vbi9jb3JlLmMtMTY0LVxubW0vZGFtb24vY29yZS5jOjE2NTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTY2Olx0XHRkYW1vbl9mb3JfZWFjaF9wcmVwKHByZXAsIHByb2JlKVxubW0vZGFtb24vY29yZS5jLTE2Ny1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTcxLVxubW0vZGFtb24vY29yZS5jOjE3MjpzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbm1tL2RhbW9uL2NvcmUuYy0xNzMtXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXG5tbS9kYW1vbi9jb3JlLmMtMTc0LXtcbm1tL2RhbW9uL2NvcmUuYzoxNzU6XHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtMTc2LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODYtXG5tbS9kYW1vbi9jb3JlLmM6MTg3OnZvaWQgZGFtb25fYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTg4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkxLVxubW0vZGFtb24vY29yZS5jOjE5MjpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTkzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk2LVxubW0vZGFtb24vY29yZS5jOjE5NzpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTE5OC17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwMS1cbm1tL2RhbW9uL2NvcmUuYzoyMDI6dm9pZCBkYW1vbl9kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTIwMy17XG5tbS9kYW1vbi9jb3JlLmM6MjA0Olx0ZGFtb25fZGVsX2ZpbHRlcihmKTtcbm1tL2RhbW9uL2NvcmUuYzoyMDU6XHRkYW1vbl9mcmVlX2ZpbHRlcihmKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDYtfVxubW0vZGFtb24vY29yZS5jLTIwNy1cbm1tL2RhbW9uL2NvcmUuYzoyMDg6c3RhdGljIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX250aF9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbm1tL2RhbW9uL2NvcmUuYy0yMDkte1xubW0vZGFtb24vY29yZS5jOjIxMDpcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7XG5tbS9kYW1vbi9jb3JlLmMtMjExLVx0aW50IGkgPSAwO1xubW0vZGFtb24vY29yZS5jLTIxMi1cbm1tL2RhbW9uL2NvcmUuYzoyMTM6XHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xubW0vZGFtb24vY29yZS5jLTIxNC1cdFx0aWYgKGkmIzQzOyYjNDM7ID09IG4pXG4tLVxubW0vZGFtb24vY29yZS5jLTIxOS1cbm1tL2RhbW9uL2NvcmUuYzoyMjA6c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbm1tL2RhbW9uL2NvcmUuYy0yMjEte1xubW0vZGFtb24vY29yZS5jOjIyMjpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbm1tL2RhbW9uL2NvcmUuYy0yMjMtXG4tLVxubW0vZGFtb24vY29yZS5jLTIzMy1cbm1tL2RhbW9uL2NvcmUuYzoyMzQ6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxubW0vZGFtb24vY29yZS5jLTIzNS17XG4tLVxubW0vZGFtb24vY29yZS5jLTIzOC1cbm1tL2RhbW9uL2NvcmUuYzoyMzk6c3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbm1tL2RhbW9uL2NvcmUuYy0yNDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDMtXG5tbS9kYW1vbi9jb3JlLmM6MjQ0OnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxubW0vZGFtb24vY29yZS5jLTI0NS17XG5tbS9kYW1vbi9jb3JlLmM6MjQ2Olx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXAsICpwcmVwX25leHQ7XG5tbS9kYW1vbi9jb3JlLmM6MjQ3Olx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZiwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtMjQ4LVxubW0vZGFtb24vY29yZS5jOjI0OTpcdGRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShwcmVwLCBwcmVwX25leHQsIHApXG5tbS9kYW1vbi9jb3JlLmM6MjUwOlx0XHRkYW1vbl9mcmVlX3ByZXAocHJlcCk7XG5tbS9kYW1vbi9jb3JlLmM6MjUxOlx0ZGFtb25fZm9yX2VhY2hfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcClcbm1tL2RhbW9uL2NvcmUuYzoyNTI6XHRcdGRhbW9uX2ZyZWVfZmlsdGVyKGYpO1xubW0vZGFtb24vY29yZS5jLTI1My1cdGtmcmVlKHApO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNTUtXG5tbS9kYW1vbi9jb3JlLmM6MjU2OnN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxubW0vZGFtb24vY29yZS5jLTI1Ny17XG5tbS9kYW1vbi9jb3JlLmM6MjU4Olx0ZGFtb25fZGVsX3Byb2JlKHApO1xubW0vZGFtb24vY29yZS5jOjI1OTpcdGRhbW9uX2ZyZWVfcHJvYmUocCk7XG5tbS9kYW1vbi9jb3JlLmMtMjYwLX1cbm1tL2RhbW9uL2NvcmUuYy0yNjEtXG5tbS9kYW1vbi9jb3JlLmM6MjYyOnN0YXRpYyBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX250aF9wcm9iZShpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTI2My17XG5tbS9kYW1vbi9jb3JlLmM6MjY0Olx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xubW0vZGFtb24vY29yZS5jLTI2NS1cdGludCBpID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0yNjYtXG5tbS9kYW1vbi9jb3JlLmM6MjY3Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmMtMjY4LVx0XHRpZiAoaSYjNDM7JiM0MzsgPT0gbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjczLVxubW0vZGFtb24vY29yZS5jOjI3NDpzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vY29yZS5jLTI3NS17XG5tbS9kYW1vbi9jb3JlLmM6Mjc2Olx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xubW0vZGFtb24vY29yZS5jLTI3Ny1cbm1tL2RhbW9uL2NvcmUuYzoyNzg6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjKSB7XG5tbS9kYW1vbi9jb3JlLmMtMjc5LVx0XHRpZiAocC1cdTAwM2V3ZWlnaHQpXG4tLVxubW0vZGFtb24vY29yZS5jLTI4NS0vKlxubW0vZGFtb24vY29yZS5jOjI4NjogKiBkYW1vbl9tdnN1bSgpIC0gUmV0dXJucyBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBmb3IgYSB0aW1lIHdpbmRvdy5cbm1tL2RhbW9uL2NvcmUuYy0yODctICogQGN1cnJlbnRfbnI6XHRcdFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuXG4tLVxubW0vZGFtb24vY29yZS5jLTMwNS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMDY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fbXZzdW0odW5zaWduZWQgbG9uZyBjdXJyZW50X25yLFxubW0vZGFtb24vY29yZS5jLTMwNy1cdFx0dW5zaWduZWQgbG9uZyBsYXN0X25yLCB1bnNpZ25lZCBsb25nIGxlZnRfd2luZG93X2JwKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTItLyoqXG5tbS9kYW1vbi9jb3JlLmM6MzEzOiAqIGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKCkgLSBSZXR1cm5zIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS5cbm1tL2RhbW9uL2NvcmUuYy0zMTQtICogQHI6XHRcdFJlZ2lvbiB0byBnZXQgdGhlIGFjY2VzcyBmcmVxdWVuY3kgb2YuXG4tLVxubW0vZGFtb24vY29yZS5jLTMxNy0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZm9yIGhvdyBtYW55IHNhbXBsaW5nIGl0ZXJhdGlvbnMgaW4gdGhlIGxhc3Rcbm1tL2RhbW9uL2NvcmUuYzozMTg6ICogYWdncmVnYXRpb24gaW50ZXJ2YWwgKFx1MDAyNmRhbW9uX2F0dHJzLVx1MDAzZWFnZ3JfaW50ZXJ2YWwpIHRoZSByZWdpb24gd2FzIGZvdW5kIHRvXG5tbS9kYW1vbi9jb3JlLmMtMzE5LSAqIGJlIGFjY2Vzc2VkLiAgSGVuY2UgdGhlIHZhbHVlIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgcmVsYXRpdmUgYWNjZXNzXG4tLVxubW0vZGFtb24vY29yZS5jLTMyNS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMjY6dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmM6MzI3Olx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMzI4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ1LVxubW0vZGFtb24vY29yZS5jOjM0NjpcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZW5yX2FjY2Vzc2VzLCByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsXG5tbS9kYW1vbi9jb3JlLmMtMzQ3LVx0XHRcdGxlZnRfd2luZG93X2JwKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ5LVxubW0vZGFtb24vY29yZS5jOjM1MDp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYzozNTE6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0zNTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjktXG5tbS9kYW1vbi9jb3JlLmM6MzcwOlx0cmV0dXJuIGRhbW9uX212c3VtKHItXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxubW0vZGFtb24vY29yZS5jLTM3MS1cdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XG4tLVxubW0vZGFtb24vY29yZS5jLTM3NC0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjM3NTpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbm1tL2RhbW9uL2NvcmUuYy0zNzYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzktI2Vsc2Vcbm1tL2RhbW9uL2NvcmUuYzozODA6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5tbS9kYW1vbi9jb3JlLmMtMzgxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzg1LS8qXG5tbS9kYW1vbi9jb3JlLmM6Mzg2OiAqIENvbnN0cnVjdCBhIGRhbW9uX3JlZ2lvbiBzdHJ1Y3Rcbm1tL2RhbW9uL2NvcmUuYy0zODctICpcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzg5LSAqL1xubW0vZGFtb24vY29yZS5jOjM5MDpzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxubW0vZGFtb24vY29yZS5jLTM5MS17XG5tbS9kYW1vbi9jb3JlLmM6MzkyOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uO1xubW0vZGFtb24vY29yZS5jLTM5My1cdGludCBpO1xubW0vZGFtb24vY29yZS5jLTM5NC1cbm1tL2RhbW9uL2NvcmUuYzozOTU6XHRkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbihzdGFydCwgZW5kKTtcbm1tL2RhbW9uL2NvcmUuYzozOTY6XHRyZWdpb24gPSBrbWVtX2NhY2hlX2FsbG9jKGRhbW9uX3JlZ2lvbl9jYWNoZSwgR0ZQX0tFUk5FTCk7XG5tbS9kYW1vbi9jb3JlLmMtMzk3LVx0aWYgKCFyZWdpb24pXG4tLVxubW0vZGFtb24vY29yZS5jLTQxNC1cbm1tL2RhbW9uL2NvcmUuYzo0MTU6c3RhdGljIHZvaWQgZGFtb25fYWRkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTQxNi17XG4tLVxubW0vZGFtb24vY29yZS5jLTQyMy0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0MjQ6c3RhdGljIGlubGluZSB2b2lkIGRhbW9uX2luc2VydF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYzo0MjU6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnByZXYsIHN0cnVjdCBkYW1vbl9yZWdpb24gKm5leHQsXG5tbS9kYW1vbi9jb3JlLmM6NDI2Olx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTQyNy17XG4tLVxubW0vZGFtb24vY29yZS5jLTQzMi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjQzMzpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTQzNC17XG4tLVxubW0vZGFtb24vY29yZS5jLTQzNy0jZWxzZVxubW0vZGFtb24vY29yZS5jOjQzODpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTQzOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTQ0Mi1cbm1tL2RhbW9uL2NvcmUuYzo0NDM6c3RhdGljIHZvaWQgZGFtb25fZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTQ0NC17XG5tbS9kYW1vbi9jb3JlLmM6NDQ1Olx0ZGFtb25fdmVyaWZ5X2RlbF9yZWdpb24odCk7XG5tbS9kYW1vbi9jb3JlLmMtNDQ2LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NTAtXG5tbS9kYW1vbi9jb3JlLmM6NDUxOnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5tbS9kYW1vbi9jb3JlLmMtNDUyLXtcbm1tL2RhbW9uL2NvcmUuYzo0NTM6XHRrbWVtX2NhY2hlX2ZyZWUoZGFtb25fcmVnaW9uX2NhY2hlLCByKTtcbm1tL2RhbW9uL2NvcmUuYy00NTQtfVxubW0vZGFtb24vY29yZS5jLTQ1NS1cbm1tL2RhbW9uL2NvcmUuYzo0NTY6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYzo0NTc6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtNDU4LXtcbm1tL2RhbW9uL2NvcmUuYzo0NTk6XHRkYW1vbl9kZWxfcmVnaW9uKHIsIHQpO1xubW0vZGFtb24vY29yZS5jOjQ2MDpcdGRhbW9uX2ZyZWVfcmVnaW9uKHIpO1xubW0vZGFtb24vY29yZS5jLTQ2MS19XG5tbS9kYW1vbi9jb3JlLmMtNDYyLVxubW0vZGFtb24vY29yZS5jOjQ2MzpzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jOjQ2NDpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy00NjUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy00NjktLyoqXG5tbS9kYW1vbi9jb3JlLmM6NDcwOiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbm1tL2RhbW9uL2NvcmUuYy00NzEtICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc2LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3Nzp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbm1tL2RhbW9uL2NvcmUuYzo0Nzg6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy00Nzkte1xubW0vZGFtb24vY29yZS5jOjQ4MDpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG5tbS9kYW1vbi9jb3JlLmMtNDgxLVx0dW5zaWduZWQgaW50IHN1bSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTQ4My1cbm1tL2RhbW9uL2NvcmUuYzo0ODQ6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmMtNDg1LVx0XHRpZiAobGFzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDk3LSAqL1xubW0vZGFtb24vY29yZS5jOjQ5ODpzdGF0aWMgYm9vbCBkYW1vbl9pbnRlcnNlY3Qoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYzo0OTk6XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyZSlcbm1tL2RhbW9uL2NvcmUuYy01MDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy01MDYtICovXG5tbS9kYW1vbi9jb3JlLmM6NTA3OnN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxubW0vZGFtb24vY29yZS5jOjUwODpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbGFzdCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy01MDkte1xubW0vZGFtb24vY29yZS5jOjUxMDpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIgPSBmaXJzdDtcbm1tL2RhbW9uL2NvcmUuYy01MTEtXG5tbS9kYW1vbi9jb3JlLmM6NTEyOlx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uX2Zyb20ociwgdCkge1xubW0vZGFtb24vY29yZS5jOjUxMzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV4dCwgKm5ld3I7XG5tbS9kYW1vbi9jb3JlLmMtNTE0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy01MTYtXHRcdFx0YnJlYWs7XG5tbS9kYW1vbi9jb3JlLmM6NTE3Olx0XHRuZXh0ID0gZGFtb25fbmV4dF9yZWdpb24ocik7XG5tbS9kYW1vbi9jb3JlLmMtNTE4LVx0XHRpZiAoci1cdTAwM2Vhci5lbmQgIT0gbmV4dC1cdTAwM2Vhci5zdGFydCkge1xubW0vZGFtb24vY29yZS5jOjUxOTpcdFx0XHRuZXdyID0gZGFtb25fbmV3X3JlZ2lvbihyLVx1MDAzZWFyLmVuZCwgbmV4dC1cdTAwM2Vhci5zdGFydCk7XG5tbS9kYW1vbi9jb3JlLmMtNTIwLVx0XHRcdGlmICghbmV3cilcbm1tL2RhbW9uL2NvcmUuYy01MjEtXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzo1MjI6XHRcdFx0ZGFtb25faW5zZXJ0X3JlZ2lvbihuZXdyLCByLCBuZXh0LCB0KTtcbm1tL2RhbW9uL2NvcmUuYy01MjMtXHRcdH1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNTI4LS8qXG5tbS9kYW1vbi9jb3JlLmM6NTI5OiAqIGRhbW9uX3NldF9yZWdpb25zKCkgLSBTZXQgcmVnaW9ucyBvZiBhIHRhcmdldCBmb3IgZ2l2ZW4gYWRkcmVzcyByYW5nZXMuXG5tbS9kYW1vbi9jb3JlLmMtNTMwLSAqIEB0Olx0XHR0aGUgZ2l2ZW4gdGFyZ2V0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy01MzktICovXG5tbS9kYW1vbi9jb3JlLmM6NTQwOmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxubW0vZGFtb24vY29yZS5jLTU0MS1cdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxubW0vZGFtb24vY29yZS5jLTU0Mi17XG5tbS9kYW1vbi9jb3JlLmM6NTQzOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtNTQ0LVx0dW5zaWduZWQgaW50IGk7XG4tLVxubW0vZGFtb24vY29yZS5jLTU2MC1cdC8qIFJlbW92ZSByZWdpb25zIHdoaWNoIGFyZSBub3QgaW4gdGhlIG5ldyByYW5nZXMgKi9cbm1tL2RhbW9uL2NvcmUuYzo1NjE6XHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7XG5tbS9kYW1vbi9jb3JlLmMtNTYyLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NTYzOlx0XHRcdGlmIChkYW1vbl9pbnRlcnNlY3QociwgXHUwMDI2cmFuZ2VzW2ldKSlcbm1tL2RhbW9uL2NvcmUuYy01NjQtXHRcdFx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNTY2LVx0XHRpZiAoaSA9PSBucl9yYW5nZXMpXG5tbS9kYW1vbi9jb3JlLmM6NTY3Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIsIHQpO1xubW0vZGFtb24vY29yZS5jLTU2OC1cdH1cbm1tL2RhbW9uL2NvcmUuYy01NjktXG5tbS9kYW1vbi9jb3JlLmM6NTcwOlx0aWYgKCFkYW1vbl9ucl9yZWdpb25zKHQpKSB7XG5tbS9kYW1vbi9jb3JlLmMtNTcxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NTcyOlx0XHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKFxubW0vZGFtb24vY29yZS5jLTU3My1cdFx0XHRcdFx0QUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTU3Ny1cdFx0XHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vY29yZS5jOjU3ODpcdFx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xubW0vZGFtb24vY29yZS5jLTU3OS1cdFx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYy01ODItXG5tbS9kYW1vbi9jb3JlLmM6NTgzOlx0ciA9IGRhbW9uX2ZpcnN0X3JlZ2lvbih0KTtcbm1tL2RhbW9uL2NvcmUuYy01ODQtXHQvKiBBZGQgbmV3IHJlZ2lvbnMgb3IgcmVzaXplIGV4aXN0aW5nIHJlZ2lvbnMgdG8gZml0IGluIHRoZSByYW5nZXMgKi9cbm1tL2RhbW9uL2NvcmUuYy01ODUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NTg2Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCA9IE5VTEwsICpsYXN0LCAqbmV3cjtcbm1tL2RhbW9uL2NvcmUuYzo1ODc6XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZTtcbm1tL2RhbW9uL2NvcmUuYy01ODgtXHRcdGJvb2wgaW5zZXJ0X2JlZm9yZV9yID0gZmFsc2U7XG4tLVxubW0vZGFtb24vY29yZS5jLTU5MS1cdFx0LyogR2V0IHRoZSBmaXJzdC9sYXN0IHJlZ2lvbnMgaW50ZXJzZWN0aW5nIHdpdGggdGhlIHJhbmdlICovXG5tbS9kYW1vbi9jb3JlLmM6NTkyOlx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fZnJvbShyLCB0KSB7XG5tbS9kYW1vbi9jb3JlLmM6NTkzOlx0XHRcdGlmIChkYW1vbl9pbnRlcnNlY3QociwgcmFuZ2UpKSB7XG5tbS9kYW1vbi9jb3JlLmMtNTk0LVx0XHRcdFx0aWYgKCFmaXJzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjA0LVx0XHRcdC8qIG5vIHJlZ2lvbiBpbnRlcnNlY3RzIHdpdGggdGhpcyByYW5nZSAqL1xubW0vZGFtb24vY29yZS5jOjYwNTpcdFx0XHRuZXdyID0gZGFtb25fbmV3X3JlZ2lvbihcbm1tL2RhbW9uL2NvcmUuYy02MDYtXHRcdFx0XHRcdEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlc3RhcnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTYxMS1cdFx0XHRpZiAoaW5zZXJ0X2JlZm9yZV9yKVxubW0vZGFtb24vY29yZS5jOjYxMjpcdFx0XHRcdGRhbW9uX2luc2VydF9yZWdpb24obmV3ciwgZGFtb25fcHJldl9yZWdpb24ociksXG5tbS9kYW1vbi9jb3JlLmMtNjEzLVx0XHRcdFx0XHRcdHIsIHQpO1xubW0vZGFtb24vY29yZS5jLTYxNC1cdFx0XHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6NjE1Olx0XHRcdFx0ZGFtb25fYWRkX3JlZ2lvbihuZXdyLCB0KTtcbm1tL2RhbW9uL2NvcmUuYy02MTYtXHRcdH0gZWxzZSB7XG4tLVxubW0vZGFtb24vY29yZS5jLTYyMi1cdFx0XHQvKiBmaWxsIHBvc3NpYmxlIGhvbGVzIGluIHRoZSByYW5nZSAqL1xubW0vZGFtb24vY29yZS5jOjYyMzpcdFx0XHRlcnIgPSBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoZmlyc3QsIGxhc3QsIHQpO1xubW0vZGFtb24vY29yZS5jLTYyNC1cdFx0XHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03MzM9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NDUtXG5tbS9kYW1vbi9jb3JlLmM6NzQ2OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG5tbS9kYW1vbi9jb3JlLmMtNzQ3LVx0XHRcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzYzLVx0ICogcnVubmluZywgaXQgd2lsbCBhbHNvIHVwZGF0ZWQgd2hlbiBpdCBpcyBhZGRlZCB0byB0aGUgREFNT04gY29udGV4dCxcbm1tL2RhbW9uL2NvcmUuYzo3NjQ6XHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cbm1tL2RhbW9uL2NvcmUuYy03NjUtXHQgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzg3LVxubW0vZGFtb24vY29yZS5jOjc4ODpzdGF0aWMgdm9pZCBkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtNzg5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzk4LVxubW0vZGFtb24vY29yZS5jOjc5OTp2b2lkIGRhbW9uX2FkZF9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtODAwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODA0LVxubW0vZGFtb24vY29yZS5jOjgwNTpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy04MDYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04MDktXG5tbS9kYW1vbi9jb3JlLmM6ODEwOnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy04MTEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04MTQtXG5tbS9kYW1vbi9jb3JlLmM6ODE1OnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTgxNi17XG4tLVxubW0vZGFtb24vY29yZS5jLTgzMC1cdGtmcmVlKHMtXHUwMDNlbWlncmF0ZV9kZXN0cy53ZWlnaHRfYXJyKTtcbm1tL2RhbW9uL2NvcmUuYzo4MzE6XHRkYW1vbl9kZWxfc2NoZW1lKHMpO1xubW0vZGFtb24vY29yZS5jOjgzMjpcdGRhbW9uX2ZyZWVfc2NoZW1lKHMpO1xubW0vZGFtb24vY29yZS5jLTgzMy19XG4tLVxubW0vZGFtb24vY29yZS5jLTgzNS0vKlxubW0vZGFtb24vY29yZS5jOjgzNjogKiBDb25zdHJ1Y3QgYSBkYW1vbl90YXJnZXQgc3RydWN0XG5tbS9kYW1vbi9jb3JlLmMtODM3LSAqXG4tLVxubW0vZGFtb24vY29yZS5jLTgzOS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo4NDA6c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxubW0vZGFtb24vY29yZS5jLTg0MS17XG5tbS9kYW1vbi9jb3JlLmM6ODQyOlx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL2NvcmUuYy04NDMtXG4tLVxubW0vZGFtb24vY29yZS5jLTg1Ni1cbm1tL2RhbW9uL2NvcmUuYzo4NTc6dm9pZCBkYW1vbl9hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy04NTgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04NjQtICovXG5tbS9kYW1vbi9jb3JlLmM6ODY1OmludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKVxubW0vZGFtb24vY29yZS5jLTg2Ni17XG4tLVxubW0vZGFtb24vY29yZS5jLTg3Mi1cbm1tL2RhbW9uL2NvcmUuYzo4NzM6c3RhdGljIHZvaWQgZGFtb25fZGVsX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTg3NC17XG4tLVxubW0vZGFtb24vY29yZS5jLTg3Ny1cbm1tL2RhbW9uL2NvcmUuYzo4Nzg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTg3OS17XG5tbS9kYW1vbi9jb3JlLmM6ODgwOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtODgxLVxubW0vZGFtb24vY29yZS5jOjg4MjpcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpXG5tbS9kYW1vbi9jb3JlLmM6ODgzOlx0XHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcbm1tL2RhbW9uL2NvcmUuYy04ODQtXHRrZnJlZSh0KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODg2LVxubW0vZGFtb24vY29yZS5jOjg4Nzp2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy04ODgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04OTItXG5tbS9kYW1vbi9jb3JlLmM6ODkzOlx0ZGFtb25fZGVsX3RhcmdldCh0KTtcbm1tL2RhbW9uL2NvcmUuYzo4OTQ6XHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbm1tL2RhbW9uL2NvcmUuYy04OTUtfVxubW0vZGFtb24vY29yZS5jLTg5Ni1cbm1tL2RhbW9uL2NvcmUuYzo4OTc6dW5zaWduZWQgaW50IGRhbW9uX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy04OTgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy05MDEtXG5tbS9kYW1vbi9jb3JlLmM6OTAyOnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbm1tL2RhbW9uL2NvcmUuYy05MDMte1xubW0vZGFtb24vY29yZS5jOjkwNDpcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbm1tL2RhbW9uL2NvcmUuYy05MDUtXG4tLVxubW0vZGFtb24vY29yZS5jLTk0MS1cbm1tL2RhbW9uL2NvcmUuYzo5NDI6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy05NDMte1xubW0vZGFtb24vY29yZS5jOjk0NDpcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsICpuZXh0X3Q7XG5tbS9kYW1vbi9jb3JlLmMtOTQ1LVxubW0vZGFtb24vY29yZS5jOjk0NjpcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldF9zYWZlKHQsIG5leHRfdCwgY3R4KVxubW0vZGFtb24vY29yZS5jOjk0NzpcdFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy05NDgtfVxubW0vZGFtb24vY29yZS5jLTk0OS1cbm1tL2RhbW9uL2NvcmUuYzo5NTA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtOTUxLXtcbm1tL2RhbW9uL2NvcmUuYy05NTItXHRzdHJ1Y3QgZGFtb3MgKnMsICpuZXh0X3M7XG5tbS9kYW1vbi9jb3JlLmM6OTUzOlx0c3RydWN0IGRhbW9uX3Byb2JlICpwLCAqbmV4dF9wO1xubW0vZGFtb24vY29yZS5jLTk1NC1cbm1tL2RhbW9uL2NvcmUuYzo5NTU6XHRkYW1vbl9kZXN0cm95X3RhcmdldHMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy05NTYtXG5tbS9kYW1vbi9jb3JlLmM6OTU3Olx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lX3NhZmUocywgbmV4dF9zLCBjdHgpXG5tbS9kYW1vbi9jb3JlLmM6OTU4Olx0XHRkYW1vbl9kZXN0cm95X3NjaGVtZShzKTtcbm1tL2RhbW9uL2NvcmUuYy05NTktXG5tbS9kYW1vbi9jb3JlLmM6OTYwOlx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShwLCBuZXh0X3AsIGN0eClcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYxNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBEQU1PTiYjMzk7cyBJbml0aWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIERBTU9OIHByb2Nlc3MuIE15IHByaW1hcnkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyBpdHMgc3RhcnR1cCBhbmQgZXhlY3V0aW9uLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIGBkYW1vbl9zdGFydGAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyBuZWVkIHRvIHRyYWNlIGl0IGZyb20gdGhlIHN5c2ZzIGVudHJ5cG9pbnRzIGFzIHdlbGwgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgaXQgaXMgdHJpZ2dlcmVkLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93LCBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgbWFpbiBsb29wLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgaW52b2x2ZSBsb29raW5nIGF0IG1lbW9yeSBtYXBwaW5nLCBzYW1wbGluZywgYW5kIG1vbml0b3JpbmcgbG9naWMsIGJ1dCBmaXJzdCwgSSBuZWVkIHRoZSBwcmVjaXNlIGluaXRpYWxpemF0aW9uIGNhbGxzIGFuZCB0aGUgcmVsYXRlZCBzeXNmcyBvcHRpb25zLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIGZvciBEQU1PTiYjMzk7cyBsaWZlY3ljbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExMDgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAyMj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTIwMjQtLypcbm1tL2RhbW9uL2NvcmUuYzoyMDI1OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0yMDI2LSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAzMS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDMyOnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjAzMy17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNTQtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA1NTogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbm1tL2RhbW9uL2NvcmUuYy0yMDU2LSAqIEBjdHhzOlx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNjMtICogQGV4Y2x1c2l2ZSBpcyB0cnVlIGFuZCBhIGdyb3VwIG9mIHRocmVhZHMgdGhhdCBjcmVhdGVkIGJ5IG90aGVyXG5tbS9kYW1vbi9jb3JlLmM6MjA2NDogKiAmIzM5O2RhbW9uX3N0YXJ0KCkmIzM5OyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcbm1tL2RhbW9uL2NvcmUuYy0yMDY1LSAqIHJldHVybnMgLUVCVVNZLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDY4LSAqL1xubW0vZGFtb24vY29yZS5jOjIwNjk6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMjA3MC17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwOTQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jdHhzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIwOTU6XHRcdGVyciA9IF9fZGFtb25fc3RhcnQoY3R4c1tpXSk7XG5tbS9kYW1vbi9jb3JlLmMtMjA5Ni1cdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjE2NT1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTkyLSAqXG5tbS9kYW1vbi9jb3JlLmM6MjE5MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxubW0vZGFtb24vY29yZS5jLTIxOTQtICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXG4tLVxubW0vZGFtb24vY29yZS5jPTIyMDE9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjQ3LSAqXG5tbS9kYW1vbi9jb3JlLmM6MjI0ODogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxubW0vZGFtb24vY29yZS5jLTIyNDktICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00MjEtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQyMjpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMy1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMzMD1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDItXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQzOlx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDQtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTIxMi1cdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9zdGF0LmM6MjEzOlx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcbm1tL2RhbW9uL3N0YXQuYy0yMTQtXHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTExPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI1MzUtXHR9XG5tbS9kYW1vbi9zeXNmcy5jOjI1MzY6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIGZhbHNlKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjUzNy1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgREFNT04gQ29uZmlndXJhdGlvbiBUaHJvdWdoIHN5c2ZzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBmaWd1cmluZyBvdXQgaG93IHRoZSBzeXNmcyBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJiMzOTtyZSBjb250cm9sbGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBlbmFibGluZy9kaXNhYmxpbmcgdGhlIG1vbml0b3JpbmcuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgbW0vZGFtb24vc3lzZnMuY2AgaXMgdGhlIGtleS4gSXQgbG9va3MgbGlrZSB0aGlzIGZpbGUsIGZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIHByb3ZpZGVzIHRoZSBwcmltYXJ5IHN5c2ZzIGludGVyZmFjZS4gV2l0aGluIGl0LCBJIHNob3VsZCBleHBlY3QgdG8gZmluZCB0aGUgbWVjaGFuaXNtcyBmb3IgY29uZmlndXJpbmcgdGhlIGNvcmUgREFNT04gY29tcG9uZW50czogaXRzIGNvbnRleHRzLCB0aGUgdGFyZ2V0cyBpdCBtb25pdG9ycywgdGhlIHZhcmlvdXMgc2NoZW1lcyBlbXBsb3llZCwgc2V0dGluZyBxdW90YXMsIGFuZCwgY3JpdGljYWxseSwgdGhlIGNvbnRyb2wgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIERBTU9OIGZ1bmN0aW9uYWxpdHkgaXRzZWxmLCBsaWtlbHkgdGhyb3VnaCBhIGZ1bmN0aW9uIGxpa2UgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLgoKVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgY2FuJiMzOTt0IGp1c3Qgc3RvcCB0aGVyZS4gSSBhbHNvIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHNwZWNpZmljcyBvZiBzY2hlbWUgYW5kIHF1b3RhIGNvbmZpZ3VyYXRpb24uIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIFRoYXQgc2hvdWxkIHNob3cgbWUgdGhlIG51dHMgYW5kIGJvbHRzIG9mIGhvdyBzY2hlbWVzIGFuZCBxdW90YXMgYXJlIG1hbmlwdWxhdGVkIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZSwgYXMgdGhleSBhcmUgY3J1Y2lhbCBhc3BlY3RzIHRvIERBTU9OJiMzOTtzIG92ZXJhbGwgdHVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTQyNiBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vZGFtb24vY29yZS5jPTY4Mz12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTY4OC1cbm1tL2RhbW9uL2NvcmUuYzo2ODk6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jOjY5MDpcdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG5tbS9kYW1vbi9jb3JlLmMtNjkxLVx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcbm1tL2RhbW9uL2NvcmUuYy02OTIte1xubW0vZGFtb24vY29yZS5jOjY5MzpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xubW0vZGFtb24vY29yZS5jLTY5NC1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzA1LVxubW0vZGFtb24vY29yZS5jOjcwNjp2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNzA3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzEwLVxubW0vZGFtb24vY29yZS5jOjcxMTpzdGF0aWMgdm9pZCBkYW1vc19kZWxfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbm1tL2RhbW9uL2NvcmUuYy03MTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy03MTUtXG5tbS9kYW1vbi9jb3JlLmM6NzE2OnN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbm1tL2RhbW9uL2NvcmUuYy03MTcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy03MjAtXG5tbS9kYW1vbi9jb3JlLmM6NzIxOnZvaWQgZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxubW0vZGFtb24vY29yZS5jLTcyMi17XG5tbS9kYW1vbi9jb3JlLmM6NzIzOlx0ZGFtb3NfZGVsX3F1b3RhX2dvYWwoZyk7XG5tbS9kYW1vbi9jb3JlLmM6NzI0Olx0ZGFtb3NfZnJlZV9xdW90YV9nb2FsKGcpO1xubW0vZGFtb24vY29yZS5jLTcyNS19XG5tbS9kYW1vbi9jb3JlLmMtNzI2LVxubW0vZGFtb24vY29yZS5jOjcyNzpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9nb2Fsc19lbXB0eShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEpXG5tbS9kYW1vbi9jb3JlLmMtNzI4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzMxLVxubW0vZGFtb24vY29yZS5jOjczMjovKiBpbml0aWFsaXplIGZpZWxkcyBvZiBAcXVvdGEgdGhhdCBub3JtYWxseSBBUEkgdXNlcnMgd291bGRuJiMzOTt0IHNldCAqL1xubW0vZGFtb24vY29yZS5jOjczMzpzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG5tbS9kYW1vbi9jb3JlLmMtNzM0LXtcbm1tL2RhbW9uL2NvcmUuYzo3MzU6XHRxdW90YS1cdTAwM2Vlc3ogPSAwO1xubW0vZGFtb24vY29yZS5jOjczNjpcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogPSAwO1xubW0vZGFtb24vY29yZS5jOjczNzpcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgPSAwO1xubW0vZGFtb24vY29yZS5jOjczODpcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogPSAwO1xubW0vZGFtb24vY29yZS5jOjczOTpcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6NzQwOlx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbm1tL2RhbW9uL2NvcmUuYzo3NDE6XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbm1tL2RhbW9uL2NvcmUuYzo3NDI6XHRxdW90YS1cdTAwM2Vlc3pfYnAgPSAwO1xubW0vZGFtb24vY29yZS5jOjc0MzpcdHJldHVybiBxdW90YTtcbm1tL2RhbW9uL2NvcmUuYy03NDQtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03NDY9c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzQ4LVx0XHRcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXMsXG5tbS9kYW1vbi9jb3JlLmM6NzQ5Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVx0XHRcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzICp3bWFya3MsXG4tLVxubW0vZGFtb24vY29yZS5jLTc3NC1cbm1tL2RhbW9uL2NvcmUuYzo3NzU6XHRzY2hlbWUtXHUwMDNlcXVvdGEgPSAqKGRhbW9zX3F1b3RhX2luaXQocXVvdGEpKTtcbm1tL2RhbW9uL2NvcmUuYzo3NzY6XHQvKiBxdW90YS5nb2FscyBzaG91bGQgYmUgc2VwYXJhdGVseSBzZXQgYnkgY2FsbGVyICovXG5tbS9kYW1vbi9jb3JlLmM6Nzc3Olx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLmdvYWxzKTtcbm1tL2RhbW9uL2NvcmUuYy03NzgtXG4tLVxubW0vZGFtb24vY29yZS5jPTgxNT12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy04MTYte1xubW0vZGFtb24vY29yZS5jOjgxNzpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xubW0vZGFtb24vY29yZS5jLTgxOC1cdHN0cnVjdCBkYW1vc19maWx0ZXIgKmYsICpuZXh0O1xubW0vZGFtb24vY29yZS5jLTgxOS1cbm1tL2RhbW9uL2NvcmUuYzo4MjA6XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcdTAwMjZzLVx1MDAzZXF1b3RhKVxubW0vZGFtb24vY29yZS5jOjgyMTpcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xubW0vZGFtb24vY29yZS5jLTgyMi1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE2Nj12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ny1cbm1tL2RhbW9uL2NvcmUuYzoxMTc4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbnRoX3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmM6MTE3OTpcdFx0aW50IG4sIHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbm1tL2RhbW9uL2NvcmUuYy0xMTgwLXtcbm1tL2RhbW9uL2NvcmUuYzoxMTgxOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG5tbS9kYW1vbi9jb3JlLmMtMTE4Mi1cdGludCBpID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMTgzLVxubW0vZGFtb24vY29yZS5jOjExODQ6XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHEpIHtcbm1tL2RhbW9uL2NvcmUuYy0xMTg1LVx0XHRpZiAoaSYjNDM7JiM0MzsgPT0gbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE5MC1cbm1tL2RhbW9uL2NvcmUuYzoxMTkxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jOjExOTI6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTE5My17XG4tLVxubW0vZGFtb24vY29yZS5jLTEyMTQtXG5tbS9kYW1vbi9jb3JlLmM6MTIxNTpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYzoxMjE2Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxubW0vZGFtb24vY29yZS5jLTEyMTcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjIxLVx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vY29yZS5jOjEyMjI6XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTIyMy19XG4tLVxubW0vZGFtb24vY29yZS5jLTEyMjUtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTIyNjogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jOjEyMjc6ICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG5tbS9kYW1vbi9jb3JlLmM6MTIyODogKiBAc3JjOlx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT1MgcXVvdGEuXG5tbS9kYW1vbi9jb3JlLmMtMTIyOS0gKlxubW0vZGFtb24vY29yZS5jOjEyMzA6ICogQ29waWVzIHVzZXItc3BlY2lmaWVkIHBhcmFtZXRlcnMgZm9yIHF1b3RhIGdvYWxzIGZyb20gQHNyYyB0byBAZHN0LiAgVXNlcnNcbm1tL2RhbW9uL2NvcmUuYzoxMjMxOiAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xubW0vZGFtb24vY29yZS5jLTEyMzItICogREFNT04gY29udGV4dHMsIGluc3RlYWQgb2YgbWFudWFsIGluLXBsYWNlIHVwZGF0ZXMuXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMzYtICovXG5tbS9kYW1vbi9jb3JlLmM6MTIzNzppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjM4LXtcbm1tL2RhbW9uL2NvcmUuYzoxMjM5Olx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FsLCAqbmV4dCwgKnNyY19nb2FsLCAqbmV3X2dvYWw7XG5tbS9kYW1vbi9jb3JlLmMtMTI0MC1cdGludCBpID0gMCwgaiA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTI0MS1cbm1tL2RhbW9uL2NvcmUuYzoxMjQyOlx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGRzdF9nb2FsLCBuZXh0LCBkc3QpIHtcbm1tL2RhbW9uL2NvcmUuYzoxMjQzOlx0XHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkmIzQzOyYjNDM7LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEyNDQtXHRcdGlmIChzcmNfZ29hbClcbm1tL2RhbW9uL2NvcmUuYzoxMjQ1Olx0XHRcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMTI0Ni1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjEyNDc6XHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGRzdF9nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjQ4LVx0fVxubW0vZGFtb24vY29yZS5jOjEyNDk6XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykge1xubW0vZGFtb24vY29yZS5jLTEyNTAtXHRcdGlmIChqJiM0MzsmIzQzOyBcdTAwM2MgaSlcbm1tL2RhbW9uL2NvcmUuYy0xMjUxLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vY29yZS5jOjEyNTI6XHRcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtMTI1My1cdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI1NS1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxMjU2Olx0XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jOjEyNTc6XHRcdGRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTEyNTgtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jLTEyNjEtXG5tbS9kYW1vbi9jb3JlLmM6MTI2MjpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTI2My17XG4tLVxubW0vZGFtb24vY29yZS5jLTEyNjgtXHRkc3QtXHUwMDNlc3ogPSBzcmMtXHUwMDNlc3o7XG5tbS9kYW1vbi9jb3JlLmM6MTI2OTpcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTI3MC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTE1MTk9c3RhdGljIGludCBkYW1vc19jb21taXQoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTI2LVxubW0vZGFtb24vY29yZS5jOjE1Mjc6XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGEoXHUwMDI2ZHN0LVx1MDAzZXF1b3RhLCBcdTAwMjZzcmMtXHUwMDNlcXVvdGEpO1xubW0vZGFtb24vY29yZS5jLTE1MjgtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTQ2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE1NjctXHRcdFx0XHRzcmNfc2NoZW1lLVx1MDAzZWFwcGx5X2ludGVydmFsX3VzLFxubW0vZGFtb24vY29yZS5jOjE1Njg6XHRcdFx0XHRcdTAwMjZzcmNfc2NoZW1lLVx1MDAzZXF1b3RhLCBcdTAwMjZzcmNfc2NoZW1lLVx1MDAzZXdtYXJrcyxcbm1tL2RhbW9uL2NvcmUuYy0xNTY5LVx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTY3OT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzA1LVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBkc3QpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNzA2Olx0XHRcdFx0aWYgKHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID09IGRzdF90YXJnZXQpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNzA3Olx0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmM6MTcwODpcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xNzA5LVx0XHRcdFx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODYyPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODY1LVx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG5tbS9kYW1vbi9jb3JlLmM6MTg2NjpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xubW0vZGFtb24vY29yZS5jLTE4NjctXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NzQtXHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xubW0vZGFtb24vY29yZS5jOjE4NzU6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YTtcbm1tL2RhbW9uL2NvcmUuYy0xODc2LVxubW0vZGFtb24vY29yZS5jOjE4Nzc6XHRcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xubW0vZGFtb24vY29yZS5jLTE4NzgtXHRcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjM3MT1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTIzODYtLypcbm1tL2RhbW9uL2NvcmUuYzoyMzg3OiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXG5tbS9kYW1vbi9jb3JlLmM6MjM4ODogKiBAcXVvdGE6XHRUaGUgcXVvdGEgdG8gY2hlY2suXG5tbS9kYW1vbi9jb3JlLmMtMjM4OS0gKlxubW0vZGFtb24vY29yZS5jOjIzOTA6ICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdW90YSBpcyBzZXQsIGZhbHNlIG90aGVyd2lzZS5cbm1tL2RhbW9uL2NvcmUuYy0yMzkxLSAqL1xubW0vZGFtb24vY29yZS5jOjIzOTI6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG5tbS9kYW1vbi9jb3JlLmMtMjM5My17XG5tbS9kYW1vbi9jb3JlLmM6MjM5NDpcdHJldHVybiBxdW90YS1cdTAwM2Vlc3ogfHwgcXVvdGEtXHUwMDNlc3ogfHwgcXVvdGEtXHUwMDNlbXMgfHxcbm1tL2RhbW9uL2NvcmUuYzoyMzk1Olx0XHQhZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkocXVvdGEpO1xubW0vZGFtb24vY29yZS5jLTIzOTYtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMzk4PXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDAyLVxubW0vZGFtb24vY29yZS5jOjI0MDM6XHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxubW0vZGFtb24vY29yZS5jLTI0MDQtXHRcdHJldHVybiByZXQ7XG5tbS9kYW1vbi9jb3JlLmMtMjQwNS1cbm1tL2RhbW9uL2NvcmUuYzoyNDA2Olx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDA3LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQxMC0gKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2Zcbm1tL2RhbW9uL2NvcmUuYzoyNDExOiAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTI0MTItICogQHQ6XHRUaGUgdGFyZ2V0IG9mIHRoZSByZWdpb24uXG4tLVxubW0vZGFtb24vY29yZS5jLTI0MTYtICpcbm1tL2RhbW9uL2NvcmUuYzoyNDE3OiAqIElmIGEgcXVvdGEgb2YgYSBzY2hlbWUgaGFzIGV4Y2VlZGVkIGluIGEgcXVvdGEgY2hhcmdlIHdpbmRvdywgdGhlIHNjaGVtZSYjMzk7c1xubW0vZGFtb24vY29yZS5jLTI0MTgtICogYWN0aW9uIHdvdWxkIGFwcGxpZWQgdG8gb25seSBhIHBhcnQgb2YgdGhlIHRhcmdldCBhY2Nlc3MgcGF0dGVybiBmdWxmaWxsaW5nXG4tLVxubW0vZGFtb24vY29yZS5jPTI0MzQ9c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDM3LXtcbm1tL2RhbW9uL2NvcmUuYzoyNDM4Olx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG5tbS9kYW1vbi9jb3JlLmMtMjQzOS1cdHVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQ0MS1cdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbm1tL2RhbW9uL2NvcmUuYzoyNDQyOlx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xubW0vZGFtb24vY29yZS5jOjI0NDM6XHRcdGlmICh0ICE9IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcbm1tL2RhbW9uL2NvcmUuYy0yNDQ0LVx0XHRcdHJldHVybiB0cnVlO1xubW0vZGFtb24vY29yZS5jLTI0NDUtXHRcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjQ0NjpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jOjI0NDc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMjQ0OC1cdFx0XHRyZXR1cm4gdHJ1ZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDQ5LVx0XHR9XG5tbS9kYW1vbi9jb3JlLmM6MjQ1MDpcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2XG5tbS9kYW1vbi9jb3JlLmM6MjQ1MTpcdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSlcbm1tL2RhbW9uL2NvcmUuYy0yNDUyLVx0XHRcdHJldHVybiB0cnVlO1xubW0vZGFtb24vY29yZS5jLTI0NTMtXG5tbS9kYW1vbi9jb3JlLmM6MjQ1NDpcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2IHItXHUwMDNlYXIuc3RhcnQgXHUwMDNjXG5tbS9kYW1vbi9jb3JlLmM6MjQ1NTpcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbm1tL2RhbW9uL2NvcmUuYzoyNDU2Olx0XHRcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gLVxubW0vZGFtb24vY29yZS5jLTI0NTctXHRcdFx0XHRcdHItXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDY1LVx0XHR9XG5tbS9kYW1vbi9jb3JlLmM6MjQ2NjpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbm1tL2RhbW9uL2NvcmUuYzoyNDY3Olx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0yNDY4LVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjE5PXN0YXRpYyB2b2lkIGRhbW9zX3dhbGtfY2FuY2VsKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjYzNS1cbm1tL2RhbW9uL2NvcmUuYzoyNjM2OnN0YXRpYyB2b2lkIGRhbW9zX2NoYXJnZV9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxubW0vZGFtb24vY29yZS5jLTI2MzctXHRcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCB1bnNpZ25lZCBsb25nIHN6X2FwcGxpZWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTI2NDMtXHQgKi9cbm1tL2RhbW9uL2NvcmUuYzoyNjQ0Olx0aWYgKCFxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSB8fCBzel9hcHBsaWVkIFx1MDAzZSBzel9yZWdpb24pXG5tbS9kYW1vbi9jb3JlLmM6MjY0NTpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiAmIzQzOz0gc3pfcmVnaW9uO1xubW0vZGFtb24vY29yZS5jLTI2NDYtXHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6MjY0NzpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiAmIzQzOz0gc3pfYXBwbGllZCAmIzQzOyBtdWx0X2ZyYWMoXG5tbS9kYW1vbi9jb3JlLmMtMjY0OC1cdFx0XHRcdChzel9yZWdpb24gLSBzel9hcHBsaWVkKSxcbm1tL2RhbW9uL2NvcmUuYzoyNjQ5Olx0XHRcdFx0cXVvdGEtXHUwMDNlZmFpbF9jaGFyZ2VfbnVtLFxubW0vZGFtb24vY29yZS5jOjI2NTA6XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XG5tbS9kYW1vbi9jb3JlLmMtMjY1MS19XG5tbS9kYW1vbi9jb3JlLmMtMjY1Mi1cbm1tL2RhbW9uL2NvcmUuYzoyNjUzOnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbm1tL2RhbW9uL2NvcmUuYy0yNjU0LVx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG5tbS9kYW1vbi9jb3JlLmMtMjY1NS17XG5tbS9kYW1vbi9jb3JlLmM6MjY1NjpcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbm1tL2RhbW9uL2NvcmUuYy0yNjU3LVx0XHRyZXR1cm4gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmM6MjY1ODpcdGlmICghcXVvdGEtXHUwMDNlY2hhcmdlZF9zeilcbm1tL2RhbW9uL2NvcmUuYy0yNjU5LVx0XHRyZXR1cm4gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmM6MjY2MDpcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6KVxubW0vZGFtb24vY29yZS5jLTI2NjEtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNjYzLVx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXHUwMDNjbWluX3JlZ2lvbl9zeiByZW1haW5pbmdcbm1tL2RhbW9uL2NvcmUuYzoyNjY0Olx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXG5tbS9kYW1vbi9jb3JlLmMtMjY2NS1cdCAqL1xubW0vZGFtb24vY29yZS5jOjI2NjY6XHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zejtcbm1tL2RhbW9uL2NvcmUuYy0yNjY3LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjY2OT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY3MS17XG5tbS9kYW1vbi9jb3JlLmM6MjY3MjpcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jLTI2NzMtXHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzA2LVx0aWYgKGMtXHUwMDNlb3BzLmFwcGx5X3NjaGVtZSkge1xubW0vZGFtb24vY29yZS5jOjI3MDc6XHRcdGlmIChkYW1vc19xdW90YV9pc19zZXQocXVvdGEpIFx1MDAyNlx1MDAyNlxubW0vZGFtb24vY29yZS5jOjI3MDg6XHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ICYjNDM7IHN6IFx1MDAzZSBxdW90YS1cdTAwM2Vlc3opIHtcbm1tL2RhbW9uL2NvcmUuYzoyNzA5Olx0XHRcdHN6ID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2Vlc3ogLSBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6LFxubW0vZGFtb24vY29yZS5jLTI3MTAtXHRcdFx0XHRcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4tLVxubW0vZGFtb24vY29yZS5jLTI3MjQtXHRcdGt0aW1lX2dldF9jb2Fyc2VfdHM2NChcdTAwMjZlbmQpO1xubW0vZGFtb24vY29yZS5jOjI3MjU6XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgJiM0Mzs9IHRpbWVzcGVjNjRfdG9fbnMoXHUwMDI2ZW5kKSAtXG5tbS9kYW1vbi9jb3JlLmMtMjcyNi1cdFx0XHR0aW1lc3BlYzY0X3RvX25zKFx1MDAyNmJlZ2luKTtcbm1tL2RhbW9uL2NvcmUuYzoyNzI3Olx0XHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcbm1tL2RhbW9uL2NvcmUuYzoyNzI4Olx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xubW0vZGFtb24vY29yZS5jOjI3Mjk6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbm1tL2RhbW9uL2NvcmUuYzoyNzMwOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbm1tL2RhbW9uL2NvcmUuYy0yNzMxLVx0XHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTI3NDA9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzQ2LVx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNzQ3Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbm1tL2RhbW9uL2NvcmUuYy0yNzQ4LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzU0LVxubW0vZGFtb24vY29yZS5jOjI3NTU6XHRcdGlmICghcXVvdGEtXHUwMDNlZXN6KVxubW0vZGFtb24vY29yZS5jLTI3NTYtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmMtMjc1Ny1cbm1tL2RhbW9uL2NvcmUuYzoyNzU4Olx0XHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cbm1tL2RhbW9uL2NvcmUuYzoyNzU5Olx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbm1tL2RhbW9uL2NvcmUuYy0yNzYwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzgyLSAqXG5tbS9kYW1vbi9jb3JlLmM6Mjc4MzogKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIHNwbGl0IHJlZ2lvbnMgZm9yIGtlZXBpbmcgdGhlIHF1b3RhLiAgVG8gbWluaW1pemVcbm1tL2RhbW9uL2NvcmUuYy0yNzg0LSAqIG92ZXJoZWFkIGZyb20gdGhlIHNwbGl0IG9wZXJhdGlvbnMgaW5jcmVhc2VkIG51bWJlciBvZiByZWdpb25zLCB0aGlzXG4tLVxubW0vZGFtb24vY29yZS5jPTI3OTU9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI4MDUtXHRcdCAqIGRhbW9uX2RvX2FwcGx5X3NjaGVlbXMoKSBjb3VsZCBzcGxpdCB0aGUgcmVnaW9uIGZvciB0aGVcbm1tL2RhbW9uL2NvcmUuYzoyODA2Olx0XHQgKiBxdW90YS4gIEtlZXBpbmcgdGhlIG5ldyBzbGljZXMgaXMgYW4gb3ZlcmhlYWQuICBNZXJnZSBiYWNrXG5tbS9kYW1vbi9jb3JlLmMtMjgwNy1cdFx0ICogdGhlIHNsaWNlcyBpbnRvIHRoZSBwcmV2aW91cyByZWdpb24gaWYgaXQgZG9lc24mIzM5O3QgbG9zZSBhbnlcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjkwNT1zdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXG5tbS9kYW1vbi9jb3JlLmM6MjkwNjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMjkwNy17XG4tLVxubW0vZGFtb24vY29yZS5jPTI5MzM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbm1tL2RhbW9uL2NvcmUuYzoyOTM0Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbm1tL2RhbW9uL2NvcmUuYy0yOTM1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzA4Nz1zdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXG5tbS9kYW1vbi9jb3JlLmM6MzA4ODpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMzA4OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMwOTM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbm1tL2RhbW9uL2NvcmUuYzozMDk0Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbm1tL2RhbW9uL2NvcmUuYy0zMDk1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzEyND1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTM5LVxubW0vZGFtb24vY29yZS5jOjMxNDA6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxubW0vZGFtb24vY29yZS5jOjMxNDE6XHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMzE0Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTMxODQtLyogUmV0dXJuIHRoZSBoaWdoZXN0IHNjb3JlIHNpbmNlIGl0IG1ha2VzIHNjaGVtZXMgbGVhc3QgYWdncmVzc2l2ZSAqL1xubW0vZGFtb24vY29yZS5jOjMxODU6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMxODYte1xubW0vZGFtb24vY29yZS5jOjMxODc6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL2NvcmUuYzozMTg4Olx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG5tbS9kYW1vbi9jb3JlLmMtMzE4OS1cdHVuc2lnbmVkIGxvbmcgaGlnaGVzdF9zY29yZSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMzE5MC1cbm1tL2RhbW9uL2NvcmUuYzozMTkxOlx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xubW0vZGFtb24vY29yZS5jOjMxOTI6XHRcdGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoYywgcywgZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzE5My1cdFx0aGlnaGVzdF9zY29yZSA9IG1heChoaWdoZXN0X3Njb3JlLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjAxPXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzIwMi17XG5tbS9kYW1vbi9jb3JlLmM6MzIwMzpcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jOjMyMDQ6XHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzIwNS1cbm1tL2RhbW9uL2NvcmUuYzozMjA2Olx0cXVvdGEtXHUwMDNlZXN6X2JwID0gZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQoXG5tbS9kYW1vbi9jb3JlLmM6MzIwNzpcdFx0XHRtYXgocXVvdGEtXHUwMDNlZXN6X2JwLCAxMDAwMFVMKSwgc2NvcmUpO1xubW0vZGFtb24vY29yZS5jLTMyMDgtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjEwPXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzIxMi17XG5tbS9kYW1vbi9jb3JlLmM6MzIxMzpcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jOjMyMTQ6XHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzIxNS1cbm1tL2RhbW9uL2NvcmUuYy0zMjE2LVx0aWYgKHNjb3JlIFx1MDAzZT0gMTAwMDApXG5tbS9kYW1vbi9jb3JlLmM6MzIxNzpcdFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gMDtcbm1tL2RhbW9uL2NvcmUuYzozMjE4Olx0ZWxzZSBpZiAocXVvdGEtXHUwMDNlc3opXG5tbS9kYW1vbi9jb3JlLmM6MzIxOTpcdFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gcXVvdGEtXHUwMDNlc3ogKiAxMDAwMDtcbm1tL2RhbW9uL2NvcmUuYy0zMjIwLVx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjMyMjE6XHRcdHF1b3RhLVx1MDAzZWVzel9icCA9IFVMT05HX01BWDtcbm1tL2RhbW9uL2NvcmUuYy0zMjIyLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzIyNC0vKlxubW0vZGFtb24vY29yZS5jOjMyMjU6ICogQ2FsbGVkIG9ubHkgaWYgcXVvdGEtXHUwMDNlbXMsIG9yIHF1b3RhLVx1MDAzZXN6IGFyZSBzZXQsIG9yIHF1b3RhLVx1MDAzZWdvYWxzIGlzIG5vdCBlbXB0eVxubW0vZGFtb24vY29yZS5jLTMyMjYtICovXG5tbS9kYW1vbi9jb3JlLmM6MzIyNzpzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyMjgte1xubW0vZGFtb24vY29yZS5jOjMyMjk6XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbm1tL2RhbW9uL2NvcmUuYy0zMjMwLVx0dW5zaWduZWQgbG9uZyB0aHJvdWdocHV0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjMyLVxubW0vZGFtb24vY29yZS5jOjMyMzM6XHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xubW0vZGFtb24vY29yZS5jOjMyMzQ6XHRcdHF1b3RhLVx1MDAzZWVzeiA9IHF1b3RhLVx1MDAzZXN6O1xubW0vZGFtb24vY29yZS5jLTMyMzUtXHRcdHJldHVybjtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzIzNy1cbm1tL2RhbW9uL2NvcmUuYzozMjM4Olx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xubW0vZGFtb24vY29yZS5jOjMyMzk6XHRcdGlmIChxdW90YS1cdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVClcbm1tL2RhbW9uL2NvcmUuYy0zMjQwLVx0XHRcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChjdHgsIHMpO1xubW0vZGFtb24vY29yZS5jOjMyNDE6XHRcdGVsc2UgaWYgKHF1b3RhLVx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbm1tL2RhbW9uL2NvcmUuYy0zMjQyLVx0XHRcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoY3R4LCBzKTtcbm1tL2RhbW9uL2NvcmUuYzozMjQzOlx0XHRlc3ogPSBxdW90YS1cdTAwM2Vlc3pfYnAgLyAxMDAwMDtcbm1tL2RhbW9uL2NvcmUuYy0zMjQ0LVx0fVxubW0vZGFtb24vY29yZS5jLTMyNDUtXG5tbS9kYW1vbi9jb3JlLmM6MzI0NjpcdGlmIChxdW90YS1cdTAwM2Vtcykge1xubW0vZGFtb24vY29yZS5jOjMyNDc6XHRcdGlmIChxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKVxubW0vZGFtb24vY29yZS5jOjMyNDg6XHRcdFx0dGhyb3VnaHB1dCA9IG11bHRfZnJhYyhxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6LFxubW0vZGFtb24vY29yZS5jOjMyNDk6XHRcdFx0XHRcdDEwMDAwMDAsIHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMpO1xubW0vZGFtb24vY29yZS5jLTMyNTAtXHRcdGVsc2Vcbm1tL2RhbW9uL2NvcmUuYy0zMjUxLVx0XHRcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xubW0vZGFtb24vY29yZS5jOjMyNTI6XHRcdGVzeiA9IG1pbih0aHJvdWdocHV0ICogcXVvdGEtXHUwMDNlbXMsIGVzeik7XG5tbS9kYW1vbi9jb3JlLmMtMzI1My1cdFx0ZXN6ID0gbWF4KGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6LCBlc3opO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjU1LVxubW0vZGFtb24vY29yZS5jOjMyNTY6XHRpZiAocXVvdGEtXHUwMDNlc3ogXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZXN6IFx1MDAzYyBlc3opXG5tbS9kYW1vbi9jb3JlLmM6MzI1NzpcdFx0ZXN6ID0gcXVvdGEtXHUwMDNlc3o7XG5tbS9kYW1vbi9jb3JlLmMtMzI1OC1cbm1tL2RhbW9uL2NvcmUuYzozMjU5Olx0cXVvdGEtXHUwMDNlZXN6ID0gZXN6O1xubW0vZGFtb24vY29yZS5jLTMyNjAtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjYyPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXG5tbS9kYW1vbi9jb3JlLmM6MzI2MzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbm1tL2RhbW9uL2NvcmUuYy0zMjY0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI3Mi1cdH1cbm1tL2RhbW9uL2NvcmUuYzozMjczOlx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG5tbS9kYW1vbi9jb3JlLmMtMzI3NC19XG5tbS9kYW1vbi9jb3JlLmMtMzI3NS1cbm1tL2RhbW9uL2NvcmUuYzozMjc2OnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzI3Ny17XG5tbS9kYW1vbi9jb3JlLmM6MzI3ODpcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jLTMyNzktXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjgzLVxubW0vZGFtb24vY29yZS5jOjMyODQ6XHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlc3ogXHUwMDI2XHUwMDI2IGxpc3RfZW1wdHkoXHUwMDI2cXVvdGEtXHUwMDNlZ29hbHMpKVxubW0vZGFtb24vY29yZS5jLTMyODUtXHRcdHJldHVybjtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI4Ny1cdC8qIEZpcnN0IGNoYXJnZSB3aW5kb3cgKi9cbm1tL2RhbW9uL2NvcmUuYzozMjg4Olx0aWYgKCFxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6IFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzI4OTpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbm1tL2RhbW9uL2NvcmUuYzozMjkwOlx0XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTMyOTEtXHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxubW0vZGFtb24vY29yZS5jOjMyOTI6XHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbm1tL2RhbW9uL2NvcmUuYy0zMjkzLVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjk1LVx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXG5tbS9kYW1vbi9jb3JlLmM6MzI5NjpcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbm1tL2RhbW9uL2NvcmUuYzozMjk3Olx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tICYjNDM7XG5tbS9kYW1vbi9jb3JlLmM6MzI5ODpcdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xubW0vZGFtb24vY29yZS5jOjMyOTk6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTMzMDAtXHRcdFx0cy1cdTAwM2VzdGF0LnF0X2V4Y2VlZHMmIzQzOyYjNDM7O1xubW0vZGFtb24vY29yZS5jOjMzMDE6XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogJiM0Mzs9IHF1b3RhLVx1MDAzZWNoYXJnZWRfc3o7XG5tbS9kYW1vbi9jb3JlLmM6MzMwMjpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbm1tL2RhbW9uL2NvcmUuYzozMzAzOlx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0zMzA0LVx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbm1tL2RhbW9uL2NvcmUuYzozMzA1Olx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG5tbS9kYW1vbi9jb3JlLmM6MzMwNjpcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYzozMzA3Olx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXG5tbS9kYW1vbi9jb3JlLmM6MzMwODpcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xubW0vZGFtb24vY29yZS5jLTMzMDktXHR9XG4tLVxubW0vZGFtb24vY29yZS5jLTMzMzQtXHRcdGN1bXVsYXRlZF9zeiAmIzQzOz0gYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV07XG5tbS9kYW1vbi9jb3JlLmM6MzMzNTpcdFx0aWYgKGN1bXVsYXRlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeiB8fCAhc2NvcmUpXG5tbS9kYW1vbi9jb3JlLmMtMzMzNi1cdFx0XHRicmVhaztcbm1tL2RhbW9uL2NvcmUuYy0zMzM3LVx0fVxubW0vZGFtb24vY29yZS5jOjMzMzg6XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0zMzM5LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzM1Nz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM3Mi1cbm1tL2RhbW9uL2NvcmUuYzozMzczOlx0XHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzM3NC1cdH1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM5PXN0YXRpYyBib29sIGNvbW1pdF9pbnB1dHMgX19yZWFkX21vc3RseTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQzLSAqXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ0OiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NTogKiBhdXRvbWF0aWNhbGx5IGluY3JlYXNlcyBhbmQgZGVjcmVhc2VzIHRoZSBlZmZlY3RpdmUgbGV2ZWwgb2YgdGhlIHF1b3RhXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ2LSAqIGFpbWluZyB0aGUgTFJVIFtkZV1wcmlvcml0aXphdGlvbnMgb2YgdGhlIGhvdCBhbmQgY29sZCBtZW1vcnkgcmVzdWx0aW5nIGluXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xMDQ9bW9kdWxlX3BhcmFtKGNvbGRfbWluX2FnZSwgdWxvbmcsIDA2MDApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0xMDUtXG5tbS9kYW1vbi9scnVfc29ydC5jOjEwNjpzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhIGRhbW9uX2xydV9zb3J0X3F1b3RhID0ge1xubW0vZGFtb24vbHJ1X3NvcnQuYy0xMDctXHQvKiBVc2UgdXAgdG8gMTAgbXMgcGVyIDEgc2VjLCBieSBkZWZhdWx0ICovXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMTAtXHQucmVzZXRfaW50ZXJ2YWwgPSAxMDAwLFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTE6XHQvKiBXaXRoaW4gdGhlIHF1b3RhLCBtYXJrIGhvdHRlciByZWdpb25zIGFjY2Vzc2VkIGZpcnN0LiAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYy0xMTItXHQud2VpZ2h0X3N6ID0gMCxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTExNS19O1xubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTY6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfVElNRV9RVU9UQShkYW1vbl9scnVfc29ydF9xdW90YSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTExNy1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTE2ND1ERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19TVEFUU19QQVJBTVMoZGFtb25fbHJ1X3NvcnRfaG90X3N0YXQsXG5tbS9kYW1vbi9scnVfc29ydC5jLTE2NS1cdFx0bHJ1X3NvcnRfdHJpZWRfaG90X3JlZ2lvbnMsIGxydV9zb3J0ZWRfaG90X3JlZ2lvbnMsXG5tbS9kYW1vbi9scnVfc29ydC5jOjE2NjpcdFx0aG90X3F1b3RhX2V4Y2VlZHMpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0xNjctXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xNjk9REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX2xydV9zb3J0X2NvbGRfc3RhdCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTcwLVx0XHRscnVfc29ydF90cmllZF9jb2xkX3JlZ2lvbnMsIGxydV9zb3J0ZWRfY29sZF9yZWdpb25zLFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxNzE6XHRcdGNvbGRfcXVvdGFfZXhjZWVkcyk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTE3Mi1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTE4OD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lKFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMTkwLXtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTkxOlx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0gZGFtb25fbHJ1X3NvcnRfcXVvdGE7XG5tbS9kYW1vbi9scnVfc29ydC5jLTE5Mi1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MTkzOlx0LyogVXNlIGhhbGYgb2YgdG90YWwgcXVvdGEgZm9yIGhvdC9jb2xkIHBhZ2VzIHNvcnRpbmcgKi9cbm1tL2RhbW9uL2xydV9zb3J0LmM6MTk0Olx0cXVvdGEubXMgPSBxdW90YS5tcyAvIDI7XG5tbS9kYW1vbi9scnVfc29ydC5jLTE5NS1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTIwMi1cdFx0XHQwLFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMDM6XHRcdFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyMDQ6XHRcdFx0XHUwMDI2cXVvdGEsXG5tbS9kYW1vbi9scnVfc29ydC5jLTIwNS1cdFx0XHQvKiAoRGUpYWN0aXZhdGUgdGhpcyBhY2NvcmRpbmcgdG8gdGhlIHdhdGVybWFya3MuICovXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjA9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X2NvbGRfc2NoZW1lKHVuc2lnbmVkIGludCBjb2xkX3RocmVzKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjI4LVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgREFNT04mIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNT05pdG9yIHdpdGhpbiB0aGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vZGFtb24vYCksIG5lZWRzIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLCBwYXJ0aWN1bGFybHkgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBrZXkgZm9yIG91ciB0ZXN0aW5nLgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4gIEdvb2QsIERBTU9OIGlzIGNvbmZpZ3VyYWJsZSB2aWEgYHN5c2ZzYCAoYENPTkZJR19EQU1PTl9TWVNGU2ApIGFuZCBtb2R1bGVzIChgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCwgYENPTkZJR19EQU1PTl9TVEFUYCksIHdoaWNoIG1lYW5zIEkgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggaXQgdGhyb3VnaCB0aGUgYC9zeXMva2VybmVsL21tL2RhbW9uLy4uLmAgaW50ZXJmYWNlIHRvIHNldCB1cCBpdHMgc2NoZW1lcywgcXVvdGFzLCB0YXJnZXRzLCBhbmQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLiAgVGhhdCYjMzk7cyBhIGRlZmluaXRlIHBsdXMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgdGhpcyB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/ICBMZXQmIzM5O3MgY29uc2lkZXIgdGhlIHVzdWFsIGNyaXRlcmlhOgoKKiAgICoqU3Vic3lzdGVtOioqIEl0IGlzIGluIGBtbS9kYW1vbmAsIGRlZmluaXRlbHkgbm90IGp1c3QgZG9jdW1lbnRhdGlvbiBvciBjb3NtZXRpYyBjaGFuZ2VzLiBDaGVjay4KKiAgICoqRXhlY3V0aW9uIGZsb3c6KiogTm90IHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgb3IgbWFjcm9zLiBUaGUgY29yZSBsb2dpYyBpbiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBpcyBkZWZpbml0ZWx5IGludGVyZXN0aW5nLCB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBleGVjdXRpb24gZmxvdy4gQ2hlY2suCiogICAqKlNwZWNpZmljIERvbWFpbjoqKiBUaGlzIGlzbiYjMzk7dCBhIGhhcmR3YXJlIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIuIEl0JiMzOTtzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgbW9yZSBpbXBhY3RmdWwgaWYgdGhlcmUgaXMgYSB2dWxuZXJhYmlsaXR5LiBDaGVjay4KKiAgICoqUnVudGltZSBMb2dpYzoqKiBJdCYjMzk7cyBub3QganVzdCB0ZWFyZG93biBlaXRoZXIsIGl0IGlzIHJlZ3VsYXIgcnVudGltZSBsb2dpYy4gQ2hlY2suCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYHRydWVgLiBXZSBoYXZlIGVub3VnaCBjb21wbGV4aXR5IGluIHRoZSBkYXRhIGFuZCBjb250cm9sIGZsb3csIHdoaWNoIGhhcyBnb29kIHJlYWNoYWJpbGl0eS4KCkFscmlnaHQsIHNvIHdoYXQmIzM5O3MgbmV4dD8gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgbW0vZGFtb24vc3lzZnMuY2AgZm9yIHRob3NlIGBzeXNmc2AgaW50ZXJhY3Rpb24gcG9pbnRzLCBhcyB3ZWxsIGFzIGBtbS9kYW1vbi9jb3JlLmNgIGZvciB0aGUgY29yZSBEQU1PTiBsb2dpYy4KSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMgZm9yIHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmRhbW9ufGRhbW9uX3N5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNjg3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTA6REVGSU5FX01VVEVYKGRhbW9uX3N5c2ZzX2xvY2spO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTctXHRcdHVuc2lnbmVkIGxvbmcgbWluLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE5LXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjIwOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGttYWxsb2Nfb2JqKCpyYW5nZSk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0yMS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0zMT1zdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTMzLXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjM0Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MzU6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTM2LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTQwPXN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTQyLXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NDQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTQ1LVx0dW5zaWduZWQgbG9uZyBtaW47XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NTY9c3RhdGljIHNzaXplX3QgbWF4X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy01OC17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo1OTpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjYwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy02MS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz02NT1zdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy02Ny17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2ODpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjY5Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy03MC1cdHVuc2lnbmVkIGxvbmcgbWF4O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODE6dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODIte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODM6XHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKSk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04NC19XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04NS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjg2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWluX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODctXHRcdF9fQVRUUl9SV19NT0RFKG1pbiwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04OC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjg5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWF4X2F0dHIgPVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTAtXHRcdF9fQVRUUl9SV19NT0RFKG1heCwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05MS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkyOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTM6XHRcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9taW5fYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTQ6XHRcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9tYXhfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTUtXHROVUxMLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTYtfTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjk3OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfdWxfcmFuZ2UpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5OTpjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTAwOlx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAxLVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTAyOlx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfdWxfcmFuZ2VfZ3JvdXBzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAzLX07XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA1LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTA2OnN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA3LVx0XHRjaGFyICptZW1jZ19wYXRoX2J1ZiwgY2hhciAqcGF0aClcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTc6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZClcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExOC17XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTM0LVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTM1Olx0XHRpZiAoZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShtZW1jZywgcGF0aCwgbWVtY2dfcGF0aCkpIHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNi1cdFx0XHQqaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC04LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6OTpleHRlcm4gc3RydWN0IG11dGV4IGRhbW9uX3N5c2ZzX2xvY2s7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xMC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjExOnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSB7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xMi1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoxNzpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTgtXHRcdHVuc2lnbmVkIGxvbmcgbWluLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTktXHRcdHVuc2lnbmVkIGxvbmcgbWF4KTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjIwOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjIyOmV4dGVybiBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2t0eXBlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjMtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjctXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyODpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyB7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yOS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozMDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKipzY2hlbWVzX2Fycjtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTMxLVx0aW50IG5yO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTMzLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzQ6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zNi1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM3OmV4dGVybiBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGU7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM5OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0MDpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDM6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDQtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00NS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQ2OnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1MTppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTI6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD01Nz12b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTg6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTktXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC02MC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjYxOmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcHJvYmVzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUwOnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTEtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjEtXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2Mi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcmVnaW9uX2FkZF9kaXJzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NzpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzgtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjAyPXN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3JlZ2lvbl9ybV9kaXJzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwMzpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDQte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDk9c3RhdGljIHNzaXplX3Qgc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIxMjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTM6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxNC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjE4PXN0YXRpYyBzc2l6ZV90IGVuZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjIxOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMjpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjIzLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMjc9c3RhdGljIHNzaXplX3QgbnJfYWNjZXNzZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjMxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIzNj1zdGF0aWMgc3NpemVfdCBhZ2Vfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzOTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI0MS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjQ1PXN0YXRpYyBzc2l6ZV90IHN6X2ZpbHRlcl9wYXNzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQ3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDg6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ5Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTAtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTQ6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU2Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjYyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjMtXHRcdF9fQVRUUl9ST19NT0RFKHN0YXJ0LCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY2LVx0XHRfX0FUVFJfUk9fTU9ERShlbmQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX25yX2FjY2Vzc2VzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2OS1cdFx0X19BVFRSX1JPX01PREUobnJfYWNjZXNzZXMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FnZV9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzItXHRcdF9fQVRUUl9ST19NT0RFKGFnZSwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjczLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3NDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3pfZmlsdGVyX3Bhc3NlZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzUtXHRcdF9fQVRUUl9ST19NT0RFKHN6X2ZpbHRlcl9wYXNzZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzc6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzg6XHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N0YXJ0X2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzk6XHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2VuZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgwOlx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ucl9hY2Nlc3Nlc19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgxOlx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hZ2VfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MjpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3pfZmlsdGVyX3Bhc3NlZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgzLVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODQtfTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODU6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg4Olx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5LVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MDpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZ3JvdXBzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MS19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk3OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk4LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzAzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNDpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDU6ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDYte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNzpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucyA9IGttYWxsb2Nfb2JqKCpyZWdpb25zKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDgtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxOT1zdGF0aWMgc3NpemVfdCB0b3RhbF9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyNC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzI3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyODpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyOTpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpyZWdpb25zKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMzMC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzMxOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnIsICpuZXh0O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMzMi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0MjpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0My17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzQ0Olx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucywga29iaikpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0NS19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0NzpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0OC1cdFx0X19BVFRSX1JPX01PREUodG90YWxfYnl0ZXMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0OS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTA6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzUxOlx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1Mi1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzUzLX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU0OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTY6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU3Olx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1OC1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTk6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzYwLX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNjY6c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzc4OnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKmRhbW9uX3N5c2ZzX3N0YXRzX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzc5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODA6XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODEtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zODM9c3RhdGljIHNzaXplX3QgbnJfdHJpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM4NjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODgtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM5Mj1zdGF0aWMgc3NpemVfdCBzel90cmllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM5NC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzk1Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM5NjpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM5Ny1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDAxPXN0YXRpYyBzc2l6ZV90IG5yX2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDAzLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MDQ6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDA1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDA2LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MTA9c3RhdGljIHNzaXplX3Qgc3pfYXBwbGllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MTIte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQxMzpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MTUtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBzel9vcHNfZmlsdGVyX3Bhc3NlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MjEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQyMjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjM6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MjQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQyOD1zdGF0aWMgc3NpemVfdCBxdF9leGNlZWRzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQzMC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDMxOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQzMjpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQzMy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDM3PXN0YXRpYyBzc2l6ZV90IG5yX3NuYXBzaG90c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Mzkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ0MDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDE6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NDItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQ0Nj1zdGF0aWMgc3NpemVfdCBtYXhfbnJfc25hcHNob3RzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ0OC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQ5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ1MS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDU1PXN0YXRpYyBzc2l6ZV90IG1heF9ucl9zbmFwc2hvdHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ1Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDU4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2MC1cdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cywgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZtYXhfbnJfc25hcHNob3RzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDY3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ2ODpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2OS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDcwOlx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaikpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3MS19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDcyLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3MzpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX25yX3RyaWVkX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3NC1cdFx0X19BVFRSX1JPX01PREUobnJfdHJpZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel90cmllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzctXHRcdF9fQVRUUl9ST19NT0RFKHN6X3RyaWVkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDc5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfbnJfYXBwbGllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODAtXHRcdF9fQVRUUl9ST19NT0RFKG5yX2FwcGxpZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODI6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel9hcHBsaWVkX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4My1cdFx0X19BVFRSX1JPX01PREUoc3pfYXBwbGllZCwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDg0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3N6X29wc19maWx0ZXJfcGFzc2VkX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4Ni1cdFx0X19BVFRSX1JPX01PREUoc3pfb3BzX2ZpbHRlcl9wYXNzZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19xdF9leGNlZWRzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4OS1cdFx0X19BVFRSX1JPX01PREUocXRfZXhjZWVkcywgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5MTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX25yX3NuYXBzaG90c19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTItXHRcdF9fQVRUUl9ST19NT0RFKG5yX3NuYXBzaG90cywgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5NDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX21heF9ucl9zbmFwc2hvdHNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDk1LVx0XHRfX0FUVFJfUldfTU9ERShtYXhfbnJfc25hcHNob3RzLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDk3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zdGF0c19hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5ODpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX3RyaWVkX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTk6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel90cmllZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAwOlx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfYXBwbGllZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAxOlx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAyOlx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfb3BzX2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMzpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3F0X2V4Y2VlZHNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX3NuYXBzaG90c19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA1Olx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbWF4X25yX3NuYXBzaG90c19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA2LVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MDctfTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDg6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zdGF0cyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxMDpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zdGF0c19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTE6XHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3N0YXRzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTEyLVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxMzpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3N0YXRzX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MTQtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTIzPWVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUyOC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1Mjk6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUzMC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDE6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Mi1cdFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTQ0Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlcjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTQ2Olx0ZmlsdGVyID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Ny1cdGlmIChmaWx0ZXIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTU5Mz1zdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5NS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk2Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU5NzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk4LVx0aW50IGk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTYyNz1zdGF0aWMgc3NpemVfdCB0eXBlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Mjkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjYzMDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MzE6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYzMi1cdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NjUyPXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY1NC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjU1Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY1NjpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjU3LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02NjE9c3RhdGljIHNzaXplX3QgbWF0Y2hpbmdfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY2My17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjY0Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY2NTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjY2LVx0Ym9vbCBtYXRjaGluZztcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njc2PXN0YXRpYyBzc2l6ZV90IGFsbG93X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY3OC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Njc5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjgxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02ODU9c3RhdGljIHNzaXplX3QgYWxsb3dfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Njg4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjkwLVx0Ym9vbCBhbGxvdztcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzAwPXN0YXRpYyBzc2l6ZV90IG1lbWNnX3BhdGhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzAyLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MDM6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA0Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MDUtXHRpbnQgbGVuO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwNi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MDc6XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzA4LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTAtXHRcdFx0ZmlsdGVyLVx1MDAzZW1lbWNnX3BhdGggPyBmaWx0ZXItXHUwMDNlbWVtY2dfcGF0aCA6IFwmIzM0O1wmIzM0Oyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzExOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcxMi1cdHJldHVybiBsZW47XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTcxNT1zdGF0aWMgc3NpemVfdCBtZW1jZ19wYXRoX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTcte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcxODpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyMC1cdGNoYXIgKnBhdGggPSBrbWFsbG9jX2FycmF5KHNpemVfYWRkKGNvdW50LCAxKSwgc2l6ZW9mKCpwYXRoKSxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzI2LVx0c3Ryc2NweShwYXRoLCBidWYsIGNvdW50ICYjNDM7IDEpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcyNzpcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSkge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyOC1cdFx0a2ZyZWUocGF0aCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczMi1cdGZpbHRlci1cdTAwM2VtZW1jZ19wYXRoID0gcGF0aDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MzM6XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzM0LVx0cmV0dXJuIGNvdW50O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03Mzc9c3RhdGljIHNzaXplX3QgYWRkcl9zdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Mzkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0MDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDE6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0Mi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzQ2PXN0YXRpYyBzc2l6ZV90IGFkZHJfc3RhcnRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0OC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzQ5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc1MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzUxLVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZWFkZHJfcmFuZ2Uuc3RhcnQpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NTY9c3RhdGljIHNzaXplX3QgYWRkcl9lbmRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzU4LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzYwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NjEtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc2NT1zdGF0aWMgc3NpemVfdCBhZGRyX2VuZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzY3LXtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDgyNwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBGdXp6aW5nIFN0cmF0ZWd5OiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gdGhlIHRhc2sgaXMgdG8gcGlucG9pbnQgcG90ZW50aWFsIGFyZWFzIGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBGaXJzdCwgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgREFNT04gc3ltYm9scy4gV2UgbmVlZCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgd2FycmFudCBhIGNsb3NlciBsb29rLiBUaGlua2luZyBzdHJhdGVnaWNhbGx5LCB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aG9zZSBlbnRyeSBwb2ludHMgYXMgdGhlIGluaXRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdGVzdCBmdW5jdGlvbnMgbGlrZSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBhbmQgdGhlaXIgcmVsYXRlZCB2YXJpYW50cyBmb3Igc2V0dGluZywgY29tbWl0dGluZyBzY2hlbWVzL3RhcmdldHMsIGFuZCBmdW5jdGlvbiBjYWxscy4gQWxzbywgaW5jbHVkZSBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBgZGFtb25fc2V0X3JlZ2lvbnNgLCBhbmQgYGRhbW9uX25ld19zY2hlbWVgLgoKTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGV4cG9ydGVkLCBub24tc3RhdGljIHN5bWJvbHMgd2l0aGluIHRoZSBjb3JlIERBTU9OIGZpbGVzOiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBhZGRpdGlvbmFsIGVudHJ5IHBvaW50cyBvciBpbXBvcnRhbnQgaW50ZXJuYWwgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCB3aXRoIHRoZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfHN0cnVjdCBbYS16X10mIzQzOyBcXCopIFthLXowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz01MT1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo3MjppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXG5tbS9kYW1vbi9jb3JlLmMtNzMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy05OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzo5OTppbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxubW0vZGFtb24vY29yZS5jLTEwMC17XG4tLVxubW0vZGFtb24vY29yZS5jPTExNT1zdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbmV3X3ByZXAoZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb24pXG4tLVxubW0vZGFtb24vY29yZS5jLTEyNi1cbm1tL2RhbW9uL2NvcmUuYzoxMjc6dm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKVxubW0vZGFtb24vY29yZS5jLTEyOC17XG4tLVxubW0vZGFtb24vY29yZS5jPTE3Mj1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg2LVxubW0vZGFtb24vY29yZS5jOjE4Nzp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTE4OC17XG4tLVxubW0vZGFtb24vY29yZS5jPTE5Nz1zdGF0aWMgdm9pZCBkYW1vbl9mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDEtXG5tbS9kYW1vbi9jb3JlLmM6MjAyOnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0yMDMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjA9c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMzLVxubW0vZGFtb24vY29yZS5jOjIzNDp2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXG5tbS9kYW1vbi9jb3JlLmMtMjM1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NTA3PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy01MzktICovXG5tbS9kYW1vbi9jb3JlLmM6NTQwOmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxubW0vZGFtb24vY29yZS5jLTU0MS1cdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz02NTM9Ym9vbCBkYW1vc19maWx0ZXJfZm9yX29wcyhlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUpXG4tLVxubW0vZGFtb24vY29yZS5jLTY2NC1cbm1tL2RhbW9uL2NvcmUuYzo2NjU6dm9pZCBkYW1vc19hZGRfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy02NjYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz02Nzg9c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjgyLVxubW0vZGFtb24vY29yZS5jOjY4Mzp2b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtNjg0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Njg5PXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzA1LVxubW0vZGFtb24vY29yZS5jOjcwNjp2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNzA3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzE2PXN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzIwLVxubW0vZGFtb24vY29yZS5jOjcyMTp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbm1tL2RhbW9uL2NvcmUuYy03MjIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz03ODg9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03OTgtXG5tbS9kYW1vbi9jb3JlLmM6Nzk5OnZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy04MDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04MTA9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy04MTQtXG5tbS9kYW1vbi9jb3JlLmM6ODE1OnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTgxNi17XG4tLVxubW0vZGFtb24vY29yZS5jPTg0MD1zdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTg1Ni1cbm1tL2RhbW9uL2NvcmUuYzo4NTc6dm9pZCBkYW1vbl9hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy04NTgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04NjQtICovXG5tbS9kYW1vbi9jb3JlLmM6ODY1OmludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKVxubW0vZGFtb24vY29yZS5jLTg2Ni17XG4tLVxubW0vZGFtb24vY29yZS5jPTg3Mz1zdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4tLVxubW0vZGFtb24vY29yZS5jLTg3Ny1cbm1tL2RhbW9uL2NvcmUuYzo4Nzg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTg3OS17XG4tLVxubW0vZGFtb24vY29yZS5jLTg4Ni1cbm1tL2RhbW9uL2NvcmUuYzo4ODc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtODg4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9OTQyPXN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTk0OS1cbm1tL2RhbW9uL2NvcmUuYzo5NTA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtOTUxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTA4Mz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTE3LSAqL1xubW0vZGFtb24vY29yZS5jOjExMTg6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5tbS9kYW1vbi9jb3JlLmMtMTExOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTExNjUtICovXG5tbS9kYW1vbi9jb3JlLmM6MTE2Njp2b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcbm1tL2RhbW9uL2NvcmUuYy0xMTY3LVx0XHRcdHNzaXplX3QgbnJfc2NoZW1lcylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTIxNT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTIzNi0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMjM3OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxubW0vZGFtb24vY29yZS5jLTEyMzgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xOTIwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTQ4LSAqL1xubW0vZGFtb24vY29yZS5jOjE5NDk6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTk1MC17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwMzI9c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA2OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDY5OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTIwNzAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTE0PXN0YXRpYyB2b2lkIF9fZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxMzMtICovXG5tbS9kYW1vbi9jb3JlLmM6MjEzNDp2b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxubW0vZGFtb24vY29yZS5jLTIxMzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTQ5PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNjQtICovXG5tbS9kYW1vbi9jb3JlLmM6MjE2NTppbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTIxNjYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjAwLSAqL1xubW0vZGFtb24vY29yZS5jOjIyMDE6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxubW0vZGFtb24vY29yZS5jLTIyMDIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjUzLSAqL1xubW0vZGFtb24vY29yZS5jOjIyNTQ6aW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKVxubW0vZGFtb24vY29yZS5jLTIyNTUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz00MDk0PXN0YXRpYyBib29sIGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3RhcnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTQxMjUtICovXG5tbS9kYW1vbi9jb3JlLmM6NDEyNjppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtNDEyNy1cdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MTUwLSAqL1xubW0vZGFtb24vY29yZS5jOjQxNTE6dm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpXG5tbS9kYW1vbi9jb3JlLmMtNDE1Mi17XG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0xNC0gKi9cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM6MTU6aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTE2LVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICoqdGFyZ2V0cClcbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTQ1LVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDo0NjppbnQgZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cCxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNDctXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKip0YXJnZXRwKTtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MjQ9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQxLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjQyOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQzLXtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzItXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NzM6dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzQte1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDMtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTA0OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDUtXHRcdFx0c3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNDktXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTUwOmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTUxLVx0XHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzMtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTc0OnZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzUte1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaD04PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjEwOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMTp2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTI6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMy1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE0LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE1OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTYtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxNzppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz02NT1zdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgxOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgyLXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTE3OmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTgte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTE3PXN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTktXHRcdHVuc2lnbmVkIGxvbmcgbWF4KTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjIwOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0zND1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM1OnZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTM2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9Mzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTM4LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mzk6aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQwLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQyOnZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHMoXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00My1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Njp2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTE6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUyLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01Ni1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU3OnZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01OC1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo2MTppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjY4ND1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjg4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2ODk6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY5MC17XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5ODppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk5LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkzMzp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzQtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTc0PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ4OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0OS1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA2Nzp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjgtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTA0LSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDU6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMDYtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE1MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTUyOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE1My1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzMxCgkJCQkJCQlvdXRwdXQ6IDE4OAoJCQkJCQkJdGhvdWdodHM6IDQyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSByZXZpZXdpbmcgdGhlIGNvcmUgREFNT04gY29tcG9uZW50czogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgYGRhbW9uX2NhbGxgLCBhbG9uZyB3aXRoIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGNhbGxzLCBhcyBleHBlY3RlZC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBvcHRpb25zLiBXZSBoYXZlIGBEQU1PTmAsIHdoaWNoIGJ1aWxkcyB0aGUgY29yZSBtb2R1bGUgKGBtbS9kYW1vbi9jb3JlLm9gKS4gVGhlbiwgYERBTU9OX1NZU0ZTYCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHN5c2ZzIGludGVyZmFjZSwgYnVpbGRpbmcgcmVsYXRlZCBtb2R1bGVzLCB3aGljaCBpcyBncmVhdCBmb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4gV2UgaGF2ZSBgREFNT05fUEFERFJgIGZvciBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcsIGFuZCBgREFNT05fVkFERFJgIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyDigJMgc3RhbmRhcmQgb2ZmZXJpbmdzLgoKSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIGRlcGVuZGVuY2llcy4gYERBTU9OX1NZU0ZTYCBjb3JyZWN0bHkgZGVwZW5kcyBvbiBib3RoIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIGlzIGNydWNpYWwuIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9WQUREUmAgYXJlIGNvcnJlY3RseSBkZXBlbmRlbnQgb24gYm90aCBgREFNT05gIGFuZCBgTU1VYC4gVGhpcyBlbnN1cmVzIHRoZSBwcm9wZXIgZm91bmRhdGlvbiBpcyBpbiBwbGFjZS4gSSYjMzk7bSBhbHNvIGNvbmZpcm1pbmcgdGhhdCBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3VjaCBhcyBgREFNT05fUkVDTEFJTWAgYW5kIGBEQU1PTl9MUlVfU09SVGAsIGFyZSBhcHByb3ByaWF0ZWx5IGNvbnNpZGVyZWQgYW5kIG5vdCBjYXVzaW5nIGFueSBjb25mbGljdHMuCgpJIHRoZW4gcmV2aXNpdGVkIHRoZSBsaXN0IG9mICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsg4oCTIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIOKAkyB0byBlbnN1cmUgdGhleSBhbGlnbiB3aXRoIHRoZSBLY29uZmlnIG9wdGlvbnMsIGFuZCBhbGwgdGhlIEtjb25maWcgb3B0aW9ucyBhcmUgY29uc2lzdGVudCB3aXRoIGVhY2ggb3RoZXIuIFRoaXMgY29uZmlybXMgdGhlaXIgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIHByb2plY3QuCgpFdmVyeXRoaW5nIGlzIGNsZWFyLiBObyBmdXJ0aGVyIGNoZWNrcyBhcmUgbmVlZGVkLCBzbywgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgc2NoZW1lIHF1b3RhIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIChzcGVjaWZpY2FsbHkgZGFtb3NfcXVvdGFfaXNfZnVsbCBhbmQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcykgdG8gaGFuZGxlIHplcm8gY2hhcmdlZCBzaXplIGFuZCB6ZXJvIGVmZmVjdGl2ZSBzY2hlbWUgc2l6ZSBjb25kaXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQga2VybmVsIEFQSXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgc2NoZW1lIHF1b3RhIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIChzcGVjaWZpY2FsbHkgZGFtb3NfcXVvdGFfaXNfZnVsbCBhbmQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcykgdG8gaGFuZGxlIHplcm8gY2hhcmdlZCBzaXplIGFuZCB6ZXJvIGVmZmVjdGl2ZSBzY2hlbWUgc2l6ZSBjb25kaXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQga2VybmVsIEFQSXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gcXVvdGEgY2FsY3VsYXRpb24gbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBlYXJseSByZXR1cm4gY2hlY2tzIHdoZW4gYHF1b3RhLVx1MDAzZWNoYXJnZWRfc3pgIG9yIGBxdW90YS1cdTAwM2Vlc3pgIGFyZSB6ZXJvIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lcygpYC5cblxuVGhlc2UgY2hhbmdlczpcbjEuIERvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LlxuMi4gRG8gbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZSBvciBhbHRlciBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxuMy4gT25seSBhZGQgY29uZGl0aW9uYWwgY2hlY2tzIG9uIGFscmVhZHktaW5pdGlhbGl6ZWQgZmllbGRzIHdpdGhpbiBgc3RydWN0IGRhbW9zX3F1b3RhYC5cblxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjVjOGZiOTYzOWI4YzhjODg0Y2ZjMjUzNzQwM2JiYTM5MDU2ODg3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDA6NTM6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggZGYyMjYyMTc2NTkxMS4uZjhjNzg0ZGYyNDYwMCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMjY1NSw2ICYjNDM7MjY1NSw4IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSwKIHsKIAlpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpCiAJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKCFxdW90YS0mZ3Q7Y2hhcmdlZF9zeikKJiM0MzsJCXJldHVybiBmYWxzZTsKIAlpZiAocXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzeikKIAkJcmV0dXJuIHRydWU7CiAJLyoKQEAgLTI3NTAsNiAmIzQzOzI3NTIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsCiAJCWlmICghcy0mZ3Q7d21hcmtzLmFjdGl2YXRlZCkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAoIXF1b3RhLSZndDtlc3opCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCS8qIENoZWNrIHRoZSBxdW90YSAqLwogCQlpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy0mZ3Q7bWluX3JlZ2lvbl9zeikpCiAJCQljb250aW51ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUGF0Y2ggQXNzZXNzbWVudDogS01TQU4gUmlzayBFdmFsdWF0aW9uKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgYG1tL2RhbW9uL2NvcmUuY2AgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIEtBU0FOIGNoZWNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGxlYW5zIHRvd2FyZHMgYSBkZWZlbnNpdmUsIFFBLWZvY3VzZWQgZXZhbHVhdGlvbiDigJMgc29tZXRoaW5nIHNhZmUgYW5kIHN0cmFpZ2h0Zm9yd2FyZCB0byBkby4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIFRoZSBkaWZmIGl0c2VsZiBpcyByZWxhdGl2ZWx5IHNtYWxsLiBJIHNlZSBhZGRpdGlvbnMgd2l0aGluIHRoZSBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBmdW5jdGlvbnMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGVja3MgZm9yIGBxdW90YS0mZ3Q7Y2hhcmdlZF9zemAgYW5kIGBxdW90YS0mZ3Q7ZXN6YCBiZWluZyBub24temVybyBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNlcnRhaW4gb3BlcmF0aW9ucyByZWxhdGVkIHRvIHF1b3RhIG1hbmFnZW1lbnQgYW5kIHNjaGVtZSBhcHBsaWNhdGlvbiB3aXRoaW4gREFNT04uCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCBgY2hhcmdlZF9zemAgYW5kIGBlc3pgIHJlcHJlc2VudCBhbmQgaG93IHRoZXkgYXJlIGluaXRpYWxpemVkIGFuZCB1c2VkIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IGdyZXBwZXIgc2tpbGxzIG9yIHJlYWQgdGhyb3VnaCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGVzZSBjaGVja3MgYXJlIGFjdHVhbGx5ICpyZW1vdmluZyogYSBwb3RlbnRpYWwgcmlzaywgYnkgZW5zdXJpbmcgdGhhdCBjZXJ0YWluIGNvbXB1dGF0aW9ucyBkb24mIzM5O3Qgb2NjdXIgd2hlbiB0aGUgcXVvdGEgaXMgZW1wdHkgb3Igbm90IGluaXRpYWxpemVkLiBTbywgaXQgKm1pZ2h0KiBiZSBhIGdvb2QgdGhpbmcuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgcGF0Y2ggaXMgbGlrZWx5IGFpbWVkIGF0IHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdXNpbmcgdW5pbml0aWFsaXplZCBvciB6ZXJvIHZhbHVlcyBpbiBjYWxjdWxhdGlvbnMgcmVsYXRlZCB0byBxdW90YXMuIFRoZSBhZGRpdGlvbiBvZiB0aGVzZSBjaGVja3Mgd291bGQgbWVhbiBLTVNBTiBpcyBwcm9iYWJseSBub3QgbmVlZGVkLiBBIHRob3JvdWdoIGNvZGUgcmV2aWV3IGFuZCBsb29raW5nIGZvciBvdGhlciByZWZlcmVuY2VzIHRvIHRoZSB2YXJpYWJsZXMgaXMgZGVmaW5pdGVseSByZXF1aXJlZCwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2sgZG93biBhbnkgcG90ZW50aWFsIGluaXRpYWxpemF0aW9uIHBhdGhzIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucywgYnV0IHRoaXMgbG9va3MgbGlrZSBhIGRlZmVuc2l2ZSBwYXRjaCB0aGF0IGlzIHByb2JhYmx5IHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3F1b3RhX2lzX2Z1bGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI2MzY9c3RhdGljIHZvaWQgZGFtb3NfY2hhcmdlX3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2NTItXG5tbS9kYW1vbi9jb3JlLmM6MjY1MzpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG5tbS9kYW1vbi9jb3JlLmMtMjY1NC1cdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjY5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzI3LVx0XHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcbm1tL2RhbW9uL2NvcmUuYzoyNzI4Olx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xubW0vZGFtb24vY29yZS5jLTI3MjktXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mjc0MD1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NTgtXHRcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xubW0vZGFtb24vY29yZS5jOjI3NTk6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTI3NjAtXHRcdFx0Y29udGludWU7XG4tLVxubW0vZGFtb24vY29yZS5jPTMyNzY9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI5OC1cdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xubW0vZGFtb24vY29yZS5jOjMyOTk6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTMzMDAtXHRcdFx0cy1cdTAwM2VzdGF0LnF0X2V4Y2VlZHMmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTExCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyAyNjUwLTI3NzAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgYWN0aW9uIGlzIGZvciBEQU1PTiBjb3JlIGZ1bmN0aW9uYWxpdHksIHNvIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGhlYXJ0IG9mIHRoZSBtb25pdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24gbG9naWMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyAqcmVhbGx5KiB3b3JraW5nLCBub3QganVzdCB0aGUgaGlnaC1sZXZlbCBleHBsYW5hdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHNlZSB0aGUgaW50cmljYXRlIGRldGFpbHMgb2YgbWVtb3J5IGFjY2VzcyB0cmFja2luZywgcG90ZW50aWFsIGV2aWN0aW9uIHRyaWdnZXJzLCBhbmQgbWF5YmUgZXZlbiBhIGdsaW1wc2Ugb2YgdGhlIHNhbXBsaW5nIHN0cmF0ZWd5LiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gYXNzZXNzIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIGFuZCBJJiMzOTttIHByZXBhcmVkIHRvIGRpc3NlY3QgdGhlIGNvZGUgd2l0aCBhIGNyaXRpY2FsIGV5ZSwgbG9va2luZyBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgb3IgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgYWxnb3JpdGhtcyBlbXBsb3llZC4gS25vd2luZyBob3cgcm9idXN0IHRoaXMgc2VjdGlvbiBpcyB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBoZWFsdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjQ1Olx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzs9IHN6X3JlZ2lvbjtcbjI2NDY6XHRcdGVsc2VcbjI2NDc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiAmIzQzOz0gc3pfYXBwbGllZCAmIzQzOyBtdWx0X2ZyYWMoXG4yNjQ4Olx0XHRcdFx0XHQoc3pfcmVnaW9uIC0gc3pfYXBwbGllZCksXG4yNjQ5Olx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9udW0sXG4yNjUwOlx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XG4yNjUxOlx0fVxuMjY1MjpcdFxuMjY1MzpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjI2NTQ6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjY1NTpcdHtcbjI2NTY6XHRcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbjI2NTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjY1ODpcdFx0aWYgKCFxdW90YS1cdTAwM2VjaGFyZ2VkX3N6KVxuMjY1OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yNjYwOlx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcbjI2NjE6XHRcdFx0cmV0dXJuIHRydWU7XG4yNjYyOlx0XHQvKlxuMjY2MzpcdFx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXHUwMDNjbWluX3JlZ2lvbl9zeiByZW1haW5pbmdcbjI2NjQ6XHRcdCAqIHF1b3RhIG1lYW5zIHRoZSBxdW90YSBpcyBlZmZlY3RpdmVseSBmdWxsLlxuMjY2NTpcdFx0ICovXG4yNjY2Olx0XHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zejtcbjI2Njc6XHR9XG4yNjY4Olx0XG4yNjY5Olx0c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNjcwOlx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcbjI2NzE6XHR7XG4yNjcyOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbjI2NzM6XHRcdHVuc2lnbmVkIGxvbmcgc3ogPSBkYW1vbl9zel9yZWdpb24ocik7XG4yNjc0Olx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBiZWdpbiwgZW5kO1xuMjY3NTpcdFx0dW5zaWduZWQgbG9uZyBzel9hcHBsaWVkID0gMDtcbjI2NzY6XHRcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQgPSAwO1xuMjY3NzpcdFx0LypcbjI2Nzg6XHRcdCAqIFdlIHBsYW4gdG8gc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0IHBlciBrZGFtb25kLCBhcyBEQU1PTiBzeXNmc1xuMjY3OTpcdFx0ICogaW1wbGllcyB3aXRoICYjMzk7bnJfY29udGV4dHMmIzM5OyBmaWxlLiAgTmV2ZXJ0aGVsZXNzLCBvbmx5IHNpbmdsZSBjb250ZXh0XG4yNjgwOlx0XHQgKiBwZXIga2RhbW9uZCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gIFNvLCB3ZSBjYW4gc2ltcGx5IHVzZSAmIzM5OzAmIzM5OyBjb250ZXh0XG4yNjgxOlx0XHQgKiBpbmRleCBoZXJlLlxuMjY4MjpcdFx0ICovXG4yNjgzOlx0XHR1bnNpZ25lZCBpbnQgY2lkeCA9IDA7XG4yNjg0Olx0XHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1x0XHQvKiBzY2hlbWVzIGl0ZXJhdG9yICovXG4yNjg1Olx0XHR1bnNpZ25lZCBpbnQgc2lkeCA9IDA7XG4yNjg2Olx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aXRlcjtcdC8qIHRhcmdldHMgaXRlcmF0b3IgKi9cbjI2ODc6XHRcdHVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwO1xuMjY4ODpcdFx0Ym9vbCBkb190cmFjZSA9IGZhbHNlO1xuMjY4OTpcdFxuMjY5MDpcdFx0LyogZ2V0IGluZGljZXMgZm9yIHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseSgpICovXG4yNjkxOlx0XHRpZiAodHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5X2VuYWJsZWQoKSkge1xuMjY5MjpcdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcbjI2OTM6XHRcdFx0XHRpZiAoc2l0ZXIgPT0gcylcbjI2OTQ6XHRcdFx0XHRcdGJyZWFrO1xuMjY5NTpcdFx0XHRcdHNpZHgmIzQzOyYjNDM7O1xuMjY5NjpcdFx0XHR9XG4yNjk3Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0aXRlciwgYykge1xuMjY5ODpcdFx0XHRcdGlmICh0aXRlciA9PSB0KVxuMjY5OTpcdFx0XHRcdFx0YnJlYWs7XG4yNzAwOlx0XHRcdFx0dGlkeCYjNDM7JiM0Mzs7XG4yNzAxOlx0XHRcdH1cbjI3MDI6XHRcdFx0bnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShyLCBjKTtcbjI3MDM6XHRcdFx0ZG9fdHJhY2UgPSB0cnVlO1xuMjcwNDpcdFx0fVxuMjcwNTpcdFxuMjcwNjpcdFx0aWYgKGMtXHUwMDNlb3BzLmFwcGx5X3NjaGVtZSkge1xuMjcwNzpcdFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSBcdTAwMjZcdTAwMjZcbjI3MDg6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzsgc3ogXHUwMDNlIHF1b3RhLVx1MDAzZWVzeikge1xuMjcwOTpcdFx0XHRcdHN6ID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2Vlc3ogLSBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6LFxuMjcxMDpcdFx0XHRcdFx0XHRjLVx1MDAzZW1pbl9yZWdpb25fc3opO1xuMjcxMTpcdFx0XHRcdGlmICghc3opXG4yNzEyOlx0XHRcdFx0XHRnb3RvIHVwZGF0ZV9zdGF0O1xuMjcxMzpcdFx0XHRcdGlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKVxuMjcxNDpcdFx0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbjI3MTU6XHRcdFx0fVxuMjcxNjpcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuMjcxNzpcdFx0XHRcdHJldHVybjtcbjI3MTg6XHRcdFx0a3RpbWVfZ2V0X2NvYXJzZV90czY0KFx1MDAyNmJlZ2luKTtcbjI3MTk6XHRcdFx0dHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5KGNpZHgsIHNpZHgsIHRpZHgsIHIsIG5yX2FjY2Vzc2VzLFxuMjcyMDpcdFx0XHRcdFx0ZGFtb25fbnJfcmVnaW9ucyh0KSwgZG9fdHJhY2UpO1xuMjcyMTpcdFx0XHRzel9hcHBsaWVkID0gYy1cdTAwM2VvcHMuYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMsXG4yNzIyOlx0XHRcdFx0XHRcdTAwMjZzel9vcHNfZmlsdGVyX3Bhc3NlZCk7XG4yNzIzOlx0XHRcdGRhbW9zX3dhbGtfY2FsbF93YWxrKGMsIHQsIHIsIHMsIHN6X29wc19maWx0ZXJfcGFzc2VkKTtcbjI3MjQ6XHRcdFx0a3RpbWVfZ2V0X2NvYXJzZV90czY0KFx1MDAyNmVuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIGFuZCBjb25zaWRlcmluZyBpdCBhcyBteSBvd24gdGhvdWdodDoKCioqRm9jdXNpbmcgSW46IEEgVGFyZ2V0ZWQgUmVhZCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIGNsZWFyLiBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgb24gdGhpcyBtYXRlcmlhbCwgYnV0IEkgbmVlZCB0byBob25lIGluIG9uIGEgc3BlY2lmaWMgc2VjdGlvbi4gVGhpcyBpc24mIzM5O3QgYSBjYXN1YWwgc2NhbjsgaXQmIzM5O3MgYSBzdHJhdGVnaWMgZGVlcCBkaXZlLiBUaGUgaW5zdHJ1Y3Rpb24gdG8gcmVhZCBhcm91bmQgdGhlIDI3NDAtMjc4MCByYW5nZSBtZWFucyB0aGF0IEkgbmVlZCB0byB6b29tIGluIG9uIHRob3NlIHNwZWNpZmljIHBhZ2VzIG9yIGxpbmVzLiBJJiMzOTtsbCBuZWVkIHRvIGJlIHJlYWR5IHRvIGFuYWx5emUgdGhhdCBwYXJ0aWN1bGFyIHRleHQgd2l0aCBteSBleHBlcnQgbGVucywgbG9va2luZyBmb3Igc3VidGxldGllcywgY29udGV4dHVhbCBjdWVzLCBhbmQgY29ubmVjdGlvbnMgdG8gdGhlIGJyb2FkZXIgdG9waWMgYXQgaGFuZC4gVGhlcmUgbWlnaHQgYmUgc29tZSBzcGVjaWZpYyBjaGFsbGVuZ2VzIHdpdGhpbiB0aGF0IHRleHQgdG8gY29uc2lkZXIuIE15IGludHVpdGlvbiB3b3VsZCBiZSB0byByZXZpZXcgdGhlIHRleHQgYW5kIHRha2Ugbm90ZXMgb24gc29tZSBvZiB0aGUga2V5IGNvbmNlcHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc0MDpcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbjI3NDE6XHRcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNzQyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMjc0MzpcdHtcbjI3NDQ6XHRcdHN0cnVjdCBkYW1vcyAqcztcbjI3NDU6XHRcbjI3NDY6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4yNzQ3Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjc0ODpcdFxuMjc0OTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4yNzUwOlx0XHRcdFx0Y29udGludWU7XG4yNzUxOlx0XG4yNzUyOlx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMjc1MzpcdFx0XHRcdGNvbnRpbnVlO1xuMjc1NDpcdFxuMjc1NTpcdFx0XHRpZiAoIXF1b3RhLVx1MDAzZWVzeilcbjI3NTY6XHRcdFx0XHRjb250aW51ZTtcbjI3NTc6XHRcbjI3NTg6XHRcdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG4yNzU5Olx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc2MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjc2MTpcdFxuMjc2MjpcdFx0XHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc2MzpcdFx0XHRcdGNvbnRpbnVlO1xuMjc2NDpcdFxuMjc2NTpcdFx0XHRpZiAocy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAyNlx1MDAyNlxuMjc2NjpcdFx0XHRcdFx0cy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAzYz0gcy1cdTAwM2VzdGF0Lm5yX3NuYXBzaG90cylcbjI3Njc6XHRcdFx0XHRjb250aW51ZTtcbjI3Njg6XHRcbjI3Njk6XHRcdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbjI3NzA6XHRcdFx0XHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XG4yNzcxOlx0XG4yNzcyOlx0XHRcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcbjI3NzM6XHRcdFx0XHRzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzJiM0MzsmIzQzOztcbjI3NzQ6XHRcdH1cbjI3NzU6XHR9XG4yNzc2Olx0XG4yNzc3Olx0LypcbjI3Nzg6XHQgKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXG4yNzc5Olx0ICogQGM6XHRcdFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cbjI3ODA6XHQgKiBAdDpcdFx0XHRtb25pdG9yaW5nIHRhcmdldCB0byBhcHBseSB0aGUgc2NoZW1lcyB0by5cbjI3ODE6XHQgKiBAbWF4X3JlZ2lvbl9zejpcdG1heGltdW0gcmVnaW9uIHNpemUgZm9yIEBjLlxuMjc4MjpcdCAqXG4yNzgzOlx0ICogVGhpcyBmdW5jdGlvbiBjb3VsZCBzcGxpdCByZWdpb25zIGZvciBrZWVwaW5nIHRoZSBxdW90YS4gIFRvIG1pbmltaXplXG4yNzg0Olx0ICogb3ZlcmhlYWQgZnJvbSB0aGUgc3BsaXQgb3BlcmF0aW9ucyBpbmNyZWFzZWQgbnVtYmVyIG9mIHJlZ2lvbnMsIHRoaXNcbjI3ODU6XHQgKiBmdW5jdGlvbiB3aWxsIGFsc28gbWVyZ2UgcmVnaW9ucyBhZnRlciB0aGUgc2NoZW1lcyBhcHBseWluZyBhdHRlbXB0IGlzIGRvbmUsXG4yNzg2Olx0ICogZm9yIGVhY2ggcmVnaW9uLiAgVGhlIG1lcmdlIG9wZXJhdGlvbiBpcyBtYWRlIG9ubHkgd2hlbiBpdCBkb2VzbiYjMzk7dCBsb3NlIHRoZVxuMjc4NzpcdCAqIG1vbml0b3JpbmcgaW5mb3JtYXRpb24gYW5kIG5vdCB2aW9sYXRpbmcgQG1heF9yZWdpb25fc3ouXG4yNzg4Olx0ICpcbjI3ODk6XHQgKiBIZW5jZSwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVnaW9ucyBjb3VsZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBRdW90YSBhbmQgU2l6ZSBDaGVja3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMuIEZpcnN0LCBpbiBgZGFtb3NfcXVvdGFfaXNfZnVsbCgpYCwgdGhlcmUmIzM5O3MgdGhpcyBuZXcgY2hlY2s6IGBpZiAoIXF1b3RhLSZndDtjaGFyZ2VkX3N6KSByZXR1cm4gZmFsc2U7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgaXMgdGhpcyBuZWNlc3Nhcnk/IFByZXZpb3VzbHksIGl0IHNlZW1zIHRoZSBjb2RlIGNvdWxkIGhhdmUgcmV0dXJuZWQgYHRydWVgIHVuZGVyIGNlcnRhaW4gZWRnZSBjYXNlcywgbGlrZSB3aGVyZSBgcXVvdGEtJmd0O2VzemAgKHRoZSBlc3RpbWF0ZWQgc2l6ZSkgd2FzIHplcm8gb3IgdmVyeSBzbWFsbCwgcGVyaGFwcyBsZXNzIHRoYW4gYG1pbl9yZWdpb25fc3pgLCB3aGlsZSBgcXVvdGEtJmd0O2NoYXJnZWRfc3pgICh0aGUgY2hhcmdlZCBzaXplKSB3YXMgc3RpbGwgemVyby4gSW4gc3VjaCBzY2VuYXJpb3MsIHRoZSBwcmV2aW91cyBjb21wYXJpc29uIGBxdW90YS0mZ3Q7ZXN6IC0gcXVvdGEtJmd0O2NoYXJnZWRfc3ogJmx0OyBtaW5fcmVnaW9uX3N6YCBtaWdodCBoYXZlIGdpdmVuIGEgbWlzbGVhZGluZyByZXN1bHQsIHBvdGVudGlhbGx5IGNsYWltaW5nIHRoZSBxdW90YSB3YXMgZnVsbCB3aGVuIGl0IHdhcywgaW4gZmFjdCwgZW1wdHkuIFRoaXMgbmV3IGNoZWNrIGVmZmVjdGl2ZWx5IHByZXZlbnRzIHRob3NlIHNpdHVhdGlvbnMuIFdlIGRvbiYjMzk7dCB3YW50IHRvIHByZW1hdHVyZWx5IGZsYWcgYSBxdW90YSBhcyBmdWxsIHdoZW4gbm90aGluZyBoYXMgYWN0dWFsbHkgYmVlbiBjaGFyZ2VkLCBvciB3aGVuIHRoZSBlc3RpbWF0ZWQgc2l6ZSBpcyB6ZXJvLgoKTmV4dCwgaW4gYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoKWAsIHdlJiMzOTtyZSBub3cgc2tpcHBpbmcgdGhlIHNjaGVtZSBhcHBsaWNhdGlvbiBpZiBgcXVvdGEtJmd0O2VzemAgaXMgemVybzogYGlmICghcXVvdGEtJmd0O2VzeikgY29udGludWU7YC4gVGhpcyBtYWtlcyBzZW5zZS4gSWYgdGhlIGVzdGltYXRlZCBzaXplIGlzIHplcm8sIHRoZW4gdGhlcmUmIzM5O3MgbGlrZWx5IG5vIG1lYW5pbmdmdWwgcXVvdGEgdG8gbWFuYWdlLiBBcHBseWluZyBhIHNjaGVtZSBpbiBzdWNoIGNhc2VzIHdvdWxkIGJlIGEgd2FzdGUgb2YgcmVzb3VyY2VzIGFuZCBwb3RlbnRpYWxseSBsZWFkIHRvIGluY29ycmVjdCBiZWhhdmlvci4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlc2UgYHF1b3RhLSZndDtlc3pgIGFuZCBgcXVvdGEtJmd0O2NoYXJnZWRfc3pgIG1lbWJlcnMgYXJlIHdpdGhpbiB0aGUgYHN0cnVjdCBkYW1vc19xdW90YWAgaW5zaWRlIHRoZSBgc3RydWN0IGRhbW9zYC4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIHJldmlzaXQgaG93IHRoZSBgZGFtb3NfcXVvdGFfaXNfc2V0YCBmdW5jdGlvbiBiZWhhdmVzIGluIHRoZXNlIHNjZW5hcmlvcywgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3F1b3RhX2lzX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjM3MT1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTIzODYtLypcbm1tL2RhbW9uL2NvcmUuYzoyMzg3OiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXG5tbS9kYW1vbi9jb3JlLmMtMjM4OC0gKiBAcXVvdGE6XHRUaGUgcXVvdGEgdG8gY2hlY2suXG4tLVxubW0vZGFtb24vY29yZS5jLTIzOTEtICovXG5tbS9kYW1vbi9jb3JlLmM6MjM5MjpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbm1tL2RhbW9uL2NvcmUuYy0yMzkzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjM5OD1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQwMi1cbm1tL2RhbW9uL2NvcmUuYzoyNDAzOlx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcdTAwMjZzLVx1MDAzZXF1b3RhKSB8fCAhYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbm1tL2RhbW9uL2NvcmUuYy0yNDA0LVx0XHRyZXR1cm4gcmV0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjUzPXN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY1NS17XG5tbS9kYW1vbi9jb3JlLmM6MjY1NjpcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbm1tL2RhbW9uL2NvcmUuYy0yNjU3LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZGFtb24vY29yZS5jPTI2Njk9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3MDYtXHRpZiAoYy1cdTAwM2VvcHMuYXBwbHlfc2NoZW1lKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjcwNzpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXHUwMDI2XHUwMDI2XG5tbS9kYW1vbi9jb3JlLmMtMjcwOC1cdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzsgc3ogXHUwMDNlIHF1b3RhLVx1MDAzZWVzeikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBTZXR0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkYW1vc19xdW90YV9pc19zZXQocXVvdGEpYCBmdW5jdGlvbi4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBnb29kIGNsdWUsIHN1Z2dlc3RpbmcgYSBjaGVjayByZWxhdGVkIHRvIHF1b3RhcyBpbiBEQU1PTi4gTm93LCBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24gaW4gY29udGV4dCwgdG8gc2VlIHdoYXQgdGhlIHBhcmFtZXRlcnMgbWVhbiwgYW5kIGhvdyB0aGlzIGNoZWNrIGZhY3RvcnMgaW50byB0aGUgYnJvYWRlciBzY2hlbWUuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGEgbWlzc3RlcCBoZXJlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wYWN0cy4gTGV0IG1lIHNlZS4uLiBJJiMzOTtsbCBwdWxsIHVwIHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlIGFuZCBqdW1wIHRvIGxpbmVzIDIzODUgdGhyb3VnaCAyMzk3LiBIb3BlZnVsbHksIHRoZSBzdXJyb3VuZGluZyBjb2RlIGdpdmVzIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcXVvdGEgY2hlY2suIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBjb25zdGl0dXRlcyBhIHZhbGlkIHF1b3RhIHNldHRpbmcgYW5kIHRoZSBjb25kaXRpb25zIHdoaWNoIHRyaWdnZXIgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzg1Olx0XG4yMzg2Olx0LypcbjIzODc6XHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxuMjM4ODpcdCAqIEBxdW90YTpcdFRoZSBxdW90YSB0byBjaGVjay5cbjIzODk6XHQgKlxuMjM5MDpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVvdGEgaXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuXG4yMzkxOlx0ICovXG4yMzkyOlx0c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4yMzkzOlx0e1xuMjM5NDpcdFx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiB8fCBxdW90YS1cdTAwM2VzeiB8fCBxdW90YS1cdTAwM2VtcyB8fFxuMjM5NTpcdFx0XHQhZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkocXVvdGEpO1xuMjM5NjpcdH1cbjIzOTc6XHRcbjIzOTg6XHRzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbjIzOTk6XHRcdFx0c3RydWN0IGRhbW9zICpzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODA2CgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDUzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIE15IGluaXRpYWwgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCBoaW5nZXMgb24gYSBjYXJlZnVsIGFzc2Vzc21lbnQgb2YgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgcmlza3MuIE15IHByb2Nlc3MgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgY2hlY2tsaXN0OgoKMS4gICoqVXNlci1TcGFjZSBJbnRlcmFjdGlvbj8qKiBOb3BlLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIGFueSBvZiB0aGUgdXNlci1zcGFjZSBjb3B5IGZ1bmN0aW9ucyBsaWtlIGBjb3B5X3RvX3VzZXJgLiBBIGdvb2Qgc3RhcnQuCgoyLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlcz8qKiBObywgbm90aGluZyB0byB3b3JyeSBhYm91dCBoZXJlIGVpdGhlci4gVGhlIGBxdW90YWAgc3RydWN0dXJlLCB3aGljaCBpcyB0aGUgZm9jdXMgb2YgdGhlc2UgY2hhbmdlcywgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHkgd2hlbiBEQU1PTiBzY2hlbWVzIGFyZSBjcmVhdGVkIHVzaW5nIGVpdGhlciB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIG9yIHRoZSBBUEkuIFdlJiMzOTtyZSB1c2luZyBga3phbGxvY2Agb3IgZGVmYXVsdCBpbml0aWFsaXphdGlvbiwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuCgozLiAgKipNZW1vcnkgTWFuaXB1bGF0aW9uPyoqIFRoaXMgaXMgY3J1Y2lhbC4gQW0gSSBjaGFuZ2luZyBhbnkgbWVtb3J5IGFsbG9jYXRpb25zPyBBbSBJIG1vZGlmeWluZyBkYXRhIGNvcHlpbmcgaW4gbmV3IHdheXM/IFN0cnVjdCBsYXlvdXQgY2hhbmdlcz8gRXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhPyBObyB0byBhbGwgb2YgdGhlIGFib3ZlLiBUaGlzIHBhdGNoIHNpbXBseSBhZGRzIHR3byBlYXJseS1leGl0IHNhbml0eSBjaGVja3Mgb24gZXhpc3RpbmcgZmllbGRzOiBgcXVvdGEtJmd0O2NoYXJnZWRfc3pgIGFuZCBgcXVvdGEtJmd0O2VzemAuIFRoaXMgaXMgdG8gcHJldmVudCBsb2dpY2FsIGVycm9ycyB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbSwgc3VjaCBhcyBkaXZpc2lvbiBieSB6ZXJvIG9yIGFuIGluYXBwcm9wcmlhdGUgc2NoZW1lIGFwcGxpY2F0aW9uIHdoZW4gdGhlIHF1b3RhIGlzIHplcm8gb3IgY2hhcmdlZCBzaXplIGlzIHplcm8uCgo0LiAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrPyoqIEFic29sdXRlbHkgbm9uZS4gTXkgYXNzZXNzbWVudCBjb25jbHVkZXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgcmlza3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIG5lZWQgZm9yIGEgS01TQU4gZGVkaWNhdGVkIGZ1enppbmcgcnVuIHZzIEtBU0FOOgoKKiAgIEkga25vdyBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzIGFscmVhZHkgaW5jbHVkZSBLQVNBTiwgTE9DS0RFUCwgVUJTQU4sIGV0Yy4KKiAgIEtNU0FOIGlzIHRoZSBoZWF2eSBoaXR0ZXIgaGVyZS4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuCiogICBJIG9ubHkganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlmIGEgY2hhbmdlIGludHJvZHVjZXMgb3IgKmV4cG9zZXMqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suCiogICBBbmQgaGVyZT8gVGhlc2UgY2hhbmdlcyBhcmUgc3RyYWlnaHRmb3J3YXJkIGFyaXRobWV0aWMgYW5kIGxvZ2ljYWwgY2hlY2tzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtIChgbW0vZGFtb24vY29yZS5jYCkuIFRoZXkgKmRvbiYjMzk7dCogYWxsb2NhdGUgbWVtb3J5LiBUaGV5ICpkb24mIzM5O3QqIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGV5ICpkb24mIzM5O3QqIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFuZCB0aGV5ICpkb24mIzM5O3QqIGFsdGVyIGJ1ZmZlciBib3VuZHMuCgpUaGUgY29uY2x1c2lvbiBpcyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBoZXJlLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgZXZlcnkgZGV0YWlsIHRvIGVuc3VyZSBteSBhc3Nlc3NtZW50IGlzIHNvdW5kLiBTbyBsZXQgbWUgc3VtbWFyaXplIHN1Y2NpbmN0bHk6IFRoZSBwYXRjaCBhbHRlcnMgYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzKClgIGluIERBTU9OIGNvcmUgdG8gaW5jbHVkZSBjaGVja3MgZm9yIGBxdW90YS0mZ3Q7Y2hhcmdlZF9zeiA9PSAwYCBhbmQgYHF1b3RhLSZndDtlc3ogPT0gMGAuIE5vIG5ldyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBub3RoaW5nIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgcmVhZCBvciBleHBvc2VkLiBUaGUgZmllbGRzIGFjY2Vzc2VkIChgcXVvdGEtJmd0O2NoYXJnZWRfc3pgLCBgcXVvdGEtJmd0O2VzemApIGFyZSBwYXJ0IG9mIGVzdGFibGlzaGVkIERBTU9OIHNjaGVtZSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIG1hbmFnZWQgd2VsbCBieSBEQU1PTiBpdHNlbGYuIEFueSBidWdzIHdpbGwgcmVsYXRlIHRvIHRoZSBleGlzdGluZyBib3VuZGFyeSBjb25kaXRpb25zIGluIHF1b3RhIGNhbGN1bGF0aW9ucywgYnV0IG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gR2l2ZW4gYWxsIG9mIHRoaXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBJIGNhbiBub3cgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgZWFybHkgcmV0dXJuIGNoZWNrcyB3aGVuIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCBvciBgcXVvdGEtXHUwMDNlZXN6YCBhcmUgemVybyBpbiBgZGFtb3NfcXVvdGFfaXNfZnVsbCgpYCBhbmQgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoKWAuXG5cblRoZXNlIGNoYW5nZXM6XG4xLiBEbyBub3QgYWxsb2NhdGUsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeS5cbjIuIERvIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbjMuIE9ubHkgYWRkIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBkYW1vc19xdW90YWAuXG5cbkJlY2F1c2UgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGVhcmx5IHJldHVybiBjaGVja3Mgd2hlbiBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgb3IgYHF1b3RhLVx1MDAzZWVzemAgYXJlIHplcm8gaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzKClgLlxuXG5UaGVzZSBjaGFuZ2VzOlxuMS4gRG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuXG4yLiBEbyBub3QgY29weSBhbnkgZGF0YSB0byB1c2VyIHNwYWNlIG9yIGFsdGVyIGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4zLiBPbmx5IGFkZCBjb25kaXRpb25hbCBjaGVja3Mgb24gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgLlxuXG5CZWNhdXNlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1Mzo1OC41NDM2MjczMjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDE2MzUwNjM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gcXVvdGEgY2FsY3VsYXRpb24gbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBlYXJseSByZXR1cm4gY2hlY2tzIHdoZW4gYHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6YCBvciBgcXVvdGEtXFx1MDAzZWVzemAgYXJlIHplcm8gaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzKClgLlxcblxcblRoZXNlIGNoYW5nZXM6XFxuMS4gRG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuXFxuMi4gRG8gbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZSBvciBhbHRlciBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcbjMuIE9ubHkgYWRkIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBkYW1vc19xdW90YWAuXFxuXFxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHNjaGVtZSBxdW90YSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyAoc3BlY2lmaWNhbGx5IGRhbW9zX3F1b3RhX2lzX2Z1bGwgYW5kIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMpIHRvIGhhbmRsZSB6ZXJvIGNoYXJnZWQgc2l6ZSBhbmQgemVybyBlZmZlY3RpdmUgc2NoZW1lIHNpemUgY29uZGl0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIGtlcm5lbCBBUElzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTM6NTguNTQzNjM1NjQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM1Mjg5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNWM4ZmI5NjM5YjhjOGM4ODRjZmMyNTM3NDAzYmJhMzkwNTY4ODdkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDA6NTM6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggZGYyMjYyMTc2NTkxMS4uZjhjNzg0ZGYyNDYwMCAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMjY1NSw2ICsyNjU1LDggQEAgc3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbiB7XFxuIFxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoIXF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6KVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0LypcXG5AQCAtMjc1MCw2ICsyNzUyLDkgQEAgc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbiBcXHRcXHRpZiAoIXMtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0aWYgKCFxdW90YS1cXHUwMDNlZXN6KVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xcbiBcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1Mzo1OS4wNjc2ODk4MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU2MDE5MzY2Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX3NldF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBzY2hlbWUgcXVvdGEgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9kYW1vbi9jb3JlLmMgKHNwZWNpZmljYWxseSBkYW1vc19xdW90YV9pc19mdWxsIGFuZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKSB0byBoYW5kbGUgemVybyBjaGFyZ2VkIHNpemUgYW5kIHplcm8gZWZmZWN0aXZlIHNjaGVtZSBzaXplIGNvbmRpdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlIGFuZCBrZXJuZWwgQVBJcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY1YzhmYjk2MzliOGM4Yzg4NGNmYzI1Mzc0MDNiYmEzOTA1Njg4N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjUzOjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBkZjIyNjIxNzY1OTExLi5mOGM3ODRkZjI0NjAwIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNjU1LDYgKzI2NTUsOCBAQCBzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4ge1xuIFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIXF1b3RhLVx1MDAzZWNoYXJnZWRfc3opXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6KVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdC8qXG5AQCAtMjc1MCw2ICsyNzUyLDkgQEAgc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRpZiAoIXMtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbiBcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0aWYgKCFxdW90YS1cdTAwM2Vlc3opXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xuIFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbiBcdFx0XHRjb250aW51ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjUzOjU5LjA2NzY5MTYxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMTIxMjY4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBzbyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgbGllcy4gRmlyc3QgdGhpbmcncyBmaXJzdCwgSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgYmVlbiBjaGFuZ2VkIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkLiBJJ20gdGhpbmtpbmcgYSBxdWljayBgcmVhZC1maWxlYCBvciBldmVuIGEgYGdyZXBwZXJgIHBhc3MgdGhyb3VnaCBgbW0vZGFtb24vY29yZS5jYCBpcyB0aGUgYmVzdCBhcHByb2FjaCBmb3IgYSBwcmVsaW1pbmFyeSBvdmVydmlldy4gSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGVzZSBjaGFuZ2VzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBLY29uZmlnIG9wdGlvbnMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZWxwcyBtZSBuYXJyb3cgZG93biB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhlc2UgY2hhbmdlcyB3aWxsIGFwcGx5LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0IHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYwLCJPdXRwdXRUb2tlbnMiOjY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDowNS4zNzk4MjEyNzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NTAsXG4gIFwiTGluZUNvdW50XCI6IDEyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjUwOlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XFxuMjY1MTpcXHR9XFxuMjY1MjpcXHRcXG4yNjUzOlxcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4yNjU0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNjU1OlxcdHtcXG4yNjU2OlxcdFxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG4yNjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yNjU4OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3opXFxuMjY1OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjY2MDpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeilcXG4yNjYxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI2NjI6XFx0XFx0LypcXG4yNjYzOlxcdFxcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFxcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xcbjI2NjQ6XFx0XFx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXFxuMjY2NTpcXHRcXHQgKi9cXG4yNjY2OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xcbjI2Njc6XFx0fVxcbjI2Njg6XFx0XFxuMjY2OTpcXHRzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNjcwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcXG4yNjcxOlxcdHtcXG4yNjcyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjY3MzpcXHRcXHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xcbjI2NzQ6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgYmVnaW4sIGVuZDtcXG4yNjc1OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCA9IDA7XFxuMjY3NjpcXHRcXHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkID0gMDtcXG4yNjc3OlxcdFxcdC8qXFxuMjY3ODpcXHRcXHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcXG4yNjc5OlxcdFxcdCAqIGltcGxpZXMgd2l0aCAnbnJfY29udGV4dHMnIGZpbGUuICBOZXZlcnRoZWxlc3MsIG9ubHkgc2luZ2xlIGNvbnRleHRcXG4yNjgwOlxcdFxcdCAqIHBlciBrZGFtb25kIGlzIHN1cHBvcnRlZCBmb3Igbm93LiAgU28sIHdlIGNhbiBzaW1wbHkgdXNlICcwJyBjb250ZXh0XFxuMjY4MTpcXHRcXHQgKiBpbmRleCBoZXJlLlxcbjI2ODI6XFx0XFx0ICovXFxuMjY4MzpcXHRcXHR1bnNpZ25lZCBpbnQgY2lkeCA9IDA7XFxuMjY4NDpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1xcdFxcdC8qIHNjaGVtZXMgaXRlcmF0b3IgKi9cXG4yNjg1OlxcdFxcdHVuc2lnbmVkIGludCBzaWR4ID0gMDtcXG4yNjg2OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpdGVyO1xcdC8qIHRhcmdldHMgaXRlcmF0b3IgKi9cXG4yNjg3OlxcdFxcdHVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwO1xcbjI2ODg6XFx0XFx0Ym9vbCBkb190cmFjZSA9IGZhbHNlO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHQvKiBnZXQgaW5kaWNlcyBmb3IgdHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5KCkgKi9cXG4yNjkxOlxcdFxcdGlmICh0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHlfZW5hYmxlZCgpKSB7XFxuMjY5MjpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcXG4yNjkzOlxcdFxcdFxcdFxcdGlmIChzaXRlciA9PSBzKVxcbjI2OTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjY5NTpcXHRcXHRcXHRcXHRzaWR4Kys7XFxuMjY5NjpcXHRcXHRcXHR9XFxuMjY5NzpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodGl0ZXIsIGMpIHtcXG4yNjk4OlxcdFxcdFxcdFxcdGlmICh0aXRlciA9PSB0KVxcbjI2OTk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcwMDpcXHRcXHRcXHRcXHR0aWR4Kys7XFxuMjcwMTpcXHRcXHRcXHR9XFxuMjcwMjpcXHRcXHRcXHRucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHIsIGMpO1xcbjI3MDM6XFx0XFx0XFx0ZG9fdHJhY2UgPSB0cnVlO1xcbjI3MDQ6XFx0XFx0fVxcbjI3MDU6XFx0XFxuMjcwNjpcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLmFwcGx5X3NjaGVtZSkge1xcbjI3MDc6XFx0XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXFx1MDAyNlxcdTAwMjZcXG4yNzA4OlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ICsgc3ogXFx1MDAzZSBxdW90YS1cXHUwMDNlZXN6KSB7XFxuMjcwOTpcXHRcXHRcXHRcXHRzeiA9IEFMSUdOX0RPV04ocXVvdGEtXFx1MDAzZWVzeiAtIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6LFxcbjI3MTA6XFx0XFx0XFx0XFx0XFx0XFx0Yy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuMjcxMTpcXHRcXHRcXHRcXHRpZiAoIXN6KVxcbjI3MTI6XFx0XFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4yNzEzOlxcdFxcdFxcdFxcdGlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKVxcbjI3MTQ6XFx0XFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4yNzE1OlxcdFxcdFxcdH1cXG4yNzE2OlxcdFxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxuMjcxNzpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjcxODpcXHRcXHRcXHRrdGltZV9nZXRfY29hcnNlX3RzNjQoXFx1MDAyNmJlZ2luKTtcXG4yNzE5OlxcdFxcdFxcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcyxcXG4yNzIwOlxcdFxcdFxcdFxcdFxcdGRhbW9uX25yX3JlZ2lvbnModCksIGRvX3RyYWNlKTtcXG4yNzIxOlxcdFxcdFxcdHN6X2FwcGxpZWQgPSBjLVxcdTAwM2VvcHMuYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMsXFxuMjcyMjpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2c3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xcbjI3MjM6XFx0XFx0XFx0ZGFtb3Nfd2Fsa19jYWxsX3dhbGsoYywgdCwgciwgcywgc3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xcbjI3MjQ6XFx0XFx0XFx0a3RpbWVfZ2V0X2NvYXJzZV90czY0KFxcdTAwMjZlbmQpO1xcbjI3MjU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgKz0gdGltZXNwZWM2NF90b19ucyhcXHUwMDI2ZW5kKSAtXFxuMjcyNjpcXHRcXHRcXHRcXHR0aW1lc3BlYzY0X3RvX25zKFxcdTAwMjZiZWdpbik7XFxuMjcyNzpcXHRcXHRcXHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcXG4yNzI4OlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbjI3Mjk6XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IHQ7XFxuMjczMDpcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IHItXFx1MDAzZWFyLmVuZDtcXG4yNzMxOlxcdFxcdFxcdH1cXG4yNzMyOlxcdFxcdH1cXG4yNzMzOlxcdFxcdGlmIChzLVxcdTAwM2VhY3Rpb24gIT0gREFNT1NfU1RBVClcXG4yNzM0OlxcdFxcdFxcdHItXFx1MDAzZWFnZSA9IDA7XFxuMjczNTpcXHRcXG4yNzM2OlxcdHVwZGF0ZV9zdGF0OlxcbjI3Mzc6XFx0XFx0ZGFtb3NfdXBkYXRlX3N0YXQocywgc3osIHN6X2FwcGxpZWQsIHN6X29wc19maWx0ZXJfcGFzc2VkKTtcXG4yNzM4OlxcdH1cXG4yNzM5OlxcdFxcbjI3NDA6XFx0c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbjI3NDE6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNzQyOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuMjc0MzpcXHR7XFxuMjc0NDpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnM7XFxuMjc0NTpcXHRcXG4yNzQ2OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMjc0NzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbjI3NDg6XFx0XFxuMjc0OTpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUoYy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6MDUuMzc5OTk4ODAyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MzE1MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDowNS40NzkzMjI0NThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjc0NTcyOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUXVvdGEgTWVjaGFuaXNtKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBGaXJzdCwgaXQgY2hlY2tzIGlmIHRoZSBxdW90YSBpcyBhY3R1YWxseSBzZXQsIGFuZCBpZiB0aGVyZSdzIGFueSB1c2FnZS4gVGhlbiwgaXQgY29tcGFyZXMgdGhlIGNoYXJnZWQgc2l6ZSBhZ2FpbnN0IHRoZSBlc3RhYmxpc2hlZCBzaXplLCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUgaWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRha2luZyBpbnRvIGFjY291bnQgYW55IHNpemVzIHRvIGNoYXJnZSB0byB0aGUgcXVvdGEuIFRoZSBjcml0aWNhbCBwYXJ0IHNlZW1zIHRvIGJlIHRoZSBjaGVjazogYHF1b3RhLVx1MDAzZWVzeiAtIHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNjIG1pbl9yZWdpb25fc3pgLiBUaGlzIGltcGxpZXMgdGhhdCBldmVuIGlmIHRoZXJlJ3MgYSBzbWFsbCBhbW91bnQgcmVtYWluaW5nIGluIHRoZSBxdW90YSwgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHJlZ2lvbiBzaXplLCBpdCBlZmZlY3RpdmVseSBjb25zaWRlcnMgdGhlIHF1b3RhIGV4aGF1c3RlZC4gVGhpcyBtZWFucyBEQU1PTiBpcyBkZXNpZ25lZCB0byBoYW5kbGUgYWN0aW9ucyBvbiBhIHBlci1yZWdpb24gYmFzaXMsIHNvIGlmIHRoZSByZW1haW5pbmcgcXVvdGEgaXNuJ3QgbGFyZ2UgZW5vdWdoIHRvIGNvdmVyIGF0IGxlYXN0IGEgbWluaW11bSByZWdpb24sIGl0IHdvbid0IHByb2NlZWQuXG5cbk5vdywgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGUgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHVzaW5nIGl0LiBJdCBjaGVja3MgaWYgdGhlIHF1b3RhJ3Mgc2l6ZSBpcyBzZXQsIGFuZCB0aGVuIGNhbGxzIGBkYW1vc19xdW90YV9pc19mdWxsYC4gSWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZSBjb2RlIGNvbnRpbnVlcyB0byB0aGUgbmV4dCBzY2hlbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgbG9naWMgaXMgaW1wbGVtZW50ZWQgdGhpcyB3YXkuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHNlZSB3aGF0IGNvbW1pdCBpbnRyb2R1Y2VkIHRoaXMsIG9yIHdoYXQgc3BlY2lmaWMgcHJvYmxlbSB0aGlzIHF1b3RhIG1lY2hhbmlzbSBpcyBtZWFudCB0byBzb2x2ZS4gTGV0J3Mgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBjb2RlYmFzZSBmb3IgdXNhZ2VzIG9mIHRoZXNlIGZ1bmN0aW9uIG5hbWVzIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6MDguNzUzODk5MDg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzQwOlxcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4yNzQxOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjc0MjpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbjI3NDM6XFx0e1xcbjI3NDQ6XFx0XFx0c3RydWN0IGRhbW9zICpzO1xcbjI3NDU6XFx0XFxuMjc0NjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjI3NDc6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNzQ4OlxcdFxcbjI3NDk6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMjc1MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzUxOlxcdFxcbjI3NTI6XFx0XFx0XFx0aWYgKCFzLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxcbjI3NTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc1NDpcXHRcXG4yNzU1OlxcdFxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWVzeilcXG4yNzU2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NTc6XFx0XFxuMjc1ODpcXHRcXHRcXHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cXG4yNzU5OlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4yNzYwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NjE6XFx0XFxuMjc2MjpcXHRcXHRcXHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4yNzYzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NjQ6XFx0XFxuMjc2NTpcXHRcXHRcXHRpZiAocy1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcXHUwMDI2XFx1MDAyNlxcbjI3NjY6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcXHUwMDNjPSBzLVxcdTAwM2VzdGF0Lm5yX3NuYXBzaG90cylcXG4yNzY3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3Njg6XFx0XFxuMjc2OTpcXHRcXHRcXHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxcbjI3NzA6XFx0XFx0XFx0XFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xcbjI3NzE6XFx0XFxuMjc3MjpcXHRcXHRcXHRpZiAoZGFtb25faXNfbGFzdF9yZWdpb24ociwgdCkpXFxuMjc3MzpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0Lm5yX3NuYXBzaG90cysrO1xcbjI3NzQ6XFx0XFx0fVxcbjI3NzU6XFx0fVxcbjI3NzY6XFx0XFxuMjc3NzpcXHQvKlxcbjI3Nzg6XFx0ICogZGFtb3NfYXBwbHlfdGFyZ2V0KCkgLSBBcHBseSBEQU1PUyBzY2hlbWVzIHRvIGEgZ2l2ZW4gdGFyZ2V0LlxcbjI3Nzk6XFx0ICogQGM6XFx0XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cXG4yNzgwOlxcdCAqIEB0OlxcdFxcdFxcdG1vbml0b3JpbmcgdGFyZ2V0IHRvIGFwcGx5IHRoZSBzY2hlbWVzIHRvLlxcbjI3ODE6XFx0ICogQG1heF9yZWdpb25fc3o6XFx0bWF4aW11bSByZWdpb24gc2l6ZSBmb3IgQGMuXFxuMjc4MjpcXHQgKlxcbjI3ODM6XFx0ICogVGhpcyBmdW5jdGlvbiBjb3VsZCBzcGxpdCByZWdpb25zIGZvciBrZWVwaW5nIHRoZSBxdW90YS4gIFRvIG1pbmltaXplXFxuMjc4NDpcXHQgKiBvdmVyaGVhZCBmcm9tIHRoZSBzcGxpdCBvcGVyYXRpb25zIGluY3JlYXNlZCBudW1iZXIgb2YgcmVnaW9ucywgdGhpc1xcbjI3ODU6XFx0ICogZnVuY3Rpb24gd2lsbCBhbHNvIG1lcmdlIHJlZ2lvbnMgYWZ0ZXIgdGhlIHNjaGVtZXMgYXBwbHlpbmcgYXR0ZW1wdCBpcyBkb25lLFxcbjI3ODY6XFx0ICogZm9yIGVhY2ggcmVnaW9uLiAgVGhlIG1lcmdlIG9wZXJhdGlvbiBpcyBtYWRlIG9ubHkgd2hlbiBpdCBkb2Vzbid0IGxvc2UgdGhlXFxuMjc4NzpcXHQgKiBtb25pdG9yaW5nIGluZm9ybWF0aW9uIGFuZCBub3QgdmlvbGF0aW5nIEBtYXhfcmVnaW9uX3N6LlxcbjI3ODg6XFx0ICpcXG4yNzg5OlxcdCAqIEhlbmNlLCBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpb25zIGNvdWxkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjA4Ljc1NDEyNzE0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMzEzNzg3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgREFNT04gUXVvdGEgTG9naWMgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgbG9naWMgY2hhbmdlIGluIHRoZSBxdW90YSBtYW5hZ2VtZW50IHdpdGhpbiBEQU1PTi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSdtIGZvY3VzaW5nIG9uIHNjZW5hcmlvcyB3aGVyZSBgcXVvdGEtXHUwMDNlZXN6YCAoZWZmZWN0aXZlIHNpemUpIG9yIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCAoY2hhcmdlZCBzaXplKSBtaWdodCBiZSB6ZXJvLiBTcGVjaWZpY2FsbHksIHRoZSBsaW5lIHRoYXQganVtcHMgb3V0IGlzIGByZXR1cm4gcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zejtgLiBJZiBib3RoIGBlc3pgIGFuZCBgY2hhcmdlZF9zemAgYXJlIHplcm8sIGFuIHVuc2lnbmVkIHVuZGVyZmxvdyBjb3VsZCBoYXBwZW4uIFByZXZpb3VzbHksIHRoZSBjaGVjayBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzemAgd291bGQgaGF2ZSBldmFsdWF0ZWQgdG8gdHJ1ZSBpbiB0aGF0IHNjZW5hcmlvICgwIFx1MDAzZT0gMCBpcyB0cnVlISksIGxlYWRpbmcgdG8gYW4gaW5jb3JyZWN0IGBkYW1vc19xdW90YV9pc19mdWxsYCByZXR1cm4uIFRoaXMgbWVhbnMgdGhhdCBhIHF1b3RhIG1pZ2h0IGhhdmUgYmVlbiBpbmNvcnJlY3RseSByZXBvcnRlZCBhcyBmdWxsIHdoZW4gaXQgd2FzIG5vdC5cblxuTm93IEkgc2VlIGl0LCB0aGUgZml4OiAgYGlmICghcXVvdGEtXHUwMDNlY2hhcmdlZF9zeikgcmV0dXJuIGZhbHNlO2AgIFRoaXMgbWVhbnMsIGlmIHRoZSBjaGFyZ2VkIHNpemUgaXMgemVybywgd2UncmUgZXhwbGljaXRseSByZXR1cm5pbmcgZmFsc2UsIGluZGljYXRpbmcgdGhhdCB0aGUgcXVvdGEgaXMgKm5vdCogZnVsbC4gQW5kIGluIHRoZSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgZnVuY3Rpb24sIHdlIG5vdyBoYXZlIGBpZiAoIXF1b3RhLVx1MDAzZWVzeikgY29udGludWU7YCAgU28gaWYgdGhlIGVmZmVjdGl2ZSBzaXplIGlzIHplcm8sIHdlIGRvbid0IGFwcGx5IGEgc2NoZW1lLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHNhZmV0eSBuZXQuXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGxvZ2ljIGNoYW5nZS4gTm93LCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgaXMgdGhlIGNoYW5nZSBtZXJlbHkgZml4aW5nIGEgbG9naWMgZXJyb3I/XG5cbkkgbmVlZCB0byBzZWUgaG93IERBTU9OIGlzIHVzZWQgaW4gdGhlIGtlcm5lbC4gSG93IGNhbiBJIHRyaWdnZXIgaXQsIGFuZCBob3cgaXMgaXQgY29uZmlndXJlZD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCdzIGJlaW5nIHVzZWQgYnkgZnV6emluZy9RRU1VIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gaWRlbnRpZnkgZW50cnlwb2ludHMgYnkgbG9va2luZyBhdCB0aGUgc3ltYm9scywgZXRjLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBtbS9kYW1vbi9LY29uZmlnYCBhbmQgYG1tL2RhbW9uL01ha2VmaWxlYCB0byBzZWUgaG93IERBTU9OIGlzIGVuYWJsZWQsIGFuZCB3aGF0IHRoZSBidWlsZCBwcm9jZXNzIGxvb2tzIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDoxMy44ODU1MDg0NjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDoxMy44ODU1OTQ1NDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY5MTkwNDQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyBEQU1PTiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3IgREFNT04gYW5kIGl0cyB2YXJpb3VzIGZlYXR1cmVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpbmdzIGxpa2UgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgdGhlIGxpa2UsIGFyZSBtZXRpY3Vsb3VzbHkgbGFpZCBvdXQuIEJ5IGV4YW1pbmluZyB0aGF0IEtjb25maWcgZmlsZSwgSSdsbCBiZSBhYmxlIHRvIHByZWNpc2VseSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhvc2UgZmVhdHVyZXMsIHNlZSB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFyZSByZXF1aXJlZCBmb3IgZWFjaCBvbmUsIGFuZCBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgb3B0aW9ucyBhcmUgc2VsZWN0ZWQgdG8gZ2V0IHRoZSBkZXNpcmVkIERBTU9OIGJlaGF2aW9yLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhIHN0YWJsZSBhbmQgcHJvcGVybHktZnVuY3Rpb25pbmcgREFNT04gaW1wbGVtZW50YXRpb24sIGFuZCBgS2NvbmZpZ2AgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjE5LjU3NzUwMjMwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDoxOS41Nzc1Nzg5MDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0OTIxODA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBJbnZlc3RpZ2F0aW9uOiBJbml0aWFsIFRob3VnaHRzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgREFNT04gc2l0dWF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgY29uZmlndXJhdGlvbiBiYXNpY3MuIFNvLCBEQU1PTiBpcyBjbGVhcmx5IGNvbmZpZ3VyZWQgdmlhIHN5c2ZzLCBhcyBpbmRpY2F0ZWQgYnkgYENPTkZJR19EQU1PTl9TWVNGU2AgYW5kIGBDT05GSUdfREFNT05gLiBUaGF0IG1ha2VzIHNlbnNlOyBzeXNmcyBpcyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlIGZvciBwcm9iaW5nIGFuZCBtYW5pcHVsYXRpbmcga2VybmVsIHBhcmFtZXRlcnMuIFRoZSBtZW50aW9ucyBvZiBgREFNT05fUEFERFJgIGFuZCBgREFNT05fVkFERFJgIGltbWVkaWF0ZWx5IHNpZ25hbCB0aG9zZSBhcmUgb3BlcmF0aW9uIHNldHMgd2hpY2ggbmVlZCBkZWVwZXIgZXhhbWluYXRpb24uXG5cbk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gcGlucG9pbnQgaG93IERBTU9OIGlzICphY3R1YWxseSogZW5nYWdlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4gSXMgaXQgaW52b2tlZCB0aHJvdWdoIGEgdXNlcnNwYWNlIEFQST8gRG9lcyBhIGtlcm5lbCBBUEkgdHJpZ2dlciBpdD8gSSdsbCBuZWVkIHRvIHJlc2VhcmNoIHRoZSBjYWxsIHN0YWNrLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBkZXRlcm1pbmUgd2hlcmUgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGlzIGNhbGxlZCBmcm9tLiBUaGF0IGZ1bmN0aW9uIGNhbGwgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBhY3RpdmF0aW9uIGxvZ2ljLiBMZXQncyBzZWUgd2hlcmUgdGhhdCB0YWtlcyB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6MjEuODI2ODAwMzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDk2NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2RvX2FwcGx5X3NjaGVtZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNjY5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3MzktXFxubW0vZGFtb24vY29yZS5jOjI3NDA6c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0yNzQxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjc5NT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODAyLVxcbm1tL2RhbW9uL2NvcmUuYzoyODAzOlxcdFxcdGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoYywgdCwgcik7XFxubW0vZGFtb24vY29yZS5jLTI4MDQtXFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6MjEuODg4OTAxMjI3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTk3NDA1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipUcmFjaW5nIHRoZSBEQU1PTiBBcHBsaWNhdGlvbiBQYXRoKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyB0cmlnZ2VyaW5nIGBkYW1vc19hcHBseV90YXJnZXRgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndobyogaXMgY2FsbGluZyBpdCwgYW5kIGZyb20gd2hlcmUsIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGNhbGwgc3RhY2sgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBleGVjdXRpb24gcGF0aC4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgZnVuY3Rpb24sIGFuZCBldmVyeSBmdW5jdGlvbiB0aGF0IGxlYWRzIHRvIGl0LCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcmUgd2UgbG9va2luZyBhdCBkaXJlY3QgY2FsbHMsIGluZGlyZWN0IGNhbGxzIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGxlci4gV2hhdCBkYXRhIGlzIGJlaW5nIHBhc3NlZCB0byBgZGFtb3NfYXBwbHlfdGFyZ2V0YCwgYW5kIGhvdyBpcyBpdCB1c2VkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY2FsbHMgYXJlIGhhcHBlbmluZyBpbiB0aGUgc2FtZSBjb250ZXh0LCBzYW1lIHRhc2ssIG9yIGlmIHRoZSBjYWxscyBhcmUgaGFwcGVuaW5nIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQuIFRoaXMgd2lsbCBpbXBhY3QgdGhlIHRyYWNpbmcgZWZmb3J0cywgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIyMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjI0LjUwODY0NDIyNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4OTk4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfYXBwbHlfdGFyZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9Mjc0MD1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc3Ny0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyNzc4OiAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cXG5tbS9kYW1vbi9jb3JlLmMtMjc3OS0gKiBAYzpcXHRcXHRcXHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3OTQtICovXFxubW0vZGFtb24vY29yZS5jOjI3OTU6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTI3OTYtXFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNTc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM4My1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MzM4NDpcXHRcXHRkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTMzODUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDoyNC41ODI1NDk3NzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIzMTk3ODcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gREFNT04ncyBTY2hlbWUgQXBwbGljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBjb2RlLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gIFRoZSBsb2cgY2xlYXJseSBpZGVudGlmaWVzIHRoYXQgZnVuY3Rpb24ncyBjYWxsIG9yaWdpbiDigJMgaXQncyB0cmlnZ2VyZWQgYnkgYGtkYW1vbmRfZm5gIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gIEdvb2QuIE5vdyB0aGF0IEkga25vdyB3aGVyZSB0aGUgYWN0aW9uICpzdGFydHMqLCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogdGhlIGFjdGlvbiBkb2VzIGFuZCBob3cgaXRzIGNvbnRyb2xsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIHNjaGVtZSBhcHBsaWNhdGlvbi4gIFxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gYnJvYWRlbiB0aGUgc2VhcmNoLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgZmlsZSBgbW0vZGFtb24vY29yZS5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcm5hbHMgb2YgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIEknbGwgYWxzbyBjaGVjayBvdXQgYG1tL2RhbW9uL3N5c2ZzLmNgIGFuZCBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gVGhlc2Ugc3lzZnMgaW50ZXJmYWNlcyBhcmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciBzY2hlbWVzIGFyZSBsaWtlbHkgZGVmaW5lZCBhbmQgaG93IHRoZXkgYXJlIGNvbnRyb2xsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDoyNy44MTQ1MzMxNzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MTY1NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4Mzc3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9kYW1vbi9jb3JlLmMtMTktXFxubW0vZGFtb24vY29yZS5jOjIwOi8qIGZvciBkYW1vbl9nZXRfZm9saW8oKSB1c2VkIGJ5IG5vZGUgZWxpZ2libGUgbWVtb3J5IG1ldHJpY3MgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjEtI2luY2x1ZGUgXFxcIm9wcy1jb21tb24uaFxcXCJcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNS1cXG5tbS9kYW1vbi9jb3JlLmM6MjY6c3RhdGljIERFRklORV9NVVRFWChkYW1vbl9sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjctc3RhdGljIGludCBucl9ydW5uaW5nX2N0eHM7XFxubW0vZGFtb24vY29yZS5jPTI4PXN0YXRpYyBib29sIHJ1bm5pbmdfZXhjbHVzaXZlX2N0eHM7XFxubW0vZGFtb24vY29yZS5jLTI5LVxcbm1tL2RhbW9uL2NvcmUuYzozMDpzdGF0aWMgREVGSU5FX01VVEVYKGRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzE6c3RhdGljIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGRhbW9uX3JlZ2lzdGVyZWRfb3BzW05SX0RBTU9OX09QU107XFxubW0vZGFtb24vY29yZS5jLTMyLVxcbm1tL2RhbW9uL2NvcmUuYzozMzpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRhbW9uX3JlZ2lvbl9jYWNoZSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vZGFtb24vY29yZS5jLTM0LVxcbm1tL2RhbW9uL2NvcmUuYzozNTovKiBTaG91bGQgYmUgY2FsbGVkIHVuZGVyIGRhbW9uX29wc19sb2NrIHdpdGggaWQgc21hbGxlciB0aGFuIE5SX0RBTU9OX09QUyAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNjpzdGF0aWMgYm9vbCBfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbm1tL2RhbW9uL2NvcmUuYy0zNy17XFxubW0vZGFtb24vY29yZS5jOjM4OlxcdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGVtcHR5X29wcyA9IHt9O1xcbm1tL2RhbW9uL2NvcmUuYy0zOS1cXG5tbS9kYW1vbi9jb3JlLmM6NDA6XFx0aWYgKCFtZW1jbXAoXFx1MDAyNmVtcHR5X29wcywgXFx1MDAyNmRhbW9uX3JlZ2lzdGVyZWRfb3BzW2lkXSwgc2l6ZW9mKGVtcHR5X29wcykpKVxcbm1tL2RhbW9uL2NvcmUuYy00MS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDUtLyoqXFxubW0vZGFtb24vY29yZS5jOjQ2OiAqIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKCkgLSBDaGVjayBpZiBhIGdpdmVuIGRhbW9uX29wZXJhdGlvbnMgaXMgcmVnaXN0ZXJlZC5cXG5tbS9kYW1vbi9jb3JlLmM6NDc6ICogQGlkOlxcdElkIG9mIHRoZSBkYW1vbl9vcGVyYXRpb25zIHRvIGNoZWNrIGlmIHJlZ2lzdGVyZWQuXFxubW0vZGFtb24vY29yZS5jLTQ4LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTAtICovXFxubW0vZGFtb24vY29yZS5jOjUxOmJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxubW0vZGFtb24vY29yZS5jLTUyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxubW0vZGFtb24vY29yZS5jOjU3OlxcdG11dGV4X2xvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmM6NTg6XFx0cmVnaXN0ZXJlZCA9IF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoaWQpO1xcbm1tL2RhbW9uL2NvcmUuYzo1OTpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmMtNjAtXFx0cmV0dXJuIHJlZ2lzdGVyZWQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjMtLyoqXFxubW0vZGFtb24vY29yZS5jOjY0OiAqIGRhbW9uX3JlZ2lzdGVyX29wcygpIC0gUmVnaXN0ZXIgYSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgc2V0IHRvIERBTU9OLlxcbm1tL2RhbW9uL2NvcmUuYy02NS0gKiBAb3BzOlxcdG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBzZXQgdG8gcmVnaXN0ZXIuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjctICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgc2V0IG9mIHZhbGlkIFxcdTAwMjZzdHJ1Y3RcXG5tbS9kYW1vbi9jb3JlLmM6Njg6ICogZGFtb25fb3BlcmF0aW9ucy1cXHUwMDNlaWQgc28gdGhhdCBvdGhlcnMgY2FuIGZpbmQgYW5kIHVzZSB0aGVtIGxhdGVyLlxcbm1tL2RhbW9uL2NvcmUuYy02OS0gKlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3MjppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXFxubW0vZGFtb24vY29yZS5jLTczLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OC1cXG5tbS9kYW1vbi9jb3JlLmM6Nzk6XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy04MC1cXHQvKiBGYWlsIGZvciBhbHJlYWR5IHJlZ2lzdGVyZWQgb3BzICovXFxubW0vZGFtb24vY29yZS5jOjgxOlxcdGlmIChfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKG9wcy1cXHUwMDNlaWQpKVxcbm1tL2RhbW9uL2NvcmUuYy04Mi1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbm1tL2RhbW9uL2NvcmUuYy04My1cXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjg0OlxcdFxcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW29wcy1cXHUwMDNlaWRdID0gKm9wcztcXG5tbS9kYW1vbi9jb3JlLmM6ODU6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9vcHNfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTg2LVxcdHJldHVybiBlcnI7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODktLyoqXFxubW0vZGFtb24vY29yZS5jOjkwOiAqIGRhbW9uX3NlbGVjdF9vcHMoKSAtIFNlbGVjdCBhIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyB0byB1c2Ugd2l0aCB0aGUgY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmMtOTEtICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHQgdG8gdXNlIHRoZSBvcGVyYXRpb25zLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTk4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo5OTppbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbm1tL2RhbW9uL2NvcmUuYy0xMDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwNS1cXG5tbS9kYW1vbi9jb3JlLmM6MTA2OlxcdG11dGV4X2xvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTA3OlxcdGlmICghX19kYW1vbl9pc19yZWdpc3RlcmVkX29wcyhpZCkpXFxubW0vZGFtb24vY29yZS5jLTEwOC1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDktXFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMTA6XFx0XFx0Y3R4LVxcdTAwM2VvcHMgPSBkYW1vbl9yZWdpc3RlcmVkX29wc1tpZF07XFxubW0vZGFtb24vY29yZS5jOjExMTpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTEyLVxcdHJldHVybiBlcnI7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE0LVxcbm1tL2RhbW9uL2NvcmUuYzoxMTU6c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTYte1xcbm1tL2RhbW9uL2NvcmUuYzoxMTc6XFx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XFxubW0vZGFtb24vY29yZS5jLTExOC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjYtXFxubW0vZGFtb24vY29yZS5jOjEyNzp2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXFxubW0vZGFtb24vY29yZS5jLTEyOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTMxLVxcbm1tL2RhbW9uL2NvcmUuYzoxMzI6c3RhdGljIHZvaWQgZGFtb25fZGVsX3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKnApXFxubW0vZGFtb24vY29yZS5jLTEzMy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM2LVxcbm1tL2RhbW9uL2NvcmUuYzoxMzc6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTQyOnN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMTQzLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OlxcdGRhbW9uX2RlbF9wcmVwKHApO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDU6XFx0ZGFtb25fZnJlZV9wcmVwKHApO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDYtfVxcbm1tL2RhbW9uL2NvcmUuYy0xNDctXFxubW0vZGFtb24vY29yZS5jOjE0ODpzdGF0aWMgc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX250aF9wcmVwKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxubW0vZGFtb24vY29yZS5jLTE0OS17XFxubW0vZGFtb24vY29yZS5jOjE1MDpcXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcXG5tbS9kYW1vbi9jb3JlLmMtMTUxLVxcdGludCBpID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTUyLVxcbm1tL2RhbW9uL2NvcmUuYzoxNTM6XFx0ZGFtb25fZm9yX2VhY2hfcHJlcChwcmVwLCBwKSB7XFxubW0vZGFtb24vY29yZS5jLTE1NC1cXHRcXHRpZiAoaSsrID09IG4pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU5LVxcbm1tL2RhbW9uL2NvcmUuYzoxNjA6c3RhdGljIGJvb2wgZGFtb25faGFzX3ByZXAoc3RydWN0IGRhbW9uX2N0eCAqYylcXG5tbS9kYW1vbi9jb3JlLmMtMTYxLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTYyOlxcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xcbm1tL2RhbW9uL2NvcmUuYzoxNjM6XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcXG5tbS9kYW1vbi9jb3JlLmMtMTY0LVxcbm1tL2RhbW9uL2NvcmUuYzoxNjU6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTY2OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcHJvYmUpXFxubW0vZGFtb24vY29yZS5jLTE2Ny1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzEtXFxubW0vZGFtb24vY29yZS5jOjE3MjpzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG5tbS9kYW1vbi9jb3JlLmMtMTczLVxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXFxubW0vZGFtb24vY29yZS5jLTE3NC17XFxubW0vZGFtb24vY29yZS5jOjE3NTpcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXI7XFxubW0vZGFtb24vY29yZS5jLTE3Ni1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODYtXFxubW0vZGFtb24vY29yZS5jOjE4Nzp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xODgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTkyOnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTkzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTYtXFxubW0vZGFtb24vY29yZS5jOjE5NzpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwMS1cXG5tbS9kYW1vbi9jb3JlLmM6MjAyOnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMjAzLXtcXG5tbS9kYW1vbi9jb3JlLmM6MjA0OlxcdGRhbW9uX2RlbF9maWx0ZXIoZik7XFxubW0vZGFtb24vY29yZS5jOjIwNTpcXHRkYW1vbl9mcmVlX2ZpbHRlcihmKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjA2LX1cXG5tbS9kYW1vbi9jb3JlLmMtMjA3LVxcbm1tL2RhbW9uL2NvcmUuYzoyMDg6c3RhdGljIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX250aF9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMjA5LXtcXG5tbS9kYW1vbi9jb3JlLmM6MjEwOlxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7XFxubW0vZGFtb24vY29yZS5jLTIxMS1cXHRpbnQgaSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTIxMi1cXG5tbS9kYW1vbi9jb3JlLmM6MjEzOlxcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7XFxubW0vZGFtb24vY29yZS5jLTIxNC1cXHRcXHRpZiAoaSsrID09IG4pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE5LVxcbm1tL2RhbW9uL2NvcmUuYzoyMjA6c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtMjIxLXtcXG5tbS9kYW1vbi9jb3JlLmM6MjIyOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG5tbS9kYW1vbi9jb3JlLmMtMjIzLVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIzMy1cXG5tbS9kYW1vbi9jb3JlLmM6MjM0OnZvaWQgZGFtb25fYWRkX3Byb2JlKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjM1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzgtXFxubW0vZGFtb24vY29yZS5jOjIzOTpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0My1cXG5tbS9kYW1vbi9jb3JlLmM6MjQ0OnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDUte1xcbm1tL2RhbW9uL2NvcmUuYzoyNDY6XFx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXAsICpwcmVwX25leHQ7XFxubW0vZGFtb24vY29yZS5jOjI0NzpcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ4LVxcbm1tL2RhbW9uL2NvcmUuYzoyNDk6XFx0ZGFtb25fZm9yX2VhY2hfcHJlcF9zYWZlKHByZXAsIHByZXBfbmV4dCwgcClcXG5tbS9kYW1vbi9jb3JlLmM6MjUwOlxcdFxcdGRhbW9uX2ZyZWVfcHJlcChwcmVwKTtcXG5tbS9kYW1vbi9jb3JlLmM6MjUxOlxcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcl9zYWZlKGYsIG5leHQsIHApXFxubW0vZGFtb24vY29yZS5jOjI1MjpcXHRcXHRkYW1vbl9mcmVlX2ZpbHRlcihmKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjUzLVxcdGtmcmVlKHApO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI1NS1cXG5tbS9kYW1vbi9jb3JlLmM6MjU2OnN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxcbm1tL2RhbW9uL2NvcmUuYy0yNTcte1xcbm1tL2RhbW9uL2NvcmUuYzoyNTg6XFx0ZGFtb25fZGVsX3Byb2JlKHApO1xcbm1tL2RhbW9uL2NvcmUuYzoyNTk6XFx0ZGFtb25fZnJlZV9wcm9iZShwKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjYwLX1cXG5tbS9kYW1vbi9jb3JlLmMtMjYxLVxcbm1tL2RhbW9uL2NvcmUuYzoyNjI6c3RhdGljIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbnRoX3Byb2JlKGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTI2My17XFxubW0vZGFtb24vY29yZS5jOjI2NDpcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XFxubW0vZGFtb24vY29yZS5jLTI2NS1cXHRpbnQgaSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTI2Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MjY3OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYy0yNjgtXFx0XFx0aWYgKGkrKyA9PSBuKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3My1cXG5tbS9kYW1vbi9jb3JlLmM6Mjc0OnN0YXRpYyBib29sIGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxubW0vZGFtb24vY29yZS5jLTI3NS17XFxubW0vZGFtb24vY29yZS5jOjI3NjpcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XFxubW0vZGFtb24vY29yZS5jLTI3Ny1cXG5tbS9kYW1vbi9jb3JlLmM6Mjc4OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMjc5LVxcdFxcdGlmIChwLVxcdTAwM2V3ZWlnaHQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjg1LS8qXFxubW0vZGFtb24vY29yZS5jOjI4NjogKiBkYW1vbl9tdnN1bSgpIC0gUmV0dXJucyBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBmb3IgYSB0aW1lIHdpbmRvdy5cXG5tbS9kYW1vbi9jb3JlLmMtMjg3LSAqIEBjdXJyZW50X25yOlxcdFxcdFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMDY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fbXZzdW0odW5zaWduZWQgbG9uZyBjdXJyZW50X25yLFxcbm1tL2RhbW9uL2NvcmUuYy0zMDctXFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X25yLCB1bnNpZ25lZCBsb25nIGxlZnRfd2luZG93X2JwKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxMi0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MzEzOiAqIGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKCkgLSBSZXR1cm5zIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS5cXG5tbS9kYW1vbi9jb3JlLmMtMzE0LSAqIEByOlxcdFxcdFJlZ2lvbiB0byBnZXQgdGhlIGFjY2VzcyBmcmVxdWVuY3kgb2YuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzE3LSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBmb3IgaG93IG1hbnkgc2FtcGxpbmcgaXRlcmF0aW9ucyBpbiB0aGUgbGFzdFxcbm1tL2RhbW9uL2NvcmUuYzozMTg6ICogYWdncmVnYXRpb24gaW50ZXJ2YWwgKFxcdTAwMjZkYW1vbl9hdHRycy1cXHUwMDNlYWdncl9pbnRlcnZhbCkgdGhlIHJlZ2lvbiB3YXMgZm91bmQgdG9cXG5tbS9kYW1vbi9jb3JlLmMtMzE5LSAqIGJlIGFjY2Vzc2VkLiAgSGVuY2UgdGhlIHZhbHVlIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgcmVsYXRpdmUgYWNjZXNzXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjY6dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jOjMyNzpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTMyOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQ1LVxcbm1tL2RhbW9uL2NvcmUuYzozNDY6XFx0cmV0dXJuIGRhbW9uX212c3VtKHItXFx1MDAzZW5yX2FjY2Vzc2VzLCByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL2NvcmUuYy0zNDctXFx0XFx0XFx0bGVmdF93aW5kb3dfYnApO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0OS1cXG5tbS9kYW1vbi9jb3JlLmM6MzUwOnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYzozNTE6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0zNTIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM2OS1cXG5tbS9kYW1vbi9jb3JlLmM6MzcwOlxcdHJldHVybiBkYW1vbl9tdnN1bShyLVxcdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXFxubW0vZGFtb24vY29yZS5jLTM3MS1cXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NC0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYzozNzU6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxubW0vZGFtb24vY29yZS5jLTM3Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc5LSNlbHNlXFxubW0vZGFtb24vY29yZS5jOjM4MDpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5tbS9kYW1vbi9jb3JlLmMtMzgxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODUtLypcXG5tbS9kYW1vbi9jb3JlLmM6Mzg2OiAqIENvbnN0cnVjdCBhIGRhbW9uX3JlZ2lvbiBzdHJ1Y3RcXG5tbS9kYW1vbi9jb3JlLmMtMzg3LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzg5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozOTA6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5tbS9kYW1vbi9jb3JlLmMtMzkxLXtcXG5tbS9kYW1vbi9jb3JlLmM6MzkyOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbjtcXG5tbS9kYW1vbi9jb3JlLmMtMzkzLVxcdGludCBpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTQtXFxubW0vZGFtb24vY29yZS5jOjM5NTpcXHRkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbihzdGFydCwgZW5kKTtcXG5tbS9kYW1vbi9jb3JlLmM6Mzk2OlxcdHJlZ2lvbiA9IGttZW1fY2FjaGVfYWxsb2MoZGFtb25fcmVnaW9uX2NhY2hlLCBHRlBfS0VSTkVMKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzk3LVxcdGlmICghcmVnaW9uKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQxNC1cXG5tbS9kYW1vbi9jb3JlLmM6NDE1OnN0YXRpYyB2b2lkIGRhbW9uX2FkZF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtNDE2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MjMtICovXFxubW0vZGFtb24vY29yZS5jOjQyNDpzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYzo0MjU6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldiwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV4dCxcXG5tbS9kYW1vbi9jb3JlLmM6NDI2OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTQyNy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDMyLSNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jOjQzMzpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy00MzQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTQzNy0jZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzo0Mzg6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2RlbF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtNDM5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NDItXFxubW0vZGFtb24vY29yZS5jOjQ0MzpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTQ0NC17XFxubW0vZGFtb24vY29yZS5jOjQ0NTpcXHRkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbih0KTtcXG5tbS9kYW1vbi9jb3JlLmMtNDQ2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ1MC1cXG5tbS9kYW1vbi9jb3JlLmM6NDUxOnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxubW0vZGFtb24vY29yZS5jLTQ1Mi17XFxubW0vZGFtb24vY29yZS5jOjQ1MzpcXHRrbWVtX2NhY2hlX2ZyZWUoZGFtb25fcmVnaW9uX2NhY2hlLCByKTtcXG5tbS9kYW1vbi9jb3JlLmMtNDU0LX1cXG5tbS9kYW1vbi9jb3JlLmMtNDU1LVxcbm1tL2RhbW9uL2NvcmUuYzo0NTY6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmM6NDU3OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTQ1OC17XFxubW0vZGFtb24vY29yZS5jOjQ1OTpcXHRkYW1vbl9kZWxfcmVnaW9uKHIsIHQpO1xcbm1tL2RhbW9uL2NvcmUuYzo0NjA6XFx0ZGFtb25fZnJlZV9yZWdpb24ocik7XFxubW0vZGFtb24vY29yZS5jLTQ2MS19XFxubW0vZGFtb24vY29yZS5jLTQ2Mi1cXG5tbS9kYW1vbi9jb3JlLmM6NDYzOnN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jOjQ2NDpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy00NjUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ2OS0vKipcXG5tbS9kYW1vbi9jb3JlLmM6NDcwOiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cXG5tbS9kYW1vbi9jb3JlLmMtNDcxLSAqIEByOlxcdFxcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NzYtICovXFxubW0vZGFtb24vY29yZS5jOjQ3Nzp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG5tbS9kYW1vbi9jb3JlLmM6NDc4OlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtNDc5LXtcXG5tbS9kYW1vbi9jb3JlLmM6NDgwOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxubW0vZGFtb24vY29yZS5jLTQ4MS1cXHR1bnNpZ25lZCBpbnQgc3VtID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00ODMtXFxubW0vZGFtb24vY29yZS5jOjQ4NDpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jLTQ4NS1cXHRcXHRpZiAobGFzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00OTctICovXFxubW0vZGFtb24vY29yZS5jOjQ5ODpzdGF0aWMgYm9vbCBkYW1vbl9pbnRlcnNlY3Qoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmM6NDk5OlxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyZSlcXG5tbS9kYW1vbi9jb3JlLmMtNTAwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01MDYtICovXFxubW0vZGFtb24vY29yZS5jOjUwNzpzdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG5tbS9kYW1vbi9jb3JlLmM6NTA4OlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmxhc3QsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTUwOS17XFxubW0vZGFtb24vY29yZS5jOjUxMDpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZmlyc3Q7XFxubW0vZGFtb24vY29yZS5jLTUxMS1cXG5tbS9kYW1vbi9jb3JlLmM6NTEyOlxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9mcm9tKHIsIHQpIHtcXG5tbS9kYW1vbi9jb3JlLmM6NTEzOlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKm5leHQsICpuZXdyO1xcbm1tL2RhbW9uL2NvcmUuYy01MTQtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTE2LVxcdFxcdFxcdGJyZWFrO1xcbm1tL2RhbW9uL2NvcmUuYzo1MTc6XFx0XFx0bmV4dCA9IGRhbW9uX25leHRfcmVnaW9uKHIpO1xcbm1tL2RhbW9uL2NvcmUuYy01MTgtXFx0XFx0aWYgKHItXFx1MDAzZWFyLmVuZCAhPSBuZXh0LVxcdTAwM2Vhci5zdGFydCkge1xcbm1tL2RhbW9uL2NvcmUuYzo1MTk6XFx0XFx0XFx0bmV3ciA9IGRhbW9uX25ld19yZWdpb24oci1cXHUwMDNlYXIuZW5kLCBuZXh0LVxcdTAwM2Vhci5zdGFydCk7XFxubW0vZGFtb24vY29yZS5jLTUyMC1cXHRcXHRcXHRpZiAoIW5ld3IpXFxubW0vZGFtb24vY29yZS5jLTUyMS1cXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9jb3JlLmM6NTIyOlxcdFxcdFxcdGRhbW9uX2luc2VydF9yZWdpb24obmV3ciwgciwgbmV4dCwgdCk7XFxubW0vZGFtb24vY29yZS5jLTUyMy1cXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTI4LS8qXFxubW0vZGFtb24vY29yZS5jOjUyOTogKiBkYW1vbl9zZXRfcmVnaW9ucygpIC0gU2V0IHJlZ2lvbnMgb2YgYSB0YXJnZXQgZm9yIGdpdmVuIGFkZHJlc3MgcmFuZ2VzLlxcbm1tL2RhbW9uL2NvcmUuYy01MzAtICogQHQ6XFx0XFx0dGhlIGdpdmVuIHRhcmdldC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01MzktICovXFxubW0vZGFtb24vY29yZS5jOjU0MDppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5tbS9kYW1vbi9jb3JlLmMtNTQxLVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG5tbS9kYW1vbi9jb3JlLmMtNTQyLXtcXG5tbS9kYW1vbi9jb3JlLmM6NTQzOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpuZXh0O1xcbm1tL2RhbW9uL2NvcmUuYy01NDQtXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTYwLVxcdC8qIFJlbW92ZSByZWdpb25zIHdoaWNoIGFyZSBub3QgaW4gdGhlIG5ldyByYW5nZXMgKi9cXG5tbS9kYW1vbi9jb3JlLmM6NTYxOlxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcXG5tbS9kYW1vbi9jb3JlLmMtNTYyLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9yYW5nZXM7IGkrKykge1xcbm1tL2RhbW9uL2NvcmUuYzo1NjM6XFx0XFx0XFx0aWYgKGRhbW9uX2ludGVyc2VjdChyLCBcXHUwMDI2cmFuZ2VzW2ldKSlcXG5tbS9kYW1vbi9jb3JlLmMtNTY0LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTU2Ni1cXHRcXHRpZiAoaSA9PSBucl9yYW5nZXMpXFxubW0vZGFtb24vY29yZS5jOjU2NzpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTtcXG5tbS9kYW1vbi9jb3JlLmMtNTY4LVxcdH1cXG5tbS9kYW1vbi9jb3JlLmMtNTY5LVxcbm1tL2RhbW9uL2NvcmUuYzo1NzA6XFx0aWYgKCFkYW1vbl9ucl9yZWdpb25zKHQpKSB7XFxubW0vZGFtb24vY29yZS5jLTU3MS1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6NTcyOlxcdFxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKFxcbm1tL2RhbW9uL2NvcmUuYy01NzMtXFx0XFx0XFx0XFx0XFx0QUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTc3LVxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzo1Nzg6XFx0XFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG5tbS9kYW1vbi9jb3JlLmMtNTc5LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01ODItXFxubW0vZGFtb24vY29yZS5jOjU4MzpcXHRyID0gZGFtb25fZmlyc3RfcmVnaW9uKHQpO1xcbm1tL2RhbW9uL2NvcmUuYy01ODQtXFx0LyogQWRkIG5ldyByZWdpb25zIG9yIHJlc2l6ZSBleGlzdGluZyByZWdpb25zIHRvIGZpdCBpbiB0aGUgcmFuZ2VzICovXFxubW0vZGFtb24vY29yZS5jLTU4NS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6NTg2OlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0ID0gTlVMTCwgKmxhc3QsICpuZXdyO1xcbm1tL2RhbW9uL2NvcmUuYzo1ODc6XFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlO1xcbm1tL2RhbW9uL2NvcmUuYy01ODgtXFx0XFx0Ym9vbCBpbnNlcnRfYmVmb3JlX3IgPSBmYWxzZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01OTEtXFx0XFx0LyogR2V0IHRoZSBmaXJzdC9sYXN0IHJlZ2lvbnMgaW50ZXJzZWN0aW5nIHdpdGggdGhlIHJhbmdlICovXFxubW0vZGFtb24vY29yZS5jOjU5MjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fZnJvbShyLCB0KSB7XFxubW0vZGFtb24vY29yZS5jOjU5MzpcXHRcXHRcXHRpZiAoZGFtb25faW50ZXJzZWN0KHIsIHJhbmdlKSkge1xcbm1tL2RhbW9uL2NvcmUuYy01OTQtXFx0XFx0XFx0XFx0aWYgKCFmaXJzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MDQtXFx0XFx0XFx0Lyogbm8gcmVnaW9uIGludGVyc2VjdHMgd2l0aCB0aGlzIHJhbmdlICovXFxubW0vZGFtb24vY29yZS5jOjYwNTpcXHRcXHRcXHRuZXdyID0gZGFtb25fbmV3X3JlZ2lvbihcXG5tbS9kYW1vbi9jb3JlLmMtNjA2LVxcdFxcdFxcdFxcdFxcdEFMSUdOX0RPV04ocmFuZ2UtXFx1MDAzZXN0YXJ0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYxMS1cXHRcXHRcXHRpZiAoaW5zZXJ0X2JlZm9yZV9yKVxcbm1tL2RhbW9uL2NvcmUuYzo2MTI6XFx0XFx0XFx0XFx0ZGFtb25faW5zZXJ0X3JlZ2lvbihuZXdyLCBkYW1vbl9wcmV2X3JlZ2lvbihyKSxcXG5tbS9kYW1vbi9jb3JlLmMtNjEzLVxcdFxcdFxcdFxcdFxcdFxcdHIsIHQpO1xcbm1tL2RhbW9uL2NvcmUuYy02MTQtXFx0XFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzo2MTU6XFx0XFx0XFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihuZXdyLCB0KTtcXG5tbS9kYW1vbi9jb3JlLmMtNjE2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjIyLVxcdFxcdFxcdC8qIGZpbGwgcG9zc2libGUgaG9sZXMgaW4gdGhlIHJhbmdlICovXFxubW0vZGFtb24vY29yZS5jOjYyMzpcXHRcXHRcXHRlcnIgPSBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoZmlyc3QsIGxhc3QsIHQpO1xcbm1tL2RhbW9uL2NvcmUuYy02MjQtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03MzM9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc0NS1cXG5tbS9kYW1vbi9jb3JlLmM6NzQ2OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXFxubW0vZGFtb24vY29yZS5jLTc0Ny1cXHRcXHRcXHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzYzLVxcdCAqIHJ1bm5pbmcsIGl0IHdpbGwgYWxzbyB1cGRhdGVkIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIERBTU9OIGNvbnRleHQsXFxubW0vZGFtb24vY29yZS5jOjc2NDpcXHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cXG5tbS9kYW1vbi9jb3JlLmMtNzY1LVxcdCAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTc4Ny1cXG5tbS9kYW1vbi9jb3JlLmM6Nzg4OnN0YXRpYyB2b2lkIGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtNzg5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTgtXFxubW0vZGFtb24vY29yZS5jOjc5OTp2b2lkIGRhbW9uX2FkZF9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTgwMC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODA0LVxcbm1tL2RhbW9uL2NvcmUuYzo4MDU6c3RhdGljIHZvaWQgZGFtb25fZGVsX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTgwNi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODA5LVxcbm1tL2RhbW9uL2NvcmUuYzo4MTA6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy04MTEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTgxNC1cXG5tbS9kYW1vbi9jb3JlLmM6ODE1OnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy04MTYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzMC1cXHRrZnJlZShzLVxcdTAwM2VtaWdyYXRlX2Rlc3RzLndlaWdodF9hcnIpO1xcbm1tL2RhbW9uL2NvcmUuYzo4MzE6XFx0ZGFtb25fZGVsX3NjaGVtZShzKTtcXG5tbS9kYW1vbi9jb3JlLmM6ODMyOlxcdGRhbW9uX2ZyZWVfc2NoZW1lKHMpO1xcbm1tL2RhbW9uL2NvcmUuYy04MzMtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzNS0vKlxcbm1tL2RhbW9uL2NvcmUuYzo4MzY6ICogQ29uc3RydWN0IGEgZGFtb25fdGFyZ2V0IHN0cnVjdFxcbm1tL2RhbW9uL2NvcmUuYy04MzctICpcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MzktICovXFxubW0vZGFtb24vY29yZS5jOjg0MDpzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTg0MS17XFxubW0vZGFtb24vY29yZS5jOjg0MjpcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL2NvcmUuYy04NDMtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODU2LVxcbm1tL2RhbW9uL2NvcmUuYzo4NTc6dm9pZCBkYW1vbl9hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtODU4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NjQtICovXFxubW0vZGFtb24vY29yZS5jOjg2NTppbnQgZGFtb25fc2V0X3RhcmdldF9waWQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IHBpZClcXG5tbS9kYW1vbi9jb3JlLmMtODY2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NzItXFxubW0vZGFtb24vY29yZS5jOjg3MzpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTg3NC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODc3LVxcbm1tL2RhbW9uL2NvcmUuYzo4Nzg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy04Nzkte1xcbm1tL2RhbW9uL2NvcmUuYzo4ODA6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTg4MS1cXG5tbS9kYW1vbi9jb3JlLmM6ODgyOlxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpXFxubW0vZGFtb24vY29yZS5jOjg4MzpcXHRcXHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcXG5tbS9kYW1vbi9jb3JlLmMtODg0LVxcdGtmcmVlKHQpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTg4Ni1cXG5tbS9kYW1vbi9jb3JlLmM6ODg3OnZvaWQgZGFtb25fZGVzdHJveV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04ODgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTg5Mi1cXG5tbS9kYW1vbi9jb3JlLmM6ODkzOlxcdGRhbW9uX2RlbF90YXJnZXQodCk7XFxubW0vZGFtb24vY29yZS5jOjg5NDpcXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcXG5tbS9kYW1vbi9jb3JlLmMtODk1LX1cXG5tbS9kYW1vbi9jb3JlLmMtODk2LVxcbm1tL2RhbW9uL2NvcmUuYzo4OTc6dW5zaWduZWQgaW50IGRhbW9uX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtODk4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05MDEtXFxubW0vZGFtb24vY29yZS5jOjkwMjpzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTkwMy17XFxubW0vZGFtb24vY29yZS5jOjkwNDpcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxubW0vZGFtb24vY29yZS5jLTkwNS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05NDEtXFxubW0vZGFtb24vY29yZS5jOjk0MjpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy05NDMte1xcbm1tL2RhbW9uL2NvcmUuYzo5NDQ6XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgKm5leHRfdDtcXG5tbS9kYW1vbi9jb3JlLmMtOTQ1LVxcbm1tL2RhbW9uL2NvcmUuYzo5NDY6XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0X3NhZmUodCwgbmV4dF90LCBjdHgpXFxubW0vZGFtb24vY29yZS5jOjk0NzpcXHRcXHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy05NDgtfVxcbm1tL2RhbW9uL2NvcmUuYy05NDktXFxubW0vZGFtb24vY29yZS5jOjk1MDp2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtOTUxLXtcXG5tbS9kYW1vbi9jb3JlLmMtOTUyLVxcdHN0cnVjdCBkYW1vcyAqcywgKm5leHRfcztcXG5tbS9kYW1vbi9jb3JlLmM6OTUzOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgKm5leHRfcDtcXG5tbS9kYW1vbi9jb3JlLmMtOTU0LVxcbm1tL2RhbW9uL2NvcmUuYzo5NTU6XFx0ZGFtb25fZGVzdHJveV90YXJnZXRzKGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTk1Ni1cXG5tbS9kYW1vbi9jb3JlLmM6OTU3OlxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZV9zYWZlKHMsIG5leHRfcywgY3R4KVxcbm1tL2RhbW9uL2NvcmUuYzo5NTg6XFx0XFx0ZGFtb25fZGVzdHJveV9zY2hlbWUocyk7XFxubW0vZGFtb24vY29yZS5jLTk1OS1cXG5tbS9kYW1vbi9jb3JlLmM6OTYwOlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUocCwgbmV4dF9wLCBjdHgpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjI3Ljg4MzcwNTU4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDgyMzIxOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgREFNT04ncyBJbml0aWF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgREFNT04gcHJvY2Vzcy4gTXkgcHJpbWFyeSBmb2N1cyBpcyB1bmRlcnN0YW5kaW5nIGl0cyBzdGFydHVwIGFuZCBleGVjdXRpb24uIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgYGRhbW9uX3N0YXJ0YCBpcyBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBJJ2xsIHByb2JhYmx5IGFsc28gbmVlZCB0byB0cmFjZSBpdCBmcm9tIHRoZSBzeXNmcyBlbnRyeXBvaW50cyBhcyB3ZWxsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IGl0IGlzIHRyaWdnZXJlZC4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93LCBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgbWFpbiBsb29wLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIGxvb2tpbmcgYXQgbWVtb3J5IG1hcHBpbmcsIHNhbXBsaW5nLCBhbmQgbW9uaXRvcmluZyBsb2dpYywgYnV0IGZpcnN0LCBJIG5lZWQgdGhlIHByZWNpc2UgaW5pdGlhbGl6YXRpb24gY2FsbHMgYW5kIHRoZSByZWxhdGVkIHN5c2ZzIG9wdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBmb3IgREFNT04ncyBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjE3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6MzEuOTY2MDMwMTc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYxNTc0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jLTExMTAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMjI9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwMjQtLypcXG5tbS9kYW1vbi9jb3JlLmM6MjAyNTogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTIwMjYtICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDMxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDMyOnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwMzMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNTQtLyoqXFxubW0vZGFtb24vY29yZS5jOjIwNTU6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxubW0vZGFtb24vY29yZS5jLTIwNTYtICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2My0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcXG5tbS9kYW1vbi9jb3JlLmM6MjA2NDogKiAnZGFtb25fc3RhcnQoKScgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XFxubW0vZGFtb24vY29yZS5jLTIwNjUtICogcmV0dXJucyAtRUJVU1kuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2OC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA2OTppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjA3MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA5NC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIwOTU6XFx0XFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ni1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIxNjU9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTkyLSAqXFxubW0vZGFtb24vY29yZS5jOjIxOTM6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcXG5tbS9kYW1vbi9jb3JlLmMtMjE5NC0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMjAxPWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjQ3LSAqXFxubW0vZGFtb24vY29yZS5jOjIyNDg6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcXG5tbS9kYW1vbi9jb3JlLmMtMjI0OS0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MjEtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MjI6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MjMtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzA9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDItXFxubW0vZGFtb24vcmVjbGFpbS5jOjM0MzpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ0LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MjAwPXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zdGFydCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTIxMi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9zdGF0LmM6MjEzOlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZkYW1vbl9zdGF0X2NvbnRleHQsIDEsIHRydWUpO1xcbm1tL2RhbW9uL3N0YXQuYy0yMTQtXFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNTExPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjUzNS1cXHR9XFxubW0vZGFtb24vc3lzZnMuYzoyNTM2OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIGZhbHNlKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI1MzctXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDozMi40NzIxOTM3MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ2MjMwNzIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIERBTU9OIENvbmZpZ3VyYXRpb24gVGhyb3VnaCBzeXNmcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIGZpZ3VyaW5nIG91dCBob3cgdGhlIHN5c2ZzIGludGVyZmFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgY29udHJvbGxpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBtb25pdG9yaW5nLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYG1tL2RhbW9uL3N5c2ZzLmNgIGlzIHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgdGhpcyBmaWxlLCBmcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBwcm92aWRlcyB0aGUgcHJpbWFyeSBzeXNmcyBpbnRlcmZhY2UuIFdpdGhpbiBpdCwgSSBzaG91bGQgZXhwZWN0IHRvIGZpbmQgdGhlIG1lY2hhbmlzbXMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBjb3JlIERBTU9OIGNvbXBvbmVudHM6IGl0cyBjb250ZXh0cywgdGhlIHRhcmdldHMgaXQgbW9uaXRvcnMsIHRoZSB2YXJpb3VzIHNjaGVtZXMgZW1wbG95ZWQsIHNldHRpbmcgcXVvdGFzLCBhbmQsIGNyaXRpY2FsbHksIHRoZSBjb250cm9sIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBEQU1PTiBmdW5jdGlvbmFsaXR5IGl0c2VsZiwgbGlrZWx5IHRocm91Z2ggYSBmdW5jdGlvbiBsaWtlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC5cblxuVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgY2FuJ3QganVzdCBzdG9wIHRoZXJlLiBJIGFsc28gbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgc3BlY2lmaWNzIG9mIHNjaGVtZSBhbmQgcXVvdGEgY29uZmlndXJhdGlvbi4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gVGhhdCBzaG91bGQgc2hvdyBtZSB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHNjaGVtZXMgYW5kIHF1b3RhcyBhcmUgbWFuaXB1bGF0ZWQgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLCBhcyB0aGV5IGFyZSBjcnVjaWFsIGFzcGVjdHMgdG8gREFNT04ncyBvdmVyYWxsIHR1bmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDozOC45MzQ1MDUzODlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDAxNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE0MjYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL2RhbW9uL2NvcmUuYz02ODM9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTY4OC1cXG5tbS9kYW1vbi9jb3JlLmM6Njg5OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmM6NjkwOlxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbm1tL2RhbW9uL2NvcmUuYy02OTEtXFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXFxubW0vZGFtb24vY29yZS5jLTY5Mi17XFxubW0vZGFtb24vY29yZS5jOjY5MzpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG5tbS9kYW1vbi9jb3JlLmMtNjk0LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcwNS1cXG5tbS9kYW1vbi9jb3JlLmM6NzA2OnZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG5tbS9kYW1vbi9jb3JlLmMtNzA3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MTAtXFxubW0vZGFtb24vY29yZS5jOjcxMTpzdGF0aWMgdm9pZCBkYW1vc19kZWxfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG5tbS9kYW1vbi9jb3JlLmMtNzEyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MTUtXFxubW0vZGFtb24vY29yZS5jOjcxNjpzdGF0aWMgdm9pZCBkYW1vc19mcmVlX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxubW0vZGFtb24vY29yZS5jLTcxNy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzIwLVxcbm1tL2RhbW9uL2NvcmUuYzo3MjE6dm9pZCBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxubW0vZGFtb24vY29yZS5jLTcyMi17XFxubW0vZGFtb24vY29yZS5jOjcyMzpcXHRkYW1vc19kZWxfcXVvdGFfZ29hbChnKTtcXG5tbS9kYW1vbi9jb3JlLmM6NzI0OlxcdGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChnKTtcXG5tbS9kYW1vbi9jb3JlLmMtNzI1LX1cXG5tbS9kYW1vbi9jb3JlLmMtNzI2LVxcbm1tL2RhbW9uL2NvcmUuYzo3Mjc6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkoc3RydWN0IGRhbW9zX3F1b3RhICpxKVxcbm1tL2RhbW9uL2NvcmUuYy03Mjgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTczMS1cXG5tbS9kYW1vbi9jb3JlLmM6NzMyOi8qIGluaXRpYWxpemUgZmllbGRzIG9mIEBxdW90YSB0aGF0IG5vcm1hbGx5IEFQSSB1c2VycyB3b3VsZG4ndCBzZXQgKi9cXG5tbS9kYW1vbi9jb3JlLmM6NzMzOnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG5tbS9kYW1vbi9jb3JlLmMtNzM0LXtcXG5tbS9kYW1vbi9jb3JlLmM6NzM1OlxcdHF1b3RhLVxcdTAwM2Vlc3ogPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3MzY6XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3Mzc6XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3Mzg6XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3Mzk6XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XFxubW0vZGFtb24vY29yZS5jOjc0MDpcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmM6NzQxOlxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6NzQyOlxcdHF1b3RhLVxcdTAwM2Vlc3pfYnAgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3NDM6XFx0cmV0dXJuIHF1b3RhO1xcbm1tL2RhbW9uL2NvcmUuYy03NDQtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTc0Nj1zdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc0OC1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzLFxcbm1tL2RhbW9uL2NvcmUuYzo3NDk6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVxcdFxcdFxcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzICp3bWFya3MsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzc0LVxcbm1tL2RhbW9uL2NvcmUuYzo3NzU6XFx0c2NoZW1lLVxcdTAwM2VxdW90YSA9ICooZGFtb3NfcXVvdGFfaW5pdChxdW90YSkpO1xcbm1tL2RhbW9uL2NvcmUuYzo3NzY6XFx0LyogcXVvdGEuZ29hbHMgc2hvdWxkIGJlIHNlcGFyYXRlbHkgc2V0IGJ5IGNhbGxlciAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3Nzc6XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEuZ29hbHMpO1xcbm1tL2RhbW9uL2NvcmUuYy03NzgtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODE1PXZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy04MTYte1xcbm1tL2RhbW9uL2NvcmUuYzo4MTc6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcsICpnX25leHQ7XFxubW0vZGFtb24vY29yZS5jLTgxOC1cXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmMtODE5LVxcbm1tL2RhbW9uL2NvcmUuYzo4MjA6XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXFx1MDAyNnMtXFx1MDAzZXF1b3RhKVxcbm1tL2RhbW9uL2NvcmUuYzo4MjE6XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xcbm1tL2RhbW9uL2NvcmUuYy04MjItXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTE2Nj12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTc3LVxcbm1tL2RhbW9uL2NvcmUuYzoxMTc4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbnRoX3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jOjExNzk6XFx0XFx0aW50IG4sIHN0cnVjdCBkYW1vc19xdW90YSAqcSlcXG5tbS9kYW1vbi9jb3JlLmMtMTE4MC17XFxubW0vZGFtb24vY29yZS5jOjExODE6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vY29yZS5jLTExODItXFx0aW50IGkgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTgzLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTg0OlxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcSkge1xcbm1tL2RhbW9uL2NvcmUuYy0xMTg1LVxcdFxcdGlmIChpKysgPT0gbilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTkwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTkxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbm1tL2RhbW9uL2NvcmUuYzoxMTkyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExOTMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyMTQtXFxubW0vZGFtb24vY29yZS5jOjEyMTU6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jOjEyMTY6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTIxNy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIyMS1cXHRcXHRkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vY29yZS5jOjEyMjI6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjIzLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjI1LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxMjI2OiAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIC0gQ29tbWl0IERBTU9TIHF1b3RhIGdvYWxzIHRvIGFub3RoZXIgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jOjEyMjc6ICogQGRzdDpcXHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxcbm1tL2RhbW9uL2NvcmUuYzoxMjI4OiAqIEBzcmM6XFx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT1MgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jLTEyMjktICpcXG5tbS9kYW1vbi9jb3JlLmM6MTIzMDogKiBDb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmb3IgcXVvdGEgZ29hbHMgZnJvbSBAc3JjIHRvIEBkc3QuICBVc2Vyc1xcbm1tL2RhbW9uL2NvcmUuYzoxMjMxOiAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xcbm1tL2RhbW9uL2NvcmUuYy0xMjMyLSAqIERBTU9OIGNvbnRleHRzLCBpbnN0ZWFkIG9mIG1hbnVhbCBpbi1wbGFjZSB1cGRhdGVzLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyMzYtICovXFxubW0vZGFtb24vY29yZS5jOjEyMzc6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTEyMzgte1xcbm1tL2RhbW9uL2NvcmUuYzoxMjM5OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjQwLVxcdGludCBpID0gMCwgaiA9IDA7XFxubW0vZGFtb24vY29yZS5jLTEyNDEtXFxubW0vZGFtb24vY29yZS5jOjEyNDI6XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGRzdF9nb2FsLCBuZXh0LCBkc3QpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTI0MzpcXHRcXHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkrKywgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI0NC1cXHRcXHRpZiAoc3JjX2dvYWwpXFxubW0vZGFtb24vY29yZS5jOjEyNDU6XFx0XFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI0Ni1cXHRcXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjEyNDc6XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGRzdF9nb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI0OC1cXHR9XFxubW0vZGFtb24vY29yZS5jOjEyNDk6XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKHNyY19nb2FsLCBuZXh0LCBzcmMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTI1MC1cXHRcXHRpZiAoaisrIFxcdTAwM2MgaSlcXG5tbS9kYW1vbi9jb3JlLmMtMTI1MS1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTI1MjpcXHRcXHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMjUzLVxcdFxcdFxcdFxcdHNyY19nb2FsLVxcdTAwM2VtZXRyaWMsIHNyY19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNTUtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjEyNTY6XFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTI1NzpcXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI1OC1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI2MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTI2MjpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTEyNjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNjgtXFx0ZHN0LVxcdTAwM2VzeiA9IHNyYy1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jOjEyNjk6XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI3MC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1MTk9c3RhdGljIGludCBkYW1vc19jb21taXQoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1MjYtXFxubW0vZGFtb24vY29yZS5jOjE1Mjc6XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhKFxcdTAwMjZkc3QtXFx1MDAzZXF1b3RhLCBcXHUwMDI2c3JjLVxcdTAwM2VxdW90YSk7XFxubW0vZGFtb24vY29yZS5jLTE1MjgtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTQ2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU2Ny1cXHRcXHRcXHRcXHRzcmNfc2NoZW1lLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cyxcXG5tbS9kYW1vbi9jb3JlLmM6MTU2ODpcXHRcXHRcXHRcXHRcXHUwMDI2c3JjX3NjaGVtZS1cXHUwMDNlcXVvdGEsIFxcdTAwMjZzcmNfc2NoZW1lLVxcdTAwM2V3bWFya3MsXFxubW0vZGFtb24vY29yZS5jLTE1NjktXFx0XFx0XFx0XFx0TlVNQV9OT19OT0RFKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjc5PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTcwNS1cXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XFxubW0vZGFtb24vY29yZS5jOjE3MDY6XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XFxubW0vZGFtb24vY29yZS5jOjE3MDc6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmM6MTcwODpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTcwOS1cXHRcXHRcXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTg2Mj1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODY1LVxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbm1tL2RhbW9uL2NvcmUuYzoxODY2OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy0xODY3LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NzQtXFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XFxubW0vZGFtb24vY29yZS5jOjE4NzU6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhO1xcbm1tL2RhbW9uL2NvcmUuYy0xODc2LVxcbm1tL2RhbW9uL2NvcmUuYzoxODc3OlxcdFxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTg3OC1cXHRcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjM3MT1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjM4Ni0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyMzg3OiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXFxubW0vZGFtb24vY29yZS5jOjIzODg6ICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG5tbS9kYW1vbi9jb3JlLmMtMjM4OS0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyMzkwOiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVvdGEgaXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuXFxubW0vZGFtb24vY29yZS5jLTIzOTEtICovXFxubW0vZGFtb24vY29yZS5jOjIzOTI6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxubW0vZGFtb24vY29yZS5jLTIzOTMte1xcbm1tL2RhbW9uL2NvcmUuYzoyMzk0OlxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IHx8IHF1b3RhLVxcdTAwM2VzeiB8fCBxdW90YS1cXHUwMDNlbXMgfHxcXG5tbS9kYW1vbi9jb3JlLmM6MjM5NTpcXHRcXHQhZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkocXVvdGEpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMzk2LX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMzk4PXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MDItXFxubW0vZGFtb24vY29yZS5jOjI0MDM6XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjQwNC1cXHRcXHRyZXR1cm4gcmV0O1xcbm1tL2RhbW9uL2NvcmUuYy0yNDA1LVxcbm1tL2RhbW9uL2NvcmUuYzoyNDA2OlxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxubW0vZGFtb24vY29yZS5jLTI0MDctfVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MTAtICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXFxubW0vZGFtb24vY29yZS5jOjI0MTE6ICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jLTI0MTItICogQHQ6XFx0VGhlIHRhcmdldCBvZiB0aGUgcmVnaW9uLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MTYtICpcXG5tbS9kYW1vbi9jb3JlLmM6MjQxNzogKiBJZiBhIHF1b3RhIG9mIGEgc2NoZW1lIGhhcyBleGNlZWRlZCBpbiBhIHF1b3RhIGNoYXJnZSB3aW5kb3csIHRoZSBzY2hlbWUnc1xcbm1tL2RhbW9uL2NvcmUuYy0yNDE4LSAqIGFjdGlvbiB3b3VsZCBhcHBsaWVkIHRvIG9ubHkgYSBwYXJ0IG9mIHRoZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4gZnVsZmlsbGluZ1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI0MzQ9c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0Mzcte1xcbm1tL2RhbW9uL2NvcmUuYzoyNDM4OlxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jLTI0MzktXFx0dW5zaWduZWQgbG9uZyBzel90b19za2lwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0NDEtXFx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyNDQyOlxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XFxubW0vZGFtb24vY29yZS5jOjI0NDM6XFx0XFx0aWYgKHQgIT0gcXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcXG5tbS9kYW1vbi9jb3JlLmMtMjQ0NC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ0NS1cXHRcXHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNDQ2OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYzoyNDQ3OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ0OC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ0OS1cXHRcXHR9XFxubW0vZGFtb24vY29yZS5jOjI0NTA6XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFxcdTAwMjZcXHUwMDI2XFxubW0vZGFtb24vY29yZS5jOjI0NTE6XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kIFxcdTAwM2M9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDUyLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDUzLVxcbm1tL2RhbW9uL2NvcmUuYzoyNDU0OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcXHUwMDI2XFx1MDAyNiByLVxcdTAwM2Vhci5zdGFydCBcXHUwMDNjXFxubW0vZGFtb24vY29yZS5jOjI0NTU6XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjQ1NjpcXHRcXHRcXHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSAtXFxubW0vZGFtb24vY29yZS5jLTI0NTctXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0NjUtXFx0XFx0fVxcbm1tL2RhbW9uL2NvcmUuYzoyNDY2OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYzoyNDY3OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ2OC1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjYxOT1zdGF0aWMgdm9pZCBkYW1vc193YWxrX2NhbmNlbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjYzNS1cXG5tbS9kYW1vbi9jb3JlLmM6MjYzNjpzdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5tbS9kYW1vbi9jb3JlLmMtMjYzNy1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X3JlZ2lvbiwgdW5zaWduZWQgbG9uZyBzel9hcHBsaWVkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NDMtXFx0ICovXFxubW0vZGFtb24vY29yZS5jOjI2NDQ6XFx0aWYgKCFxdW90YS1cXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20gfHwgc3pfYXBwbGllZCBcXHUwMDNlIHN6X3JlZ2lvbilcXG5tbS9kYW1vbi9jb3JlLmM6MjY0NTpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArPSBzel9yZWdpb247XFxubW0vZGFtb24vY29yZS5jLTI2NDYtXFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoyNjQ3OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ICs9IHN6X2FwcGxpZWQgKyBtdWx0X2ZyYWMoXFxubW0vZGFtb24vY29yZS5jLTI2NDgtXFx0XFx0XFx0XFx0KHN6X3JlZ2lvbiAtIHN6X2FwcGxpZWQpLFxcbm1tL2RhbW9uL2NvcmUuYzoyNjQ5OlxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9udW0sXFxubW0vZGFtb24vY29yZS5jOjI2NTA6XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWZhaWxfY2hhcmdlX2Rlbm9tKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjY1MS19XFxubW0vZGFtb24vY29yZS5jLTI2NTItXFxubW0vZGFtb24vY29yZS5jOjI2NTM6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbm1tL2RhbW9uL2NvcmUuYy0yNjU0LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG5tbS9kYW1vbi9jb3JlLmMtMjY1NS17XFxubW0vZGFtb24vY29yZS5jOjI2NTY6XFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxcbm1tL2RhbW9uL2NvcmUuYy0yNjU3LVxcdFxcdHJldHVybiBmYWxzZTtcXG5tbS9kYW1vbi9jb3JlLmM6MjY1ODpcXHRpZiAoIXF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6KVxcbm1tL2RhbW9uL2NvcmUuYy0yNjU5LVxcdFxcdHJldHVybiBmYWxzZTtcXG5tbS9kYW1vbi9jb3JlLmM6MjY2MDpcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeilcXG5tbS9kYW1vbi9jb3JlLmMtMjY2MS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjYzLVxcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFxcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xcbm1tL2RhbW9uL2NvcmUuYzoyNjY0OlxcdCAqIHF1b3RhIG1lYW5zIHRoZSBxdW90YSBpcyBlZmZlY3RpdmVseSBmdWxsLlxcbm1tL2RhbW9uL2NvcmUuYy0yNjY1LVxcdCAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyNjY2OlxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xcbm1tL2RhbW9uL2NvcmUuYy0yNjY3LX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjY5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NzEte1xcbm1tL2RhbW9uL2NvcmUuYzoyNjcyOlxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jLTI2NzMtXFx0dW5zaWduZWQgbG9uZyBzeiA9IGRhbW9uX3N6X3JlZ2lvbihyKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzA2LVxcdGlmIChjLVxcdTAwM2VvcHMuYXBwbHlfc2NoZW1lKSB7XFxubW0vZGFtb24vY29yZS5jOjI3MDc6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kYW1vbi9jb3JlLmM6MjcwODpcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArIHN6IFxcdTAwM2UgcXVvdGEtXFx1MDAzZWVzeikge1xcbm1tL2RhbW9uL2NvcmUuYzoyNzA5OlxcdFxcdFxcdHN6ID0gQUxJR05fRE9XTihxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3osXFxubW0vZGFtb24vY29yZS5jLTI3MTAtXFx0XFx0XFx0XFx0XFx0Yy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjcyNC1cXHRcXHRrdGltZV9nZXRfY29hcnNlX3RzNjQoXFx1MDAyNmVuZCk7XFxubW0vZGFtb24vY29yZS5jOjI3MjU6XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgKz0gdGltZXNwZWM2NF90b19ucyhcXHUwMDI2ZW5kKSAtXFxubW0vZGFtb24vY29yZS5jLTI3MjYtXFx0XFx0XFx0dGltZXNwZWM2NF90b19ucyhcXHUwMDI2YmVnaW4pO1xcbm1tL2RhbW9uL2NvcmUuYzoyNzI3OlxcdFxcdGRhbW9zX2NoYXJnZV9xdW90YShxdW90YSwgc3osIHN6X2FwcGxpZWQpO1xcbm1tL2RhbW9uL2NvcmUuYzoyNzI4OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNzI5OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xcbm1tL2RhbW9uL2NvcmUuYzoyNzMwOlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gci1cXHUwMDNlYXIuZW5kO1xcbm1tL2RhbW9uL2NvcmUuYy0yNzMxLVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNzQwPXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzQ2LVxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxubW0vZGFtb24vY29yZS5jOjI3NDc6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG5tbS9kYW1vbi9jb3JlLmMtMjc0OC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzU0LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzU1OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWVzeilcXG5tbS9kYW1vbi9jb3JlLmMtMjc1Ni1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjc1Ny1cXG5tbS9kYW1vbi9jb3JlLmM6Mjc1ODpcXHRcXHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mjc1OTpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTI3NjAtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc4Mi0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyNzgzOiAqIFRoaXMgZnVuY3Rpb24gY291bGQgc3BsaXQgcmVnaW9ucyBmb3Iga2VlcGluZyB0aGUgcXVvdGEuICBUbyBtaW5pbWl6ZVxcbm1tL2RhbW9uL2NvcmUuYy0yNzg0LSAqIG92ZXJoZWFkIGZyb20gdGhlIHNwbGl0IG9wZXJhdGlvbnMgaW5jcmVhc2VkIG51bWJlciBvZiByZWdpb25zLCB0aGlzXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjc5NT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODA1LVxcdFxcdCAqIGRhbW9uX2RvX2FwcGx5X3NjaGVlbXMoKSBjb3VsZCBzcGxpdCB0aGUgcmVnaW9uIGZvciB0aGVcXG5tbS9kYW1vbi9jb3JlLmM6MjgwNjpcXHRcXHQgKiBxdW90YS4gIEtlZXBpbmcgdGhlIG5ldyBzbGljZXMgaXMgYW4gb3ZlcmhlYWQuICBNZXJnZSBiYWNrXFxubW0vZGFtb24vY29yZS5jLTI4MDctXFx0XFx0ICogdGhlIHNsaWNlcyBpbnRvIHRoZSBwcmV2aW91cyByZWdpb24gaWYgaXQgZG9lc24ndCBsb3NlIGFueVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5MDU9c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxcbm1tL2RhbW9uL2NvcmUuYzoyOTA2OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbm1tL2RhbW9uL2NvcmUuYy0yOTA3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yOTMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXFxubW0vZGFtb24vY29yZS5jOjI5MzQ6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxubW0vZGFtb24vY29yZS5jLTI5MzUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMwODc9c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxcbm1tL2RhbW9uL2NvcmUuYzozMDg4OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbm1tL2RhbW9uL2NvcmUuYy0zMDg5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDkzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXFxubW0vZGFtb24vY29yZS5jOjMwOTQ6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxubW0vZGFtb24vY29yZS5jLTMwOTUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxMjQ9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19odWdlcGFnZV9tZW1fYnAodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTM5LVxcbm1tL2RhbW9uL2NvcmUuYzozMTQwOnN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG5tbS9kYW1vbi9jb3JlLmM6MzE0MTpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbm1tL2RhbW9uL2NvcmUuYy0zMTQyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTg0LS8qIFJldHVybiB0aGUgaGlnaGVzdCBzY29yZSBzaW5jZSBpdCBtYWtlcyBzY2hlbWVzIGxlYXN0IGFnZ3Jlc3NpdmUgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzE4NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMxODYte1xcbm1tL2RhbW9uL2NvcmUuYzozMTg3OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYzozMTg4OlxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jLTMxODktXFx0dW5zaWduZWQgbG9uZyBoaWdoZXN0X3Njb3JlID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMzE5MC1cXG5tbS9kYW1vbi9jb3JlLmM6MzE5MTpcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XFxubW0vZGFtb24vY29yZS5jOjMxOTI6XFx0XFx0ZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShjLCBzLCBnb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzE5My1cXHRcXHRoaWdoZXN0X3Njb3JlID0gbWF4KGhpZ2hlc3Rfc2NvcmUsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIwMT1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjAyLXtcXG5tbS9kYW1vbi9jb3JlLmM6MzIwMzpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbm1tL2RhbW9uL2NvcmUuYzozMjA0OlxcdHVuc2lnbmVkIGxvbmcgc2NvcmUgPSBkYW1vc19xdW90YV9zY29yZShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzIwNS1cXG5tbS9kYW1vbi9jb3JlLmM6MzIwNjpcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQoXFxubW0vZGFtb24vY29yZS5jOjMyMDc6XFx0XFx0XFx0bWF4KHF1b3RhLVxcdTAwM2Vlc3pfYnAsIDEwMDAwVUwpLCBzY29yZSk7XFxubW0vZGFtb24vY29yZS5jLTMyMDgtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyMTA9c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMTIte1xcbm1tL2RhbW9uL2NvcmUuYzozMjEzOlxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jOjMyMTQ6XFx0dW5zaWduZWQgbG9uZyBzY29yZSA9IGRhbW9zX3F1b3RhX3Njb3JlKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjE1LVxcbm1tL2RhbW9uL2NvcmUuYy0zMjE2LVxcdGlmIChzY29yZSBcXHUwMDNlPSAxMDAwMClcXG5tbS9kYW1vbi9jb3JlLmM6MzIxNzpcXHRcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6MzIxODpcXHRlbHNlIGlmIChxdW90YS1cXHUwMDNlc3opXFxubW0vZGFtb24vY29yZS5jOjMyMTk6XFx0XFx0cXVvdGEtXFx1MDAzZWVzel9icCA9IHF1b3RhLVxcdTAwM2VzeiAqIDEwMDAwO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjIwLVxcdGVsc2VcXG5tbS9kYW1vbi9jb3JlLmM6MzIyMTpcXHRcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gVUxPTkdfTUFYO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjIyLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjI0LS8qXFxubW0vZGFtb24vY29yZS5jOjMyMjU6ICogQ2FsbGVkIG9ubHkgaWYgcXVvdGEtXFx1MDAzZW1zLCBvciBxdW90YS1cXHUwMDNlc3ogYXJlIHNldCwgb3IgcXVvdGEtXFx1MDAzZWdvYWxzIGlzIG5vdCBlbXB0eVxcbm1tL2RhbW9uL2NvcmUuYy0zMjI2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjI3OnN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMyMjgte1xcbm1tL2RhbW9uL2NvcmUuYzozMjI5OlxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jLTMyMzAtXFx0dW5zaWduZWQgbG9uZyB0aHJvdWdocHV0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMzItXFxubW0vZGFtb24vY29yZS5jOjMyMzM6XFx0aWYgKCFxdW90YS1cXHUwMDNlbXMgXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMjM0OlxcdFxcdHF1b3RhLVxcdTAwM2Vlc3ogPSBxdW90YS1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jLTMyMzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMzctXFxubW0vZGFtb24vY29yZS5jOjMyMzg6XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZxdW90YS1cXHUwMDNlZ29hbHMpKSB7XFxubW0vZGFtb24vY29yZS5jOjMyMzk6XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVClcXG5tbS9kYW1vbi9jb3JlLmMtMzI0MC1cXHRcXHRcXHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3QoY3R4LCBzKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzI0MTpcXHRcXHRlbHNlIGlmIChxdW90YS1cXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjQyLVxcdFxcdFxcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoY3R4LCBzKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzI0MzpcXHRcXHRlc3ogPSBxdW90YS1cXHUwMDNlZXN6X2JwIC8gMTAwMDA7XFxubW0vZGFtb24vY29yZS5jLTMyNDQtXFx0fVxcbm1tL2RhbW9uL2NvcmUuYy0zMjQ1LVxcbm1tL2RhbW9uL2NvcmUuYzozMjQ2OlxcdGlmIChxdW90YS1cXHUwMDNlbXMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzI0NzpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMpXFxubW0vZGFtb24vY29yZS5jOjMyNDg6XFx0XFx0XFx0dGhyb3VnaHB1dCA9IG11bHRfZnJhYyhxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeixcXG5tbS9kYW1vbi9jb3JlLmM6MzI0OTpcXHRcXHRcXHRcXHRcXHQxMDAwMDAwLCBxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9ucyk7XFxubW0vZGFtb24vY29yZS5jLTMyNTAtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYy0zMjUxLVxcdFxcdFxcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xcbm1tL2RhbW9uL2NvcmUuYzozMjUyOlxcdFxcdGVzeiA9IG1pbih0aHJvdWdocHV0ICogcXVvdGEtXFx1MDAzZW1zLCBlc3opO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjUzLVxcdFxcdGVzeiA9IG1heChjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3osIGVzeik7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI1NS1cXG5tbS9kYW1vbi9jb3JlLmM6MzI1NjpcXHRpZiAocXVvdGEtXFx1MDAzZXN6IFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2VzeiBcXHUwMDNjIGVzeilcXG5tbS9kYW1vbi9jb3JlLmM6MzI1NzpcXHRcXHRlc3ogPSBxdW90YS1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jLTMyNTgtXFxubW0vZGFtb24vY29yZS5jOjMyNTk6XFx0cXVvdGEtXFx1MDAzZWVzeiA9IGVzejtcXG5tbS9kYW1vbi9jb3JlLmMtMzI2MC19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzI2Mj1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbm1tL2RhbW9uL2NvcmUuYzozMjYzOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxubW0vZGFtb24vY29yZS5jLTMyNjQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyNzItXFx0fVxcbm1tL2RhbW9uL2NvcmUuYzozMjczOlxcdHRyYWNlX2RhbW9zX2VzeihjaWR4LCBzaWR4LCBxdW90YS1cXHUwMDNlZXN6KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzI3NC19XFxubW0vZGFtb24vY29yZS5jLTMyNzUtXFxubW0vZGFtb24vY29yZS5jOjMyNzY6c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMzI3Ny17XFxubW0vZGFtb24vY29yZS5jOjMyNzg6XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG5tbS9kYW1vbi9jb3JlLmMtMzI3OS1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyODMtXFxubW0vZGFtb24vY29yZS5jOjMyODQ6XFx0aWYgKCFxdW90YS1cXHUwMDNlbXMgXFx1MDAyNlxcdTAwMjYgIXF1b3RhLVxcdTAwM2VzeiBcXHUwMDI2XFx1MDAyNiBsaXN0X2VtcHR5KFxcdTAwMjZxdW90YS1cXHUwMDNlZ29hbHMpKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjg1LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjg3LVxcdC8qIEZpcnN0IGNoYXJnZSB3aW5kb3cgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzI4ODpcXHRpZiAoIXF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6IFxcdTAwMjZcXHUwMDI2ICFxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tKSB7XFxubW0vZGFtb24vY29yZS5jOjMyODk6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxubW0vZGFtb24vY29yZS5jOjMyOTA6XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzI5MS1cXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG5tbS9kYW1vbi9jb3JlLmM6MzI5MjpcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjkzLVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjk1LVxcdC8qIE5ldyBjaGFyZ2Ugd2luZG93IHN0YXJ0cyAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjk2OlxcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20sXFxubW0vZGFtb24vY29yZS5jOjMyOTc6XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSArXFxubW0vZGFtb24vY29yZS5jOjMyOTg6XFx0XFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMjk5OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG5tbS9kYW1vbi9jb3JlLmMtMzMwMC1cXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG5tbS9kYW1vbi9jb3JlLmM6MzMwMTpcXHRcXHRxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiArPSBxdW90YS1cXHUwMDNlY2hhcmdlZF9zejtcXG5tbS9kYW1vbi9jb3JlLmM6MzMwMjpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG5tbS9kYW1vbi9jb3JlLmM6MzMwMzpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxubW0vZGFtb24vY29yZS5jLTMzMDQtXFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxubW0vZGFtb24vY29yZS5jOjMzMDU6XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxubW0vZGFtb24vY29yZS5jOjMzMDY6XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzMwNzpcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBxdW90YS1cXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXFxubW0vZGFtb24vY29yZS5jOjMzMDg6XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMwOS1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMzNC1cXHRcXHRjdW11bGF0ZWRfc3ogKz0gYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xcbm1tL2RhbW9uL2NvcmUuYzozMzM1OlxcdFxcdGlmIChjdW11bGF0ZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeiB8fCAhc2NvcmUpXFxubW0vZGFtb24vY29yZS5jLTMzMzYtXFx0XFx0XFx0YnJlYWs7XFxubW0vZGFtb24vY29yZS5jLTMzMzctXFx0fVxcbm1tL2RhbW9uL2NvcmUuYzozMzM4OlxcdHF1b3RhLVxcdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMzOS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzM1Nz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzcyLVxcbm1tL2RhbW9uL2NvcmUuYzozMzczOlxcdFxcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzM3NC1cXHR9XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTM5PXN0YXRpYyBib29sIGNvbW1pdF9pbnB1dHMgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDMtICpcXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ0OiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDU6ICogYXV0b21hdGljYWxseSBpbmNyZWFzZXMgYW5kIGRlY3JlYXNlcyB0aGUgZWZmZWN0aXZlIGxldmVsIG9mIHRoZSBxdW90YVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDYtICogYWltaW5nIHRoZSBMUlUgW2RlXXByaW9yaXRpemF0aW9ucyBvZiB0aGUgaG90IGFuZCBjb2xkIG1lbW9yeSByZXN1bHRpbmcgaW5cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTA0PW1vZHVsZV9wYXJhbShjb2xkX21pbl9hZ2UsIHVsb25nLCAwNjAwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTEwNS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjEwNjpzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhIGRhbW9uX2xydV9zb3J0X3F1b3RhID0ge1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTA3LVxcdC8qIFVzZSB1cCB0byAxMCBtcyBwZXIgMSBzZWMsIGJ5IGRlZmF1bHQgKi9cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTEwLVxcdC5yZXNldF9pbnRlcnZhbCA9IDEwMDAsXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTE6XFx0LyogV2l0aGluIHRoZSBxdW90YSwgbWFyayBob3R0ZXIgcmVnaW9ucyBhY2Nlc3NlZCBmaXJzdC4gKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jLTExMi1cXHQud2VpZ2h0X3N6ID0gMCxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTE1LX07XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTY6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfVElNRV9RVU9UQShkYW1vbl9scnVfc29ydF9xdW90YSk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMTctXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTE2ND1ERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19TVEFUU19QQVJBTVMoZGFtb25fbHJ1X3NvcnRfaG90X3N0YXQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNjUtXFx0XFx0bHJ1X3NvcnRfdHJpZWRfaG90X3JlZ2lvbnMsIGxydV9zb3J0ZWRfaG90X3JlZ2lvbnMsXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxNjY6XFx0XFx0aG90X3F1b3RhX2V4Y2VlZHMpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTY3LVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0xNjk9REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX2xydV9zb3J0X2NvbGRfc3RhdCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTE3MC1cXHRcXHRscnVfc29ydF90cmllZF9jb2xkX3JlZ2lvbnMsIGxydV9zb3J0ZWRfY29sZF9yZWdpb25zLFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTcxOlxcdFxcdGNvbGRfcXVvdGFfZXhjZWVkcyk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNzItXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTE4OD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lKFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xOTAte1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTkxOlxcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IGRhbW9uX2xydV9zb3J0X3F1b3RhO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTkyLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTkzOlxcdC8qIFVzZSBoYWxmIG9mIHRvdGFsIHF1b3RhIGZvciBob3QvY29sZCBwYWdlcyBzb3J0aW5nICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxOTQ6XFx0cXVvdGEubXMgPSBxdW90YS5tcyAvIDI7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xOTUtXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTIwMi1cXHRcXHRcXHQwLFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjAzOlxcdFxcdFxcdC8qIHVuZGVyIHRoZSBxdW90YS4gKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjIwNDpcXHRcXHRcXHRcXHUwMDI2cXVvdGEsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMDUtXFx0XFx0XFx0LyogKERlKWFjdGl2YXRlIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSB3YXRlcm1hcmtzLiAqL1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjA9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X2NvbGRfc2NoZW1lKHVuc2lnbmVkIGludCBjb2xkX3RocmVzKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMjgtXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjM5LjAxNjUxMzkwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTg1Njk3MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgREFNT04ncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNT05pdG9yIHdpdGhpbiB0aGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vZGFtb24vYCksIG5lZWRzIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLCBwYXJ0aWN1bGFybHkgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBrZXkgZm9yIG91ciB0ZXN0aW5nLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiAgR29vZCwgREFNT04gaXMgY29uZmlndXJhYmxlIHZpYSBgc3lzZnNgIChgQ09ORklHX0RBTU9OX1NZU0ZTYCkgYW5kIG1vZHVsZXMgKGBDT05GSUdfREFNT05fUkVDTEFJTWAsIGBDT05GSUdfREFNT05fTFJVX1NPUlRgLCBgQ09ORklHX0RBTU9OX1NUQVRgKSwgd2hpY2ggbWVhbnMgSSBjYW4gZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCBpdCB0aHJvdWdoIHRoZSBgL3N5cy9rZXJuZWwvbW0vZGFtb24vLi4uYCBpbnRlcmZhY2UgdG8gc2V0IHVwIGl0cyBzY2hlbWVzLCBxdW90YXMsIHRhcmdldHMsIGFuZCB0cmlnZ2VyIGl0cyBleGVjdXRpb24uICBUaGF0J3MgYSBkZWZpbml0ZSBwbHVzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgdGhpcyB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/ICBMZXQncyBjb25zaWRlciB0aGUgdXN1YWwgY3JpdGVyaWE6XG5cbiogICAqKlN1YnN5c3RlbToqKiBJdCBpcyBpbiBgbW0vZGFtb25gLCBkZWZpbml0ZWx5IG5vdCBqdXN0IGRvY3VtZW50YXRpb24gb3IgY29zbWV0aWMgY2hhbmdlcy4gQ2hlY2suXG4qICAgKipFeGVjdXRpb24gZmxvdzoqKiBOb3QgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyBvciBtYWNyb3MuIFRoZSBjb3JlIGxvZ2ljIGluIGBkYW1vc19xdW90YV9pc19mdWxsYCBhbmQgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGlzIGRlZmluaXRlbHkgaW50ZXJlc3RpbmcsIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LiBDaGVjay5cbiogICAqKlNwZWNpZmljIERvbWFpbjoqKiBUaGlzIGlzbid0IGEgaGFyZHdhcmUgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlci4gSXQncyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBtZWFucyBpdCB3aWxsIGJlIG1vcmUgaW1wYWN0ZnVsIGlmIHRoZXJlIGlzIGEgdnVsbmVyYWJpbGl0eS4gQ2hlY2suXG4qICAgKipSdW50aW1lIExvZ2ljOioqIEl0J3Mgbm90IGp1c3QgdGVhcmRvd24gZWl0aGVyLCBpdCBpcyByZWd1bGFyIHJ1bnRpbWUgbG9naWMuIENoZWNrLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYHRydWVgLiBXZSBoYXZlIGVub3VnaCBjb21wbGV4aXR5IGluIHRoZSBkYXRhIGFuZCBjb250cm9sIGZsb3csIHdoaWNoIGhhcyBnb29kIHJlYWNoYWJpbGl0eS5cblxuQWxyaWdodCwgc28gd2hhdCdzIG5leHQ/IEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBiZSBsb29raW5nIGNsb3NlbHkgYXQgYG1tL2RhbW9uL3N5c2ZzLmNgIGZvciB0aG9zZSBgc3lzZnNgIGludGVyYWN0aW9uIHBvaW50cywgYXMgd2VsbCBhcyBgbW0vZGFtb24vY29yZS5jYCBmb3IgdGhlIGNvcmUgREFNT04gbG9naWMuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIGVudHJ5IHBvaW50cyBmb3IgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgbGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6NDguMDAyMjE0NjEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDg2MTQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipkYW1vbnxkYW1vbl9zeXNmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNjg3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOkRFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjE2OnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTctXFx0XFx0dW5zaWduZWQgbG9uZyBtaW4sXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xOS17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MjA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGttYWxsb2Nfb2JqKCpyYW5nZSk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMjEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0zMT1zdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMzMte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjM0OlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzozNTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTM2LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NDA9c3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00Mi17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NDM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQ0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNDUtXFx0dW5zaWduZWQgbG9uZyBtaW47XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz01Nj1zdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNTgte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjU5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTYxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy02Ny17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6Njg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjY5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNzAtXFx0dW5zaWduZWQgbG9uZyBtYXg7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4MTp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODIte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgzOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04NC19XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc191bF9yYW5nZV9taW5fYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODctXFx0XFx0X19BVFRSX1JXX01PREUobWluLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04OC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21heF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05MC1cXHRcXHRfX0FUVFJfUldfTU9ERShtYXgsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTkxLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkyOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkzOlxcdFxcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9taW5fYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjk0OlxcdFxcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9tYXhfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk1LVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTYtfTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5NzpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3VsX3JhbmdlKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05OC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5OTpjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMDpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAxLVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTAyOlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMDMtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMDY6c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA3LVxcdFxcdGNoYXIgKm1lbWNnX3BhdGhfYnVmLCBjaGFyICpwYXRoKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExNzppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExOC17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzQtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTM1OlxcdFxcdGlmIChkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKG1lbWNnLCBwYXRoLCBtZW1jZ19wYXRoKSkge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNi1cXHRcXHRcXHQqaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6OTpleHRlcm4gc3RydWN0IG11dGV4IGRhbW9uX3N5c2ZzX2xvY2s7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTE6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlIHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xMi1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTc6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xOC1cXHRcXHR1bnNpZ25lZCBsb25nIG1pbixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xOS1cXHRcXHR1bnNpZ25lZCBsb25nIG1heCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MjA6dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMjpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTI3LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjI4OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzIHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yOS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjMwOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKipzY2hlbWVzX2FycjtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMS1cXHRpbnQgbnI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMy1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mzc6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQwOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQzOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ0LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTI6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD01Nz12b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU4OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU5LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NjE6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYxLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcmVnaW9uX2FkZF9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDI9c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcmVnaW9uX3JtX2RpcnMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwMzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDQte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwOT1zdGF0aWMgc3NpemVfdCBzdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjExLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEyOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjE0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxOD1zdGF0aWMgc3NpemVfdCBlbmRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMjc9c3RhdGljIHNzaXplX3QgbnJfYWNjZXNzZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjM2PXN0YXRpYyBzc2l6ZV90IGFnZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjM5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI0NT1zdGF0aWMgc3NpemVfdCBzel9maWx0ZXJfcGFzc2VkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQ3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUwLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU2OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjYyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYzLVxcdFxcdF9fQVRUUl9ST19NT0RFKHN0YXJ0LCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2VuZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY2LVxcdFxcdF9fQVRUUl9ST19NT0RFKGVuZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ucl9hY2Nlc3Nlc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY5LVxcdFxcdF9fQVRUUl9ST19NT0RFKG5yX2FjY2Vzc2VzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FnZV9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcyLVxcdFxcdF9fQVRUUl9ST19NT0RFKGFnZSwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc0OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zel9maWx0ZXJfcGFzc2VkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzUtXFx0XFx0X19BVFRSX1JPX01PREUoc3pfZmlsdGVyX3Bhc3NlZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3ODpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3OTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODA6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fbnJfYWNjZXNzZXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODE6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWdlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgyOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODMtXFx0TlVMTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg0LX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NTpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODg6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OS1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTA6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MS19O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk3OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0OnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKlxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDU6ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA3OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucyA9IGttYWxsb2Nfb2JqKCpyZWdpb25zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxOT1zdGF0aWMgc3NpemVfdCB0b3RhbF9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzIzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyNC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyODpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjk6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpyZWdpb25zKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMzE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnIsICpuZXh0O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDI6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQzLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzQ0OlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ1LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ4LVxcdFxcdF9fQVRUUl9ST19NT0RFKHRvdGFsX2J5dGVzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTA6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1MTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTItXFx0TlVMTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzUzLX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NDpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzU1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTY6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NzpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1OC1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTk6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfZ3JvdXBzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjAtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM2NjpzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjctXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM3ODpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODA6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4MS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzgzPXN0YXRpYyBzc2l6ZV90IG5yX3RyaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODUte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODY6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM5Mj1zdGF0aWMgc3NpemVfdCBzel90cmllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzk0LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzk1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzk2OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM5Ny1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MDE9c3RhdGljIHNzaXplX3QgbnJfYXBwbGllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwMy17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MDYtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDEwPXN0YXRpYyBzc2l6ZV90IHN6X2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MTIte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDE1LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBzel9vcHNfZmlsdGVyX3Bhc3NlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQyMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQyMjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQyMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDI4PXN0YXRpYyBzc2l6ZV90IHF0X2V4Y2VlZHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDMzLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQzNz1zdGF0aWMgc3NpemVfdCBucl9zbmFwc2hvdHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Mzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQyLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQ0Nj1zdGF0aWMgc3NpemVfdCBtYXhfbnJfc25hcHNob3RzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQ4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQ5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDUwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ1MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00NTU9c3RhdGljIHNzaXplX3QgbWF4X25yX3NuYXBzaG90c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDYwLVxcdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cywgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2bWF4X25yX3NuYXBzaG90cyk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDY3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Njg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc3RhdHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDY5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDcwOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDcxLX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDcyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc0LVxcdFxcdF9fQVRUUl9ST19NT0RFKG5yX3RyaWVkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel90cmllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc3LVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X3RyaWVkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Nzk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9hcHBsaWVkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODAtXFx0XFx0X19BVFRSX1JPX01PREUobnJfYXBwbGllZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDgyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDgzLVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X2FwcGxpZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3N6X29wc19maWx0ZXJfcGFzc2VkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODYtXFx0XFx0X19BVFRSX1JPX01PREUoc3pfb3BzX2ZpbHRlcl9wYXNzZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3F0X2V4Y2VlZHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4OS1cXHRcXHRfX0FUVFJfUk9fTU9ERShxdF9leGNlZWRzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5Mi1cXHRcXHRfX0FUVFJfUk9fTU9ERShucl9zbmFwc2hvdHMsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5NDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX21heF9ucl9zbmFwc2hvdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5NS1cXHRcXHRfX0FUVFJfUldfTU9ERShtYXhfbnJfc25hcHNob3RzLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDk2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTc6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3N0YXRzX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5ODpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfdHJpZWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTk6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X3RyaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAwOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl9hcHBsaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAxOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel9hcHBsaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAyOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel9vcHNfZmlsdGVyX3Bhc3NlZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMzpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfcXRfZXhjZWVkc19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfc25hcHNob3RzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA1OlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19tYXhfbnJfc25hcHNob3RzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA2LVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwNy19O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDg6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zdGF0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwOS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTEwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3N0YXRzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTE6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MTItXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTEzOlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3N0YXRzX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTE0LX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTIzPWVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1Mjk6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MzAtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0MTpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Mi1cXHRcXHRlbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIgbGF5ZXIpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcXHRmaWx0ZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Ny1cXHRpZiAoZmlsdGVyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTU5Mz1zdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk2OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk4LVxcdGludCBpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTYyNz1zdGF0aWMgc3NpemVfdCB0eXBlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYyOS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjYzMDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjYzMTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYzMi1cXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NjUyPXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjU0LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjU1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjU2OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjU3LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY2MT1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjQ6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjYtXFx0Ym9vbCBtYXRjaGluZztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02NzY9c3RhdGljIHNzaXplX3QgYWxsb3dfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Nzgte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2Nzk6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02ODEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njg1PXN0YXRpYyBzc2l6ZV90IGFsbG93X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4Ny17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4ODpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY5MC1cXHRib29sIGFsbG93O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTcwMD1zdGF0aWMgc3NpemVfdCBtZW1jZ19wYXRoX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzAyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzAzOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzA1LVxcdGludCBsZW47XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwNi1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA3OlxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwOC1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcxMC1cXHRcXHRcXHRmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggPyBmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggOiBcXFwiXFxcIik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcxMTpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTItXFx0cmV0dXJuIGxlbjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03MTU9c3RhdGljIHNzaXplX3QgbWVtY2dfcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjAtXFx0Y2hhciAqcGF0aCA9IGttYWxsb2NfYXJyYXkoc2l6ZV9hZGQoY291bnQsIDEpLCBzaXplb2YoKnBhdGgpLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyNi1cXHRzdHJzY3B5KHBhdGgsIGJ1ZiwgY291bnQgKyAxKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzI3OlxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzI4LVxcdFxcdGtmcmVlKHBhdGgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczMi1cXHRmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggPSBwYXRoO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MzM6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzM0LVxcdHJldHVybiBjb3VudDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03Mzc9c3RhdGljIHNzaXplX3QgYWRkcl9zdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczOS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0MDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0MTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0Mi1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NDY9c3RhdGljIHNzaXplX3QgYWRkcl9zdGFydF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDgte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDk6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NTEtXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZS5zdGFydCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzU2PXN0YXRpYyBzc2l6ZV90IGFkZHJfZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzU4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzU5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzYwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzYxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc2NT1zdGF0aWMgc3NpemVfdCBhZGRyX2VuZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Njcte1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDo0OC4wODMwODE2NjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyODMzODYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBGdXp6aW5nIFN0cmF0ZWd5OiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBpcyB0byBwaW5wb2ludCBwb3RlbnRpYWwgYXJlYXMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEZpcnN0LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IERBTU9OIHN5bWJvbHMuIFdlIG5lZWQgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vay4gVGhpbmtpbmcgc3RyYXRlZ2ljYWxseSwgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBhcmUgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMuIEknbSBmb2N1c2luZyBvbiB0aG9zZSBlbnRyeSBwb2ludHMgYXMgdGhlIGluaXRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdGVzdCBmdW5jdGlvbnMgbGlrZSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBhbmQgdGhlaXIgcmVsYXRlZCB2YXJpYW50cyBmb3Igc2V0dGluZywgY29tbWl0dGluZyBzY2hlbWVzL3RhcmdldHMsIGFuZCBmdW5jdGlvbiBjYWxscy4gQWxzbywgaW5jbHVkZSBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBgZGFtb25fc2V0X3JlZ2lvbnNgLCBhbmQgYGRhbW9uX25ld19zY2hlbWVgLlxuXG5Ob3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZXhwb3J0ZWQsIG5vbi1zdGF0aWMgc3ltYm9scyB3aXRoaW4gdGhlIGNvcmUgREFNT04gZmlsZXM6IGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBgbW0vZGFtb24vc3lzZnMuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBwb3RlbnRpYWxseSB1bmNvdmVyIGFkZGl0aW9uYWwgZW50cnkgcG9pbnRzIG9yIGltcG9ydGFudCBpbnRlcm5hbCBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIHdpdGggdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODI3LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjUxLjAxMTQyMzQyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1MDMwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxzdHJ1Y3QgW2Etel9dKyBcXFxcKikgW2EtejAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NTE9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NzI6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxcbm1tL2RhbW9uL2NvcmUuYy03My17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTgtICovXFxubW0vZGFtb24vY29yZS5jOjk5OmludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxubW0vZGFtb24vY29yZS5jLTEwMC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTE1PXN0cnVjdCBkYW1vbl9wcmVwICpkYW1vbl9uZXdfcHJlcChlbnVtIGRhbW9uX3ByZXBfYWN0aW9uIGFjdGlvbilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjYtXFxubW0vZGFtb24vY29yZS5jOjEyNzp2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXFxubW0vZGFtb24vY29yZS5jLTEyOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTcyPXN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MTg3OnZvaWQgZGFtb25fYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXFxubW0vZGFtb24vY29yZS5jLTE4OC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTk3PXN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjAxLVxcbm1tL2RhbW9uL2NvcmUuYzoyMDI6dm9pZCBkYW1vbl9kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyMD1zdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIzMy1cXG5tbS9kYW1vbi9jb3JlLmM6MjM0OnZvaWQgZGFtb25fYWRkX3Byb2JlKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjM1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz01MDc9c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTM5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo1NDA6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxubW0vZGFtb24vY29yZS5jLTU0MS1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NjUzPWJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTY2NC1cXG5tbS9kYW1vbi9jb3JlLmM6NjY1OnZvaWQgZGFtb3NfYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxubW0vZGFtb24vY29yZS5jLTY2Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Njc4PXN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjgyLVxcbm1tL2RhbW9uL2NvcmUuYzo2ODM6dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy02ODQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTY4OT1zdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzA1LVxcbm1tL2RhbW9uL2NvcmUuYzo3MDY6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy03MDcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTcxNj1zdGF0aWMgdm9pZCBkYW1vc19mcmVlX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzIwLVxcbm1tL2RhbW9uL2NvcmUuYzo3MjE6dm9pZCBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxubW0vZGFtb24vY29yZS5jLTcyMi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Nzg4PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTgtXFxubW0vZGFtb24vY29yZS5jOjc5OTp2b2lkIGRhbW9uX2FkZF9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTgwMC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODEwPXN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MTQtXFxubW0vZGFtb24vY29yZS5jOjgxNTp2b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtODE2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04NDA9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTg1Ni1cXG5tbS9kYW1vbi9jb3JlLmM6ODU3OnZvaWQgZGFtb25fYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTg1OC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODY0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo4NjU6aW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpXFxubW0vZGFtb24vY29yZS5jLTg2Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODczPXN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NzctXFxubW0vZGFtb24vY29yZS5jOjg3ODp2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTg3OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODg2LVxcbm1tL2RhbW9uL2NvcmUuYzo4ODc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTg4OC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9OTQyPXN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTQ5LVxcbm1tL2RhbW9uL2NvcmUuYzo5NTA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTk1MS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTA4Mz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMTctICovXFxubW0vZGFtb24vY29yZS5jOjExMTg6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxubW0vZGFtb24vY29yZS5jLTExMTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjUtICovXFxubW0vZGFtb24vY29yZS5jOjExNjY6dm9pZCBkYW1vbl9zZXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqKnNjaGVtZXMsXFxubW0vZGFtb24vY29yZS5jLTExNjctXFx0XFx0XFx0c3NpemVfdCBucl9zY2hlbWVzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyMTU9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIzNi0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTIzNzppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTIzOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkyMD1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTQ4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTQ5OmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTUwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDMyPXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2OC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA2OTppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjA3MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjExND1zdGF0aWMgdm9pZCBfX2RhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxMzMtICovXFxubW0vZGFtb24vY29yZS5jOjIxMzQ6dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcXG5tbS9kYW1vbi9jb3JlLmMtMjEzNS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjE0OT1ib29sIGRhbW9uX2lzX3J1bm5pbmcoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNjQtICovXFxubW0vZGFtb24vY29yZS5jOjIxNjU6aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMjE2Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjIwMC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjIwMTppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxubW0vZGFtb24vY29yZS5jLTIyMDIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyNTMtICovXFxubW0vZGFtb24vY29yZS5jOjIyNTQ6aW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKVxcbm1tL2RhbW9uL2NvcmUuYy0yMjU1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz00MDk0PXN0YXRpYyBib29sIGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDEyNS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDEyNjppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTQxMjctXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MTUwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0MTUxOnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKVxcbm1tL2RhbW9uL2NvcmUuYy00MTUyLXtcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTQtICovXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYzoxNTppbnQgZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cCxcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTE2LVxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKip0YXJnZXRwKVxcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC00NS1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oOjQ2OmludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNDctXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqKnRhcmdldHApO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI0PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQxLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo0Mjp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDMte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTcyLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo3Mzp2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzQte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwMy1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTA0OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA1LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNDktXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE1MDppbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTEtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzMtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3NDp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3NS17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9OD1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTktXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjEwOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTE6dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMjp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMy1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xNC1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTU6aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTYtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTc6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xOC1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4MTp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODIte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTA2PXN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExNzppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExOC17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0xNz1zdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTktXFx0XFx0dW5zaWduZWQgbG9uZyBtYXgpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjIwOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0zND1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9Mzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQwLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQzLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTItXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTc6dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01OC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTYwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjYxOmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI2ODQ9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjg4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjg5OnZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjkwLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODUxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTg6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTktXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MzM6dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkzNC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTc0PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQ3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ4OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDktXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA2Nzp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDY4LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMDQtICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDU6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTA2LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTUxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTUyOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNTMtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjUxLjA3OTkzMTA3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NzgwNjI2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gcmV2aWV3aW5nIHRoZSBjb3JlIERBTU9OIGNvbXBvbmVudHM6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9jYWxsYCwgYWxvbmcgd2l0aCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBmdW5jdGlvbiBjYWxscywgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMuIFdlIGhhdmUgYERBTU9OYCwgd2hpY2ggYnVpbGRzIHRoZSBjb3JlIG1vZHVsZSAoYG1tL2RhbW9uL2NvcmUub2ApLiBUaGVuLCBgREFNT05fU1lTRlNgIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgc3lzZnMgaW50ZXJmYWNlLCBidWlsZGluZyByZWxhdGVkIG1vZHVsZXMsIHdoaWNoIGlzIGdyZWF0IGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBXZSBoYXZlIGBEQU1PTl9QQUREUmAgZm9yIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgYW5kIGBEQU1PTl9WQUREUmAgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIOKAkyBzdGFuZGFyZCBvZmZlcmluZ3MuXG5cbkknbSB2ZXJpZnlpbmcgdGhlIGRlcGVuZGVuY2llcy4gYERBTU9OX1NZU0ZTYCBjb3JyZWN0bHkgZGVwZW5kcyBvbiBib3RoIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIGlzIGNydWNpYWwuIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9WQUREUmAgYXJlIGNvcnJlY3RseSBkZXBlbmRlbnQgb24gYm90aCBgREFNT05gIGFuZCBgTU1VYC4gVGhpcyBlbnN1cmVzIHRoZSBwcm9wZXIgZm91bmRhdGlvbiBpcyBpbiBwbGFjZS4gSSdtIGFsc28gY29uZmlybWluZyB0aGF0IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBzdWNoIGFzIGBEQU1PTl9SRUNMQUlNYCBhbmQgYERBTU9OX0xSVV9TT1JUYCwgYXJlIGFwcHJvcHJpYXRlbHkgY29uc2lkZXJlZCBhbmQgbm90IGNhdXNpbmcgYW55IGNvbmZsaWN0cy5cblxuSSB0aGVuIHJldmlzaXRlZCB0aGUgbGlzdCBvZiBcIkZvY3VzU3ltYm9sc1wiIOKAkyBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCDigJMgdG8gZW5zdXJlIHRoZXkgYWxpZ24gd2l0aCB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgYWxsIHRoZSBLY29uZmlnIG9wdGlvbnMgYXJlIGNvbnNpc3RlbnQgd2l0aCBlYWNoIG90aGVyLiBUaGlzIGNvbmZpcm1zIHRoZWlyIGNvcnJlY3QgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBwcm9qZWN0LlxuXG5FdmVyeXRoaW5nIGlzIGNsZWFyLiBObyBmdXJ0aGVyIGNoZWNrcyBhcmUgbmVlZGVkLCBzbywgSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3MzEsIk91dHB1dFRva2VucyI6MTg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjU0Ljk1Nzk5Nzg2NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTA1NTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHNjaGVtZSBxdW90YSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyAoc3BlY2lmaWNhbGx5IGRhbW9zX3F1b3RhX2lzX2Z1bGwgYW5kIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMpIHRvIGhhbmRsZSB6ZXJvIGNoYXJnZWQgc2l6ZSBhbmQgemVybyBlZmZlY3RpdmUgc2NoZW1lIHNpemUgY29uZGl0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIGtlcm5lbCBBUElzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgc2NoZW1lIHF1b3RhIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIChzcGVjaWZpY2FsbHkgZGFtb3NfcXVvdGFfaXNfZnVsbCBhbmQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcykgdG8gaGFuZGxlIHplcm8gY2hhcmdlZCBzaXplIGFuZCB6ZXJvIGVmZmVjdGl2ZSBzY2hlbWUgc2l6ZSBjb25kaXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQga2VybmVsIEFQSXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDo1NS4wODcwNjAwMDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NjIwMDYzMjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6NTUuMDg3NTE5OTA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc2MTk1OTg0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgZWFybHkgcmV0dXJuIGNoZWNrcyB3aGVuIGBxdW90YS1cXHUwMDNlY2hhcmdlZF9zemAgb3IgYHF1b3RhLVxcdTAwM2Vlc3pgIGFyZSB6ZXJvIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lcygpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzOlxcbjEuIERvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LlxcbjIuIERvIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBPbmx5IGFkZCBjb25kaXRpb25hbCBjaGVja3Mgb24gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgLlxcblxcbkJlY2F1c2UgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjVjOGZiOTYzOWI4YzhjODg0Y2ZjMjUzNzQwM2JiYTM5MDU2ODg3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDA6NTM6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IGRmMjI2MjE3NjU5MTEuLmY4Yzc4NGRmMjQ2MDAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI2NTUsNiArMjY1NSw4IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbiB7XG4gXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghcXVvdGEtXHUwMDNlY2hhcmdlZF9zeilcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0LypcbkBAIC0yNzUwLDYgKzI3NTIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRpZiAoIXF1b3RhLVx1MDAzZWVzeilcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG4gXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6NTUuMDg3NTIxMTM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTA4NTM5MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFBhdGNoIEFzc2Vzc21lbnQ6IEtNU0FOIFJpc2sgRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgYG1tL2RhbW9uL2NvcmUuY2AgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIEtBU0FOIGNoZWNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGxlYW5zIHRvd2FyZHMgYSBkZWZlbnNpdmUsIFFBLWZvY3VzZWQgZXZhbHVhdGlvbiDigJMgc29tZXRoaW5nIHNhZmUgYW5kIHN0cmFpZ2h0Zm9yd2FyZCB0byBkby4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgZGlmZiBpdHNlbGYgaXMgcmVsYXRpdmVseSBzbWFsbC4gSSBzZWUgYWRkaXRpb25zIHdpdGhpbiB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgZnVuY3Rpb25zLiBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgY2hlY2tzIGZvciBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgYW5kIGBxdW90YS1cdTAwM2Vlc3pgIGJlaW5nIG5vbi16ZXJvIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggY2VydGFpbiBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gcXVvdGEgbWFuYWdlbWVudCBhbmQgc2NoZW1lIGFwcGxpY2F0aW9uIHdpdGhpbiBEQU1PTi5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCBgY2hhcmdlZF9zemAgYW5kIGBlc3pgIHJlcHJlc2VudCBhbmQgaG93IHRoZXkgYXJlIGluaXRpYWxpemVkIGFuZCB1c2VkIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBlciBza2lsbHMgb3IgcmVhZCB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXNlIGNoZWNrcyBhcmUgYWN0dWFsbHkgKnJlbW92aW5nKiBhIHBvdGVudGlhbCByaXNrLCBieSBlbnN1cmluZyB0aGF0IGNlcnRhaW4gY29tcHV0YXRpb25zIGRvbid0IG9jY3VyIHdoZW4gdGhlIHF1b3RhIGlzIGVtcHR5IG9yIG5vdCBpbml0aWFsaXplZC4gU28sIGl0ICptaWdodCogYmUgYSBnb29kIHRoaW5nLlxuXG5JJ20gdGhpbmtpbmcgdGhpcyBwYXRjaCBpcyBsaWtlbHkgYWltZWQgYXQgcHJldmVudGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3RoZXIgaXNzdWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSB1c2luZyB1bmluaXRpYWxpemVkIG9yIHplcm8gdmFsdWVzIGluIGNhbGN1bGF0aW9ucyByZWxhdGVkIHRvIHF1b3Rhcy4gVGhlIGFkZGl0aW9uIG9mIHRoZXNlIGNoZWNrcyB3b3VsZCBtZWFuIEtNU0FOIGlzIHByb2JhYmx5IG5vdCBuZWVkZWQuIEEgdGhvcm91Z2ggY29kZSByZXZpZXcgYW5kIGxvb2tpbmcgZm9yIG90aGVyIHJlZmVyZW5jZXMgdG8gdGhlIHZhcmlhYmxlcyBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLCBhbmQgSSdsbCBuZWVkIHRvIHRyYWNrIGRvd24gYW55IHBvdGVudGlhbCBpbml0aWFsaXphdGlvbiBwYXRocyB0byBjb25maXJtIG15IHN1c3BpY2lvbnMsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYSBkZWZlbnNpdmUgcGF0Y2ggdGhhdCBpcyBwcm9iYWJseSBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTU6MDYuNTk2MDY0MzQ4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjcyNzQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19xdW90YV9pc19mdWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjYzNj1zdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjUyLVxcbm1tL2RhbW9uL2NvcmUuYzoyNjUzOnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5tbS9kYW1vbi9jb3JlLmMtMjY1NC1cXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY2OT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzI3LVxcdFxcdGRhbW9zX2NoYXJnZV9xdW90YShxdW90YSwgc3osIHN6X2FwcGxpZWQpO1xcbm1tL2RhbW9uL2NvcmUuYzoyNzI4OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbm1tL2RhbW9uL2NvcmUuYy0yNzI5LVxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI3NDA9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NTgtXFx0XFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXFxubW0vZGFtb24vY29yZS5jOjI3NTk6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbm1tL2RhbW9uL2NvcmUuYy0yNzYwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyNzY9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjk4LVxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzI5OTpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTMzMDAtXFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5xdF9leGNlZWRzKys7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU1OjA2LjY4ODgwMTY3NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzk0MDE3OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDI2NTAtMjc3MCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMgZm9yIERBTU9OIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgaGVhcnQgb2YgdGhlIG1vbml0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBsb2dpYy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgKnJlYWxseSogd29ya2luZywgbm90IGp1c3QgdGhlIGhpZ2gtbGV2ZWwgZXhwbGFuYXRpb25zLiBJJ20gaG9waW5nIHRvIHNlZSB0aGUgaW50cmljYXRlIGRldGFpbHMgb2YgbWVtb3J5IGFjY2VzcyB0cmFja2luZywgcG90ZW50aWFsIGV2aWN0aW9uIHRyaWdnZXJzLCBhbmQgbWF5YmUgZXZlbiBhIGdsaW1wc2Ugb2YgdGhlIHNhbXBsaW5nIHN0cmF0ZWd5LiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gYXNzZXNzIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIGFuZCBJJ20gcHJlcGFyZWQgdG8gZGlzc2VjdCB0aGUgY29kZSB3aXRoIGEgY3JpdGljYWwgZXllLCBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBvciBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBhbGdvcml0aG1zIGVtcGxveWVkLiBLbm93aW5nIGhvdyByb2J1c3QgdGhpcyBzZWN0aW9uIGlzIHdpbGwgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIG92ZXJhbGwgaGVhbHRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTU6MDguNDgyODIxNTk3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY0NSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY0NTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArPSBzel9yZWdpb247XFxuMjY0NjpcXHRcXHRlbHNlXFxuMjY0NzpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArPSBzel9hcHBsaWVkICsgbXVsdF9mcmFjKFxcbjI2NDg6XFx0XFx0XFx0XFx0XFx0KHN6X3JlZ2lvbiAtIHN6X2FwcGxpZWQpLFxcbjI2NDk6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWZhaWxfY2hhcmdlX251bSxcXG4yNjUwOlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XFxuMjY1MTpcXHR9XFxuMjY1MjpcXHRcXG4yNjUzOlxcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4yNjU0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNjU1OlxcdHtcXG4yNjU2OlxcdFxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG4yNjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yNjU4OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3opXFxuMjY1OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjY2MDpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeilcXG4yNjYxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI2NjI6XFx0XFx0LypcXG4yNjYzOlxcdFxcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFxcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xcbjI2NjQ6XFx0XFx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXFxuMjY2NTpcXHRcXHQgKi9cXG4yNjY2OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xcbjI2Njc6XFx0fVxcbjI2Njg6XFx0XFxuMjY2OTpcXHRzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNjcwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcXG4yNjcxOlxcdHtcXG4yNjcyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjY3MzpcXHRcXHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xcbjI2NzQ6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgYmVnaW4sIGVuZDtcXG4yNjc1OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCA9IDA7XFxuMjY3NjpcXHRcXHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkID0gMDtcXG4yNjc3OlxcdFxcdC8qXFxuMjY3ODpcXHRcXHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcXG4yNjc5OlxcdFxcdCAqIGltcGxpZXMgd2l0aCAnbnJfY29udGV4dHMnIGZpbGUuICBOZXZlcnRoZWxlc3MsIG9ubHkgc2luZ2xlIGNvbnRleHRcXG4yNjgwOlxcdFxcdCAqIHBlciBrZGFtb25kIGlzIHN1cHBvcnRlZCBmb3Igbm93LiAgU28sIHdlIGNhbiBzaW1wbHkgdXNlICcwJyBjb250ZXh0XFxuMjY4MTpcXHRcXHQgKiBpbmRleCBoZXJlLlxcbjI2ODI6XFx0XFx0ICovXFxuMjY4MzpcXHRcXHR1bnNpZ25lZCBpbnQgY2lkeCA9IDA7XFxuMjY4NDpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1xcdFxcdC8qIHNjaGVtZXMgaXRlcmF0b3IgKi9cXG4yNjg1OlxcdFxcdHVuc2lnbmVkIGludCBzaWR4ID0gMDtcXG4yNjg2OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpdGVyO1xcdC8qIHRhcmdldHMgaXRlcmF0b3IgKi9cXG4yNjg3OlxcdFxcdHVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwO1xcbjI2ODg6XFx0XFx0Ym9vbCBkb190cmFjZSA9IGZhbHNlO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHQvKiBnZXQgaW5kaWNlcyBmb3IgdHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5KCkgKi9cXG4yNjkxOlxcdFxcdGlmICh0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHlfZW5hYmxlZCgpKSB7XFxuMjY5MjpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcXG4yNjkzOlxcdFxcdFxcdFxcdGlmIChzaXRlciA9PSBzKVxcbjI2OTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjY5NTpcXHRcXHRcXHRcXHRzaWR4Kys7XFxuMjY5NjpcXHRcXHRcXHR9XFxuMjY5NzpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodGl0ZXIsIGMpIHtcXG4yNjk4OlxcdFxcdFxcdFxcdGlmICh0aXRlciA9PSB0KVxcbjI2OTk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcwMDpcXHRcXHRcXHRcXHR0aWR4Kys7XFxuMjcwMTpcXHRcXHRcXHR9XFxuMjcwMjpcXHRcXHRcXHRucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHIsIGMpO1xcbjI3MDM6XFx0XFx0XFx0ZG9fdHJhY2UgPSB0cnVlO1xcbjI3MDQ6XFx0XFx0fVxcbjI3MDU6XFx0XFxuMjcwNjpcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLmFwcGx5X3NjaGVtZSkge1xcbjI3MDc6XFx0XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXFx1MDAyNlxcdTAwMjZcXG4yNzA4OlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ICsgc3ogXFx1MDAzZSBxdW90YS1cXHUwMDNlZXN6KSB7XFxuMjcwOTpcXHRcXHRcXHRcXHRzeiA9IEFMSUdOX0RPV04ocXVvdGEtXFx1MDAzZWVzeiAtIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6LFxcbjI3MTA6XFx0XFx0XFx0XFx0XFx0XFx0Yy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuMjcxMTpcXHRcXHRcXHRcXHRpZiAoIXN6KVxcbjI3MTI6XFx0XFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4yNzEzOlxcdFxcdFxcdFxcdGlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKVxcbjI3MTQ6XFx0XFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4yNzE1OlxcdFxcdFxcdH1cXG4yNzE2OlxcdFxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxuMjcxNzpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjcxODpcXHRcXHRcXHRrdGltZV9nZXRfY29hcnNlX3RzNjQoXFx1MDAyNmJlZ2luKTtcXG4yNzE5OlxcdFxcdFxcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcyxcXG4yNzIwOlxcdFxcdFxcdFxcdFxcdGRhbW9uX25yX3JlZ2lvbnModCksIGRvX3RyYWNlKTtcXG4yNzIxOlxcdFxcdFxcdHN6X2FwcGxpZWQgPSBjLVxcdTAwM2VvcHMuYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMsXFxuMjcyMjpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2c3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xcbjI3MjM6XFx0XFx0XFx0ZGFtb3Nfd2Fsa19jYWxsX3dhbGsoYywgdCwgciwgcywgc3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xcbjI3MjQ6XFx0XFx0XFx0a3RpbWVfZ2V0X2NvYXJzZV90czY0KFxcdTAwMjZlbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NTowOC40ODMwNTE1NDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3MTQxNjc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgY29uc2lkZXJpbmcgaXQgYXMgbXkgb3duIHRob3VnaHQ6XG5cbioqRm9jdXNpbmcgSW46IEEgVGFyZ2V0ZWQgUmVhZCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgY2xlYXIuIEkndmUgYmVlbiB3b3JraW5nIG9uIHRoaXMgbWF0ZXJpYWwsIGJ1dCBJIG5lZWQgdG8gaG9uZSBpbiBvbiBhIHNwZWNpZmljIHNlY3Rpb24uIFRoaXMgaXNuJ3QgYSBjYXN1YWwgc2NhbjsgaXQncyBhIHN0cmF0ZWdpYyBkZWVwIGRpdmUuIFRoZSBpbnN0cnVjdGlvbiB0byByZWFkIGFyb3VuZCB0aGUgMjc0MC0yNzgwIHJhbmdlIG1lYW5zIHRoYXQgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhvc2Ugc3BlY2lmaWMgcGFnZXMgb3IgbGluZXMuIEknbGwgbmVlZCB0byBiZSByZWFkeSB0byBhbmFseXplIHRoYXQgcGFydGljdWxhciB0ZXh0IHdpdGggbXkgZXhwZXJ0IGxlbnMsIGxvb2tpbmcgZm9yIHN1YnRsZXRpZXMsIGNvbnRleHR1YWwgY3VlcywgYW5kIGNvbm5lY3Rpb25zIHRvIHRoZSBicm9hZGVyIHRvcGljIGF0IGhhbmQuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc3BlY2lmaWMgY2hhbGxlbmdlcyB3aXRoaW4gdGhhdCB0ZXh0IHRvIGNvbnNpZGVyLiBNeSBpbnR1aXRpb24gd291bGQgYmUgdG8gcmV2aWV3IHRoZSB0ZXh0IGFuZCB0YWtlIG5vdGVzIG9uIHNvbWUgb2YgdGhlIGtleSBjb25jZXB0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTU6MTAuNTU0NDcxMzM5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc0MDpcXHRzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMjc0MTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI3NDI6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4yNzQzOlxcdHtcXG4yNzQ0OlxcdFxcdHN0cnVjdCBkYW1vcyAqcztcXG4yNzQ1OlxcdFxcbjI3NDY6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4yNzQ3OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjc0ODpcXHRcXG4yNzQ5OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjI3NTA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc1MTpcXHRcXG4yNzUyOlxcdFxcdFxcdGlmICghcy1cXHUwMDNld21hcmtzLmFjdGl2YXRlZClcXG4yNzUzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NTQ6XFx0XFxuMjc1NTpcXHRcXHRcXHRpZiAoIXF1b3RhLVxcdTAwM2Vlc3opXFxuMjc1NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzU3OlxcdFxcbjI3NTg6XFx0XFx0XFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXFxuMjc1OTpcXHRcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMjc2MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzYxOlxcdFxcbjI3NjI6XFx0XFx0XFx0aWYgKGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24odCwgciwgcywgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMjc2MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzY0OlxcdFxcbjI3NjU6XFx0XFx0XFx0aWYgKHMtXFx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXFx1MDAyNlxcdTAwMjZcXG4yNzY2OlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXFx1MDAzYz0gcy1cXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMpXFxuMjc2NzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzY4OlxcdFxcbjI3Njk6XFx0XFx0XFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcXG4yNzcwOlxcdFxcdFxcdFxcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcXG4yNzcxOlxcdFxcbjI3NzI6XFx0XFx0XFx0aWYgKGRhbW9uX2lzX2xhc3RfcmVnaW9uKHIsIHQpKVxcbjI3NzM6XFx0XFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMrKztcXG4yNzc0OlxcdFxcdH1cXG4yNzc1OlxcdH1cXG4yNzc2OlxcdFxcbjI3Nzc6XFx0LypcXG4yNzc4OlxcdCAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cXG4yNzc5OlxcdCAqIEBjOlxcdFxcdFxcdG1vbml0b3JpbmcgY29udGV4dCB0byBhcHBseSBpdHMgREFNT1Mgc2NoZW1lcyB0by4uXFxuMjc4MDpcXHQgKiBAdDpcXHRcXHRcXHRtb25pdG9yaW5nIHRhcmdldCB0byBhcHBseSB0aGUgc2NoZW1lcyB0by5cXG4yNzgxOlxcdCAqIEBtYXhfcmVnaW9uX3N6OlxcdG1heGltdW0gcmVnaW9uIHNpemUgZm9yIEBjLlxcbjI3ODI6XFx0ICpcXG4yNzgzOlxcdCAqIFRoaXMgZnVuY3Rpb24gY291bGQgc3BsaXQgcmVnaW9ucyBmb3Iga2VlcGluZyB0aGUgcXVvdGEuICBUbyBtaW5pbWl6ZVxcbjI3ODQ6XFx0ICogb3ZlcmhlYWQgZnJvbSB0aGUgc3BsaXQgb3BlcmF0aW9ucyBpbmNyZWFzZWQgbnVtYmVyIG9mIHJlZ2lvbnMsIHRoaXNcXG4yNzg1OlxcdCAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBtZXJnZSByZWdpb25zIGFmdGVyIHRoZSBzY2hlbWVzIGFwcGx5aW5nIGF0dGVtcHQgaXMgZG9uZSxcXG4yNzg2OlxcdCAqIGZvciBlYWNoIHJlZ2lvbi4gIFRoZSBtZXJnZSBvcGVyYXRpb24gaXMgbWFkZSBvbmx5IHdoZW4gaXQgZG9lc24ndCBsb3NlIHRoZVxcbjI3ODc6XFx0ICogbW9uaXRvcmluZyBpbmZvcm1hdGlvbiBhbmQgbm90IHZpb2xhdGluZyBAbWF4X3JlZ2lvbl9zei5cXG4yNzg4OlxcdCAqXFxuMjc4OTpcXHQgKiBIZW5jZSwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVnaW9ucyBjb3VsZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NToxMC41NTQ5MDU5NDlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4NTY0NDg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogUXVvdGEgYW5kIFNpemUgQ2hlY2tzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgY2hhbmdlcy4gRmlyc3QsIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgLCB0aGVyZSdzIHRoaXMgbmV3IGNoZWNrOiBgaWYgKCFxdW90YS1cdTAwM2VjaGFyZ2VkX3N6KSByZXR1cm4gZmFsc2U7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgaXMgdGhpcyBuZWNlc3Nhcnk/IFByZXZpb3VzbHksIGl0IHNlZW1zIHRoZSBjb2RlIGNvdWxkIGhhdmUgcmV0dXJuZWQgYHRydWVgIHVuZGVyIGNlcnRhaW4gZWRnZSBjYXNlcywgbGlrZSB3aGVyZSBgcXVvdGEtXHUwMDNlZXN6YCAodGhlIGVzdGltYXRlZCBzaXplKSB3YXMgemVybyBvciB2ZXJ5IHNtYWxsLCBwZXJoYXBzIGxlc3MgdGhhbiBgbWluX3JlZ2lvbl9zemAsIHdoaWxlIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCAodGhlIGNoYXJnZWQgc2l6ZSkgd2FzIHN0aWxsIHplcm8uIEluIHN1Y2ggc2NlbmFyaW9zLCB0aGUgcHJldmlvdXMgY29tcGFyaXNvbiBgcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zemAgbWlnaHQgaGF2ZSBnaXZlbiBhIG1pc2xlYWRpbmcgcmVzdWx0LCBwb3RlbnRpYWxseSBjbGFpbWluZyB0aGUgcXVvdGEgd2FzIGZ1bGwgd2hlbiBpdCB3YXMsIGluIGZhY3QsIGVtcHR5LiBUaGlzIG5ldyBjaGVjayBlZmZlY3RpdmVseSBwcmV2ZW50cyB0aG9zZSBzaXR1YXRpb25zLiBXZSBkb24ndCB3YW50IHRvIHByZW1hdHVyZWx5IGZsYWcgYSBxdW90YSBhcyBmdWxsIHdoZW4gbm90aGluZyBoYXMgYWN0dWFsbHkgYmVlbiBjaGFyZ2VkLCBvciB3aGVuIHRoZSBlc3RpbWF0ZWQgc2l6ZSBpcyB6ZXJvLlxuXG5OZXh0LCBpbiBgZGFtb25fZG9fYXBwbHlfc2NoZW1lcygpYCwgd2UncmUgbm93IHNraXBwaW5nIHRoZSBzY2hlbWUgYXBwbGljYXRpb24gaWYgYHF1b3RhLVx1MDAzZWVzemAgaXMgemVybzogYGlmICghcXVvdGEtXHUwMDNlZXN6KSBjb250aW51ZTtgLiBUaGlzIG1ha2VzIHNlbnNlLiBJZiB0aGUgZXN0aW1hdGVkIHNpemUgaXMgemVybywgdGhlbiB0aGVyZSdzIGxpa2VseSBubyBtZWFuaW5nZnVsIHF1b3RhIHRvIG1hbmFnZS4gQXBwbHlpbmcgYSBzY2hlbWUgaW4gc3VjaCBjYXNlcyB3b3VsZCBiZSBhIHdhc3RlIG9mIHJlc291cmNlcyBhbmQgcG90ZW50aWFsbHkgbGVhZCB0byBpbmNvcnJlY3QgYmVoYXZpb3IuXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlc2UgYHF1b3RhLVx1MDAzZWVzemAgYW5kIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCBtZW1iZXJzIGFyZSB3aXRoaW4gdGhlIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgIGluc2lkZSB0aGUgYHN0cnVjdCBkYW1vc2AuIEknbGwgYWxzbyBuZWVkIHRvIHJldmlzaXQgaG93IHRoZSBgZGFtb3NfcXVvdGFfaXNfc2V0YCBmdW5jdGlvbiBiZWhhdmVzIGluIHRoZXNlIHNjZW5hcmlvcywgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU1OjEzLjY0MDU1Mzc2N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNzcwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfaXNfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjM3MT1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjM4Ni0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyMzg3OiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXFxubW0vZGFtb24vY29yZS5jLTIzODgtICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzkxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMzkyOnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbm1tL2RhbW9uL2NvcmUuYy0yMzkzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMzk4PXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MDItXFxubW0vZGFtb24vY29yZS5jOjI0MDM6XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjQwNC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI2NTM9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NTUte1xcbm1tL2RhbW9uL2NvcmUuYzoyNjU2OlxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG5tbS9kYW1vbi9jb3JlLmMtMjY1Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY2OT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzA2LVxcdGlmIChjLVxcdTAwM2VvcHMuYXBwbHlfc2NoZW1lKSB7XFxubW0vZGFtb24vY29yZS5jOjI3MDc6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kYW1vbi9jb3JlLmMtMjcwOC1cXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArIHN6IFxcdTAwM2UgcXVvdGEtXFx1MDAzZWVzeikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NToxMy42OTE4MzU5MTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzNzU2MDMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBTZXR0aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKWAgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBwcmV0dHkgZ29vZCBjbHVlLCBzdWdnZXN0aW5nIGEgY2hlY2sgcmVsYXRlZCB0byBxdW90YXMgaW4gREFNT04uIE5vdywgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIGluIGNvbnRleHQsIHRvIHNlZSB3aGF0IHRoZSBwYXJhbWV0ZXJzIG1lYW4sIGFuZCBob3cgdGhpcyBjaGVjayBmYWN0b3JzIGludG8gdGhlIGJyb2FkZXIgc2NoZW1lLiBJdCdzIGEga2V5IHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGEgbWlzc3RlcCBoZXJlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wYWN0cy4gTGV0IG1lIHNlZS4uLiBJJ2xsIHB1bGwgdXAgdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUgYW5kIGp1bXAgdG8gbGluZXMgMjM4NSB0aHJvdWdoIDIzOTcuIEhvcGVmdWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZ2l2ZXMgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBxdW90YSBjaGVjay4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IGNvbnN0aXR1dGVzIGEgdmFsaWQgcXVvdGEgc2V0dGluZyBhbmQgdGhlIGNvbmRpdGlvbnMgd2hpY2ggdHJpZ2dlciB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbi4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjkxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTU6MTYuMTI5Mzk4NDkxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM4NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM4NTpcXHRcXG4yMzg2OlxcdC8qXFxuMjM4NzpcXHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxcbjIzODg6XFx0ICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4yMzg5OlxcdCAqXFxuMjM5MDpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1b3RhIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbjIzOTE6XFx0ICovXFxuMjM5MjpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4yMzkzOlxcdHtcXG4yMzk0OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IHx8IHF1b3RhLVxcdTAwM2VzeiB8fCBxdW90YS1cXHUwMDNlbXMgfHxcXG4yMzk1OlxcdFxcdFxcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XFxuMjM5NjpcXHR9XFxuMjM5NzpcXHRcXG4yMzk4OlxcdHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbjIzOTk6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NToxNi4xMjk2MzA0OTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU3NzQ2Njk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIE15IGluaXRpYWwgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCBoaW5nZXMgb24gYSBjYXJlZnVsIGFzc2Vzc21lbnQgb2YgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgcmlza3MuIE15IHByb2Nlc3MgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgY2hlY2tsaXN0OlxuXG4xLiAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uPyoqIE5vcGUuIFRoaXMgcGF0Y2ggZG9lc24ndCB0b3VjaCBhbnkgb2YgdGhlIHVzZXItc3BhY2UgY29weSBmdW5jdGlvbnMgbGlrZSBgY29weV90b191c2VyYC4gQSBnb29kIHN0YXJ0LlxuXG4yLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlcz8qKiBObywgbm90aGluZyB0byB3b3JyeSBhYm91dCBoZXJlIGVpdGhlci4gVGhlIGBxdW90YWAgc3RydWN0dXJlLCB3aGljaCBpcyB0aGUgZm9jdXMgb2YgdGhlc2UgY2hhbmdlcywgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHkgd2hlbiBEQU1PTiBzY2hlbWVzIGFyZSBjcmVhdGVkIHVzaW5nIGVpdGhlciB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIG9yIHRoZSBBUEkuIFdlJ3JlIHVzaW5nIGBremFsbG9jYCBvciBkZWZhdWx0IGluaXRpYWxpemF0aW9uLCBzbyB3ZSdyZSBnb29kIHRoZXJlLlxuXG4zLiAgKipNZW1vcnkgTWFuaXB1bGF0aW9uPyoqIFRoaXMgaXMgY3J1Y2lhbC4gQW0gSSBjaGFuZ2luZyBhbnkgbWVtb3J5IGFsbG9jYXRpb25zPyBBbSBJIG1vZGlmeWluZyBkYXRhIGNvcHlpbmcgaW4gbmV3IHdheXM/IFN0cnVjdCBsYXlvdXQgY2hhbmdlcz8gRXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhPyBObyB0byBhbGwgb2YgdGhlIGFib3ZlLiBUaGlzIHBhdGNoIHNpbXBseSBhZGRzIHR3byBlYXJseS1leGl0IHNhbml0eSBjaGVja3Mgb24gZXhpc3RpbmcgZmllbGRzOiBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgYW5kIGBxdW90YS1cdTAwM2Vlc3pgLiBUaGlzIGlzIHRvIHByZXZlbnQgbG9naWNhbCBlcnJvcnMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIHN1Y2ggYXMgZGl2aXNpb24gYnkgemVybyBvciBhbiBpbmFwcHJvcHJpYXRlIHNjaGVtZSBhcHBsaWNhdGlvbiB3aGVuIHRoZSBxdW90YSBpcyB6ZXJvIG9yIGNoYXJnZWQgc2l6ZSBpcyB6ZXJvLlxuXG40LiAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrPyoqIEFic29sdXRlbHkgbm9uZS4gTXkgYXNzZXNzbWVudCBjb25jbHVkZXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgcmlza3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBuZWVkIGZvciBhIEtNU0FOIGRlZGljYXRlZCBmdXp6aW5nIHJ1biB2cyBLQVNBTjpcblxuKiAgIEkga25vdyBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzIGFscmVhZHkgaW5jbHVkZSBLQVNBTiwgTE9DS0RFUCwgVUJTQU4sIGV0Yy5cbiogICBLTVNBTiBpcyB0aGUgaGVhdnkgaGl0dGVyIGhlcmUuIEl0J3MgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuXG4qICAgSSBvbmx5IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpZiBhIGNoYW5nZSBpbnRyb2R1Y2VzIG9yICpleHBvc2VzKiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLlxuKiAgIEFuZCBoZXJlPyBUaGVzZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQgYXJpdGhtZXRpYyBhbmQgbG9naWNhbCBjaGVja3Mgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0gKGBtbS9kYW1vbi9jb3JlLmNgKS4gVGhleSAqZG9uJ3QqIGFsbG9jYXRlIG1lbW9yeS4gVGhleSAqZG9uJ3QqIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGV5ICpkb24ndCogcmVhZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW5kIHRoZXkgKmRvbid0KiBhbHRlciBidWZmZXIgYm91bmRzLlxuXG5UaGUgY29uY2x1c2lvbiBpcyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBoZXJlLlxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIGV2ZXJ5IGRldGFpbCB0byBlbnN1cmUgbXkgYXNzZXNzbWVudCBpcyBzb3VuZC4gU28gbGV0IG1lIHN1bW1hcml6ZSBzdWNjaW5jdGx5OiBUaGUgcGF0Y2ggYWx0ZXJzIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lcygpYCBpbiBEQU1PTiBjb3JlIHRvIGluY2x1ZGUgY2hlY2tzIGZvciBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9PSAwYCBhbmQgYHF1b3RhLVx1MDAzZWVzeiA9PSAwYC4gTm8gbmV3IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vdGhpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyBpcyByZWFkIG9yIGV4cG9zZWQuIFRoZSBmaWVsZHMgYWNjZXNzZWQgKGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCwgYHF1b3RhLVx1MDAzZWVzemApIGFyZSBwYXJ0IG9mIGVzdGFibGlzaGVkIERBTU9OIHNjaGVtZSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIG1hbmFnZWQgd2VsbCBieSBEQU1PTiBpdHNlbGYuIEFueSBidWdzIHdpbGwgcmVsYXRlIHRvIHRoZSBleGlzdGluZyBib3VuZGFyeSBjb25kaXRpb25zIGluIHF1b3RhIGNhbGN1bGF0aW9ucywgYnV0IG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gR2l2ZW4gYWxsIG9mIHRoaXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBJIGNhbiBub3cgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDYsIk91dHB1dFRva2VucyI6MTk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTU6MjIuNzA3MTAwMTFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgZWFybHkgcmV0dXJuIGNoZWNrcyB3aGVuIGBxdW90YS1cXHUwMDNlY2hhcmdlZF9zemAgb3IgYHF1b3RhLVxcdTAwM2Vlc3pgIGFyZSB6ZXJvIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lcygpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzOlxcbjEuIERvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LlxcbjIuIERvIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBPbmx5IGFkZCBjb25kaXRpb25hbCBjaGVja3Mgb24gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgLlxcblxcbkJlY2F1c2UgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gcXVvdGEgY2FsY3VsYXRpb24gbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBlYXJseSByZXR1cm4gY2hlY2tzIHdoZW4gYHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6YCBvciBgcXVvdGEtXFx1MDAzZWVzemAgYXJlIHplcm8gaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzKClgLlxcblxcblRoZXNlIGNoYW5nZXM6XFxuMS4gRG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuXFxuMi4gRG8gbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZSBvciBhbHRlciBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcbjMuIE9ubHkgYWRkIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBkYW1vc19xdW90YWAuXFxuXFxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownbplw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 00:52:14 +0000 UTC FinishedAt: 2026-09-03 00:55:24 +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": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "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": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "64372cb2-1b58-42da-a1da-4f4b8982cc49" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_start", "damon_set_schemes", "damon_commit_ctx", "damos_commit_quota_goals", "damon_sysfs_add_schemes" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbHMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGVhcmx5IHJldHVybiBjaGVja3Mgd2hlbiBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgb3IgYHF1b3RhLVx1MDAzZWVzemAgYXJlIHplcm8gaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzKClgLlxuXG5UaGVzZSBjaGFuZ2VzOlxuMS4gRG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuXG4yLiBEbyBub3QgY29weSBhbnkgZGF0YSB0byB1c2VyIHNwYWNlIG9yIGFsdGVyIGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4zLiBPbmx5IGFkZCBjb25kaXRpb25hbCBjaGVja3Mgb24gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgLlxuXG5CZWNhdXNlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHNjaGVtZSBxdW90YSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyAoc3BlY2lmaWNhbGx5IGRhbW9zX3F1b3RhX2lzX2Z1bGwgYW5kIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMpIHRvIGhhbmRsZSB6ZXJvIGNoYXJnZWQgc2l6ZSBhbmQgemVybyBlZmZlY3RpdmUgc2NoZW1lIHNpemUgY29uZGl0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIGtlcm5lbCBBUElzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY1YzhmYjk2MzliOGM4Yzg4NGNmYzI1Mzc0MDNiYmEzOTA1Njg4N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjUzOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggZGYyMjYyMTc2NTkxMS4uZjhjNzg0ZGYyNDYwMCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMjY1NSw2ICYjNDM7MjY1NSw4IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbiB7XG4gXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoIXF1b3RhLVx1MDAzZWNoYXJnZWRfc3opXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHQvKlxuQEAgLTI3NTAsNiAmIzQzOzI3NTIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0aWYgKCFxdW90YS1cdTAwM2Vlc3opXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG4gXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuIFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbHMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBzY2hlbWUgcXVvdGEgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9kYW1vbi9jb3JlLmMgKHNwZWNpZmljYWxseSBkYW1vc19xdW90YV9pc19mdWxsIGFuZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKSB0byBoYW5kbGUgemVybyBjaGFyZ2VkIHNpemUgYW5kIHplcm8gZWZmZWN0aXZlIHNjaGVtZSBzaXplIGNvbmRpdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlIGFuZCBrZXJuZWwgQVBJcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNWM4ZmI5NjM5YjhjOGM4ODRjZmMyNTM3NDAzYmJhMzkwNTY4ODdkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwMDo1Mzo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCBkZjIyNjIxNzY1OTExLi5mOGM3ODRkZjI0NjAwIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0yNjU1LDYgJiM0MzsyNjU1LDggQEAgc3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLAogewogCWlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSkKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoIXF1b3RhLSZndDtjaGFyZ2VkX3N6KQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCWlmIChxdW90YS0mZ3Q7Y2hhcmdlZF9zeiAmZ3Q7PSBxdW90YS0mZ3Q7ZXN6KQogCQlyZXR1cm4gdHJ1ZTsKIAkvKgpAQCAtMjc1MCw2ICYjNDM7Mjc1Miw5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYywKIAkJaWYgKCFzLSZndDt3bWFya3MuYWN0aXZhdGVkKQogCQkJY29udGludWU7CiAKJiM0MzsJCWlmICghcXVvdGEtJmd0O2VzeikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJLyogQ2hlY2sgdGhlIHF1b3RhICovCiAJCWlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLSZndDttaW5fcmVnaW9uX3N6KSkKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYwCgkJCQkJCQlvdXRwdXQ6IDY2CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gQ29kZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGxpZXMuIEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZC4gSSYjMzk7bSB0aGlua2luZyBhIHF1aWNrIGByZWFkLWZpbGVgIG9yIGV2ZW4gYSBgZ3JlcHBlcmAgcGFzcyB0aHJvdWdoIGBtbS9kYW1vbi9jb3JlLmNgIGlzIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBhIHByZWxpbWluYXJ5IG92ZXJ2aWV3LiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGVzZSBjaGFuZ2VzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBLY29uZmlnIG9wdGlvbnMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZWxwcyBtZSBuYXJyb3cgZG93biB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhlc2UgY2hhbmdlcyB3aWxsIGFwcGx5LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0IHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY1MDpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xuMjY1MTpcdH1cbjI2NTI6XHRcbjI2NTM6XHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4yNjU0Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbjI2NTU6XHR7XG4yNjU2Olx0XHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4yNjU3Olx0XHRcdHJldHVybiBmYWxzZTtcbjI2NTg6XHRcdGlmICghcXVvdGEtXHUwMDNlY2hhcmdlZF9zeilcbjI2NTk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjY2MDpcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opXG4yNjYxOlx0XHRcdHJldHVybiB0cnVlO1xuMjY2MjpcdFx0LypcbjI2NjM6XHRcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFx1MDAzY21pbl9yZWdpb25fc3ogcmVtYWluaW5nXG4yNjY0Olx0XHQgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC5cbjI2NjU6XHRcdCAqL1xuMjY2NjpcdFx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiAtIHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNjIG1pbl9yZWdpb25fc3o7XG4yNjY3Olx0fVxuMjY2ODpcdFxuMjY2OTpcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuMjY3MDpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXG4yNjcxOlx0e1xuMjY3MjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4yNjczOlx0XHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xuMjY3NDpcdFx0c3RydWN0IHRpbWVzcGVjNjQgYmVnaW4sIGVuZDtcbjI2NzU6XHRcdHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCA9IDA7XG4yNjc2Olx0XHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkID0gMDtcbjI2Nzc6XHRcdC8qXG4yNjc4Olx0XHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcbjI2Nzk6XHRcdCAqIGltcGxpZXMgd2l0aCAmIzM5O25yX2NvbnRleHRzJiMzOTsgZmlsZS4gIE5ldmVydGhlbGVzcywgb25seSBzaW5nbGUgY29udGV4dFxuMjY4MDpcdFx0ICogcGVyIGtkYW1vbmQgaXMgc3VwcG9ydGVkIGZvciBub3cuICBTbywgd2UgY2FuIHNpbXBseSB1c2UgJiMzOTswJiMzOTsgY29udGV4dFxuMjY4MTpcdFx0ICogaW5kZXggaGVyZS5cbjI2ODI6XHRcdCAqL1xuMjY4MzpcdFx0dW5zaWduZWQgaW50IGNpZHggPSAwO1xuMjY4NDpcdFx0c3RydWN0IGRhbW9zICpzaXRlcjtcdFx0Lyogc2NoZW1lcyBpdGVyYXRvciAqL1xuMjY4NTpcdFx0dW5zaWduZWQgaW50IHNpZHggPSAwO1xuMjY4NjpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7XHQvKiB0YXJnZXRzIGl0ZXJhdG9yICovXG4yNjg3Olx0XHR1bnNpZ25lZCBpbnQgdGlkeCA9IDAsIG5yX2FjY2Vzc2VzID0gMDtcbjI2ODg6XHRcdGJvb2wgZG9fdHJhY2UgPSBmYWxzZTtcbjI2ODk6XHRcbjI2OTA6XHRcdC8qIGdldCBpbmRpY2VzIGZvciB0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoKSAqL1xuMjY5MTpcdFx0aWYgKHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseV9lbmFibGVkKCkpIHtcbjI2OTI6XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNpdGVyLCBjKSB7XG4yNjkzOlx0XHRcdFx0aWYgKHNpdGVyID09IHMpXG4yNjk0Olx0XHRcdFx0XHRicmVhaztcbjI2OTU6XHRcdFx0XHRzaWR4JiM0MzsmIzQzOztcbjI2OTY6XHRcdFx0fVxuMjY5NzpcdFx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodGl0ZXIsIGMpIHtcbjI2OTg6XHRcdFx0XHRpZiAodGl0ZXIgPT0gdClcbjI2OTk6XHRcdFx0XHRcdGJyZWFrO1xuMjcwMDpcdFx0XHRcdHRpZHgmIzQzOyYjNDM7O1xuMjcwMTpcdFx0XHR9XG4yNzAyOlx0XHRcdG5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ociwgYyk7XG4yNzAzOlx0XHRcdGRvX3RyYWNlID0gdHJ1ZTtcbjI3MDQ6XHRcdH1cbjI3MDU6XHRcbjI3MDY6XHRcdGlmIChjLVx1MDAzZW9wcy5hcHBseV9zY2hlbWUpIHtcbjI3MDc6XHRcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXHUwMDI2XHUwMDI2XG4yNzA4Olx0XHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ICYjNDM7IHN6IFx1MDAzZSBxdW90YS1cdTAwM2Vlc3opIHtcbjI3MDk6XHRcdFx0XHRzeiA9IEFMSUdOX0RPV04ocXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeixcbjI3MTA6XHRcdFx0XHRcdFx0Yy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbjI3MTE6XHRcdFx0XHRpZiAoIXN6KVxuMjcxMjpcdFx0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbjI3MTM6XHRcdFx0XHRpZiAoZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KSlcbjI3MTQ6XHRcdFx0XHRcdGdvdG8gdXBkYXRlX3N0YXQ7XG4yNzE1Olx0XHRcdH1cbjI3MTY6XHRcdFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcbjI3MTc6XHRcdFx0XHRyZXR1cm47XG4yNzE4Olx0XHRcdGt0aW1lX2dldF9jb2Fyc2VfdHM2NChcdTAwMjZiZWdpbik7XG4yNzE5Olx0XHRcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcyxcbjI3MjA6XHRcdFx0XHRcdGRhbW9uX25yX3JlZ2lvbnModCksIGRvX3RyYWNlKTtcbjI3MjE6XHRcdFx0c3pfYXBwbGllZCA9IGMtXHUwMDNlb3BzLmFwcGx5X3NjaGVtZShjLCB0LCByLCBzLFxuMjcyMjpcdFx0XHRcdFx0XHUwMDI2c3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xuMjcyMzpcdFx0XHRkYW1vc193YWxrX2NhbGxfd2FsayhjLCB0LCByLCBzLCBzel9vcHNfZmlsdGVyX3Bhc3NlZCk7XG4yNzI0Olx0XHRcdGt0aW1lX2dldF9jb2Fyc2VfdHM2NChcdTAwMjZlbmQpO1xuMjcyNTpcdFx0XHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zICYjNDM7PSB0aW1lc3BlYzY0X3RvX25zKFx1MDAyNmVuZCkgLVxuMjcyNjpcdFx0XHRcdHRpbWVzcGVjNjRfdG9fbnMoXHUwMDI2YmVnaW4pO1xuMjcyNzpcdFx0XHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcbjI3Mjg6XHRcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcbjI3Mjk6XHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xuMjczMDpcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbjI3MzE6XHRcdFx0fVxuMjczMjpcdFx0fVxuMjczMzpcdFx0aWYgKHMtXHUwMDNlYWN0aW9uICE9IERBTU9TX1NUQVQpXG4yNzM0Olx0XHRcdHItXHUwMDNlYWdlID0gMDtcbjI3MzU6XHRcbjI3MzY6XHR1cGRhdGVfc3RhdDpcbjI3Mzc6XHRcdGRhbW9zX3VwZGF0ZV9zdGF0KHMsIHN6LCBzel9hcHBsaWVkLCBzel9vcHNfZmlsdGVyX3Bhc3NlZCk7XG4yNzM4Olx0fVxuMjczOTpcdFxuMjc0MDpcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbjI3NDE6XHRcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNzQyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMjc0MzpcdHtcbjI3NDQ6XHRcdHN0cnVjdCBkYW1vcyAqcztcbjI3NDU6XHRcbjI3NDY6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4yNzQ3Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjc0ODpcdFxuMjc0OTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBNZWNoYW5pc20qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uLiBMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEZpcnN0LCBpdCBjaGVja3MgaWYgdGhlIHF1b3RhIGlzIGFjdHVhbGx5IHNldCwgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSB1c2FnZS4gVGhlbiwgaXQgY29tcGFyZXMgdGhlIGNoYXJnZWQgc2l6ZSBhZ2FpbnN0IHRoZSBlc3RhYmxpc2hlZCBzaXplLCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUgaWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRha2luZyBpbnRvIGFjY291bnQgYW55IHNpemVzIHRvIGNoYXJnZSB0byB0aGUgcXVvdGEuIFRoZSBjcml0aWNhbCBwYXJ0IHNlZW1zIHRvIGJlIHRoZSBjaGVjazogYHF1b3RhLSZndDtlc3ogLSBxdW90YS0mZ3Q7Y2hhcmdlZF9zeiAmbHQ7IG1pbl9yZWdpb25fc3pgLiBUaGlzIGltcGxpZXMgdGhhdCBldmVuIGlmIHRoZXJlJiMzOTtzIGEgc21hbGwgYW1vdW50IHJlbWFpbmluZyBpbiB0aGUgcXVvdGEsIGxlc3MgdGhhbiB0aGUgbWluaW11bSByZWdpb24gc2l6ZSwgaXQgZWZmZWN0aXZlbHkgY29uc2lkZXJzIHRoZSBxdW90YSBleGhhdXN0ZWQuIFRoaXMgbWVhbnMgREFNT04gaXMgZGVzaWduZWQgdG8gaGFuZGxlIGFjdGlvbnMgb24gYSBwZXItcmVnaW9uIGJhc2lzLCBzbyBpZiB0aGUgcmVtYWluaW5nIHF1b3RhIGlzbiYjMzk7dCBsYXJnZSBlbm91Z2ggdG8gY292ZXIgYXQgbGVhc3QgYSBtaW5pbXVtIHJlZ2lvbiwgaXQgd29uJiMzOTt0IHByb2NlZWQuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgZnVuY3Rpb24gc2VlbXMgdG8gYmUgdXNpbmcgaXQuIEl0IGNoZWNrcyBpZiB0aGUgcXVvdGEmIzM5O3Mgc2l6ZSBpcyBzZXQsIGFuZCB0aGVuIGNhbGxzIGBkYW1vc19xdW90YV9pc19mdWxsYC4gSWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZSBjb2RlIGNvbnRpbnVlcyB0byB0aGUgbmV4dCBzY2hlbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgbG9naWMgaXMgaW1wbGVtZW50ZWQgdGhpcyB3YXkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgd2hhdCBjb21taXQgaW50cm9kdWNlZCB0aGlzLCBvciB3aGF0IHNwZWNpZmljIHByb2JsZW0gdGhpcyBxdW90YSBtZWNoYW5pc20gaXMgbWVhbnQgdG8gc29sdmUuIExldCYjMzk7cyBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGNvZGViYXNlIGZvciB1c2FnZXMgb2YgdGhlc2UgZnVuY3Rpb24gbmFtZXMgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhpcyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc0MDpcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbjI3NDE6XHRcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNzQyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMjc0MzpcdHtcbjI3NDQ6XHRcdHN0cnVjdCBkYW1vcyAqcztcbjI3NDU6XHRcbjI3NDY6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4yNzQ3Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjc0ODpcdFxuMjc0OTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4yNzUwOlx0XHRcdFx0Y29udGludWU7XG4yNzUxOlx0XG4yNzUyOlx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMjc1MzpcdFx0XHRcdGNvbnRpbnVlO1xuMjc1NDpcdFxuMjc1NTpcdFx0XHRpZiAoIXF1b3RhLVx1MDAzZWVzeilcbjI3NTY6XHRcdFx0XHRjb250aW51ZTtcbjI3NTc6XHRcbjI3NTg6XHRcdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG4yNzU5Olx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc2MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjc2MTpcdFxuMjc2MjpcdFx0XHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc2MzpcdFx0XHRcdGNvbnRpbnVlO1xuMjc2NDpcdFxuMjc2NTpcdFx0XHRpZiAocy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAyNlx1MDAyNlxuMjc2NjpcdFx0XHRcdFx0cy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAzYz0gcy1cdTAwM2VzdGF0Lm5yX3NuYXBzaG90cylcbjI3Njc6XHRcdFx0XHRjb250aW51ZTtcbjI3Njg6XHRcbjI3Njk6XHRcdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbjI3NzA6XHRcdFx0XHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XG4yNzcxOlx0XG4yNzcyOlx0XHRcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcbjI3NzM6XHRcdFx0XHRzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzJiM0MzsmIzQzOztcbjI3NzQ6XHRcdH1cbjI3NzU6XHR9XG4yNzc2Olx0XG4yNzc3Olx0LypcbjI3Nzg6XHQgKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXG4yNzc5Olx0ICogQGM6XHRcdFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cbjI3ODA6XHQgKiBAdDpcdFx0XHRtb25pdG9yaW5nIHRhcmdldCB0byBhcHBseSB0aGUgc2NoZW1lcyB0by5cbjI3ODE6XHQgKiBAbWF4X3JlZ2lvbl9zejpcdG1heGltdW0gcmVnaW9uIHNpemUgZm9yIEBjLlxuMjc4MjpcdCAqXG4yNzgzOlx0ICogVGhpcyBmdW5jdGlvbiBjb3VsZCBzcGxpdCByZWdpb25zIGZvciBrZWVwaW5nIHRoZSBxdW90YS4gIFRvIG1pbmltaXplXG4yNzg0Olx0ICogb3ZlcmhlYWQgZnJvbSB0aGUgc3BsaXQgb3BlcmF0aW9ucyBpbmNyZWFzZWQgbnVtYmVyIG9mIHJlZ2lvbnMsIHRoaXNcbjI3ODU6XHQgKiBmdW5jdGlvbiB3aWxsIGFsc28gbWVyZ2UgcmVnaW9ucyBhZnRlciB0aGUgc2NoZW1lcyBhcHBseWluZyBhdHRlbXB0IGlzIGRvbmUsXG4yNzg2Olx0ICogZm9yIGVhY2ggcmVnaW9uLiAgVGhlIG1lcmdlIG9wZXJhdGlvbiBpcyBtYWRlIG9ubHkgd2hlbiBpdCBkb2VzbiYjMzk7dCBsb3NlIHRoZVxuMjc4NzpcdCAqIG1vbml0b3JpbmcgaW5mb3JtYXRpb24gYW5kIG5vdCB2aW9sYXRpbmcgQG1heF9yZWdpb25fc3ouXG4yNzg4Olx0ICpcbjI3ODk6XHQgKiBIZW5jZSwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVnaW9ucyBjb3VsZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgREFNT04gUXVvdGEgTG9naWMgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgbG9naWMgY2hhbmdlIGluIHRoZSBxdW90YSBtYW5hZ2VtZW50IHdpdGhpbiBEQU1PTi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSYjMzk7bSBmb2N1c2luZyBvbiBzY2VuYXJpb3Mgd2hlcmUgYHF1b3RhLSZndDtlc3pgIChlZmZlY3RpdmUgc2l6ZSkgb3IgYHF1b3RhLSZndDtjaGFyZ2VkX3N6YCAoY2hhcmdlZCBzaXplKSBtaWdodCBiZSB6ZXJvLiBTcGVjaWZpY2FsbHksIHRoZSBsaW5lIHRoYXQganVtcHMgb3V0IGlzIGByZXR1cm4gcXVvdGEtJmd0O2VzeiAtIHF1b3RhLSZndDtjaGFyZ2VkX3N6ICZsdDsgbWluX3JlZ2lvbl9zejtgLiBJZiBib3RoIGBlc3pgIGFuZCBgY2hhcmdlZF9zemAgYXJlIHplcm8sIGFuIHVuc2lnbmVkIHVuZGVyZmxvdyBjb3VsZCBoYXBwZW4uIFByZXZpb3VzbHksIHRoZSBjaGVjayBgcXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzemAgd291bGQgaGF2ZSBldmFsdWF0ZWQgdG8gdHJ1ZSBpbiB0aGF0IHNjZW5hcmlvICgwICZndDs9IDAgaXMgdHJ1ZSEpLCBsZWFkaW5nIHRvIGFuIGluY29ycmVjdCBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgcmV0dXJuLiBUaGlzIG1lYW5zIHRoYXQgYSBxdW90YSBtaWdodCBoYXZlIGJlZW4gaW5jb3JyZWN0bHkgcmVwb3J0ZWQgYXMgZnVsbCB3aGVuIGl0IHdhcyBub3QuCgpOb3cgSSBzZWUgaXQsIHRoZSBmaXg6ICBgaWYgKCFxdW90YS0mZ3Q7Y2hhcmdlZF9zeikgcmV0dXJuIGZhbHNlO2AgIFRoaXMgbWVhbnMsIGlmIHRoZSBjaGFyZ2VkIHNpemUgaXMgemVybywgd2UmIzM5O3JlIGV4cGxpY2l0bHkgcmV0dXJuaW5nIGZhbHNlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHF1b3RhIGlzICpub3QqIGZ1bGwuIEFuZCBpbiB0aGUgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uLCB3ZSBub3cgaGF2ZSBgaWYgKCFxdW90YS0mZ3Q7ZXN6KSBjb250aW51ZTtgICBTbyBpZiB0aGUgZWZmZWN0aXZlIHNpemUgaXMgemVybywgd2UgZG9uJiMzOTt0IGFwcGx5IGEgc2NoZW1lLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHNhZmV0eSBuZXQuCgpTbywgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2UuIE5vdywgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIGlzIHRoZSBjaGFuZ2UgbWVyZWx5IGZpeGluZyBhIGxvZ2ljIGVycm9yPwoKSSBuZWVkIHRvIHNlZSBob3cgREFNT04gaXMgdXNlZCBpbiB0aGUga2VybmVsLiBIb3cgY2FuIEkgdHJpZ2dlciBpdCwgYW5kIGhvdyBpcyBpdCBjb25maWd1cmVkPyBJIG5lZWQgdG8gY2hlY2sgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYnkgZnV6emluZy9RRU1VIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gaWRlbnRpZnkgZW50cnlwb2ludHMgYnkgbG9va2luZyBhdCB0aGUgc3ltYm9scywgZXRjLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vZGFtb24vS2NvbmZpZ2AgYW5kIGBtbS9kYW1vbi9NYWtlZmlsZWAgdG8gc2VlIGhvdyBEQU1PTiBpcyBlbmFibGVkLCBhbmQgd2hhdCB0aGUgYnVpbGQgcHJvY2VzcyBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgREFNT04gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGZvciBEQU1PTiBhbmQgaXRzIHZhcmlvdXMgZmVhdHVyZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpbmdzIGxpa2UgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgdGhlIGxpa2UsIGFyZSBtZXRpY3Vsb3VzbHkgbGFpZCBvdXQuIEJ5IGV4YW1pbmluZyB0aGF0IEtjb25maWcgZmlsZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBwcmVjaXNlbHkgdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRob3NlIGZlYXR1cmVzLCBzZWUgd2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhcmUgcmVxdWlyZWQgZm9yIGVhY2ggb25lLCBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IG9wdGlvbnMgYXJlIHNlbGVjdGVkIHRvIGdldCB0aGUgZGVzaXJlZCBEQU1PTiBiZWhhdmlvci4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSBzdGFibGUgYW5kIHByb3Blcmx5LWZ1bmN0aW9uaW5nIERBTU9OIGltcGxlbWVudGF0aW9uLCBhbmQgYEtjb25maWdgIGlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiAgMjE6XHRcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbiAgMjI6XHRcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcbiAgMjc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyODpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAyOTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBJbnZlc3RpZ2F0aW9uOiBJbml0aWFsIFRob3VnaHRzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBEQU1PTiBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb25maWd1cmF0aW9uIGJhc2ljcy4gU28sIERBTU9OIGlzIGNsZWFybHkgY29uZmlndXJlZCB2aWEgc3lzZnMsIGFzIGluZGljYXRlZCBieSBgQ09ORklHX0RBTU9OX1NZU0ZTYCBhbmQgYENPTkZJR19EQU1PTmAuIFRoYXQgbWFrZXMgc2Vuc2U7IHN5c2ZzIGlzIHRoZSBzdGFuZGFyZCBpbnRlcmZhY2UgZm9yIHByb2JpbmcgYW5kIG1hbmlwdWxhdGluZyBrZXJuZWwgcGFyYW1ldGVycy4gVGhlIG1lbnRpb25zIG9mIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9WQUREUmAgaW1tZWRpYXRlbHkgc2lnbmFsIHRob3NlIGFyZSBvcGVyYXRpb24gc2V0cyB3aGljaCBuZWVkIGRlZXBlciBleGFtaW5hdGlvbi4KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gcGlucG9pbnQgaG93IERBTU9OIGlzICphY3R1YWxseSogZW5nYWdlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4gSXMgaXQgaW52b2tlZCB0aHJvdWdoIGEgdXNlcnNwYWNlIEFQST8gRG9lcyBhIGtlcm5lbCBBUEkgdHJpZ2dlciBpdD8gSSYjMzk7bGwgbmVlZCB0byByZXNlYXJjaCB0aGUgY2FsbCBzdGFjay4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGRldGVybWluZSB3aGVyZSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgaXMgY2FsbGVkIGZyb20uIFRoYXQgZnVuY3Rpb24gY2FsbCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGFjdGl2YXRpb24gbG9naWMuIExldCYjMzk7cyBzZWUgd2hlcmUgdGhhdCB0YWtlcyB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjY2OT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjczOS1cbm1tL2RhbW9uL2NvcmUuYzoyNzQwOnN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0yNzQxLVx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mjc5NT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgwMi1cbm1tL2RhbW9uL2NvcmUuYzoyODAzOlx0XHRkYW1vbl9kb19hcHBseV9zY2hlbWVzKGMsIHQsIHIpO1xubW0vZGFtb24vY29yZS5jLTI4MDQtXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVHJhY2luZyB0aGUgREFNT04gQXBwbGljYXRpb24gUGF0aCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGBkYW1vc19hcHBseV90YXJnZXRgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndobyogaXMgY2FsbGluZyBpdCwgYW5kIGZyb20gd2hlcmUsIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGNhbGwgc3RhY2sgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBleGVjdXRpb24gcGF0aC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGZ1bmN0aW9uLCBhbmQgZXZlcnkgZnVuY3Rpb24gdGhhdCBsZWFkcyB0byBpdCwgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQXJlIHdlIGxvb2tpbmcgYXQgZGlyZWN0IGNhbGxzLCBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsZXIuIFdoYXQgZGF0YSBpcyBiZWluZyBwYXNzZWQgdG8gYGRhbW9zX2FwcGx5X3RhcmdldGAsIGFuZCBob3cgaXMgaXQgdXNlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNhbGxzIGFyZSBoYXBwZW5pbmcgaW4gdGhlIHNhbWUgY29udGV4dCwgc2FtZSB0YXNrLCBvciBpZiB0aGUgY2FsbHMgYXJlIGhhcHBlbmluZyBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LiBUaGlzIHdpbGwgaW1wYWN0IHRoZSB0cmFjaW5nIGVmZm9ydHMsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIGJlIGFibGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2FwcGx5X3RhcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mjc0MD1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NzctLypcbm1tL2RhbW9uL2NvcmUuYzoyNzc4OiAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cbm1tL2RhbW9uL2NvcmUuYy0yNzc5LSAqIEBjOlx0XHRcdG1vbml0b3JpbmcgY29udGV4dCB0byBhcHBseSBpdHMgREFNT1Mgc2NoZW1lcyB0by4uXG4tLVxubW0vZGFtb24vY29yZS5jLTI3OTQtICovXG5tbS9kYW1vbi9jb3JlLmM6Mjc5NTpzdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0yNzk2LVx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTMzNTc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzODMtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MzM4NDpcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xubW0vZGFtb24vY29yZS5jLTMzODUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgYW5hbHl6ZSB0aGlzOgoKKipJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBEQU1PTiYjMzk7cyBTY2hlbWUgQXBwbGljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIGNvZGUuIFRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlIGlzIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiAgVGhlIGxvZyBjbGVhcmx5IGlkZW50aWZpZXMgdGhhdCBmdW5jdGlvbiYjMzk7cyBjYWxsIG9yaWdpbiDigJMgaXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGBrZGFtb25kX2ZuYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuICBHb29kLiBOb3cgdGhhdCBJIGtub3cgd2hlcmUgdGhlIGFjdGlvbiAqc3RhcnRzKiwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIHRoZSBhY3Rpb24gZG9lcyBhbmQgaG93IGl0cyBjb250cm9sbGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbnRyb2xzIHRoZSBzY2hlbWUgYXBwbGljYXRpb24uICAKCk15IG5leHQgbW92ZSBpcyB0byBicm9hZGVuIHRoZSBzZWFyY2guIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBmaWxlIGBtbS9kYW1vbi9jb3JlLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBvZiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gSSYjMzk7bGwgYWxzbyBjaGVjayBvdXQgYG1tL2RhbW9uL3N5c2ZzLmNgIGFuZCBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gVGhlc2Ugc3lzZnMgaW50ZXJmYWNlcyBhcmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciBzY2hlbWVzIGFyZSBsaWtlbHkgZGVmaW5lZCBhbmQgaG93IHRoZXkgYXJlIGNvbnRyb2xsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODM3NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vZGFtb24vY29yZS5jLTE5LVxubW0vZGFtb24vY29yZS5jOjIwOi8qIGZvciBkYW1vbl9nZXRfZm9saW8oKSB1c2VkIGJ5IG5vZGUgZWxpZ2libGUgbWVtb3J5IG1ldHJpY3MgKi9cbm1tL2RhbW9uL2NvcmUuYy0yMS0jaW5jbHVkZSBcJiMzNDtvcHMtY29tbW9uLmhcJiMzNDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjUtXG5tbS9kYW1vbi9jb3JlLmM6MjY6c3RhdGljIERFRklORV9NVVRFWChkYW1vbl9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yNy1zdGF0aWMgaW50IG5yX3J1bm5pbmdfY3R4cztcbm1tL2RhbW9uL2NvcmUuYz0yOD1zdGF0aWMgYm9vbCBydW5uaW5nX2V4Y2x1c2l2ZV9jdHhzO1xubW0vZGFtb24vY29yZS5jLTI5LVxubW0vZGFtb24vY29yZS5jOjMwOnN0YXRpYyBERUZJTkVfTVVURVgoZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vY29yZS5jOjMxOnN0YXRpYyBzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBkYW1vbl9yZWdpc3RlcmVkX29wc1tOUl9EQU1PTl9PUFNdO1xubW0vZGFtb24vY29yZS5jLTMyLVxubW0vZGFtb24vY29yZS5jOjMzOnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZGFtb25fcmVnaW9uX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2RhbW9uL2NvcmUuYy0zNC1cbm1tL2RhbW9uL2NvcmUuYzozNTovKiBTaG91bGQgYmUgY2FsbGVkIHVuZGVyIGRhbW9uX29wc19sb2NrIHdpdGggaWQgc21hbGxlciB0aGFuIE5SX0RBTU9OX09QUyAqL1xubW0vZGFtb24vY29yZS5jOjM2OnN0YXRpYyBib29sIF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXG5tbS9kYW1vbi9jb3JlLmMtMzcte1xubW0vZGFtb24vY29yZS5jOjM4Olx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgZW1wdHlfb3BzID0ge307XG5tbS9kYW1vbi9jb3JlLmMtMzktXG5tbS9kYW1vbi9jb3JlLmM6NDA6XHRpZiAoIW1lbWNtcChcdTAwMjZlbXB0eV9vcHMsIFx1MDAyNmRhbW9uX3JlZ2lzdGVyZWRfb3BzW2lkXSwgc2l6ZW9mKGVtcHR5X29wcykpKVxubW0vZGFtb24vY29yZS5jLTQxLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZGFtb24vY29yZS5jLTQ1LS8qKlxubW0vZGFtb24vY29yZS5jOjQ2OiAqIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKCkgLSBDaGVjayBpZiBhIGdpdmVuIGRhbW9uX29wZXJhdGlvbnMgaXMgcmVnaXN0ZXJlZC5cbm1tL2RhbW9uL2NvcmUuYzo0NzogKiBAaWQ6XHRJZCBvZiB0aGUgZGFtb25fb3BlcmF0aW9ucyB0byBjaGVjayBpZiByZWdpc3RlcmVkLlxubW0vZGFtb24vY29yZS5jLTQ4LSAqXG4tLVxubW0vZGFtb24vY29yZS5jLTUwLSAqL1xubW0vZGFtb24vY29yZS5jOjUxOmJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXG5tbS9kYW1vbi9jb3JlLmMtNTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy01Ni1cdFx0cmV0dXJuIGZhbHNlO1xubW0vZGFtb24vY29yZS5jOjU3Olx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmM6NTg6XHRyZWdpc3RlcmVkID0gX19kYW1vbl9pc19yZWdpc3RlcmVkX29wcyhpZCk7XG5tbS9kYW1vbi9jb3JlLmM6NTk6XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vY29yZS5jLTYwLVx0cmV0dXJuIHJlZ2lzdGVyZWQ7XG4tLVxubW0vZGFtb24vY29yZS5jLTYzLS8qKlxubW0vZGFtb24vY29yZS5jOjY0OiAqIGRhbW9uX3JlZ2lzdGVyX29wcygpIC0gUmVnaXN0ZXIgYSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgc2V0IHRvIERBTU9OLlxubW0vZGFtb24vY29yZS5jLTY1LSAqIEBvcHM6XHRtb25pdG9yaW5nIG9wZXJhdGlvbnMgc2V0IHRvIHJlZ2lzdGVyLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy02Ny0gKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBzZXQgb2YgdmFsaWQgXHUwMDI2c3RydWN0XG5tbS9kYW1vbi9jb3JlLmM6Njg6ICogZGFtb25fb3BlcmF0aW9ucy1cdTAwM2VpZCBzbyB0aGF0IG90aGVycyBjYW4gZmluZCBhbmQgdXNlIHRoZW0gbGF0ZXIuXG5tbS9kYW1vbi9jb3JlLmMtNjktICpcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzEtICovXG5tbS9kYW1vbi9jb3JlLmM6NzI6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxubW0vZGFtb24vY29yZS5jLTczLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzgtXG5tbS9kYW1vbi9jb3JlLmM6Nzk6XHRtdXRleF9sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy04MC1cdC8qIEZhaWwgZm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBvcHMgKi9cbm1tL2RhbW9uL2NvcmUuYzo4MTpcdGlmIChfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKG9wcy1cdTAwM2VpZCkpXG5tbS9kYW1vbi9jb3JlLmMtODItXHRcdGVyciA9IC1FSU5WQUw7XG5tbS9kYW1vbi9jb3JlLmMtODMtXHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6ODQ6XHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW29wcy1cdTAwM2VpZF0gPSAqb3BzO1xubW0vZGFtb24vY29yZS5jOjg1Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy04Ni1cdHJldHVybiBlcnI7XG4tLVxubW0vZGFtb24vY29yZS5jLTg5LS8qKlxubW0vZGFtb24vY29yZS5jOjkwOiAqIGRhbW9uX3NlbGVjdF9vcHMoKSAtIFNlbGVjdCBhIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyB0byB1c2Ugd2l0aCB0aGUgY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy05MS0gKiBAY3R4Olx0bW9uaXRvcmluZyBjb250ZXh0IHRvIHVzZSB0aGUgb3BlcmF0aW9ucy5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTgtICovXG5tbS9kYW1vbi9jb3JlLmM6OTk6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcbm1tL2RhbW9uL2NvcmUuYy0xMDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDUtXG5tbS9kYW1vbi9jb3JlLmM6MTA2Olx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmM6MTA3Olx0aWYgKCFfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGlkKSlcbm1tL2RhbW9uL2NvcmUuYy0xMDgtXHRcdGVyciA9IC1FSU5WQUw7XG5tbS9kYW1vbi9jb3JlLmMtMTA5LVx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjExMDpcdFx0Y3R4LVx1MDAzZW9wcyA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW2lkXTtcbm1tL2RhbW9uL2NvcmUuYzoxMTE6XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vY29yZS5jLTExMi1cdHJldHVybiBlcnI7XG4tLVxubW0vZGFtb24vY29yZS5jLTExNC1cbm1tL2RhbW9uL2NvcmUuYzoxMTU6c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxubW0vZGFtb24vY29yZS5jLTExNi17XG5tbS9kYW1vbi9jb3JlLmM6MTE3Olx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XG5tbS9kYW1vbi9jb3JlLmMtMTE4LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjYtXG5tbS9kYW1vbi9jb3JlLmM6MTI3OnZvaWQgZGFtb25fYWRkX3ByZXAoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcClcbm1tL2RhbW9uL2NvcmUuYy0xMjgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzEtXG5tbS9kYW1vbi9jb3JlLmM6MTMyOnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxubW0vZGFtb24vY29yZS5jLTEzMy17XG4tLVxubW0vZGFtb24vY29yZS5jLTEzNi1cbm1tL2RhbW9uL2NvcmUuYzoxMzc6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxubW0vZGFtb24vY29yZS5jLTEzOC17XG4tLVxubW0vZGFtb24vY29yZS5jLTE0MS1cbm1tL2RhbW9uL2NvcmUuYzoxNDI6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxubW0vZGFtb24vY29yZS5jLTE0My17XG5tbS9kYW1vbi9jb3JlLmM6MTQ0Olx0ZGFtb25fZGVsX3ByZXAocCk7XG5tbS9kYW1vbi9jb3JlLmM6MTQ1Olx0ZGFtb25fZnJlZV9wcmVwKHApO1xubW0vZGFtb24vY29yZS5jLTE0Ni19XG5tbS9kYW1vbi9jb3JlLmMtMTQ3LVxubW0vZGFtb24vY29yZS5jOjE0ODpzdGF0aWMgc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX250aF9wcmVwKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG5tbS9kYW1vbi9jb3JlLmMtMTQ5LXtcbm1tL2RhbW9uL2NvcmUuYzoxNTA6XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcbm1tL2RhbW9uL2NvcmUuYy0xNTEtXHRpbnQgaSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTUyLVxubW0vZGFtb24vY29yZS5jOjE1MzpcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcCkge1xubW0vZGFtb24vY29yZS5jLTE1NC1cdFx0aWYgKGkmIzQzOyYjNDM7ID09IG4pXG4tLVxubW0vZGFtb24vY29yZS5jLTE1OS1cbm1tL2RhbW9uL2NvcmUuYzoxNjA6c3RhdGljIGJvb2wgZGFtb25faGFzX3ByZXAoc3RydWN0IGRhbW9uX2N0eCAqYylcbm1tL2RhbW9uL2NvcmUuYy0xNjEte1xubW0vZGFtb24vY29yZS5jOjE2MjpcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xubW0vZGFtb24vY29yZS5jOjE2MzpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG5tbS9kYW1vbi9jb3JlLmMtMTY0LVxubW0vZGFtb24vY29yZS5jOjE2NTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTY2Olx0XHRkYW1vbl9mb3JfZWFjaF9wcmVwKHByZXAsIHByb2JlKVxubW0vZGFtb24vY29yZS5jLTE2Ny1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTcxLVxubW0vZGFtb24vY29yZS5jOjE3MjpzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbm1tL2RhbW9uL2NvcmUuYy0xNzMtXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXG5tbS9kYW1vbi9jb3JlLmMtMTc0LXtcbm1tL2RhbW9uL2NvcmUuYzoxNzU6XHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtMTc2LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODYtXG5tbS9kYW1vbi9jb3JlLmM6MTg3OnZvaWQgZGFtb25fYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTg4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkxLVxubW0vZGFtb24vY29yZS5jOjE5MjpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTkzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk2LVxubW0vZGFtb24vY29yZS5jOjE5NzpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTE5OC17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwMS1cbm1tL2RhbW9uL2NvcmUuYzoyMDI6dm9pZCBkYW1vbl9kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTIwMy17XG5tbS9kYW1vbi9jb3JlLmM6MjA0Olx0ZGFtb25fZGVsX2ZpbHRlcihmKTtcbm1tL2RhbW9uL2NvcmUuYzoyMDU6XHRkYW1vbl9mcmVlX2ZpbHRlcihmKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDYtfVxubW0vZGFtb24vY29yZS5jLTIwNy1cbm1tL2RhbW9uL2NvcmUuYzoyMDg6c3RhdGljIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX250aF9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbm1tL2RhbW9uL2NvcmUuYy0yMDkte1xubW0vZGFtb24vY29yZS5jOjIxMDpcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7XG5tbS9kYW1vbi9jb3JlLmMtMjExLVx0aW50IGkgPSAwO1xubW0vZGFtb24vY29yZS5jLTIxMi1cbm1tL2RhbW9uL2NvcmUuYzoyMTM6XHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xubW0vZGFtb24vY29yZS5jLTIxNC1cdFx0aWYgKGkmIzQzOyYjNDM7ID09IG4pXG4tLVxubW0vZGFtb24vY29yZS5jLTIxOS1cbm1tL2RhbW9uL2NvcmUuYzoyMjA6c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbm1tL2RhbW9uL2NvcmUuYy0yMjEte1xubW0vZGFtb24vY29yZS5jOjIyMjpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbm1tL2RhbW9uL2NvcmUuYy0yMjMtXG4tLVxubW0vZGFtb24vY29yZS5jLTIzMy1cbm1tL2RhbW9uL2NvcmUuYzoyMzQ6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxubW0vZGFtb24vY29yZS5jLTIzNS17XG4tLVxubW0vZGFtb24vY29yZS5jLTIzOC1cbm1tL2RhbW9uL2NvcmUuYzoyMzk6c3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbm1tL2RhbW9uL2NvcmUuYy0yNDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDMtXG5tbS9kYW1vbi9jb3JlLmM6MjQ0OnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxubW0vZGFtb24vY29yZS5jLTI0NS17XG5tbS9kYW1vbi9jb3JlLmM6MjQ2Olx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXAsICpwcmVwX25leHQ7XG5tbS9kYW1vbi9jb3JlLmM6MjQ3Olx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZiwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtMjQ4LVxubW0vZGFtb24vY29yZS5jOjI0OTpcdGRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShwcmVwLCBwcmVwX25leHQsIHApXG5tbS9kYW1vbi9jb3JlLmM6MjUwOlx0XHRkYW1vbl9mcmVlX3ByZXAocHJlcCk7XG5tbS9kYW1vbi9jb3JlLmM6MjUxOlx0ZGFtb25fZm9yX2VhY2hfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcClcbm1tL2RhbW9uL2NvcmUuYzoyNTI6XHRcdGRhbW9uX2ZyZWVfZmlsdGVyKGYpO1xubW0vZGFtb24vY29yZS5jLTI1My1cdGtmcmVlKHApO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNTUtXG5tbS9kYW1vbi9jb3JlLmM6MjU2OnN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxubW0vZGFtb24vY29yZS5jLTI1Ny17XG5tbS9kYW1vbi9jb3JlLmM6MjU4Olx0ZGFtb25fZGVsX3Byb2JlKHApO1xubW0vZGFtb24vY29yZS5jOjI1OTpcdGRhbW9uX2ZyZWVfcHJvYmUocCk7XG5tbS9kYW1vbi9jb3JlLmMtMjYwLX1cbm1tL2RhbW9uL2NvcmUuYy0yNjEtXG5tbS9kYW1vbi9jb3JlLmM6MjYyOnN0YXRpYyBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX250aF9wcm9iZShpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTI2My17XG5tbS9kYW1vbi9jb3JlLmM6MjY0Olx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xubW0vZGFtb24vY29yZS5jLTI2NS1cdGludCBpID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0yNjYtXG5tbS9kYW1vbi9jb3JlLmM6MjY3Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmMtMjY4LVx0XHRpZiAoaSYjNDM7JiM0MzsgPT0gbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjczLVxubW0vZGFtb24vY29yZS5jOjI3NDpzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vY29yZS5jLTI3NS17XG5tbS9kYW1vbi9jb3JlLmM6Mjc2Olx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xubW0vZGFtb24vY29yZS5jLTI3Ny1cbm1tL2RhbW9uL2NvcmUuYzoyNzg6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjKSB7XG5tbS9kYW1vbi9jb3JlLmMtMjc5LVx0XHRpZiAocC1cdTAwM2V3ZWlnaHQpXG4tLVxubW0vZGFtb24vY29yZS5jLTI4NS0vKlxubW0vZGFtb24vY29yZS5jOjI4NjogKiBkYW1vbl9tdnN1bSgpIC0gUmV0dXJucyBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBmb3IgYSB0aW1lIHdpbmRvdy5cbm1tL2RhbW9uL2NvcmUuYy0yODctICogQGN1cnJlbnRfbnI6XHRcdFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuXG4tLVxubW0vZGFtb24vY29yZS5jLTMwNS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMDY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fbXZzdW0odW5zaWduZWQgbG9uZyBjdXJyZW50X25yLFxubW0vZGFtb24vY29yZS5jLTMwNy1cdFx0dW5zaWduZWQgbG9uZyBsYXN0X25yLCB1bnNpZ25lZCBsb25nIGxlZnRfd2luZG93X2JwKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTItLyoqXG5tbS9kYW1vbi9jb3JlLmM6MzEzOiAqIGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKCkgLSBSZXR1cm5zIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS5cbm1tL2RhbW9uL2NvcmUuYy0zMTQtICogQHI6XHRcdFJlZ2lvbiB0byBnZXQgdGhlIGFjY2VzcyBmcmVxdWVuY3kgb2YuXG4tLVxubW0vZGFtb24vY29yZS5jLTMxNy0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZm9yIGhvdyBtYW55IHNhbXBsaW5nIGl0ZXJhdGlvbnMgaW4gdGhlIGxhc3Rcbm1tL2RhbW9uL2NvcmUuYzozMTg6ICogYWdncmVnYXRpb24gaW50ZXJ2YWwgKFx1MDAyNmRhbW9uX2F0dHJzLVx1MDAzZWFnZ3JfaW50ZXJ2YWwpIHRoZSByZWdpb24gd2FzIGZvdW5kIHRvXG5tbS9kYW1vbi9jb3JlLmMtMzE5LSAqIGJlIGFjY2Vzc2VkLiAgSGVuY2UgdGhlIHZhbHVlIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgcmVsYXRpdmUgYWNjZXNzXG4tLVxubW0vZGFtb24vY29yZS5jLTMyNS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMjY6dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmM6MzI3Olx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMzI4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ1LVxubW0vZGFtb24vY29yZS5jOjM0NjpcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZW5yX2FjY2Vzc2VzLCByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsXG5tbS9kYW1vbi9jb3JlLmMtMzQ3LVx0XHRcdGxlZnRfd2luZG93X2JwKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ5LVxubW0vZGFtb24vY29yZS5jOjM1MDp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYzozNTE6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0zNTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjktXG5tbS9kYW1vbi9jb3JlLmM6MzcwOlx0cmV0dXJuIGRhbW9uX212c3VtKHItXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxubW0vZGFtb24vY29yZS5jLTM3MS1cdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XG4tLVxubW0vZGFtb24vY29yZS5jLTM3NC0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjM3NTpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbm1tL2RhbW9uL2NvcmUuYy0zNzYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzktI2Vsc2Vcbm1tL2RhbW9uL2NvcmUuYzozODA6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5tbS9kYW1vbi9jb3JlLmMtMzgxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzg1LS8qXG5tbS9kYW1vbi9jb3JlLmM6Mzg2OiAqIENvbnN0cnVjdCBhIGRhbW9uX3JlZ2lvbiBzdHJ1Y3Rcbm1tL2RhbW9uL2NvcmUuYy0zODctICpcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzg5LSAqL1xubW0vZGFtb24vY29yZS5jOjM5MDpzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxubW0vZGFtb24vY29yZS5jLTM5MS17XG5tbS9kYW1vbi9jb3JlLmM6MzkyOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uO1xubW0vZGFtb24vY29yZS5jLTM5My1cdGludCBpO1xubW0vZGFtb24vY29yZS5jLTM5NC1cbm1tL2RhbW9uL2NvcmUuYzozOTU6XHRkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbihzdGFydCwgZW5kKTtcbm1tL2RhbW9uL2NvcmUuYzozOTY6XHRyZWdpb24gPSBrbWVtX2NhY2hlX2FsbG9jKGRhbW9uX3JlZ2lvbl9jYWNoZSwgR0ZQX0tFUk5FTCk7XG5tbS9kYW1vbi9jb3JlLmMtMzk3LVx0aWYgKCFyZWdpb24pXG4tLVxubW0vZGFtb24vY29yZS5jLTQxNC1cbm1tL2RhbW9uL2NvcmUuYzo0MTU6c3RhdGljIHZvaWQgZGFtb25fYWRkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTQxNi17XG4tLVxubW0vZGFtb24vY29yZS5jLTQyMy0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0MjQ6c3RhdGljIGlubGluZSB2b2lkIGRhbW9uX2luc2VydF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYzo0MjU6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnByZXYsIHN0cnVjdCBkYW1vbl9yZWdpb24gKm5leHQsXG5tbS9kYW1vbi9jb3JlLmM6NDI2Olx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTQyNy17XG4tLVxubW0vZGFtb24vY29yZS5jLTQzMi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjQzMzpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTQzNC17XG4tLVxubW0vZGFtb24vY29yZS5jLTQzNy0jZWxzZVxubW0vZGFtb24vY29yZS5jOjQzODpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTQzOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTQ0Mi1cbm1tL2RhbW9uL2NvcmUuYzo0NDM6c3RhdGljIHZvaWQgZGFtb25fZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTQ0NC17XG5tbS9kYW1vbi9jb3JlLmM6NDQ1Olx0ZGFtb25fdmVyaWZ5X2RlbF9yZWdpb24odCk7XG5tbS9kYW1vbi9jb3JlLmMtNDQ2LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NTAtXG5tbS9kYW1vbi9jb3JlLmM6NDUxOnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG5tbS9kYW1vbi9jb3JlLmMtNDUyLXtcbm1tL2RhbW9uL2NvcmUuYzo0NTM6XHRrbWVtX2NhY2hlX2ZyZWUoZGFtb25fcmVnaW9uX2NhY2hlLCByKTtcbm1tL2RhbW9uL2NvcmUuYy00NTQtfVxubW0vZGFtb24vY29yZS5jLTQ1NS1cbm1tL2RhbW9uL2NvcmUuYzo0NTY6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYzo0NTc6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtNDU4LXtcbm1tL2RhbW9uL2NvcmUuYzo0NTk6XHRkYW1vbl9kZWxfcmVnaW9uKHIsIHQpO1xubW0vZGFtb24vY29yZS5jOjQ2MDpcdGRhbW9uX2ZyZWVfcmVnaW9uKHIpO1xubW0vZGFtb24vY29yZS5jLTQ2MS19XG5tbS9kYW1vbi9jb3JlLmMtNDYyLVxubW0vZGFtb24vY29yZS5jOjQ2MzpzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jOjQ2NDpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy00NjUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy00NjktLyoqXG5tbS9kYW1vbi9jb3JlLmM6NDcwOiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbm1tL2RhbW9uL2NvcmUuYy00NzEtICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc2LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3Nzp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbm1tL2RhbW9uL2NvcmUuYzo0Nzg6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy00Nzkte1xubW0vZGFtb24vY29yZS5jOjQ4MDpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG5tbS9kYW1vbi9jb3JlLmMtNDgxLVx0dW5zaWduZWQgaW50IHN1bSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTQ4My1cbm1tL2RhbW9uL2NvcmUuYzo0ODQ6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmMtNDg1LVx0XHRpZiAobGFzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDk3LSAqL1xubW0vZGFtb24vY29yZS5jOjQ5ODpzdGF0aWMgYm9vbCBkYW1vbl9pbnRlcnNlY3Qoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYzo0OTk6XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyZSlcbm1tL2RhbW9uL2NvcmUuYy01MDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy01MDYtICovXG5tbS9kYW1vbi9jb3JlLmM6NTA3OnN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxubW0vZGFtb24vY29yZS5jOjUwODpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbGFzdCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy01MDkte1xubW0vZGFtb24vY29yZS5jOjUxMDpcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIgPSBmaXJzdDtcbm1tL2RhbW9uL2NvcmUuYy01MTEtXG5tbS9kYW1vbi9jb3JlLmM6NTEyOlx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uX2Zyb20ociwgdCkge1xubW0vZGFtb24vY29yZS5jOjUxMzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV4dCwgKm5ld3I7XG5tbS9kYW1vbi9jb3JlLmMtNTE0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy01MTYtXHRcdFx0YnJlYWs7XG5tbS9kYW1vbi9jb3JlLmM6NTE3Olx0XHRuZXh0ID0gZGFtb25fbmV4dF9yZWdpb24ocik7XG5tbS9kYW1vbi9jb3JlLmMtNTE4LVx0XHRpZiAoci1cdTAwM2Vhci5lbmQgIT0gbmV4dC1cdTAwM2Vhci5zdGFydCkge1xubW0vZGFtb24vY29yZS5jOjUxOTpcdFx0XHRuZXdyID0gZGFtb25fbmV3X3JlZ2lvbihyLVx1MDAzZWFyLmVuZCwgbmV4dC1cdTAwM2Vhci5zdGFydCk7XG5tbS9kYW1vbi9jb3JlLmMtNTIwLVx0XHRcdGlmICghbmV3cilcbm1tL2RhbW9uL2NvcmUuYy01MjEtXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzo1MjI6XHRcdFx0ZGFtb25faW5zZXJ0X3JlZ2lvbihuZXdyLCByLCBuZXh0LCB0KTtcbm1tL2RhbW9uL2NvcmUuYy01MjMtXHRcdH1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNTI4LS8qXG5tbS9kYW1vbi9jb3JlLmM6NTI5OiAqIGRhbW9uX3NldF9yZWdpb25zKCkgLSBTZXQgcmVnaW9ucyBvZiBhIHRhcmdldCBmb3IgZ2l2ZW4gYWRkcmVzcyByYW5nZXMuXG5tbS9kYW1vbi9jb3JlLmMtNTMwLSAqIEB0Olx0XHR0aGUgZ2l2ZW4gdGFyZ2V0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy01MzktICovXG5tbS9kYW1vbi9jb3JlLmM6NTQwOmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxubW0vZGFtb24vY29yZS5jLTU0MS1cdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxubW0vZGFtb24vY29yZS5jLTU0Mi17XG5tbS9kYW1vbi9jb3JlLmM6NTQzOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtNTQ0LVx0dW5zaWduZWQgaW50IGk7XG4tLVxubW0vZGFtb24vY29yZS5jLTU2MC1cdC8qIFJlbW92ZSByZWdpb25zIHdoaWNoIGFyZSBub3QgaW4gdGhlIG5ldyByYW5nZXMgKi9cbm1tL2RhbW9uL2NvcmUuYzo1NjE6XHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7XG5tbS9kYW1vbi9jb3JlLmMtNTYyLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NTYzOlx0XHRcdGlmIChkYW1vbl9pbnRlcnNlY3QociwgXHUwMDI2cmFuZ2VzW2ldKSlcbm1tL2RhbW9uL2NvcmUuYy01NjQtXHRcdFx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNTY2LVx0XHRpZiAoaSA9PSBucl9yYW5nZXMpXG5tbS9kYW1vbi9jb3JlLmM6NTY3Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIsIHQpO1xubW0vZGFtb24vY29yZS5jLTU2OC1cdH1cbm1tL2RhbW9uL2NvcmUuYy01NjktXG5tbS9kYW1vbi9jb3JlLmM6NTcwOlx0aWYgKCFkYW1vbl9ucl9yZWdpb25zKHQpKSB7XG5tbS9kYW1vbi9jb3JlLmMtNTcxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NTcyOlx0XHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKFxubW0vZGFtb24vY29yZS5jLTU3My1cdFx0XHRcdFx0QUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTU3Ny1cdFx0XHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vY29yZS5jOjU3ODpcdFx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xubW0vZGFtb24vY29yZS5jLTU3OS1cdFx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYy01ODItXG5tbS9kYW1vbi9jb3JlLmM6NTgzOlx0ciA9IGRhbW9uX2ZpcnN0X3JlZ2lvbih0KTtcbm1tL2RhbW9uL2NvcmUuYy01ODQtXHQvKiBBZGQgbmV3IHJlZ2lvbnMgb3IgcmVzaXplIGV4aXN0aW5nIHJlZ2lvbnMgdG8gZml0IGluIHRoZSByYW5nZXMgKi9cbm1tL2RhbW9uL2NvcmUuYy01ODUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NTg2Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCA9IE5VTEwsICpsYXN0LCAqbmV3cjtcbm1tL2RhbW9uL2NvcmUuYzo1ODc6XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZTtcbm1tL2RhbW9uL2NvcmUuYy01ODgtXHRcdGJvb2wgaW5zZXJ0X2JlZm9yZV9yID0gZmFsc2U7XG4tLVxubW0vZGFtb24vY29yZS5jLTU5MS1cdFx0LyogR2V0IHRoZSBmaXJzdC9sYXN0IHJlZ2lvbnMgaW50ZXJzZWN0aW5nIHdpdGggdGhlIHJhbmdlICovXG5tbS9kYW1vbi9jb3JlLmM6NTkyOlx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fZnJvbShyLCB0KSB7XG5tbS9kYW1vbi9jb3JlLmM6NTkzOlx0XHRcdGlmIChkYW1vbl9pbnRlcnNlY3QociwgcmFuZ2UpKSB7XG5tbS9kYW1vbi9jb3JlLmMtNTk0LVx0XHRcdFx0aWYgKCFmaXJzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjA0LVx0XHRcdC8qIG5vIHJlZ2lvbiBpbnRlcnNlY3RzIHdpdGggdGhpcyByYW5nZSAqL1xubW0vZGFtb24vY29yZS5jOjYwNTpcdFx0XHRuZXdyID0gZGFtb25fbmV3X3JlZ2lvbihcbm1tL2RhbW9uL2NvcmUuYy02MDYtXHRcdFx0XHRcdEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlc3RhcnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTYxMS1cdFx0XHRpZiAoaW5zZXJ0X2JlZm9yZV9yKVxubW0vZGFtb24vY29yZS5jOjYxMjpcdFx0XHRcdGRhbW9uX2luc2VydF9yZWdpb24obmV3ciwgZGFtb25fcHJldl9yZWdpb24ociksXG5tbS9kYW1vbi9jb3JlLmMtNjEzLVx0XHRcdFx0XHRcdHIsIHQpO1xubW0vZGFtb24vY29yZS5jLTYxNC1cdFx0XHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6NjE1Olx0XHRcdFx0ZGFtb25fYWRkX3JlZ2lvbihuZXdyLCB0KTtcbm1tL2RhbW9uL2NvcmUuYy02MTYtXHRcdH0gZWxzZSB7XG4tLVxubW0vZGFtb24vY29yZS5jLTYyMi1cdFx0XHQvKiBmaWxsIHBvc3NpYmxlIGhvbGVzIGluIHRoZSByYW5nZSAqL1xubW0vZGFtb24vY29yZS5jOjYyMzpcdFx0XHRlcnIgPSBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoZmlyc3QsIGxhc3QsIHQpO1xubW0vZGFtb24vY29yZS5jLTYyNC1cdFx0XHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03MzM9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NDUtXG5tbS9kYW1vbi9jb3JlLmM6NzQ2OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG5tbS9kYW1vbi9jb3JlLmMtNzQ3LVx0XHRcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzYzLVx0ICogcnVubmluZywgaXQgd2lsbCBhbHNvIHVwZGF0ZWQgd2hlbiBpdCBpcyBhZGRlZCB0byB0aGUgREFNT04gY29udGV4dCxcbm1tL2RhbW9uL2NvcmUuYzo3NjQ6XHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cbm1tL2RhbW9uL2NvcmUuYy03NjUtXHQgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzg3LVxubW0vZGFtb24vY29yZS5jOjc4ODpzdGF0aWMgdm9pZCBkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtNzg5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzk4LVxubW0vZGFtb24vY29yZS5jOjc5OTp2b2lkIGRhbW9uX2FkZF9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtODAwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODA0LVxubW0vZGFtb24vY29yZS5jOjgwNTpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy04MDYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04MDktXG5tbS9kYW1vbi9jb3JlLmM6ODEwOnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy04MTEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04MTQtXG5tbS9kYW1vbi9jb3JlLmM6ODE1OnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTgxNi17XG4tLVxubW0vZGFtb24vY29yZS5jLTgzMC1cdGtmcmVlKHMtXHUwMDNlbWlncmF0ZV9kZXN0cy53ZWlnaHRfYXJyKTtcbm1tL2RhbW9uL2NvcmUuYzo4MzE6XHRkYW1vbl9kZWxfc2NoZW1lKHMpO1xubW0vZGFtb24vY29yZS5jOjgzMjpcdGRhbW9uX2ZyZWVfc2NoZW1lKHMpO1xubW0vZGFtb24vY29yZS5jLTgzMy19XG4tLVxubW0vZGFtb24vY29yZS5jLTgzNS0vKlxubW0vZGFtb24vY29yZS5jOjgzNjogKiBDb25zdHJ1Y3QgYSBkYW1vbl90YXJnZXQgc3RydWN0XG5tbS9kYW1vbi9jb3JlLmMtODM3LSAqXG4tLVxubW0vZGFtb24vY29yZS5jLTgzOS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo4NDA6c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxubW0vZGFtb24vY29yZS5jLTg0MS17XG5tbS9kYW1vbi9jb3JlLmM6ODQyOlx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbm1tL2RhbW9uL2NvcmUuYy04NDMtXG4tLVxubW0vZGFtb24vY29yZS5jLTg1Ni1cbm1tL2RhbW9uL2NvcmUuYzo4NTc6dm9pZCBkYW1vbl9hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy04NTgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04NjQtICovXG5tbS9kYW1vbi9jb3JlLmM6ODY1OmludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKVxubW0vZGFtb24vY29yZS5jLTg2Ni17XG4tLVxubW0vZGFtb24vY29yZS5jLTg3Mi1cbm1tL2RhbW9uL2NvcmUuYzo4NzM6c3RhdGljIHZvaWQgZGFtb25fZGVsX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTg3NC17XG4tLVxubW0vZGFtb24vY29yZS5jLTg3Ny1cbm1tL2RhbW9uL2NvcmUuYzo4Nzg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTg3OS17XG5tbS9kYW1vbi9jb3JlLmM6ODgwOlx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtODgxLVxubW0vZGFtb24vY29yZS5jOjg4MjpcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpXG5tbS9kYW1vbi9jb3JlLmM6ODgzOlx0XHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcbm1tL2RhbW9uL2NvcmUuYy04ODQtXHRrZnJlZSh0KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODg2LVxubW0vZGFtb24vY29yZS5jOjg4Nzp2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy04ODgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04OTItXG5tbS9kYW1vbi9jb3JlLmM6ODkzOlx0ZGFtb25fZGVsX3RhcmdldCh0KTtcbm1tL2RhbW9uL2NvcmUuYzo4OTQ6XHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbm1tL2RhbW9uL2NvcmUuYy04OTUtfVxubW0vZGFtb24vY29yZS5jLTg5Ni1cbm1tL2RhbW9uL2NvcmUuYzo4OTc6dW5zaWduZWQgaW50IGRhbW9uX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy04OTgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy05MDEtXG5tbS9kYW1vbi9jb3JlLmM6OTAyOnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbm1tL2RhbW9uL2NvcmUuYy05MDMte1xubW0vZGFtb24vY29yZS5jOjkwNDpcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbm1tL2RhbW9uL2NvcmUuYy05MDUtXG4tLVxubW0vZGFtb24vY29yZS5jLTk0MS1cbm1tL2RhbW9uL2NvcmUuYzo5NDI6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy05NDMte1xubW0vZGFtb24vY29yZS5jOjk0NDpcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsICpuZXh0X3Q7XG5tbS9kYW1vbi9jb3JlLmMtOTQ1LVxubW0vZGFtb24vY29yZS5jOjk0NjpcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldF9zYWZlKHQsIG5leHRfdCwgY3R4KVxubW0vZGFtb24vY29yZS5jOjk0NzpcdFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy05NDgtfVxubW0vZGFtb24vY29yZS5jLTk0OS1cbm1tL2RhbW9uL2NvcmUuYzo5NTA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtOTUxLXtcbm1tL2RhbW9uL2NvcmUuYy05NTItXHRzdHJ1Y3QgZGFtb3MgKnMsICpuZXh0X3M7XG5tbS9kYW1vbi9jb3JlLmM6OTUzOlx0c3RydWN0IGRhbW9uX3Byb2JlICpwLCAqbmV4dF9wO1xubW0vZGFtb24vY29yZS5jLTk1NC1cbm1tL2RhbW9uL2NvcmUuYzo5NTU6XHRkYW1vbl9kZXN0cm95X3RhcmdldHMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy05NTYtXG5tbS9kYW1vbi9jb3JlLmM6OTU3Olx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lX3NhZmUocywgbmV4dF9zLCBjdHgpXG5tbS9kYW1vbi9jb3JlLmM6OTU4Olx0XHRkYW1vbl9kZXN0cm95X3NjaGVtZShzKTtcbm1tL2RhbW9uL2NvcmUuYy05NTktXG5tbS9kYW1vbi9jb3JlLmM6OTYwOlx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShwLCBuZXh0X3AsIGN0eClcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYxNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBEQU1PTiYjMzk7cyBJbml0aWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIERBTU9OIHByb2Nlc3MuIE15IHByaW1hcnkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyBpdHMgc3RhcnR1cCBhbmQgZXhlY3V0aW9uLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIGBkYW1vbl9zdGFydGAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyBuZWVkIHRvIHRyYWNlIGl0IGZyb20gdGhlIHN5c2ZzIGVudHJ5cG9pbnRzIGFzIHdlbGwgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgaXQgaXMgdHJpZ2dlcmVkLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93LCBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgbWFpbiBsb29wLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgaW52b2x2ZSBsb29raW5nIGF0IG1lbW9yeSBtYXBwaW5nLCBzYW1wbGluZywgYW5kIG1vbml0b3JpbmcgbG9naWMsIGJ1dCBmaXJzdCwgSSBuZWVkIHRoZSBwcmVjaXNlIGluaXRpYWxpemF0aW9uIGNhbGxzIGFuZCB0aGUgcmVsYXRlZCBzeXNmcyBvcHRpb25zLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIGZvciBEQU1PTiYjMzk7cyBsaWZlY3ljbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExMDgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAyMj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTIwMjQtLypcbm1tL2RhbW9uL2NvcmUuYzoyMDI1OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0yMDI2LSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAzMS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDMyOnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjAzMy17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNTQtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA1NTogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbm1tL2RhbW9uL2NvcmUuYy0yMDU2LSAqIEBjdHhzOlx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNjMtICogQGV4Y2x1c2l2ZSBpcyB0cnVlIGFuZCBhIGdyb3VwIG9mIHRocmVhZHMgdGhhdCBjcmVhdGVkIGJ5IG90aGVyXG5tbS9kYW1vbi9jb3JlLmM6MjA2NDogKiAmIzM5O2RhbW9uX3N0YXJ0KCkmIzM5OyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcbm1tL2RhbW9uL2NvcmUuYy0yMDY1LSAqIHJldHVybnMgLUVCVVNZLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDY4LSAqL1xubW0vZGFtb24vY29yZS5jOjIwNjk6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMjA3MC17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwOTQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jdHhzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIwOTU6XHRcdGVyciA9IF9fZGFtb25fc3RhcnQoY3R4c1tpXSk7XG5tbS9kYW1vbi9jb3JlLmMtMjA5Ni1cdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjE2NT1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTkyLSAqXG5tbS9kYW1vbi9jb3JlLmM6MjE5MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxubW0vZGFtb24vY29yZS5jLTIxOTQtICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXG4tLVxubW0vZGFtb24vY29yZS5jPTIyMDE9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjQ3LSAqXG5tbS9kYW1vbi9jb3JlLmM6MjI0ODogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxubW0vZGFtb24vY29yZS5jLTIyNDktICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00MjEtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQyMjpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMy1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMzMD1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDItXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQzOlx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDQtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTIxMi1cdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9zdGF0LmM6MjEzOlx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcbm1tL2RhbW9uL3N0YXQuYy0yMTQtXHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTExPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI1MzUtXHR9XG5tbS9kYW1vbi9zeXNmcy5jOjI1MzY6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIGZhbHNlKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjUzNy1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgREFNT04gQ29uZmlndXJhdGlvbiBUaHJvdWdoIHN5c2ZzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBmaWd1cmluZyBvdXQgaG93IHRoZSBzeXNmcyBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJiMzOTtyZSBjb250cm9sbGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBlbmFibGluZy9kaXNhYmxpbmcgdGhlIG1vbml0b3JpbmcuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgbW0vZGFtb24vc3lzZnMuY2AgaXMgdGhlIGtleS4gSXQgbG9va3MgbGlrZSB0aGlzIGZpbGUsIGZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIHByb3ZpZGVzIHRoZSBwcmltYXJ5IHN5c2ZzIGludGVyZmFjZS4gV2l0aGluIGl0LCBJIHNob3VsZCBleHBlY3QgdG8gZmluZCB0aGUgbWVjaGFuaXNtcyBmb3IgY29uZmlndXJpbmcgdGhlIGNvcmUgREFNT04gY29tcG9uZW50czogaXRzIGNvbnRleHRzLCB0aGUgdGFyZ2V0cyBpdCBtb25pdG9ycywgdGhlIHZhcmlvdXMgc2NoZW1lcyBlbXBsb3llZCwgc2V0dGluZyBxdW90YXMsIGFuZCwgY3JpdGljYWxseSwgdGhlIGNvbnRyb2wgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIERBTU9OIGZ1bmN0aW9uYWxpdHkgaXRzZWxmLCBsaWtlbHkgdGhyb3VnaCBhIGZ1bmN0aW9uIGxpa2UgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLgoKVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgY2FuJiMzOTt0IGp1c3Qgc3RvcCB0aGVyZS4gSSBhbHNvIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHNwZWNpZmljcyBvZiBzY2hlbWUgYW5kIHF1b3RhIGNvbmZpZ3VyYXRpb24uIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIFRoYXQgc2hvdWxkIHNob3cgbWUgdGhlIG51dHMgYW5kIGJvbHRzIG9mIGhvdyBzY2hlbWVzIGFuZCBxdW90YXMgYXJlIG1hbmlwdWxhdGVkIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZSwgYXMgdGhleSBhcmUgY3J1Y2lhbCBhc3BlY3RzIHRvIERBTU9OJiMzOTtzIG92ZXJhbGwgdHVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTQyNiBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vZGFtb24vY29yZS5jPTY4Mz12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTY4OC1cbm1tL2RhbW9uL2NvcmUuYzo2ODk6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jOjY5MDpcdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG5tbS9kYW1vbi9jb3JlLmMtNjkxLVx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcbm1tL2RhbW9uL2NvcmUuYy02OTIte1xubW0vZGFtb24vY29yZS5jOjY5MzpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xubW0vZGFtb24vY29yZS5jLTY5NC1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzA1LVxubW0vZGFtb24vY29yZS5jOjcwNjp2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNzA3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzEwLVxubW0vZGFtb24vY29yZS5jOjcxMTpzdGF0aWMgdm9pZCBkYW1vc19kZWxfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbm1tL2RhbW9uL2NvcmUuYy03MTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy03MTUtXG5tbS9kYW1vbi9jb3JlLmM6NzE2OnN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbm1tL2RhbW9uL2NvcmUuYy03MTcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy03MjAtXG5tbS9kYW1vbi9jb3JlLmM6NzIxOnZvaWQgZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxubW0vZGFtb24vY29yZS5jLTcyMi17XG5tbS9kYW1vbi9jb3JlLmM6NzIzOlx0ZGFtb3NfZGVsX3F1b3RhX2dvYWwoZyk7XG5tbS9kYW1vbi9jb3JlLmM6NzI0Olx0ZGFtb3NfZnJlZV9xdW90YV9nb2FsKGcpO1xubW0vZGFtb24vY29yZS5jLTcyNS19XG5tbS9kYW1vbi9jb3JlLmMtNzI2LVxubW0vZGFtb24vY29yZS5jOjcyNzpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9nb2Fsc19lbXB0eShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEpXG5tbS9kYW1vbi9jb3JlLmMtNzI4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzMxLVxubW0vZGFtb24vY29yZS5jOjczMjovKiBpbml0aWFsaXplIGZpZWxkcyBvZiBAcXVvdGEgdGhhdCBub3JtYWxseSBBUEkgdXNlcnMgd291bGRuJiMzOTt0IHNldCAqL1xubW0vZGFtb24vY29yZS5jOjczMzpzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG5tbS9kYW1vbi9jb3JlLmMtNzM0LXtcbm1tL2RhbW9uL2NvcmUuYzo3MzU6XHRxdW90YS1cdTAwM2Vlc3ogPSAwO1xubW0vZGFtb24vY29yZS5jOjczNjpcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogPSAwO1xubW0vZGFtb24vY29yZS5jOjczNzpcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgPSAwO1xubW0vZGFtb24vY29yZS5jOjczODpcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogPSAwO1xubW0vZGFtb24vY29yZS5jOjczOTpcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6NzQwOlx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbm1tL2RhbW9uL2NvcmUuYzo3NDE6XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbm1tL2RhbW9uL2NvcmUuYzo3NDI6XHRxdW90YS1cdTAwM2Vlc3pfYnAgPSAwO1xubW0vZGFtb24vY29yZS5jOjc0MzpcdHJldHVybiBxdW90YTtcbm1tL2RhbW9uL2NvcmUuYy03NDQtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03NDY9c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzQ4LVx0XHRcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXMsXG5tbS9kYW1vbi9jb3JlLmM6NzQ5Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVx0XHRcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzICp3bWFya3MsXG4tLVxubW0vZGFtb24vY29yZS5jLTc3NC1cbm1tL2RhbW9uL2NvcmUuYzo3NzU6XHRzY2hlbWUtXHUwMDNlcXVvdGEgPSAqKGRhbW9zX3F1b3RhX2luaXQocXVvdGEpKTtcbm1tL2RhbW9uL2NvcmUuYzo3NzY6XHQvKiBxdW90YS5nb2FscyBzaG91bGQgYmUgc2VwYXJhdGVseSBzZXQgYnkgY2FsbGVyICovXG5tbS9kYW1vbi9jb3JlLmM6Nzc3Olx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLmdvYWxzKTtcbm1tL2RhbW9uL2NvcmUuYy03NzgtXG4tLVxubW0vZGFtb24vY29yZS5jPTgxNT12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy04MTYte1xubW0vZGFtb24vY29yZS5jOjgxNzpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xubW0vZGFtb24vY29yZS5jLTgxOC1cdHN0cnVjdCBkYW1vc19maWx0ZXIgKmYsICpuZXh0O1xubW0vZGFtb24vY29yZS5jLTgxOS1cbm1tL2RhbW9uL2NvcmUuYzo4MjA6XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcdTAwMjZzLVx1MDAzZXF1b3RhKVxubW0vZGFtb24vY29yZS5jOjgyMTpcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xubW0vZGFtb24vY29yZS5jLTgyMi1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE2Nj12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ny1cbm1tL2RhbW9uL2NvcmUuYzoxMTc4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbnRoX3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmM6MTE3OTpcdFx0aW50IG4sIHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbm1tL2RhbW9uL2NvcmUuYy0xMTgwLXtcbm1tL2RhbW9uL2NvcmUuYzoxMTgxOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG5tbS9kYW1vbi9jb3JlLmMtMTE4Mi1cdGludCBpID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMTgzLVxubW0vZGFtb24vY29yZS5jOjExODQ6XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHEpIHtcbm1tL2RhbW9uL2NvcmUuYy0xMTg1LVx0XHRpZiAoaSYjNDM7JiM0MzsgPT0gbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE5MC1cbm1tL2RhbW9uL2NvcmUuYzoxMTkxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jOjExOTI6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTE5My17XG4tLVxubW0vZGFtb24vY29yZS5jLTEyMTQtXG5tbS9kYW1vbi9jb3JlLmM6MTIxNTpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYzoxMjE2Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxubW0vZGFtb24vY29yZS5jLTEyMTcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjIxLVx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vY29yZS5jOjEyMjI6XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTIyMy19XG4tLVxubW0vZGFtb24vY29yZS5jLTEyMjUtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTIyNjogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jOjEyMjc6ICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG5tbS9kYW1vbi9jb3JlLmM6MTIyODogKiBAc3JjOlx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT1MgcXVvdGEuXG5tbS9kYW1vbi9jb3JlLmMtMTIyOS0gKlxubW0vZGFtb24vY29yZS5jOjEyMzA6ICogQ29waWVzIHVzZXItc3BlY2lmaWVkIHBhcmFtZXRlcnMgZm9yIHF1b3RhIGdvYWxzIGZyb20gQHNyYyB0byBAZHN0LiAgVXNlcnNcbm1tL2RhbW9uL2NvcmUuYzoxMjMxOiAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xubW0vZGFtb24vY29yZS5jLTEyMzItICogREFNT04gY29udGV4dHMsIGluc3RlYWQgb2YgbWFudWFsIGluLXBsYWNlIHVwZGF0ZXMuXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMzYtICovXG5tbS9kYW1vbi9jb3JlLmM6MTIzNzppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjM4LXtcbm1tL2RhbW9uL2NvcmUuYzoxMjM5Olx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FsLCAqbmV4dCwgKnNyY19nb2FsLCAqbmV3X2dvYWw7XG5tbS9kYW1vbi9jb3JlLmMtMTI0MC1cdGludCBpID0gMCwgaiA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTI0MS1cbm1tL2RhbW9uL2NvcmUuYzoxMjQyOlx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGRzdF9nb2FsLCBuZXh0LCBkc3QpIHtcbm1tL2RhbW9uL2NvcmUuYzoxMjQzOlx0XHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkmIzQzOyYjNDM7LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEyNDQtXHRcdGlmIChzcmNfZ29hbClcbm1tL2RhbW9uL2NvcmUuYzoxMjQ1Olx0XHRcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMTI0Ni1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjEyNDc6XHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGRzdF9nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjQ4LVx0fVxubW0vZGFtb24vY29yZS5jOjEyNDk6XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykge1xubW0vZGFtb24vY29yZS5jLTEyNTAtXHRcdGlmIChqJiM0MzsmIzQzOyBcdTAwM2MgaSlcbm1tL2RhbW9uL2NvcmUuYy0xMjUxLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vY29yZS5jOjEyNTI6XHRcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtMTI1My1cdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI1NS1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxMjU2Olx0XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jOjEyNTc6XHRcdGRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTEyNTgtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jLTEyNjEtXG5tbS9kYW1vbi9jb3JlLmM6MTI2MjpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTI2My17XG4tLVxubW0vZGFtb24vY29yZS5jLTEyNjgtXHRkc3QtXHUwMDNlc3ogPSBzcmMtXHUwMDNlc3o7XG5tbS9kYW1vbi9jb3JlLmM6MTI2OTpcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTI3MC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTE1MTk9c3RhdGljIGludCBkYW1vc19jb21taXQoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTI2LVxubW0vZGFtb24vY29yZS5jOjE1Mjc6XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGEoXHUwMDI2ZHN0LVx1MDAzZXF1b3RhLCBcdTAwMjZzcmMtXHUwMDNlcXVvdGEpO1xubW0vZGFtb24vY29yZS5jLTE1MjgtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTQ2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE1NjctXHRcdFx0XHRzcmNfc2NoZW1lLVx1MDAzZWFwcGx5X2ludGVydmFsX3VzLFxubW0vZGFtb24vY29yZS5jOjE1Njg6XHRcdFx0XHRcdTAwMjZzcmNfc2NoZW1lLVx1MDAzZXF1b3RhLCBcdTAwMjZzcmNfc2NoZW1lLVx1MDAzZXdtYXJrcyxcbm1tL2RhbW9uL2NvcmUuYy0xNTY5LVx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTY3OT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzA1LVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBkc3QpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNzA2Olx0XHRcdFx0aWYgKHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID09IGRzdF90YXJnZXQpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNzA3Olx0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmM6MTcwODpcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xNzA5LVx0XHRcdFx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODYyPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODY1LVx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG5tbS9kYW1vbi9jb3JlLmM6MTg2NjpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xubW0vZGFtb24vY29yZS5jLTE4NjctXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NzQtXHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xubW0vZGFtb24vY29yZS5jOjE4NzU6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YTtcbm1tL2RhbW9uL2NvcmUuYy0xODc2LVxubW0vZGFtb24vY29yZS5jOjE4Nzc6XHRcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xubW0vZGFtb24vY29yZS5jLTE4NzgtXHRcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjM3MT1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTIzODYtLypcbm1tL2RhbW9uL2NvcmUuYzoyMzg3OiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXG5tbS9kYW1vbi9jb3JlLmM6MjM4ODogKiBAcXVvdGE6XHRUaGUgcXVvdGEgdG8gY2hlY2suXG5tbS9kYW1vbi9jb3JlLmMtMjM4OS0gKlxubW0vZGFtb24vY29yZS5jOjIzOTA6ICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdW90YSBpcyBzZXQsIGZhbHNlIG90aGVyd2lzZS5cbm1tL2RhbW9uL2NvcmUuYy0yMzkxLSAqL1xubW0vZGFtb24vY29yZS5jOjIzOTI6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG5tbS9kYW1vbi9jb3JlLmMtMjM5My17XG5tbS9kYW1vbi9jb3JlLmM6MjM5NDpcdHJldHVybiBxdW90YS1cdTAwM2Vlc3ogfHwgcXVvdGEtXHUwMDNlc3ogfHwgcXVvdGEtXHUwMDNlbXMgfHxcbm1tL2RhbW9uL2NvcmUuYzoyMzk1Olx0XHQhZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkocXVvdGEpO1xubW0vZGFtb24vY29yZS5jLTIzOTYtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMzk4PXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDAyLVxubW0vZGFtb24vY29yZS5jOjI0MDM6XHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxubW0vZGFtb24vY29yZS5jLTI0MDQtXHRcdHJldHVybiByZXQ7XG5tbS9kYW1vbi9jb3JlLmMtMjQwNS1cbm1tL2RhbW9uL2NvcmUuYzoyNDA2Olx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDA3LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQxMC0gKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2Zcbm1tL2RhbW9uL2NvcmUuYzoyNDExOiAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTI0MTItICogQHQ6XHRUaGUgdGFyZ2V0IG9mIHRoZSByZWdpb24uXG4tLVxubW0vZGFtb24vY29yZS5jLTI0MTYtICpcbm1tL2RhbW9uL2NvcmUuYzoyNDE3OiAqIElmIGEgcXVvdGEgb2YgYSBzY2hlbWUgaGFzIGV4Y2VlZGVkIGluIGEgcXVvdGEgY2hhcmdlIHdpbmRvdywgdGhlIHNjaGVtZSYjMzk7c1xubW0vZGFtb24vY29yZS5jLTI0MTgtICogYWN0aW9uIHdvdWxkIGFwcGxpZWQgdG8gb25seSBhIHBhcnQgb2YgdGhlIHRhcmdldCBhY2Nlc3MgcGF0dGVybiBmdWxmaWxsaW5nXG4tLVxubW0vZGFtb24vY29yZS5jPTI0MzQ9c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDM3LXtcbm1tL2RhbW9uL2NvcmUuYzoyNDM4Olx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG5tbS9kYW1vbi9jb3JlLmMtMjQzOS1cdHVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQ0MS1cdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbm1tL2RhbW9uL2NvcmUuYzoyNDQyOlx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xubW0vZGFtb24vY29yZS5jOjI0NDM6XHRcdGlmICh0ICE9IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcbm1tL2RhbW9uL2NvcmUuYy0yNDQ0LVx0XHRcdHJldHVybiB0cnVlO1xubW0vZGFtb24vY29yZS5jLTI0NDUtXHRcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjQ0NjpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jOjI0NDc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMjQ0OC1cdFx0XHRyZXR1cm4gdHJ1ZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDQ5LVx0XHR9XG5tbS9kYW1vbi9jb3JlLmM6MjQ1MDpcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2XG5tbS9kYW1vbi9jb3JlLmM6MjQ1MTpcdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSlcbm1tL2RhbW9uL2NvcmUuYy0yNDUyLVx0XHRcdHJldHVybiB0cnVlO1xubW0vZGFtb24vY29yZS5jLTI0NTMtXG5tbS9kYW1vbi9jb3JlLmM6MjQ1NDpcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2IHItXHUwMDNlYXIuc3RhcnQgXHUwMDNjXG5tbS9kYW1vbi9jb3JlLmM6MjQ1NTpcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbm1tL2RhbW9uL2NvcmUuYzoyNDU2Olx0XHRcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gLVxubW0vZGFtb24vY29yZS5jLTI0NTctXHRcdFx0XHRcdHItXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDY1LVx0XHR9XG5tbS9kYW1vbi9jb3JlLmM6MjQ2NjpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbm1tL2RhbW9uL2NvcmUuYzoyNDY3Olx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0yNDY4LVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjE5PXN0YXRpYyB2b2lkIGRhbW9zX3dhbGtfY2FuY2VsKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjYzNS1cbm1tL2RhbW9uL2NvcmUuYzoyNjM2OnN0YXRpYyB2b2lkIGRhbW9zX2NoYXJnZV9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxubW0vZGFtb24vY29yZS5jLTI2MzctXHRcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCB1bnNpZ25lZCBsb25nIHN6X2FwcGxpZWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTI2NDMtXHQgKi9cbm1tL2RhbW9uL2NvcmUuYzoyNjQ0Olx0aWYgKCFxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSB8fCBzel9hcHBsaWVkIFx1MDAzZSBzel9yZWdpb24pXG5tbS9kYW1vbi9jb3JlLmM6MjY0NTpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiAmIzQzOz0gc3pfcmVnaW9uO1xubW0vZGFtb24vY29yZS5jLTI2NDYtXHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6MjY0NzpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiAmIzQzOz0gc3pfYXBwbGllZCAmIzQzOyBtdWx0X2ZyYWMoXG5tbS9kYW1vbi9jb3JlLmMtMjY0OC1cdFx0XHRcdChzel9yZWdpb24gLSBzel9hcHBsaWVkKSxcbm1tL2RhbW9uL2NvcmUuYzoyNjQ5Olx0XHRcdFx0cXVvdGEtXHUwMDNlZmFpbF9jaGFyZ2VfbnVtLFxubW0vZGFtb24vY29yZS5jOjI2NTA6XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XG5tbS9kYW1vbi9jb3JlLmMtMjY1MS19XG5tbS9kYW1vbi9jb3JlLmMtMjY1Mi1cbm1tL2RhbW9uL2NvcmUuYzoyNjUzOnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbm1tL2RhbW9uL2NvcmUuYy0yNjU0LVx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG5tbS9kYW1vbi9jb3JlLmMtMjY1NS17XG5tbS9kYW1vbi9jb3JlLmM6MjY1NjpcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbm1tL2RhbW9uL2NvcmUuYy0yNjU3LVx0XHRyZXR1cm4gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmM6MjY1ODpcdGlmICghcXVvdGEtXHUwMDNlY2hhcmdlZF9zeilcbm1tL2RhbW9uL2NvcmUuYy0yNjU5LVx0XHRyZXR1cm4gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmM6MjY2MDpcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6KVxubW0vZGFtb24vY29yZS5jLTI2NjEtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNjYzLVx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXHUwMDNjbWluX3JlZ2lvbl9zeiByZW1haW5pbmdcbm1tL2RhbW9uL2NvcmUuYzoyNjY0Olx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXG5tbS9kYW1vbi9jb3JlLmMtMjY2NS1cdCAqL1xubW0vZGFtb24vY29yZS5jOjI2NjY6XHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zejtcbm1tL2RhbW9uL2NvcmUuYy0yNjY3LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjY2OT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY3MS17XG5tbS9kYW1vbi9jb3JlLmM6MjY3MjpcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jLTI2NzMtXHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzA2LVx0aWYgKGMtXHUwMDNlb3BzLmFwcGx5X3NjaGVtZSkge1xubW0vZGFtb24vY29yZS5jOjI3MDc6XHRcdGlmIChkYW1vc19xdW90YV9pc19zZXQocXVvdGEpIFx1MDAyNlx1MDAyNlxubW0vZGFtb24vY29yZS5jOjI3MDg6XHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ICYjNDM7IHN6IFx1MDAzZSBxdW90YS1cdTAwM2Vlc3opIHtcbm1tL2RhbW9uL2NvcmUuYzoyNzA5Olx0XHRcdHN6ID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2Vlc3ogLSBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6LFxubW0vZGFtb24vY29yZS5jLTI3MTAtXHRcdFx0XHRcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4tLVxubW0vZGFtb24vY29yZS5jLTI3MjQtXHRcdGt0aW1lX2dldF9jb2Fyc2VfdHM2NChcdTAwMjZlbmQpO1xubW0vZGFtb24vY29yZS5jOjI3MjU6XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgJiM0Mzs9IHRpbWVzcGVjNjRfdG9fbnMoXHUwMDI2ZW5kKSAtXG5tbS9kYW1vbi9jb3JlLmMtMjcyNi1cdFx0XHR0aW1lc3BlYzY0X3RvX25zKFx1MDAyNmJlZ2luKTtcbm1tL2RhbW9uL2NvcmUuYzoyNzI3Olx0XHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcbm1tL2RhbW9uL2NvcmUuYzoyNzI4Olx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xubW0vZGFtb24vY29yZS5jOjI3Mjk6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbm1tL2RhbW9uL2NvcmUuYzoyNzMwOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbm1tL2RhbW9uL2NvcmUuYy0yNzMxLVx0XHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTI3NDA9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzQ2LVx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNzQ3Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbm1tL2RhbW9uL2NvcmUuYy0yNzQ4LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzU0LVxubW0vZGFtb24vY29yZS5jOjI3NTU6XHRcdGlmICghcXVvdGEtXHUwMDNlZXN6KVxubW0vZGFtb24vY29yZS5jLTI3NTYtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmMtMjc1Ny1cbm1tL2RhbW9uL2NvcmUuYzoyNzU4Olx0XHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cbm1tL2RhbW9uL2NvcmUuYzoyNzU5Olx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbm1tL2RhbW9uL2NvcmUuYy0yNzYwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzgyLSAqXG5tbS9kYW1vbi9jb3JlLmM6Mjc4MzogKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIHNwbGl0IHJlZ2lvbnMgZm9yIGtlZXBpbmcgdGhlIHF1b3RhLiAgVG8gbWluaW1pemVcbm1tL2RhbW9uL2NvcmUuYy0yNzg0LSAqIG92ZXJoZWFkIGZyb20gdGhlIHNwbGl0IG9wZXJhdGlvbnMgaW5jcmVhc2VkIG51bWJlciBvZiByZWdpb25zLCB0aGlzXG4tLVxubW0vZGFtb24vY29yZS5jPTI3OTU9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI4MDUtXHRcdCAqIGRhbW9uX2RvX2FwcGx5X3NjaGVlbXMoKSBjb3VsZCBzcGxpdCB0aGUgcmVnaW9uIGZvciB0aGVcbm1tL2RhbW9uL2NvcmUuYzoyODA2Olx0XHQgKiBxdW90YS4gIEtlZXBpbmcgdGhlIG5ldyBzbGljZXMgaXMgYW4gb3ZlcmhlYWQuICBNZXJnZSBiYWNrXG5tbS9kYW1vbi9jb3JlLmMtMjgwNy1cdFx0ICogdGhlIHNsaWNlcyBpbnRvIHRoZSBwcmV2aW91cyByZWdpb24gaWYgaXQgZG9lc24mIzM5O3QgbG9zZSBhbnlcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjkwNT1zdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXG5tbS9kYW1vbi9jb3JlLmM6MjkwNjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMjkwNy17XG4tLVxubW0vZGFtb24vY29yZS5jPTI5MzM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbm1tL2RhbW9uL2NvcmUuYzoyOTM0Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbm1tL2RhbW9uL2NvcmUuYy0yOTM1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzA4Nz1zdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXG5tbS9kYW1vbi9jb3JlLmM6MzA4ODpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMzA4OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMwOTM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbm1tL2RhbW9uL2NvcmUuYzozMDk0Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbm1tL2RhbW9uL2NvcmUuYy0zMDk1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzEyND1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTM5LVxubW0vZGFtb24vY29yZS5jOjMxNDA6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxubW0vZGFtb24vY29yZS5jOjMxNDE6XHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMzE0Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTMxODQtLyogUmV0dXJuIHRoZSBoaWdoZXN0IHNjb3JlIHNpbmNlIGl0IG1ha2VzIHNjaGVtZXMgbGVhc3QgYWdncmVzc2l2ZSAqL1xubW0vZGFtb24vY29yZS5jOjMxODU6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMxODYte1xubW0vZGFtb24vY29yZS5jOjMxODc6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL2NvcmUuYzozMTg4Olx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG5tbS9kYW1vbi9jb3JlLmMtMzE4OS1cdHVuc2lnbmVkIGxvbmcgaGlnaGVzdF9zY29yZSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMzE5MC1cbm1tL2RhbW9uL2NvcmUuYzozMTkxOlx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xubW0vZGFtb24vY29yZS5jOjMxOTI6XHRcdGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoYywgcywgZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzE5My1cdFx0aGlnaGVzdF9zY29yZSA9IG1heChoaWdoZXN0X3Njb3JlLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjAxPXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzIwMi17XG5tbS9kYW1vbi9jb3JlLmM6MzIwMzpcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jOjMyMDQ6XHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzIwNS1cbm1tL2RhbW9uL2NvcmUuYzozMjA2Olx0cXVvdGEtXHUwMDNlZXN6X2JwID0gZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQoXG5tbS9kYW1vbi9jb3JlLmM6MzIwNzpcdFx0XHRtYXgocXVvdGEtXHUwMDNlZXN6X2JwLCAxMDAwMFVMKSwgc2NvcmUpO1xubW0vZGFtb24vY29yZS5jLTMyMDgtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjEwPXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzIxMi17XG5tbS9kYW1vbi9jb3JlLmM6MzIxMzpcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jOjMyMTQ6XHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzIxNS1cbm1tL2RhbW9uL2NvcmUuYy0zMjE2LVx0aWYgKHNjb3JlIFx1MDAzZT0gMTAwMDApXG5tbS9kYW1vbi9jb3JlLmM6MzIxNzpcdFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gMDtcbm1tL2RhbW9uL2NvcmUuYzozMjE4Olx0ZWxzZSBpZiAocXVvdGEtXHUwMDNlc3opXG5tbS9kYW1vbi9jb3JlLmM6MzIxOTpcdFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gcXVvdGEtXHUwMDNlc3ogKiAxMDAwMDtcbm1tL2RhbW9uL2NvcmUuYy0zMjIwLVx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjMyMjE6XHRcdHF1b3RhLVx1MDAzZWVzel9icCA9IFVMT05HX01BWDtcbm1tL2RhbW9uL2NvcmUuYy0zMjIyLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzIyNC0vKlxubW0vZGFtb24vY29yZS5jOjMyMjU6ICogQ2FsbGVkIG9ubHkgaWYgcXVvdGEtXHUwMDNlbXMsIG9yIHF1b3RhLVx1MDAzZXN6IGFyZSBzZXQsIG9yIHF1b3RhLVx1MDAzZWdvYWxzIGlzIG5vdCBlbXB0eVxubW0vZGFtb24vY29yZS5jLTMyMjYtICovXG5tbS9kYW1vbi9jb3JlLmM6MzIyNzpzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyMjgte1xubW0vZGFtb24vY29yZS5jOjMyMjk6XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbm1tL2RhbW9uL2NvcmUuYy0zMjMwLVx0dW5zaWduZWQgbG9uZyB0aHJvdWdocHV0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjMyLVxubW0vZGFtb24vY29yZS5jOjMyMzM6XHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xubW0vZGFtb24vY29yZS5jOjMyMzQ6XHRcdHF1b3RhLVx1MDAzZWVzeiA9IHF1b3RhLVx1MDAzZXN6O1xubW0vZGFtb24vY29yZS5jLTMyMzUtXHRcdHJldHVybjtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzIzNy1cbm1tL2RhbW9uL2NvcmUuYzozMjM4Olx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xubW0vZGFtb24vY29yZS5jOjMyMzk6XHRcdGlmIChxdW90YS1cdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVClcbm1tL2RhbW9uL2NvcmUuYy0zMjQwLVx0XHRcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChjdHgsIHMpO1xubW0vZGFtb24vY29yZS5jOjMyNDE6XHRcdGVsc2UgaWYgKHF1b3RhLVx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbm1tL2RhbW9uL2NvcmUuYy0zMjQyLVx0XHRcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoY3R4LCBzKTtcbm1tL2RhbW9uL2NvcmUuYzozMjQzOlx0XHRlc3ogPSBxdW90YS1cdTAwM2Vlc3pfYnAgLyAxMDAwMDtcbm1tL2RhbW9uL2NvcmUuYy0zMjQ0LVx0fVxubW0vZGFtb24vY29yZS5jLTMyNDUtXG5tbS9kYW1vbi9jb3JlLmM6MzI0NjpcdGlmIChxdW90YS1cdTAwM2Vtcykge1xubW0vZGFtb24vY29yZS5jOjMyNDc6XHRcdGlmIChxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKVxubW0vZGFtb24vY29yZS5jOjMyNDg6XHRcdFx0dGhyb3VnaHB1dCA9IG11bHRfZnJhYyhxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6LFxubW0vZGFtb24vY29yZS5jOjMyNDk6XHRcdFx0XHRcdDEwMDAwMDAsIHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMpO1xubW0vZGFtb24vY29yZS5jLTMyNTAtXHRcdGVsc2Vcbm1tL2RhbW9uL2NvcmUuYy0zMjUxLVx0XHRcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xubW0vZGFtb24vY29yZS5jOjMyNTI6XHRcdGVzeiA9IG1pbih0aHJvdWdocHV0ICogcXVvdGEtXHUwMDNlbXMsIGVzeik7XG5tbS9kYW1vbi9jb3JlLmMtMzI1My1cdFx0ZXN6ID0gbWF4KGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6LCBlc3opO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjU1LVxubW0vZGFtb24vY29yZS5jOjMyNTY6XHRpZiAocXVvdGEtXHUwMDNlc3ogXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZXN6IFx1MDAzYyBlc3opXG5tbS9kYW1vbi9jb3JlLmM6MzI1NzpcdFx0ZXN6ID0gcXVvdGEtXHUwMDNlc3o7XG5tbS9kYW1vbi9jb3JlLmMtMzI1OC1cbm1tL2RhbW9uL2NvcmUuYzozMjU5Olx0cXVvdGEtXHUwMDNlZXN6ID0gZXN6O1xubW0vZGFtb24vY29yZS5jLTMyNjAtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjYyPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXG5tbS9kYW1vbi9jb3JlLmM6MzI2MzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbm1tL2RhbW9uL2NvcmUuYy0zMjY0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI3Mi1cdH1cbm1tL2RhbW9uL2NvcmUuYzozMjczOlx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG5tbS9kYW1vbi9jb3JlLmMtMzI3NC19XG5tbS9kYW1vbi9jb3JlLmMtMzI3NS1cbm1tL2RhbW9uL2NvcmUuYzozMjc2OnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzI3Ny17XG5tbS9kYW1vbi9jb3JlLmM6MzI3ODpcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jLTMyNzktXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjgzLVxubW0vZGFtb24vY29yZS5jOjMyODQ6XHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlc3ogXHUwMDI2XHUwMDI2IGxpc3RfZW1wdHkoXHUwMDI2cXVvdGEtXHUwMDNlZ29hbHMpKVxubW0vZGFtb24vY29yZS5jLTMyODUtXHRcdHJldHVybjtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI4Ny1cdC8qIEZpcnN0IGNoYXJnZSB3aW5kb3cgKi9cbm1tL2RhbW9uL2NvcmUuYzozMjg4Olx0aWYgKCFxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6IFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzI4OTpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbm1tL2RhbW9uL2NvcmUuYzozMjkwOlx0XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTMyOTEtXHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxubW0vZGFtb24vY29yZS5jOjMyOTI6XHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbm1tL2RhbW9uL2NvcmUuYy0zMjkzLVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjk1LVx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXG5tbS9kYW1vbi9jb3JlLmM6MzI5NjpcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbm1tL2RhbW9uL2NvcmUuYzozMjk3Olx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tICYjNDM7XG5tbS9kYW1vbi9jb3JlLmM6MzI5ODpcdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xubW0vZGFtb24vY29yZS5jOjMyOTk6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTMzMDAtXHRcdFx0cy1cdTAwM2VzdGF0LnF0X2V4Y2VlZHMmIzQzOyYjNDM7O1xubW0vZGFtb24vY29yZS5jOjMzMDE6XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogJiM0Mzs9IHF1b3RhLVx1MDAzZWNoYXJnZWRfc3o7XG5tbS9kYW1vbi9jb3JlLmM6MzMwMjpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbm1tL2RhbW9uL2NvcmUuYzozMzAzOlx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0zMzA0LVx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbm1tL2RhbW9uL2NvcmUuYzozMzA1Olx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG5tbS9kYW1vbi9jb3JlLmM6MzMwNjpcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYzozMzA3Olx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXG5tbS9kYW1vbi9jb3JlLmM6MzMwODpcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xubW0vZGFtb24vY29yZS5jLTMzMDktXHR9XG4tLVxubW0vZGFtb24vY29yZS5jLTMzMzQtXHRcdGN1bXVsYXRlZF9zeiAmIzQzOz0gYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV07XG5tbS9kYW1vbi9jb3JlLmM6MzMzNTpcdFx0aWYgKGN1bXVsYXRlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeiB8fCAhc2NvcmUpXG5tbS9kYW1vbi9jb3JlLmMtMzMzNi1cdFx0XHRicmVhaztcbm1tL2RhbW9uL2NvcmUuYy0zMzM3LVx0fVxubW0vZGFtb24vY29yZS5jOjMzMzg6XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0zMzM5LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzM1Nz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM3Mi1cbm1tL2RhbW9uL2NvcmUuYzozMzczOlx0XHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzM3NC1cdH1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM5PXN0YXRpYyBib29sIGNvbW1pdF9pbnB1dHMgX19yZWFkX21vc3RseTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQzLSAqXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ0OiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NTogKiBhdXRvbWF0aWNhbGx5IGluY3JlYXNlcyBhbmQgZGVjcmVhc2VzIHRoZSBlZmZlY3RpdmUgbGV2ZWwgb2YgdGhlIHF1b3RhXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ2LSAqIGFpbWluZyB0aGUgTFJVIFtkZV1wcmlvcml0aXphdGlvbnMgb2YgdGhlIGhvdCBhbmQgY29sZCBtZW1vcnkgcmVzdWx0aW5nIGluXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xMDQ9bW9kdWxlX3BhcmFtKGNvbGRfbWluX2FnZSwgdWxvbmcsIDA2MDApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0xMDUtXG5tbS9kYW1vbi9scnVfc29ydC5jOjEwNjpzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhIGRhbW9uX2xydV9zb3J0X3F1b3RhID0ge1xubW0vZGFtb24vbHJ1X3NvcnQuYy0xMDctXHQvKiBVc2UgdXAgdG8gMTAgbXMgcGVyIDEgc2VjLCBieSBkZWZhdWx0ICovXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMTAtXHQucmVzZXRfaW50ZXJ2YWwgPSAxMDAwLFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTE6XHQvKiBXaXRoaW4gdGhlIHF1b3RhLCBtYXJrIGhvdHRlciByZWdpb25zIGFjY2Vzc2VkIGZpcnN0LiAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYy0xMTItXHQud2VpZ2h0X3N6ID0gMCxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTExNS19O1xubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTY6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfVElNRV9RVU9UQShkYW1vbl9scnVfc29ydF9xdW90YSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTExNy1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTE2ND1ERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19TVEFUU19QQVJBTVMoZGFtb25fbHJ1X3NvcnRfaG90X3N0YXQsXG5tbS9kYW1vbi9scnVfc29ydC5jLTE2NS1cdFx0bHJ1X3NvcnRfdHJpZWRfaG90X3JlZ2lvbnMsIGxydV9zb3J0ZWRfaG90X3JlZ2lvbnMsXG5tbS9kYW1vbi9scnVfc29ydC5jOjE2NjpcdFx0aG90X3F1b3RhX2V4Y2VlZHMpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0xNjctXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xNjk9REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX2xydV9zb3J0X2NvbGRfc3RhdCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTcwLVx0XHRscnVfc29ydF90cmllZF9jb2xkX3JlZ2lvbnMsIGxydV9zb3J0ZWRfY29sZF9yZWdpb25zLFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxNzE6XHRcdGNvbGRfcXVvdGFfZXhjZWVkcyk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTE3Mi1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTE4OD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lKFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMTkwLXtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTkxOlx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0gZGFtb25fbHJ1X3NvcnRfcXVvdGE7XG5tbS9kYW1vbi9scnVfc29ydC5jLTE5Mi1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MTkzOlx0LyogVXNlIGhhbGYgb2YgdG90YWwgcXVvdGEgZm9yIGhvdC9jb2xkIHBhZ2VzIHNvcnRpbmcgKi9cbm1tL2RhbW9uL2xydV9zb3J0LmM6MTk0Olx0cXVvdGEubXMgPSBxdW90YS5tcyAvIDI7XG5tbS9kYW1vbi9scnVfc29ydC5jLTE5NS1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTIwMi1cdFx0XHQwLFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMDM6XHRcdFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyMDQ6XHRcdFx0XHUwMDI2cXVvdGEsXG5tbS9kYW1vbi9scnVfc29ydC5jLTIwNS1cdFx0XHQvKiAoRGUpYWN0aXZhdGUgdGhpcyBhY2NvcmRpbmcgdG8gdGhlIHdhdGVybWFya3MuICovXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjA9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X2NvbGRfc2NoZW1lKHVuc2lnbmVkIGludCBjb2xkX3RocmVzKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjI4LVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgREFNT04mIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNT05pdG9yIHdpdGhpbiB0aGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vZGFtb24vYCksIG5lZWRzIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLCBwYXJ0aWN1bGFybHkgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBrZXkgZm9yIG91ciB0ZXN0aW5nLgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4gIEdvb2QsIERBTU9OIGlzIGNvbmZpZ3VyYWJsZSB2aWEgYHN5c2ZzYCAoYENPTkZJR19EQU1PTl9TWVNGU2ApIGFuZCBtb2R1bGVzIChgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCwgYENPTkZJR19EQU1PTl9TVEFUYCksIHdoaWNoIG1lYW5zIEkgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggaXQgdGhyb3VnaCB0aGUgYC9zeXMva2VybmVsL21tL2RhbW9uLy4uLmAgaW50ZXJmYWNlIHRvIHNldCB1cCBpdHMgc2NoZW1lcywgcXVvdGFzLCB0YXJnZXRzLCBhbmQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLiAgVGhhdCYjMzk7cyBhIGRlZmluaXRlIHBsdXMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgdGhpcyB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/ICBMZXQmIzM5O3MgY29uc2lkZXIgdGhlIHVzdWFsIGNyaXRlcmlhOgoKKiAgICoqU3Vic3lzdGVtOioqIEl0IGlzIGluIGBtbS9kYW1vbmAsIGRlZmluaXRlbHkgbm90IGp1c3QgZG9jdW1lbnRhdGlvbiBvciBjb3NtZXRpYyBjaGFuZ2VzLiBDaGVjay4KKiAgICoqRXhlY3V0aW9uIGZsb3c6KiogTm90IHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgb3IgbWFjcm9zLiBUaGUgY29yZSBsb2dpYyBpbiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBpcyBkZWZpbml0ZWx5IGludGVyZXN0aW5nLCB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBleGVjdXRpb24gZmxvdy4gQ2hlY2suCiogICAqKlNwZWNpZmljIERvbWFpbjoqKiBUaGlzIGlzbiYjMzk7dCBhIGhhcmR3YXJlIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIuIEl0JiMzOTtzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgbW9yZSBpbXBhY3RmdWwgaWYgdGhlcmUgaXMgYSB2dWxuZXJhYmlsaXR5LiBDaGVjay4KKiAgICoqUnVudGltZSBMb2dpYzoqKiBJdCYjMzk7cyBub3QganVzdCB0ZWFyZG93biBlaXRoZXIsIGl0IGlzIHJlZ3VsYXIgcnVudGltZSBsb2dpYy4gQ2hlY2suCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYHRydWVgLiBXZSBoYXZlIGVub3VnaCBjb21wbGV4aXR5IGluIHRoZSBkYXRhIGFuZCBjb250cm9sIGZsb3csIHdoaWNoIGhhcyBnb29kIHJlYWNoYWJpbGl0eS4KCkFscmlnaHQsIHNvIHdoYXQmIzM5O3MgbmV4dD8gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgbW0vZGFtb24vc3lzZnMuY2AgZm9yIHRob3NlIGBzeXNmc2AgaW50ZXJhY3Rpb24gcG9pbnRzLCBhcyB3ZWxsIGFzIGBtbS9kYW1vbi9jb3JlLmNgIGZvciB0aGUgY29yZSBEQU1PTiBsb2dpYy4KSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMgZm9yIHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmRhbW9ufGRhbW9uX3N5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNjg3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTA6REVGSU5FX01VVEVYKGRhbW9uX3N5c2ZzX2xvY2spO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTctXHRcdHVuc2lnbmVkIGxvbmcgbWluLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE5LXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjIwOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGttYWxsb2Nfb2JqKCpyYW5nZSk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0yMS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0zMT1zdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTMzLXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjM0Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MzU6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTM2LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTQwPXN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTQyLXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NDQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTQ1LVx0dW5zaWduZWQgbG9uZyBtaW47XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NTY9c3RhdGljIHNzaXplX3QgbWF4X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy01OC17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo1OTpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjYwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy02MS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz02NT1zdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy02Ny17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2ODpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjY5Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy03MC1cdHVuc2lnbmVkIGxvbmcgbWF4O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODE6dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODIte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODM6XHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKSk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04NC19XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04NS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjg2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWluX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODctXHRcdF9fQVRUUl9SV19NT0RFKG1pbiwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04OC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjg5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWF4X2F0dHIgPVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTAtXHRcdF9fQVRUUl9SV19NT0RFKG1heCwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05MS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkyOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTM6XHRcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9taW5fYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTQ6XHRcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9tYXhfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTUtXHROVUxMLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTYtfTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjk3OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfdWxfcmFuZ2UpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5OTpjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTAwOlx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAxLVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTAyOlx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfdWxfcmFuZ2VfZ3JvdXBzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAzLX07XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA1LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTA2OnN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA3LVx0XHRjaGFyICptZW1jZ19wYXRoX2J1ZiwgY2hhciAqcGF0aClcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTc6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZClcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExOC17XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTM0LVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTM1Olx0XHRpZiAoZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShtZW1jZywgcGF0aCwgbWVtY2dfcGF0aCkpIHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNi1cdFx0XHQqaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC04LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6OTpleHRlcm4gc3RydWN0IG11dGV4IGRhbW9uX3N5c2ZzX2xvY2s7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xMC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjExOnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSB7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xMi1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoxNzpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTgtXHRcdHVuc2lnbmVkIGxvbmcgbWluLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTktXHRcdHVuc2lnbmVkIGxvbmcgbWF4KTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjIwOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjIyOmV4dGVybiBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2t0eXBlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjMtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjctXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyODpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyB7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yOS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozMDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKipzY2hlbWVzX2Fycjtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTMxLVx0aW50IG5yO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTMzLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzQ6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zNi1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM3OmV4dGVybiBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGU7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM5OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0MDpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDM6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDQtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00NS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQ2OnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1MTppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTI6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD01Nz12b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTg6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTktXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC02MC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjYxOmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcHJvYmVzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUwOnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTEtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjEtXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2Mi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcmVnaW9uX2FkZF9kaXJzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NzpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzgtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjAyPXN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3JlZ2lvbl9ybV9kaXJzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwMzpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDQte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDk9c3RhdGljIHNzaXplX3Qgc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIxMjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTM6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxNC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjE4PXN0YXRpYyBzc2l6ZV90IGVuZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjIxOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMjpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjIzLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMjc9c3RhdGljIHNzaXplX3QgbnJfYWNjZXNzZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjMxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIzNj1zdGF0aWMgc3NpemVfdCBhZ2Vfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzOTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI0MS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjQ1PXN0YXRpYyBzc2l6ZV90IHN6X2ZpbHRlcl9wYXNzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQ3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDg6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ5Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTAtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTQ6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU2Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjYyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjMtXHRcdF9fQVRUUl9ST19NT0RFKHN0YXJ0LCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY2LVx0XHRfX0FUVFJfUk9fTU9ERShlbmQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX25yX2FjY2Vzc2VzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2OS1cdFx0X19BVFRSX1JPX01PREUobnJfYWNjZXNzZXMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FnZV9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzItXHRcdF9fQVRUUl9ST19NT0RFKGFnZSwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjczLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3NDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3pfZmlsdGVyX3Bhc3NlZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzUtXHRcdF9fQVRUUl9ST19NT0RFKHN6X2ZpbHRlcl9wYXNzZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzc6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzg6XHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N0YXJ0X2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzk6XHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2VuZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgwOlx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ucl9hY2Nlc3Nlc19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgxOlx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hZ2VfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MjpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3pfZmlsdGVyX3Bhc3NlZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgzLVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODQtfTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODU6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg4Olx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5LVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MDpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZ3JvdXBzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MS19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk3OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk4LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzAzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNDpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDU6ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDYte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNzpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucyA9IGttYWxsb2Nfb2JqKCpyZWdpb25zKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDgtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxOT1zdGF0aWMgc3NpemVfdCB0b3RhbF9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyNC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzI3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyODpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyOTpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpyZWdpb25zKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMzMC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzMxOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnIsICpuZXh0O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMzMi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0MjpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0My17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzQ0Olx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucywga29iaikpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0NS19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0NzpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0OC1cdFx0X19BVFRSX1JPX01PREUodG90YWxfYnl0ZXMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0OS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTA6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzUxOlx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1Mi1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzUzLX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU0OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTY6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU3Olx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1OC1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTk6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzYwLX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNjY6c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzc4OnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKmRhbW9uX3N5c2ZzX3N0YXRzX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzc5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODA6XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODEtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zODM9c3RhdGljIHNzaXplX3QgbnJfdHJpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM4NjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODgtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM5Mj1zdGF0aWMgc3NpemVfdCBzel90cmllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM5NC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzk1Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM5NjpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM5Ny1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDAxPXN0YXRpYyBzc2l6ZV90IG5yX2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDAzLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MDQ6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDA1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDA2LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MTA9c3RhdGljIHNzaXplX3Qgc3pfYXBwbGllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MTIte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQxMzpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MTUtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBzel9vcHNfZmlsdGVyX3Bhc3NlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MjEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQyMjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjM6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MjQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQyOD1zdGF0aWMgc3NpemVfdCBxdF9leGNlZWRzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQzMC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDMxOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQzMjpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQzMy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDM3PXN0YXRpYyBzc2l6ZV90IG5yX3NuYXBzaG90c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Mzkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ0MDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDE6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NDItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQ0Nj1zdGF0aWMgc3NpemVfdCBtYXhfbnJfc25hcHNob3RzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ0OC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQ5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ1MS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDU1PXN0YXRpYyBzc2l6ZV90IG1heF9ucl9zbmFwc2hvdHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ1Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDU4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2MC1cdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cywgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZtYXhfbnJfc25hcHNob3RzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDY3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ2ODpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2OS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDcwOlx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaikpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3MS19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDcyLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3MzpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX25yX3RyaWVkX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3NC1cdFx0X19BVFRSX1JPX01PREUobnJfdHJpZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel90cmllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzctXHRcdF9fQVRUUl9ST19NT0RFKHN6X3RyaWVkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDc5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfbnJfYXBwbGllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODAtXHRcdF9fQVRUUl9ST19NT0RFKG5yX2FwcGxpZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODI6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel9hcHBsaWVkX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4My1cdFx0X19BVFRSX1JPX01PREUoc3pfYXBwbGllZCwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDg0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3N6X29wc19maWx0ZXJfcGFzc2VkX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4Ni1cdFx0X19BVFRSX1JPX01PREUoc3pfb3BzX2ZpbHRlcl9wYXNzZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19xdF9leGNlZWRzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4OS1cdFx0X19BVFRSX1JPX01PREUocXRfZXhjZWVkcywgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5MTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX25yX3NuYXBzaG90c19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTItXHRcdF9fQVRUUl9ST19NT0RFKG5yX3NuYXBzaG90cywgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5NDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX21heF9ucl9zbmFwc2hvdHNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDk1LVx0XHRfX0FUVFJfUldfTU9ERShtYXhfbnJfc25hcHNob3RzLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDk3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zdGF0c19hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5ODpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX3RyaWVkX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTk6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel90cmllZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAwOlx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfYXBwbGllZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAxOlx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAyOlx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfb3BzX2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMzpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3F0X2V4Y2VlZHNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX3NuYXBzaG90c19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA1Olx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbWF4X25yX3NuYXBzaG90c19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA2LVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MDctfTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDg6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zdGF0cyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxMDpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zdGF0c19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTE6XHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3N0YXRzX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTEyLVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxMzpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3N0YXRzX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MTQtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTIzPWVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUyOC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1Mjk6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUzMC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDE6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Mi1cdFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTQ0Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlcjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTQ2Olx0ZmlsdGVyID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Ny1cdGlmIChmaWx0ZXIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTU5Mz1zdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5NS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk2Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU5NzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk4LVx0aW50IGk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTYyNz1zdGF0aWMgc3NpemVfdCB0eXBlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Mjkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjYzMDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MzE6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYzMi1cdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NjUyPXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY1NC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjU1Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY1NjpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjU3LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02NjE9c3RhdGljIHNzaXplX3QgbWF0Y2hpbmdfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY2My17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjY0Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY2NTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjY2LVx0Ym9vbCBtYXRjaGluZztcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njc2PXN0YXRpYyBzc2l6ZV90IGFsbG93X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY3OC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Njc5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjgxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02ODU9c3RhdGljIHNzaXplX3QgYWxsb3dfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Njg4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjkwLVx0Ym9vbCBhbGxvdztcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzAwPXN0YXRpYyBzc2l6ZV90IG1lbWNnX3BhdGhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzAyLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MDM6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA0Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MDUtXHRpbnQgbGVuO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwNi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MDc6XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzA4LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTAtXHRcdFx0ZmlsdGVyLVx1MDAzZW1lbWNnX3BhdGggPyBmaWx0ZXItXHUwMDNlbWVtY2dfcGF0aCA6IFwmIzM0O1wmIzM0Oyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzExOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcxMi1cdHJldHVybiBsZW47XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTcxNT1zdGF0aWMgc3NpemVfdCBtZW1jZ19wYXRoX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTcte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcxODpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyMC1cdGNoYXIgKnBhdGggPSBrbWFsbG9jX2FycmF5KHNpemVfYWRkKGNvdW50LCAxKSwgc2l6ZW9mKCpwYXRoKSxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzI2LVx0c3Ryc2NweShwYXRoLCBidWYsIGNvdW50ICYjNDM7IDEpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcyNzpcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSkge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyOC1cdFx0a2ZyZWUocGF0aCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczMi1cdGZpbHRlci1cdTAwM2VtZW1jZ19wYXRoID0gcGF0aDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MzM6XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzM0LVx0cmV0dXJuIGNvdW50O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03Mzc9c3RhdGljIHNzaXplX3QgYWRkcl9zdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Mzkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0MDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDE6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0Mi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzQ2PXN0YXRpYyBzc2l6ZV90IGFkZHJfc3RhcnRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0OC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzQ5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc1MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzUxLVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZWFkZHJfcmFuZ2Uuc3RhcnQpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NTY9c3RhdGljIHNzaXplX3QgYWRkcl9lbmRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzU4LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzYwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NjEtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc2NT1zdGF0aWMgc3NpemVfdCBhZGRyX2VuZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzY3LXtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDgyNwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBGdXp6aW5nIFN0cmF0ZWd5OiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gdGhlIHRhc2sgaXMgdG8gcGlucG9pbnQgcG90ZW50aWFsIGFyZWFzIGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBGaXJzdCwgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgREFNT04gc3ltYm9scy4gV2UgbmVlZCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgd2FycmFudCBhIGNsb3NlciBsb29rLiBUaGlua2luZyBzdHJhdGVnaWNhbGx5LCB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aG9zZSBlbnRyeSBwb2ludHMgYXMgdGhlIGluaXRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdGVzdCBmdW5jdGlvbnMgbGlrZSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBhbmQgdGhlaXIgcmVsYXRlZCB2YXJpYW50cyBmb3Igc2V0dGluZywgY29tbWl0dGluZyBzY2hlbWVzL3RhcmdldHMsIGFuZCBmdW5jdGlvbiBjYWxscy4gQWxzbywgaW5jbHVkZSBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBgZGFtb25fc2V0X3JlZ2lvbnNgLCBhbmQgYGRhbW9uX25ld19zY2hlbWVgLgoKTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGV4cG9ydGVkLCBub24tc3RhdGljIHN5bWJvbHMgd2l0aGluIHRoZSBjb3JlIERBTU9OIGZpbGVzOiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBhZGRpdGlvbmFsIGVudHJ5IHBvaW50cyBvciBpbXBvcnRhbnQgaW50ZXJuYWwgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCB3aXRoIHRoZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfHN0cnVjdCBbYS16X10mIzQzOyBcXCopIFthLXowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz01MT1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo3MjppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXG5tbS9kYW1vbi9jb3JlLmMtNzMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy05OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzo5OTppbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxubW0vZGFtb24vY29yZS5jLTEwMC17XG4tLVxubW0vZGFtb24vY29yZS5jPTExNT1zdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbmV3X3ByZXAoZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb24pXG4tLVxubW0vZGFtb24vY29yZS5jLTEyNi1cbm1tL2RhbW9uL2NvcmUuYzoxMjc6dm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKVxubW0vZGFtb24vY29yZS5jLTEyOC17XG4tLVxubW0vZGFtb24vY29yZS5jPTE3Mj1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg2LVxubW0vZGFtb24vY29yZS5jOjE4Nzp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTE4OC17XG4tLVxubW0vZGFtb24vY29yZS5jPTE5Nz1zdGF0aWMgdm9pZCBkYW1vbl9mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDEtXG5tbS9kYW1vbi9jb3JlLmM6MjAyOnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0yMDMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjA9c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMzLVxubW0vZGFtb24vY29yZS5jOjIzNDp2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXG5tbS9kYW1vbi9jb3JlLmMtMjM1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NTA3PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy01MzktICovXG5tbS9kYW1vbi9jb3JlLmM6NTQwOmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxubW0vZGFtb24vY29yZS5jLTU0MS1cdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz02NTM9Ym9vbCBkYW1vc19maWx0ZXJfZm9yX29wcyhlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUpXG4tLVxubW0vZGFtb24vY29yZS5jLTY2NC1cbm1tL2RhbW9uL2NvcmUuYzo2NjU6dm9pZCBkYW1vc19hZGRfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy02NjYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz02Nzg9c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjgyLVxubW0vZGFtb24vY29yZS5jOjY4Mzp2b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtNjg0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Njg5PXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzA1LVxubW0vZGFtb24vY29yZS5jOjcwNjp2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNzA3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzE2PXN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzIwLVxubW0vZGFtb24vY29yZS5jOjcyMTp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbm1tL2RhbW9uL2NvcmUuYy03MjIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz03ODg9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03OTgtXG5tbS9kYW1vbi9jb3JlLmM6Nzk5OnZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy04MDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04MTA9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy04MTQtXG5tbS9kYW1vbi9jb3JlLmM6ODE1OnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTgxNi17XG4tLVxubW0vZGFtb24vY29yZS5jPTg0MD1zdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTg1Ni1cbm1tL2RhbW9uL2NvcmUuYzo4NTc6dm9pZCBkYW1vbl9hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy04NTgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04NjQtICovXG5tbS9kYW1vbi9jb3JlLmM6ODY1OmludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKVxubW0vZGFtb24vY29yZS5jLTg2Ni17XG4tLVxubW0vZGFtb24vY29yZS5jPTg3Mz1zdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4tLVxubW0vZGFtb24vY29yZS5jLTg3Ny1cbm1tL2RhbW9uL2NvcmUuYzo4Nzg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTg3OS17XG4tLVxubW0vZGFtb24vY29yZS5jLTg4Ni1cbm1tL2RhbW9uL2NvcmUuYzo4ODc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtODg4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9OTQyPXN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTk0OS1cbm1tL2RhbW9uL2NvcmUuYzo5NTA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtOTUxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTA4Mz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTE3LSAqL1xubW0vZGFtb24vY29yZS5jOjExMTg6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5tbS9kYW1vbi9jb3JlLmMtMTExOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTExNjUtICovXG5tbS9kYW1vbi9jb3JlLmM6MTE2Njp2b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcbm1tL2RhbW9uL2NvcmUuYy0xMTY3LVx0XHRcdHNzaXplX3QgbnJfc2NoZW1lcylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTIxNT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTIzNi0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMjM3OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxubW0vZGFtb24vY29yZS5jLTEyMzgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xOTIwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTQ4LSAqL1xubW0vZGFtb24vY29yZS5jOjE5NDk6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTk1MC17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwMzI9c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA2OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDY5OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTIwNzAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTE0PXN0YXRpYyB2b2lkIF9fZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxMzMtICovXG5tbS9kYW1vbi9jb3JlLmM6MjEzNDp2b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxubW0vZGFtb24vY29yZS5jLTIxMzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTQ5PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNjQtICovXG5tbS9kYW1vbi9jb3JlLmM6MjE2NTppbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTIxNjYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjAwLSAqL1xubW0vZGFtb24vY29yZS5jOjIyMDE6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxubW0vZGFtb24vY29yZS5jLTIyMDIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjUzLSAqL1xubW0vZGFtb24vY29yZS5jOjIyNTQ6aW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKVxubW0vZGFtb24vY29yZS5jLTIyNTUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz00MDk0PXN0YXRpYyBib29sIGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3RhcnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTQxMjUtICovXG5tbS9kYW1vbi9jb3JlLmM6NDEyNjppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtNDEyNy1cdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MTUwLSAqL1xubW0vZGFtb24vY29yZS5jOjQxNTE6dm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpXG5tbS9kYW1vbi9jb3JlLmMtNDE1Mi17XG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0xNC0gKi9cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM6MTU6aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTE2LVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICoqdGFyZ2V0cClcbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTQ1LVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDo0NjppbnQgZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cCxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNDctXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKip0YXJnZXRwKTtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MjQ9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQxLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjQyOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQzLXtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzItXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NzM6dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzQte1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDMtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTA0OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDUtXHRcdFx0c3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNDktXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTUwOmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTUxLVx0XHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzMtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTc0OnZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzUte1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaD04PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjEwOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMTp2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTI6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMy1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE0LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE1OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTYtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxNzppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz02NT1zdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgxOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgyLXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTE3OmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTgte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTE3PXN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTktXHRcdHVuc2lnbmVkIGxvbmcgbWF4KTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjIwOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0zND1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM1OnZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTM2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9Mzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTM4LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mzk6aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQwLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQyOnZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHMoXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00My1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Njp2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTE6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUyLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01Ni1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU3OnZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01OC1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo2MTppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjY4ND1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjg4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2ODk6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY5MC17XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5ODppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk5LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkzMzp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzQtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTc0PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ4OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0OS1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA2Nzp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjgtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTA0LSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDU6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMDYtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE1MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTUyOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE1My1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzMxCgkJCQkJCQlvdXRwdXQ6IDE4OAoJCQkJCQkJdGhvdWdodHM6IDQyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSByZXZpZXdpbmcgdGhlIGNvcmUgREFNT04gY29tcG9uZW50czogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgYGRhbW9uX2NhbGxgLCBhbG9uZyB3aXRoIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGNhbGxzLCBhcyBleHBlY3RlZC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBvcHRpb25zLiBXZSBoYXZlIGBEQU1PTmAsIHdoaWNoIGJ1aWxkcyB0aGUgY29yZSBtb2R1bGUgKGBtbS9kYW1vbi9jb3JlLm9gKS4gVGhlbiwgYERBTU9OX1NZU0ZTYCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHN5c2ZzIGludGVyZmFjZSwgYnVpbGRpbmcgcmVsYXRlZCBtb2R1bGVzLCB3aGljaCBpcyBncmVhdCBmb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4gV2UgaGF2ZSBgREFNT05fUEFERFJgIGZvciBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcsIGFuZCBgREFNT05fVkFERFJgIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyDigJMgc3RhbmRhcmQgb2ZmZXJpbmdzLgoKSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIGRlcGVuZGVuY2llcy4gYERBTU9OX1NZU0ZTYCBjb3JyZWN0bHkgZGVwZW5kcyBvbiBib3RoIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIGlzIGNydWNpYWwuIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9WQUREUmAgYXJlIGNvcnJlY3RseSBkZXBlbmRlbnQgb24gYm90aCBgREFNT05gIGFuZCBgTU1VYC4gVGhpcyBlbnN1cmVzIHRoZSBwcm9wZXIgZm91bmRhdGlvbiBpcyBpbiBwbGFjZS4gSSYjMzk7bSBhbHNvIGNvbmZpcm1pbmcgdGhhdCBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3VjaCBhcyBgREFNT05fUkVDTEFJTWAgYW5kIGBEQU1PTl9MUlVfU09SVGAsIGFyZSBhcHByb3ByaWF0ZWx5IGNvbnNpZGVyZWQgYW5kIG5vdCBjYXVzaW5nIGFueSBjb25mbGljdHMuCgpJIHRoZW4gcmV2aXNpdGVkIHRoZSBsaXN0IG9mICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsg4oCTIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIOKAkyB0byBlbnN1cmUgdGhleSBhbGlnbiB3aXRoIHRoZSBLY29uZmlnIG9wdGlvbnMsIGFuZCBhbGwgdGhlIEtjb25maWcgb3B0aW9ucyBhcmUgY29uc2lzdGVudCB3aXRoIGVhY2ggb3RoZXIuIFRoaXMgY29uZmlybXMgdGhlaXIgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIHByb2plY3QuCgpFdmVyeXRoaW5nIGlzIGNsZWFyLiBObyBmdXJ0aGVyIGNoZWNrcyBhcmUgbmVlZGVkLCBzbywgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgc2NoZW1lIHF1b3RhIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIChzcGVjaWZpY2FsbHkgZGFtb3NfcXVvdGFfaXNfZnVsbCBhbmQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcykgdG8gaGFuZGxlIHplcm8gY2hhcmdlZCBzaXplIGFuZCB6ZXJvIGVmZmVjdGl2ZSBzY2hlbWUgc2l6ZSBjb25kaXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQga2VybmVsIEFQSXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgc2NoZW1lIHF1b3RhIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIChzcGVjaWZpY2FsbHkgZGFtb3NfcXVvdGFfaXNfZnVsbCBhbmQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcykgdG8gaGFuZGxlIHplcm8gY2hhcmdlZCBzaXplIGFuZCB6ZXJvIGVmZmVjdGl2ZSBzY2hlbWUgc2l6ZSBjb25kaXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQga2VybmVsIEFQSXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gcXVvdGEgY2FsY3VsYXRpb24gbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBlYXJseSByZXR1cm4gY2hlY2tzIHdoZW4gYHF1b3RhLVx1MDAzZWNoYXJnZWRfc3pgIG9yIGBxdW90YS1cdTAwM2Vlc3pgIGFyZSB6ZXJvIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lcygpYC5cblxuVGhlc2UgY2hhbmdlczpcbjEuIERvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LlxuMi4gRG8gbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZSBvciBhbHRlciBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxuMy4gT25seSBhZGQgY29uZGl0aW9uYWwgY2hlY2tzIG9uIGFscmVhZHktaW5pdGlhbGl6ZWQgZmllbGRzIHdpdGhpbiBgc3RydWN0IGRhbW9zX3F1b3RhYC5cblxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjVjOGZiOTYzOWI4YzhjODg0Y2ZjMjUzNzQwM2JiYTM5MDU2ODg3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDA6NTM6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggZGYyMjYyMTc2NTkxMS4uZjhjNzg0ZGYyNDYwMCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMjY1NSw2ICYjNDM7MjY1NSw4IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSwKIHsKIAlpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpCiAJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKCFxdW90YS0mZ3Q7Y2hhcmdlZF9zeikKJiM0MzsJCXJldHVybiBmYWxzZTsKIAlpZiAocXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzeikKIAkJcmV0dXJuIHRydWU7CiAJLyoKQEAgLTI3NTAsNiAmIzQzOzI3NTIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsCiAJCWlmICghcy0mZ3Q7d21hcmtzLmFjdGl2YXRlZCkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAoIXF1b3RhLSZndDtlc3opCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCS8qIENoZWNrIHRoZSBxdW90YSAqLwogCQlpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy0mZ3Q7bWluX3JlZ2lvbl9zeikpCiAJCQljb250aW51ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUGF0Y2ggQXNzZXNzbWVudDogS01TQU4gUmlzayBFdmFsdWF0aW9uKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgYG1tL2RhbW9uL2NvcmUuY2AgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIEtBU0FOIGNoZWNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGxlYW5zIHRvd2FyZHMgYSBkZWZlbnNpdmUsIFFBLWZvY3VzZWQgZXZhbHVhdGlvbiDigJMgc29tZXRoaW5nIHNhZmUgYW5kIHN0cmFpZ2h0Zm9yd2FyZCB0byBkby4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIFRoZSBkaWZmIGl0c2VsZiBpcyByZWxhdGl2ZWx5IHNtYWxsLiBJIHNlZSBhZGRpdGlvbnMgd2l0aGluIHRoZSBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBmdW5jdGlvbnMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGVja3MgZm9yIGBxdW90YS0mZ3Q7Y2hhcmdlZF9zemAgYW5kIGBxdW90YS0mZ3Q7ZXN6YCBiZWluZyBub24temVybyBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNlcnRhaW4gb3BlcmF0aW9ucyByZWxhdGVkIHRvIHF1b3RhIG1hbmFnZW1lbnQgYW5kIHNjaGVtZSBhcHBsaWNhdGlvbiB3aXRoaW4gREFNT04uCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCBgY2hhcmdlZF9zemAgYW5kIGBlc3pgIHJlcHJlc2VudCBhbmQgaG93IHRoZXkgYXJlIGluaXRpYWxpemVkIGFuZCB1c2VkIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IGdyZXBwZXIgc2tpbGxzIG9yIHJlYWQgdGhyb3VnaCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGVzZSBjaGVja3MgYXJlIGFjdHVhbGx5ICpyZW1vdmluZyogYSBwb3RlbnRpYWwgcmlzaywgYnkgZW5zdXJpbmcgdGhhdCBjZXJ0YWluIGNvbXB1dGF0aW9ucyBkb24mIzM5O3Qgb2NjdXIgd2hlbiB0aGUgcXVvdGEgaXMgZW1wdHkgb3Igbm90IGluaXRpYWxpemVkLiBTbywgaXQgKm1pZ2h0KiBiZSBhIGdvb2QgdGhpbmcuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgcGF0Y2ggaXMgbGlrZWx5IGFpbWVkIGF0IHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdXNpbmcgdW5pbml0aWFsaXplZCBvciB6ZXJvIHZhbHVlcyBpbiBjYWxjdWxhdGlvbnMgcmVsYXRlZCB0byBxdW90YXMuIFRoZSBhZGRpdGlvbiBvZiB0aGVzZSBjaGVja3Mgd291bGQgbWVhbiBLTVNBTiBpcyBwcm9iYWJseSBub3QgbmVlZGVkLiBBIHRob3JvdWdoIGNvZGUgcmV2aWV3IGFuZCBsb29raW5nIGZvciBvdGhlciByZWZlcmVuY2VzIHRvIHRoZSB2YXJpYWJsZXMgaXMgZGVmaW5pdGVseSByZXF1aXJlZCwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2sgZG93biBhbnkgcG90ZW50aWFsIGluaXRpYWxpemF0aW9uIHBhdGhzIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucywgYnV0IHRoaXMgbG9va3MgbGlrZSBhIGRlZmVuc2l2ZSBwYXRjaCB0aGF0IGlzIHByb2JhYmx5IHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3F1b3RhX2lzX2Z1bGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI2MzY9c3RhdGljIHZvaWQgZGFtb3NfY2hhcmdlX3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2NTItXG5tbS9kYW1vbi9jb3JlLmM6MjY1MzpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG5tbS9kYW1vbi9jb3JlLmMtMjY1NC1cdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjY5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzI3LVx0XHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcbm1tL2RhbW9uL2NvcmUuYzoyNzI4Olx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xubW0vZGFtb24vY29yZS5jLTI3MjktXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mjc0MD1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NTgtXHRcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xubW0vZGFtb24vY29yZS5jOjI3NTk6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTI3NjAtXHRcdFx0Y29udGludWU7XG4tLVxubW0vZGFtb24vY29yZS5jPTMyNzY9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI5OC1cdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xubW0vZGFtb24vY29yZS5jOjMyOTk6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTMzMDAtXHRcdFx0cy1cdTAwM2VzdGF0LnF0X2V4Y2VlZHMmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTExCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyAyNjUwLTI3NzAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgYWN0aW9uIGlzIGZvciBEQU1PTiBjb3JlIGZ1bmN0aW9uYWxpdHksIHNvIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGhlYXJ0IG9mIHRoZSBtb25pdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24gbG9naWMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyAqcmVhbGx5KiB3b3JraW5nLCBub3QganVzdCB0aGUgaGlnaC1sZXZlbCBleHBsYW5hdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHNlZSB0aGUgaW50cmljYXRlIGRldGFpbHMgb2YgbWVtb3J5IGFjY2VzcyB0cmFja2luZywgcG90ZW50aWFsIGV2aWN0aW9uIHRyaWdnZXJzLCBhbmQgbWF5YmUgZXZlbiBhIGdsaW1wc2Ugb2YgdGhlIHNhbXBsaW5nIHN0cmF0ZWd5LiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gYXNzZXNzIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIGFuZCBJJiMzOTttIHByZXBhcmVkIHRvIGRpc3NlY3QgdGhlIGNvZGUgd2l0aCBhIGNyaXRpY2FsIGV5ZSwgbG9va2luZyBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgb3IgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgYWxnb3JpdGhtcyBlbXBsb3llZC4gS25vd2luZyBob3cgcm9idXN0IHRoaXMgc2VjdGlvbiBpcyB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBoZWFsdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjQ1Olx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzs9IHN6X3JlZ2lvbjtcbjI2NDY6XHRcdGVsc2VcbjI2NDc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiAmIzQzOz0gc3pfYXBwbGllZCAmIzQzOyBtdWx0X2ZyYWMoXG4yNjQ4Olx0XHRcdFx0XHQoc3pfcmVnaW9uIC0gc3pfYXBwbGllZCksXG4yNjQ5Olx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9udW0sXG4yNjUwOlx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XG4yNjUxOlx0fVxuMjY1MjpcdFxuMjY1MzpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjI2NTQ6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjY1NTpcdHtcbjI2NTY6XHRcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbjI2NTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjY1ODpcdFx0aWYgKCFxdW90YS1cdTAwM2VjaGFyZ2VkX3N6KVxuMjY1OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yNjYwOlx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcbjI2NjE6XHRcdFx0cmV0dXJuIHRydWU7XG4yNjYyOlx0XHQvKlxuMjY2MzpcdFx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXHUwMDNjbWluX3JlZ2lvbl9zeiByZW1haW5pbmdcbjI2NjQ6XHRcdCAqIHF1b3RhIG1lYW5zIHRoZSBxdW90YSBpcyBlZmZlY3RpdmVseSBmdWxsLlxuMjY2NTpcdFx0ICovXG4yNjY2Olx0XHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zejtcbjI2Njc6XHR9XG4yNjY4Olx0XG4yNjY5Olx0c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNjcwOlx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcbjI2NzE6XHR7XG4yNjcyOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbjI2NzM6XHRcdHVuc2lnbmVkIGxvbmcgc3ogPSBkYW1vbl9zel9yZWdpb24ocik7XG4yNjc0Olx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBiZWdpbiwgZW5kO1xuMjY3NTpcdFx0dW5zaWduZWQgbG9uZyBzel9hcHBsaWVkID0gMDtcbjI2NzY6XHRcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQgPSAwO1xuMjY3NzpcdFx0LypcbjI2Nzg6XHRcdCAqIFdlIHBsYW4gdG8gc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0IHBlciBrZGFtb25kLCBhcyBEQU1PTiBzeXNmc1xuMjY3OTpcdFx0ICogaW1wbGllcyB3aXRoICYjMzk7bnJfY29udGV4dHMmIzM5OyBmaWxlLiAgTmV2ZXJ0aGVsZXNzLCBvbmx5IHNpbmdsZSBjb250ZXh0XG4yNjgwOlx0XHQgKiBwZXIga2RhbW9uZCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gIFNvLCB3ZSBjYW4gc2ltcGx5IHVzZSAmIzM5OzAmIzM5OyBjb250ZXh0XG4yNjgxOlx0XHQgKiBpbmRleCBoZXJlLlxuMjY4MjpcdFx0ICovXG4yNjgzOlx0XHR1bnNpZ25lZCBpbnQgY2lkeCA9IDA7XG4yNjg0Olx0XHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1x0XHQvKiBzY2hlbWVzIGl0ZXJhdG9yICovXG4yNjg1Olx0XHR1bnNpZ25lZCBpbnQgc2lkeCA9IDA7XG4yNjg2Olx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aXRlcjtcdC8qIHRhcmdldHMgaXRlcmF0b3IgKi9cbjI2ODc6XHRcdHVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwO1xuMjY4ODpcdFx0Ym9vbCBkb190cmFjZSA9IGZhbHNlO1xuMjY4OTpcdFxuMjY5MDpcdFx0LyogZ2V0IGluZGljZXMgZm9yIHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseSgpICovXG4yNjkxOlx0XHRpZiAodHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5X2VuYWJsZWQoKSkge1xuMjY5MjpcdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcbjI2OTM6XHRcdFx0XHRpZiAoc2l0ZXIgPT0gcylcbjI2OTQ6XHRcdFx0XHRcdGJyZWFrO1xuMjY5NTpcdFx0XHRcdHNpZHgmIzQzOyYjNDM7O1xuMjY5NjpcdFx0XHR9XG4yNjk3Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0aXRlciwgYykge1xuMjY5ODpcdFx0XHRcdGlmICh0aXRlciA9PSB0KVxuMjY5OTpcdFx0XHRcdFx0YnJlYWs7XG4yNzAwOlx0XHRcdFx0dGlkeCYjNDM7JiM0Mzs7XG4yNzAxOlx0XHRcdH1cbjI3MDI6XHRcdFx0bnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShyLCBjKTtcbjI3MDM6XHRcdFx0ZG9fdHJhY2UgPSB0cnVlO1xuMjcwNDpcdFx0fVxuMjcwNTpcdFxuMjcwNjpcdFx0aWYgKGMtXHUwMDNlb3BzLmFwcGx5X3NjaGVtZSkge1xuMjcwNzpcdFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSBcdTAwMjZcdTAwMjZcbjI3MDg6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzsgc3ogXHUwMDNlIHF1b3RhLVx1MDAzZWVzeikge1xuMjcwOTpcdFx0XHRcdHN6ID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2Vlc3ogLSBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6LFxuMjcxMDpcdFx0XHRcdFx0XHRjLVx1MDAzZW1pbl9yZWdpb25fc3opO1xuMjcxMTpcdFx0XHRcdGlmICghc3opXG4yNzEyOlx0XHRcdFx0XHRnb3RvIHVwZGF0ZV9zdGF0O1xuMjcxMzpcdFx0XHRcdGlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKVxuMjcxNDpcdFx0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbjI3MTU6XHRcdFx0fVxuMjcxNjpcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuMjcxNzpcdFx0XHRcdHJldHVybjtcbjI3MTg6XHRcdFx0a3RpbWVfZ2V0X2NvYXJzZV90czY0KFx1MDAyNmJlZ2luKTtcbjI3MTk6XHRcdFx0dHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5KGNpZHgsIHNpZHgsIHRpZHgsIHIsIG5yX2FjY2Vzc2VzLFxuMjcyMDpcdFx0XHRcdFx0ZGFtb25fbnJfcmVnaW9ucyh0KSwgZG9fdHJhY2UpO1xuMjcyMTpcdFx0XHRzel9hcHBsaWVkID0gYy1cdTAwM2VvcHMuYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMsXG4yNzIyOlx0XHRcdFx0XHRcdTAwMjZzel9vcHNfZmlsdGVyX3Bhc3NlZCk7XG4yNzIzOlx0XHRcdGRhbW9zX3dhbGtfY2FsbF93YWxrKGMsIHQsIHIsIHMsIHN6X29wc19maWx0ZXJfcGFzc2VkKTtcbjI3MjQ6XHRcdFx0a3RpbWVfZ2V0X2NvYXJzZV90czY0KFx1MDAyNmVuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIGFuZCBjb25zaWRlcmluZyBpdCBhcyBteSBvd24gdGhvdWdodDoKCioqRm9jdXNpbmcgSW46IEEgVGFyZ2V0ZWQgUmVhZCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIGNsZWFyLiBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgb24gdGhpcyBtYXRlcmlhbCwgYnV0IEkgbmVlZCB0byBob25lIGluIG9uIGEgc3BlY2lmaWMgc2VjdGlvbi4gVGhpcyBpc24mIzM5O3QgYSBjYXN1YWwgc2NhbjsgaXQmIzM5O3MgYSBzdHJhdGVnaWMgZGVlcCBkaXZlLiBUaGUgaW5zdHJ1Y3Rpb24gdG8gcmVhZCBhcm91bmQgdGhlIDI3NDAtMjc4MCByYW5nZSBtZWFucyB0aGF0IEkgbmVlZCB0byB6b29tIGluIG9uIHRob3NlIHNwZWNpZmljIHBhZ2VzIG9yIGxpbmVzLiBJJiMzOTtsbCBuZWVkIHRvIGJlIHJlYWR5IHRvIGFuYWx5emUgdGhhdCBwYXJ0aWN1bGFyIHRleHQgd2l0aCBteSBleHBlcnQgbGVucywgbG9va2luZyBmb3Igc3VidGxldGllcywgY29udGV4dHVhbCBjdWVzLCBhbmQgY29ubmVjdGlvbnMgdG8gdGhlIGJyb2FkZXIgdG9waWMgYXQgaGFuZC4gVGhlcmUgbWlnaHQgYmUgc29tZSBzcGVjaWZpYyBjaGFsbGVuZ2VzIHdpdGhpbiB0aGF0IHRleHQgdG8gY29uc2lkZXIuIE15IGludHVpdGlvbiB3b3VsZCBiZSB0byByZXZpZXcgdGhlIHRleHQgYW5kIHRha2Ugbm90ZXMgb24gc29tZSBvZiB0aGUga2V5IGNvbmNlcHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc0MDpcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbjI3NDE6XHRcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNzQyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMjc0MzpcdHtcbjI3NDQ6XHRcdHN0cnVjdCBkYW1vcyAqcztcbjI3NDU6XHRcbjI3NDY6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4yNzQ3Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjc0ODpcdFxuMjc0OTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4yNzUwOlx0XHRcdFx0Y29udGludWU7XG4yNzUxOlx0XG4yNzUyOlx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMjc1MzpcdFx0XHRcdGNvbnRpbnVlO1xuMjc1NDpcdFxuMjc1NTpcdFx0XHRpZiAoIXF1b3RhLVx1MDAzZWVzeilcbjI3NTY6XHRcdFx0XHRjb250aW51ZTtcbjI3NTc6XHRcbjI3NTg6XHRcdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG4yNzU5Olx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc2MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjc2MTpcdFxuMjc2MjpcdFx0XHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc2MzpcdFx0XHRcdGNvbnRpbnVlO1xuMjc2NDpcdFxuMjc2NTpcdFx0XHRpZiAocy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAyNlx1MDAyNlxuMjc2NjpcdFx0XHRcdFx0cy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAzYz0gcy1cdTAwM2VzdGF0Lm5yX3NuYXBzaG90cylcbjI3Njc6XHRcdFx0XHRjb250aW51ZTtcbjI3Njg6XHRcbjI3Njk6XHRcdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbjI3NzA6XHRcdFx0XHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XG4yNzcxOlx0XG4yNzcyOlx0XHRcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcbjI3NzM6XHRcdFx0XHRzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzJiM0MzsmIzQzOztcbjI3NzQ6XHRcdH1cbjI3NzU6XHR9XG4yNzc2Olx0XG4yNzc3Olx0LypcbjI3Nzg6XHQgKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXG4yNzc5Olx0ICogQGM6XHRcdFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cbjI3ODA6XHQgKiBAdDpcdFx0XHRtb25pdG9yaW5nIHRhcmdldCB0byBhcHBseSB0aGUgc2NoZW1lcyB0by5cbjI3ODE6XHQgKiBAbWF4X3JlZ2lvbl9zejpcdG1heGltdW0gcmVnaW9uIHNpemUgZm9yIEBjLlxuMjc4MjpcdCAqXG4yNzgzOlx0ICogVGhpcyBmdW5jdGlvbiBjb3VsZCBzcGxpdCByZWdpb25zIGZvciBrZWVwaW5nIHRoZSBxdW90YS4gIFRvIG1pbmltaXplXG4yNzg0Olx0ICogb3ZlcmhlYWQgZnJvbSB0aGUgc3BsaXQgb3BlcmF0aW9ucyBpbmNyZWFzZWQgbnVtYmVyIG9mIHJlZ2lvbnMsIHRoaXNcbjI3ODU6XHQgKiBmdW5jdGlvbiB3aWxsIGFsc28gbWVyZ2UgcmVnaW9ucyBhZnRlciB0aGUgc2NoZW1lcyBhcHBseWluZyBhdHRlbXB0IGlzIGRvbmUsXG4yNzg2Olx0ICogZm9yIGVhY2ggcmVnaW9uLiAgVGhlIG1lcmdlIG9wZXJhdGlvbiBpcyBtYWRlIG9ubHkgd2hlbiBpdCBkb2VzbiYjMzk7dCBsb3NlIHRoZVxuMjc4NzpcdCAqIG1vbml0b3JpbmcgaW5mb3JtYXRpb24gYW5kIG5vdCB2aW9sYXRpbmcgQG1heF9yZWdpb25fc3ouXG4yNzg4Olx0ICpcbjI3ODk6XHQgKiBIZW5jZSwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVnaW9ucyBjb3VsZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBRdW90YSBhbmQgU2l6ZSBDaGVja3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMuIEZpcnN0LCBpbiBgZGFtb3NfcXVvdGFfaXNfZnVsbCgpYCwgdGhlcmUmIzM5O3MgdGhpcyBuZXcgY2hlY2s6IGBpZiAoIXF1b3RhLSZndDtjaGFyZ2VkX3N6KSByZXR1cm4gZmFsc2U7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgaXMgdGhpcyBuZWNlc3Nhcnk/IFByZXZpb3VzbHksIGl0IHNlZW1zIHRoZSBjb2RlIGNvdWxkIGhhdmUgcmV0dXJuZWQgYHRydWVgIHVuZGVyIGNlcnRhaW4gZWRnZSBjYXNlcywgbGlrZSB3aGVyZSBgcXVvdGEtJmd0O2VzemAgKHRoZSBlc3RpbWF0ZWQgc2l6ZSkgd2FzIHplcm8gb3IgdmVyeSBzbWFsbCwgcGVyaGFwcyBsZXNzIHRoYW4gYG1pbl9yZWdpb25fc3pgLCB3aGlsZSBgcXVvdGEtJmd0O2NoYXJnZWRfc3pgICh0aGUgY2hhcmdlZCBzaXplKSB3YXMgc3RpbGwgemVyby4gSW4gc3VjaCBzY2VuYXJpb3MsIHRoZSBwcmV2aW91cyBjb21wYXJpc29uIGBxdW90YS0mZ3Q7ZXN6IC0gcXVvdGEtJmd0O2NoYXJnZWRfc3ogJmx0OyBtaW5fcmVnaW9uX3N6YCBtaWdodCBoYXZlIGdpdmVuIGEgbWlzbGVhZGluZyByZXN1bHQsIHBvdGVudGlhbGx5IGNsYWltaW5nIHRoZSBxdW90YSB3YXMgZnVsbCB3aGVuIGl0IHdhcywgaW4gZmFjdCwgZW1wdHkuIFRoaXMgbmV3IGNoZWNrIGVmZmVjdGl2ZWx5IHByZXZlbnRzIHRob3NlIHNpdHVhdGlvbnMuIFdlIGRvbiYjMzk7dCB3YW50IHRvIHByZW1hdHVyZWx5IGZsYWcgYSBxdW90YSBhcyBmdWxsIHdoZW4gbm90aGluZyBoYXMgYWN0dWFsbHkgYmVlbiBjaGFyZ2VkLCBvciB3aGVuIHRoZSBlc3RpbWF0ZWQgc2l6ZSBpcyB6ZXJvLgoKTmV4dCwgaW4gYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoKWAsIHdlJiMzOTtyZSBub3cgc2tpcHBpbmcgdGhlIHNjaGVtZSBhcHBsaWNhdGlvbiBpZiBgcXVvdGEtJmd0O2VzemAgaXMgemVybzogYGlmICghcXVvdGEtJmd0O2VzeikgY29udGludWU7YC4gVGhpcyBtYWtlcyBzZW5zZS4gSWYgdGhlIGVzdGltYXRlZCBzaXplIGlzIHplcm8sIHRoZW4gdGhlcmUmIzM5O3MgbGlrZWx5IG5vIG1lYW5pbmdmdWwgcXVvdGEgdG8gbWFuYWdlLiBBcHBseWluZyBhIHNjaGVtZSBpbiBzdWNoIGNhc2VzIHdvdWxkIGJlIGEgd2FzdGUgb2YgcmVzb3VyY2VzIGFuZCBwb3RlbnRpYWxseSBsZWFkIHRvIGluY29ycmVjdCBiZWhhdmlvci4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlc2UgYHF1b3RhLSZndDtlc3pgIGFuZCBgcXVvdGEtJmd0O2NoYXJnZWRfc3pgIG1lbWJlcnMgYXJlIHdpdGhpbiB0aGUgYHN0cnVjdCBkYW1vc19xdW90YWAgaW5zaWRlIHRoZSBgc3RydWN0IGRhbW9zYC4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIHJldmlzaXQgaG93IHRoZSBgZGFtb3NfcXVvdGFfaXNfc2V0YCBmdW5jdGlvbiBiZWhhdmVzIGluIHRoZXNlIHNjZW5hcmlvcywgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3F1b3RhX2lzX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjM3MT1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTIzODYtLypcbm1tL2RhbW9uL2NvcmUuYzoyMzg3OiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXG5tbS9kYW1vbi9jb3JlLmMtMjM4OC0gKiBAcXVvdGE6XHRUaGUgcXVvdGEgdG8gY2hlY2suXG4tLVxubW0vZGFtb24vY29yZS5jLTIzOTEtICovXG5tbS9kYW1vbi9jb3JlLmM6MjM5MjpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbm1tL2RhbW9uL2NvcmUuYy0yMzkzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjM5OD1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQwMi1cbm1tL2RhbW9uL2NvcmUuYzoyNDAzOlx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcdTAwMjZzLVx1MDAzZXF1b3RhKSB8fCAhYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbm1tL2RhbW9uL2NvcmUuYy0yNDA0LVx0XHRyZXR1cm4gcmV0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjUzPXN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY1NS17XG5tbS9kYW1vbi9jb3JlLmM6MjY1NjpcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbm1tL2RhbW9uL2NvcmUuYy0yNjU3LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZGFtb24vY29yZS5jPTI2Njk9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3MDYtXHRpZiAoYy1cdTAwM2VvcHMuYXBwbHlfc2NoZW1lKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjcwNzpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXHUwMDI2XHUwMDI2XG5tbS9kYW1vbi9jb3JlLmMtMjcwOC1cdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzsgc3ogXHUwMDNlIHF1b3RhLVx1MDAzZWVzeikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBTZXR0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkYW1vc19xdW90YV9pc19zZXQocXVvdGEpYCBmdW5jdGlvbi4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBnb29kIGNsdWUsIHN1Z2dlc3RpbmcgYSBjaGVjayByZWxhdGVkIHRvIHF1b3RhcyBpbiBEQU1PTi4gTm93LCBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24gaW4gY29udGV4dCwgdG8gc2VlIHdoYXQgdGhlIHBhcmFtZXRlcnMgbWVhbiwgYW5kIGhvdyB0aGlzIGNoZWNrIGZhY3RvcnMgaW50byB0aGUgYnJvYWRlciBzY2hlbWUuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGEgbWlzc3RlcCBoZXJlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wYWN0cy4gTGV0IG1lIHNlZS4uLiBJJiMzOTtsbCBwdWxsIHVwIHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlIGFuZCBqdW1wIHRvIGxpbmVzIDIzODUgdGhyb3VnaCAyMzk3LiBIb3BlZnVsbHksIHRoZSBzdXJyb3VuZGluZyBjb2RlIGdpdmVzIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcXVvdGEgY2hlY2suIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBjb25zdGl0dXRlcyBhIHZhbGlkIHF1b3RhIHNldHRpbmcgYW5kIHRoZSBjb25kaXRpb25zIHdoaWNoIHRyaWdnZXIgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzg1Olx0XG4yMzg2Olx0LypcbjIzODc6XHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxuMjM4ODpcdCAqIEBxdW90YTpcdFRoZSBxdW90YSB0byBjaGVjay5cbjIzODk6XHQgKlxuMjM5MDpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVvdGEgaXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuXG4yMzkxOlx0ICovXG4yMzkyOlx0c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4yMzkzOlx0e1xuMjM5NDpcdFx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiB8fCBxdW90YS1cdTAwM2VzeiB8fCBxdW90YS1cdTAwM2VtcyB8fFxuMjM5NTpcdFx0XHQhZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkocXVvdGEpO1xuMjM5NjpcdH1cbjIzOTc6XHRcbjIzOTg6XHRzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbjIzOTk6XHRcdFx0c3RydWN0IGRhbW9zICpzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODA2CgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDUzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIE15IGluaXRpYWwgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCBoaW5nZXMgb24gYSBjYXJlZnVsIGFzc2Vzc21lbnQgb2YgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgcmlza3MuIE15IHByb2Nlc3MgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgY2hlY2tsaXN0OgoKMS4gICoqVXNlci1TcGFjZSBJbnRlcmFjdGlvbj8qKiBOb3BlLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIGFueSBvZiB0aGUgdXNlci1zcGFjZSBjb3B5IGZ1bmN0aW9ucyBsaWtlIGBjb3B5X3RvX3VzZXJgLiBBIGdvb2Qgc3RhcnQuCgoyLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlcz8qKiBObywgbm90aGluZyB0byB3b3JyeSBhYm91dCBoZXJlIGVpdGhlci4gVGhlIGBxdW90YWAgc3RydWN0dXJlLCB3aGljaCBpcyB0aGUgZm9jdXMgb2YgdGhlc2UgY2hhbmdlcywgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHkgd2hlbiBEQU1PTiBzY2hlbWVzIGFyZSBjcmVhdGVkIHVzaW5nIGVpdGhlciB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIG9yIHRoZSBBUEkuIFdlJiMzOTtyZSB1c2luZyBga3phbGxvY2Agb3IgZGVmYXVsdCBpbml0aWFsaXphdGlvbiwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuCgozLiAgKipNZW1vcnkgTWFuaXB1bGF0aW9uPyoqIFRoaXMgaXMgY3J1Y2lhbC4gQW0gSSBjaGFuZ2luZyBhbnkgbWVtb3J5IGFsbG9jYXRpb25zPyBBbSBJIG1vZGlmeWluZyBkYXRhIGNvcHlpbmcgaW4gbmV3IHdheXM/IFN0cnVjdCBsYXlvdXQgY2hhbmdlcz8gRXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhPyBObyB0byBhbGwgb2YgdGhlIGFib3ZlLiBUaGlzIHBhdGNoIHNpbXBseSBhZGRzIHR3byBlYXJseS1leGl0IHNhbml0eSBjaGVja3Mgb24gZXhpc3RpbmcgZmllbGRzOiBgcXVvdGEtJmd0O2NoYXJnZWRfc3pgIGFuZCBgcXVvdGEtJmd0O2VzemAuIFRoaXMgaXMgdG8gcHJldmVudCBsb2dpY2FsIGVycm9ycyB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbSwgc3VjaCBhcyBkaXZpc2lvbiBieSB6ZXJvIG9yIGFuIGluYXBwcm9wcmlhdGUgc2NoZW1lIGFwcGxpY2F0aW9uIHdoZW4gdGhlIHF1b3RhIGlzIHplcm8gb3IgY2hhcmdlZCBzaXplIGlzIHplcm8uCgo0LiAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrPyoqIEFic29sdXRlbHkgbm9uZS4gTXkgYXNzZXNzbWVudCBjb25jbHVkZXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgcmlza3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIG5lZWQgZm9yIGEgS01TQU4gZGVkaWNhdGVkIGZ1enppbmcgcnVuIHZzIEtBU0FOOgoKKiAgIEkga25vdyBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzIGFscmVhZHkgaW5jbHVkZSBLQVNBTiwgTE9DS0RFUCwgVUJTQU4sIGV0Yy4KKiAgIEtNU0FOIGlzIHRoZSBoZWF2eSBoaXR0ZXIgaGVyZS4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuCiogICBJIG9ubHkganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlmIGEgY2hhbmdlIGludHJvZHVjZXMgb3IgKmV4cG9zZXMqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suCiogICBBbmQgaGVyZT8gVGhlc2UgY2hhbmdlcyBhcmUgc3RyYWlnaHRmb3J3YXJkIGFyaXRobWV0aWMgYW5kIGxvZ2ljYWwgY2hlY2tzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtIChgbW0vZGFtb24vY29yZS5jYCkuIFRoZXkgKmRvbiYjMzk7dCogYWxsb2NhdGUgbWVtb3J5LiBUaGV5ICpkb24mIzM5O3QqIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGV5ICpkb24mIzM5O3QqIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFuZCB0aGV5ICpkb24mIzM5O3QqIGFsdGVyIGJ1ZmZlciBib3VuZHMuCgpUaGUgY29uY2x1c2lvbiBpcyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBoZXJlLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgZXZlcnkgZGV0YWlsIHRvIGVuc3VyZSBteSBhc3Nlc3NtZW50IGlzIHNvdW5kLiBTbyBsZXQgbWUgc3VtbWFyaXplIHN1Y2NpbmN0bHk6IFRoZSBwYXRjaCBhbHRlcnMgYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzKClgIGluIERBTU9OIGNvcmUgdG8gaW5jbHVkZSBjaGVja3MgZm9yIGBxdW90YS0mZ3Q7Y2hhcmdlZF9zeiA9PSAwYCBhbmQgYHF1b3RhLSZndDtlc3ogPT0gMGAuIE5vIG5ldyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBub3RoaW5nIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgcmVhZCBvciBleHBvc2VkLiBUaGUgZmllbGRzIGFjY2Vzc2VkIChgcXVvdGEtJmd0O2NoYXJnZWRfc3pgLCBgcXVvdGEtJmd0O2VzemApIGFyZSBwYXJ0IG9mIGVzdGFibGlzaGVkIERBTU9OIHNjaGVtZSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIG1hbmFnZWQgd2VsbCBieSBEQU1PTiBpdHNlbGYuIEFueSBidWdzIHdpbGwgcmVsYXRlIHRvIHRoZSBleGlzdGluZyBib3VuZGFyeSBjb25kaXRpb25zIGluIHF1b3RhIGNhbGN1bGF0aW9ucywgYnV0IG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gR2l2ZW4gYWxsIG9mIHRoaXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBJIGNhbiBub3cgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgZWFybHkgcmV0dXJuIGNoZWNrcyB3aGVuIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCBvciBgcXVvdGEtXHUwMDNlZXN6YCBhcmUgemVybyBpbiBgZGFtb3NfcXVvdGFfaXNfZnVsbCgpYCBhbmQgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoKWAuXG5cblRoZXNlIGNoYW5nZXM6XG4xLiBEbyBub3QgYWxsb2NhdGUsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeS5cbjIuIERvIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbjMuIE9ubHkgYWRkIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBkYW1vc19xdW90YWAuXG5cbkJlY2F1c2UgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGVhcmx5IHJldHVybiBjaGVja3Mgd2hlbiBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgb3IgYHF1b3RhLVx1MDAzZWVzemAgYXJlIHplcm8gaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzKClgLlxuXG5UaGVzZSBjaGFuZ2VzOlxuMS4gRG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuXG4yLiBEbyBub3QgY29weSBhbnkgZGF0YSB0byB1c2VyIHNwYWNlIG9yIGFsdGVyIGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4zLiBPbmx5IGFkZCBjb25kaXRpb25hbCBjaGVja3Mgb24gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgLlxuXG5CZWNhdXNlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1Mzo1OC41NDM2MjczMjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDE2MzUwNjM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gcXVvdGEgY2FsY3VsYXRpb24gbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBlYXJseSByZXR1cm4gY2hlY2tzIHdoZW4gYHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6YCBvciBgcXVvdGEtXFx1MDAzZWVzemAgYXJlIHplcm8gaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzKClgLlxcblxcblRoZXNlIGNoYW5nZXM6XFxuMS4gRG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuXFxuMi4gRG8gbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZSBvciBhbHRlciBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcbjMuIE9ubHkgYWRkIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBkYW1vc19xdW90YWAuXFxuXFxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHNjaGVtZSBxdW90YSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyAoc3BlY2lmaWNhbGx5IGRhbW9zX3F1b3RhX2lzX2Z1bGwgYW5kIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMpIHRvIGhhbmRsZSB6ZXJvIGNoYXJnZWQgc2l6ZSBhbmQgemVybyBlZmZlY3RpdmUgc2NoZW1lIHNpemUgY29uZGl0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIGtlcm5lbCBBUElzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTM6NTguNTQzNjM1NjQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM1Mjg5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNWM4ZmI5NjM5YjhjOGM4ODRjZmMyNTM3NDAzYmJhMzkwNTY4ODdkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDA6NTM6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggZGYyMjYyMTc2NTkxMS4uZjhjNzg0ZGYyNDYwMCAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMjY1NSw2ICsyNjU1LDggQEAgc3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbiB7XFxuIFxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoIXF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6KVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0LypcXG5AQCAtMjc1MCw2ICsyNzUyLDkgQEAgc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbiBcXHRcXHRpZiAoIXMtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0aWYgKCFxdW90YS1cXHUwMDNlZXN6KVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xcbiBcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1Mzo1OS4wNjc2ODk4MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU2MDE5MzY2Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX3NldF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBzY2hlbWUgcXVvdGEgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9kYW1vbi9jb3JlLmMgKHNwZWNpZmljYWxseSBkYW1vc19xdW90YV9pc19mdWxsIGFuZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKSB0byBoYW5kbGUgemVybyBjaGFyZ2VkIHNpemUgYW5kIHplcm8gZWZmZWN0aXZlIHNjaGVtZSBzaXplIGNvbmRpdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlIGFuZCBrZXJuZWwgQVBJcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY1YzhmYjk2MzliOGM4Yzg4NGNmYzI1Mzc0MDNiYmEzOTA1Njg4N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjUzOjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBkZjIyNjIxNzY1OTExLi5mOGM3ODRkZjI0NjAwIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNjU1LDYgKzI2NTUsOCBAQCBzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4ge1xuIFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIXF1b3RhLVx1MDAzZWNoYXJnZWRfc3opXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6KVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdC8qXG5AQCAtMjc1MCw2ICsyNzUyLDkgQEAgc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRpZiAoIXMtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbiBcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0aWYgKCFxdW90YS1cdTAwM2Vlc3opXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xuIFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbiBcdFx0XHRjb250aW51ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjUzOjU5LjA2NzY5MTYxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMTIxMjY4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBzbyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgbGllcy4gRmlyc3QgdGhpbmcncyBmaXJzdCwgSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgYmVlbiBjaGFuZ2VkIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkLiBJJ20gdGhpbmtpbmcgYSBxdWljayBgcmVhZC1maWxlYCBvciBldmVuIGEgYGdyZXBwZXJgIHBhc3MgdGhyb3VnaCBgbW0vZGFtb24vY29yZS5jYCBpcyB0aGUgYmVzdCBhcHByb2FjaCBmb3IgYSBwcmVsaW1pbmFyeSBvdmVydmlldy4gSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGVzZSBjaGFuZ2VzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBLY29uZmlnIG9wdGlvbnMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZWxwcyBtZSBuYXJyb3cgZG93biB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhlc2UgY2hhbmdlcyB3aWxsIGFwcGx5LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0IHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYwLCJPdXRwdXRUb2tlbnMiOjY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDowNS4zNzk4MjEyNzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NTAsXG4gIFwiTGluZUNvdW50XCI6IDEyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjUwOlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XFxuMjY1MTpcXHR9XFxuMjY1MjpcXHRcXG4yNjUzOlxcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4yNjU0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNjU1OlxcdHtcXG4yNjU2OlxcdFxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG4yNjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yNjU4OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3opXFxuMjY1OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjY2MDpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeilcXG4yNjYxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI2NjI6XFx0XFx0LypcXG4yNjYzOlxcdFxcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFxcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xcbjI2NjQ6XFx0XFx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXFxuMjY2NTpcXHRcXHQgKi9cXG4yNjY2OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xcbjI2Njc6XFx0fVxcbjI2Njg6XFx0XFxuMjY2OTpcXHRzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNjcwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcXG4yNjcxOlxcdHtcXG4yNjcyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjY3MzpcXHRcXHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xcbjI2NzQ6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgYmVnaW4sIGVuZDtcXG4yNjc1OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCA9IDA7XFxuMjY3NjpcXHRcXHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkID0gMDtcXG4yNjc3OlxcdFxcdC8qXFxuMjY3ODpcXHRcXHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcXG4yNjc5OlxcdFxcdCAqIGltcGxpZXMgd2l0aCAnbnJfY29udGV4dHMnIGZpbGUuICBOZXZlcnRoZWxlc3MsIG9ubHkgc2luZ2xlIGNvbnRleHRcXG4yNjgwOlxcdFxcdCAqIHBlciBrZGFtb25kIGlzIHN1cHBvcnRlZCBmb3Igbm93LiAgU28sIHdlIGNhbiBzaW1wbHkgdXNlICcwJyBjb250ZXh0XFxuMjY4MTpcXHRcXHQgKiBpbmRleCBoZXJlLlxcbjI2ODI6XFx0XFx0ICovXFxuMjY4MzpcXHRcXHR1bnNpZ25lZCBpbnQgY2lkeCA9IDA7XFxuMjY4NDpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1xcdFxcdC8qIHNjaGVtZXMgaXRlcmF0b3IgKi9cXG4yNjg1OlxcdFxcdHVuc2lnbmVkIGludCBzaWR4ID0gMDtcXG4yNjg2OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpdGVyO1xcdC8qIHRhcmdldHMgaXRlcmF0b3IgKi9cXG4yNjg3OlxcdFxcdHVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwO1xcbjI2ODg6XFx0XFx0Ym9vbCBkb190cmFjZSA9IGZhbHNlO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHQvKiBnZXQgaW5kaWNlcyBmb3IgdHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5KCkgKi9cXG4yNjkxOlxcdFxcdGlmICh0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHlfZW5hYmxlZCgpKSB7XFxuMjY5MjpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcXG4yNjkzOlxcdFxcdFxcdFxcdGlmIChzaXRlciA9PSBzKVxcbjI2OTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjY5NTpcXHRcXHRcXHRcXHRzaWR4Kys7XFxuMjY5NjpcXHRcXHRcXHR9XFxuMjY5NzpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodGl0ZXIsIGMpIHtcXG4yNjk4OlxcdFxcdFxcdFxcdGlmICh0aXRlciA9PSB0KVxcbjI2OTk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcwMDpcXHRcXHRcXHRcXHR0aWR4Kys7XFxuMjcwMTpcXHRcXHRcXHR9XFxuMjcwMjpcXHRcXHRcXHRucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHIsIGMpO1xcbjI3MDM6XFx0XFx0XFx0ZG9fdHJhY2UgPSB0cnVlO1xcbjI3MDQ6XFx0XFx0fVxcbjI3MDU6XFx0XFxuMjcwNjpcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLmFwcGx5X3NjaGVtZSkge1xcbjI3MDc6XFx0XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXFx1MDAyNlxcdTAwMjZcXG4yNzA4OlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ICsgc3ogXFx1MDAzZSBxdW90YS1cXHUwMDNlZXN6KSB7XFxuMjcwOTpcXHRcXHRcXHRcXHRzeiA9IEFMSUdOX0RPV04ocXVvdGEtXFx1MDAzZWVzeiAtIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6LFxcbjI3MTA6XFx0XFx0XFx0XFx0XFx0XFx0Yy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuMjcxMTpcXHRcXHRcXHRcXHRpZiAoIXN6KVxcbjI3MTI6XFx0XFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4yNzEzOlxcdFxcdFxcdFxcdGlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKVxcbjI3MTQ6XFx0XFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4yNzE1OlxcdFxcdFxcdH1cXG4yNzE2OlxcdFxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxuMjcxNzpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjcxODpcXHRcXHRcXHRrdGltZV9nZXRfY29hcnNlX3RzNjQoXFx1MDAyNmJlZ2luKTtcXG4yNzE5OlxcdFxcdFxcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcyxcXG4yNzIwOlxcdFxcdFxcdFxcdFxcdGRhbW9uX25yX3JlZ2lvbnModCksIGRvX3RyYWNlKTtcXG4yNzIxOlxcdFxcdFxcdHN6X2FwcGxpZWQgPSBjLVxcdTAwM2VvcHMuYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMsXFxuMjcyMjpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2c3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xcbjI3MjM6XFx0XFx0XFx0ZGFtb3Nfd2Fsa19jYWxsX3dhbGsoYywgdCwgciwgcywgc3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xcbjI3MjQ6XFx0XFx0XFx0a3RpbWVfZ2V0X2NvYXJzZV90czY0KFxcdTAwMjZlbmQpO1xcbjI3MjU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgKz0gdGltZXNwZWM2NF90b19ucyhcXHUwMDI2ZW5kKSAtXFxuMjcyNjpcXHRcXHRcXHRcXHR0aW1lc3BlYzY0X3RvX25zKFxcdTAwMjZiZWdpbik7XFxuMjcyNzpcXHRcXHRcXHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcXG4yNzI4OlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbjI3Mjk6XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IHQ7XFxuMjczMDpcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IHItXFx1MDAzZWFyLmVuZDtcXG4yNzMxOlxcdFxcdFxcdH1cXG4yNzMyOlxcdFxcdH1cXG4yNzMzOlxcdFxcdGlmIChzLVxcdTAwM2VhY3Rpb24gIT0gREFNT1NfU1RBVClcXG4yNzM0OlxcdFxcdFxcdHItXFx1MDAzZWFnZSA9IDA7XFxuMjczNTpcXHRcXG4yNzM2OlxcdHVwZGF0ZV9zdGF0OlxcbjI3Mzc6XFx0XFx0ZGFtb3NfdXBkYXRlX3N0YXQocywgc3osIHN6X2FwcGxpZWQsIHN6X29wc19maWx0ZXJfcGFzc2VkKTtcXG4yNzM4OlxcdH1cXG4yNzM5OlxcdFxcbjI3NDA6XFx0c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbjI3NDE6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNzQyOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuMjc0MzpcXHR7XFxuMjc0NDpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnM7XFxuMjc0NTpcXHRcXG4yNzQ2OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMjc0NzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbjI3NDg6XFx0XFxuMjc0OTpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUoYy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6MDUuMzc5OTk4ODAyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MzE1MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDowNS40NzkzMjI0NThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjc0NTcyOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUXVvdGEgTWVjaGFuaXNtKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBGaXJzdCwgaXQgY2hlY2tzIGlmIHRoZSBxdW90YSBpcyBhY3R1YWxseSBzZXQsIGFuZCBpZiB0aGVyZSdzIGFueSB1c2FnZS4gVGhlbiwgaXQgY29tcGFyZXMgdGhlIGNoYXJnZWQgc2l6ZSBhZ2FpbnN0IHRoZSBlc3RhYmxpc2hlZCBzaXplLCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUgaWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRha2luZyBpbnRvIGFjY291bnQgYW55IHNpemVzIHRvIGNoYXJnZSB0byB0aGUgcXVvdGEuIFRoZSBjcml0aWNhbCBwYXJ0IHNlZW1zIHRvIGJlIHRoZSBjaGVjazogYHF1b3RhLVx1MDAzZWVzeiAtIHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNjIG1pbl9yZWdpb25fc3pgLiBUaGlzIGltcGxpZXMgdGhhdCBldmVuIGlmIHRoZXJlJ3MgYSBzbWFsbCBhbW91bnQgcmVtYWluaW5nIGluIHRoZSBxdW90YSwgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHJlZ2lvbiBzaXplLCBpdCBlZmZlY3RpdmVseSBjb25zaWRlcnMgdGhlIHF1b3RhIGV4aGF1c3RlZC4gVGhpcyBtZWFucyBEQU1PTiBpcyBkZXNpZ25lZCB0byBoYW5kbGUgYWN0aW9ucyBvbiBhIHBlci1yZWdpb24gYmFzaXMsIHNvIGlmIHRoZSByZW1haW5pbmcgcXVvdGEgaXNuJ3QgbGFyZ2UgZW5vdWdoIHRvIGNvdmVyIGF0IGxlYXN0IGEgbWluaW11bSByZWdpb24sIGl0IHdvbid0IHByb2NlZWQuXG5cbk5vdywgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGUgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHVzaW5nIGl0LiBJdCBjaGVja3MgaWYgdGhlIHF1b3RhJ3Mgc2l6ZSBpcyBzZXQsIGFuZCB0aGVuIGNhbGxzIGBkYW1vc19xdW90YV9pc19mdWxsYC4gSWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZSBjb2RlIGNvbnRpbnVlcyB0byB0aGUgbmV4dCBzY2hlbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgbG9naWMgaXMgaW1wbGVtZW50ZWQgdGhpcyB3YXkuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHNlZSB3aGF0IGNvbW1pdCBpbnRyb2R1Y2VkIHRoaXMsIG9yIHdoYXQgc3BlY2lmaWMgcHJvYmxlbSB0aGlzIHF1b3RhIG1lY2hhbmlzbSBpcyBtZWFudCB0byBzb2x2ZS4gTGV0J3Mgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBjb2RlYmFzZSBmb3IgdXNhZ2VzIG9mIHRoZXNlIGZ1bmN0aW9uIG5hbWVzIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6MDguNzUzODk5MDg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzQwOlxcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4yNzQxOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjc0MjpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbjI3NDM6XFx0e1xcbjI3NDQ6XFx0XFx0c3RydWN0IGRhbW9zICpzO1xcbjI3NDU6XFx0XFxuMjc0NjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjI3NDc6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNzQ4OlxcdFxcbjI3NDk6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMjc1MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzUxOlxcdFxcbjI3NTI6XFx0XFx0XFx0aWYgKCFzLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxcbjI3NTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc1NDpcXHRcXG4yNzU1OlxcdFxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWVzeilcXG4yNzU2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NTc6XFx0XFxuMjc1ODpcXHRcXHRcXHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cXG4yNzU5OlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4yNzYwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NjE6XFx0XFxuMjc2MjpcXHRcXHRcXHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4yNzYzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NjQ6XFx0XFxuMjc2NTpcXHRcXHRcXHRpZiAocy1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcXHUwMDI2XFx1MDAyNlxcbjI3NjY6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcXHUwMDNjPSBzLVxcdTAwM2VzdGF0Lm5yX3NuYXBzaG90cylcXG4yNzY3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3Njg6XFx0XFxuMjc2OTpcXHRcXHRcXHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxcbjI3NzA6XFx0XFx0XFx0XFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xcbjI3NzE6XFx0XFxuMjc3MjpcXHRcXHRcXHRpZiAoZGFtb25faXNfbGFzdF9yZWdpb24ociwgdCkpXFxuMjc3MzpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0Lm5yX3NuYXBzaG90cysrO1xcbjI3NzQ6XFx0XFx0fVxcbjI3NzU6XFx0fVxcbjI3NzY6XFx0XFxuMjc3NzpcXHQvKlxcbjI3Nzg6XFx0ICogZGFtb3NfYXBwbHlfdGFyZ2V0KCkgLSBBcHBseSBEQU1PUyBzY2hlbWVzIHRvIGEgZ2l2ZW4gdGFyZ2V0LlxcbjI3Nzk6XFx0ICogQGM6XFx0XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cXG4yNzgwOlxcdCAqIEB0OlxcdFxcdFxcdG1vbml0b3JpbmcgdGFyZ2V0IHRvIGFwcGx5IHRoZSBzY2hlbWVzIHRvLlxcbjI3ODE6XFx0ICogQG1heF9yZWdpb25fc3o6XFx0bWF4aW11bSByZWdpb24gc2l6ZSBmb3IgQGMuXFxuMjc4MjpcXHQgKlxcbjI3ODM6XFx0ICogVGhpcyBmdW5jdGlvbiBjb3VsZCBzcGxpdCByZWdpb25zIGZvciBrZWVwaW5nIHRoZSBxdW90YS4gIFRvIG1pbmltaXplXFxuMjc4NDpcXHQgKiBvdmVyaGVhZCBmcm9tIHRoZSBzcGxpdCBvcGVyYXRpb25zIGluY3JlYXNlZCBudW1iZXIgb2YgcmVnaW9ucywgdGhpc1xcbjI3ODU6XFx0ICogZnVuY3Rpb24gd2lsbCBhbHNvIG1lcmdlIHJlZ2lvbnMgYWZ0ZXIgdGhlIHNjaGVtZXMgYXBwbHlpbmcgYXR0ZW1wdCBpcyBkb25lLFxcbjI3ODY6XFx0ICogZm9yIGVhY2ggcmVnaW9uLiAgVGhlIG1lcmdlIG9wZXJhdGlvbiBpcyBtYWRlIG9ubHkgd2hlbiBpdCBkb2Vzbid0IGxvc2UgdGhlXFxuMjc4NzpcXHQgKiBtb25pdG9yaW5nIGluZm9ybWF0aW9uIGFuZCBub3QgdmlvbGF0aW5nIEBtYXhfcmVnaW9uX3N6LlxcbjI3ODg6XFx0ICpcXG4yNzg5OlxcdCAqIEhlbmNlLCBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpb25zIGNvdWxkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjA4Ljc1NDEyNzE0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMzEzNzg3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgREFNT04gUXVvdGEgTG9naWMgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgbG9naWMgY2hhbmdlIGluIHRoZSBxdW90YSBtYW5hZ2VtZW50IHdpdGhpbiBEQU1PTi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSdtIGZvY3VzaW5nIG9uIHNjZW5hcmlvcyB3aGVyZSBgcXVvdGEtXHUwMDNlZXN6YCAoZWZmZWN0aXZlIHNpemUpIG9yIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCAoY2hhcmdlZCBzaXplKSBtaWdodCBiZSB6ZXJvLiBTcGVjaWZpY2FsbHksIHRoZSBsaW5lIHRoYXQganVtcHMgb3V0IGlzIGByZXR1cm4gcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zejtgLiBJZiBib3RoIGBlc3pgIGFuZCBgY2hhcmdlZF9zemAgYXJlIHplcm8sIGFuIHVuc2lnbmVkIHVuZGVyZmxvdyBjb3VsZCBoYXBwZW4uIFByZXZpb3VzbHksIHRoZSBjaGVjayBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzemAgd291bGQgaGF2ZSBldmFsdWF0ZWQgdG8gdHJ1ZSBpbiB0aGF0IHNjZW5hcmlvICgwIFx1MDAzZT0gMCBpcyB0cnVlISksIGxlYWRpbmcgdG8gYW4gaW5jb3JyZWN0IGBkYW1vc19xdW90YV9pc19mdWxsYCByZXR1cm4uIFRoaXMgbWVhbnMgdGhhdCBhIHF1b3RhIG1pZ2h0IGhhdmUgYmVlbiBpbmNvcnJlY3RseSByZXBvcnRlZCBhcyBmdWxsIHdoZW4gaXQgd2FzIG5vdC5cblxuTm93IEkgc2VlIGl0LCB0aGUgZml4OiAgYGlmICghcXVvdGEtXHUwMDNlY2hhcmdlZF9zeikgcmV0dXJuIGZhbHNlO2AgIFRoaXMgbWVhbnMsIGlmIHRoZSBjaGFyZ2VkIHNpemUgaXMgemVybywgd2UncmUgZXhwbGljaXRseSByZXR1cm5pbmcgZmFsc2UsIGluZGljYXRpbmcgdGhhdCB0aGUgcXVvdGEgaXMgKm5vdCogZnVsbC4gQW5kIGluIHRoZSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgZnVuY3Rpb24sIHdlIG5vdyBoYXZlIGBpZiAoIXF1b3RhLVx1MDAzZWVzeikgY29udGludWU7YCAgU28gaWYgdGhlIGVmZmVjdGl2ZSBzaXplIGlzIHplcm8sIHdlIGRvbid0IGFwcGx5IGEgc2NoZW1lLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHNhZmV0eSBuZXQuXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGxvZ2ljIGNoYW5nZS4gTm93LCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgaXMgdGhlIGNoYW5nZSBtZXJlbHkgZml4aW5nIGEgbG9naWMgZXJyb3I/XG5cbkkgbmVlZCB0byBzZWUgaG93IERBTU9OIGlzIHVzZWQgaW4gdGhlIGtlcm5lbC4gSG93IGNhbiBJIHRyaWdnZXIgaXQsIGFuZCBob3cgaXMgaXQgY29uZmlndXJlZD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCdzIGJlaW5nIHVzZWQgYnkgZnV6emluZy9RRU1VIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gaWRlbnRpZnkgZW50cnlwb2ludHMgYnkgbG9va2luZyBhdCB0aGUgc3ltYm9scywgZXRjLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBtbS9kYW1vbi9LY29uZmlnYCBhbmQgYG1tL2RhbW9uL01ha2VmaWxlYCB0byBzZWUgaG93IERBTU9OIGlzIGVuYWJsZWQsIGFuZCB3aGF0IHRoZSBidWlsZCBwcm9jZXNzIGxvb2tzIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDoxMy44ODU1MDg0NjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDoxMy44ODU1OTQ1NDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY5MTkwNDQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyBEQU1PTiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3IgREFNT04gYW5kIGl0cyB2YXJpb3VzIGZlYXR1cmVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpbmdzIGxpa2UgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgdGhlIGxpa2UsIGFyZSBtZXRpY3Vsb3VzbHkgbGFpZCBvdXQuIEJ5IGV4YW1pbmluZyB0aGF0IEtjb25maWcgZmlsZSwgSSdsbCBiZSBhYmxlIHRvIHByZWNpc2VseSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhvc2UgZmVhdHVyZXMsIHNlZSB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFyZSByZXF1aXJlZCBmb3IgZWFjaCBvbmUsIGFuZCBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgb3B0aW9ucyBhcmUgc2VsZWN0ZWQgdG8gZ2V0IHRoZSBkZXNpcmVkIERBTU9OIGJlaGF2aW9yLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhIHN0YWJsZSBhbmQgcHJvcGVybHktZnVuY3Rpb25pbmcgREFNT04gaW1wbGVtZW50YXRpb24sIGFuZCBgS2NvbmZpZ2AgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjE5LjU3NzUwMjMwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDoxOS41Nzc1Nzg5MDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0OTIxODA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBJbnZlc3RpZ2F0aW9uOiBJbml0aWFsIFRob3VnaHRzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgREFNT04gc2l0dWF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgY29uZmlndXJhdGlvbiBiYXNpY3MuIFNvLCBEQU1PTiBpcyBjbGVhcmx5IGNvbmZpZ3VyZWQgdmlhIHN5c2ZzLCBhcyBpbmRpY2F0ZWQgYnkgYENPTkZJR19EQU1PTl9TWVNGU2AgYW5kIGBDT05GSUdfREFNT05gLiBUaGF0IG1ha2VzIHNlbnNlOyBzeXNmcyBpcyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlIGZvciBwcm9iaW5nIGFuZCBtYW5pcHVsYXRpbmcga2VybmVsIHBhcmFtZXRlcnMuIFRoZSBtZW50aW9ucyBvZiBgREFNT05fUEFERFJgIGFuZCBgREFNT05fVkFERFJgIGltbWVkaWF0ZWx5IHNpZ25hbCB0aG9zZSBhcmUgb3BlcmF0aW9uIHNldHMgd2hpY2ggbmVlZCBkZWVwZXIgZXhhbWluYXRpb24uXG5cbk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gcGlucG9pbnQgaG93IERBTU9OIGlzICphY3R1YWxseSogZW5nYWdlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4gSXMgaXQgaW52b2tlZCB0aHJvdWdoIGEgdXNlcnNwYWNlIEFQST8gRG9lcyBhIGtlcm5lbCBBUEkgdHJpZ2dlciBpdD8gSSdsbCBuZWVkIHRvIHJlc2VhcmNoIHRoZSBjYWxsIHN0YWNrLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBkZXRlcm1pbmUgd2hlcmUgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGlzIGNhbGxlZCBmcm9tLiBUaGF0IGZ1bmN0aW9uIGNhbGwgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBhY3RpdmF0aW9uIGxvZ2ljLiBMZXQncyBzZWUgd2hlcmUgdGhhdCB0YWtlcyB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6MjEuODI2ODAwMzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDk2NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2RvX2FwcGx5X3NjaGVtZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNjY5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3MzktXFxubW0vZGFtb24vY29yZS5jOjI3NDA6c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0yNzQxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjc5NT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODAyLVxcbm1tL2RhbW9uL2NvcmUuYzoyODAzOlxcdFxcdGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoYywgdCwgcik7XFxubW0vZGFtb24vY29yZS5jLTI4MDQtXFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6MjEuODg4OTAxMjI3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTk3NDA1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipUcmFjaW5nIHRoZSBEQU1PTiBBcHBsaWNhdGlvbiBQYXRoKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyB0cmlnZ2VyaW5nIGBkYW1vc19hcHBseV90YXJnZXRgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndobyogaXMgY2FsbGluZyBpdCwgYW5kIGZyb20gd2hlcmUsIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGNhbGwgc3RhY2sgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBleGVjdXRpb24gcGF0aC4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgZnVuY3Rpb24sIGFuZCBldmVyeSBmdW5jdGlvbiB0aGF0IGxlYWRzIHRvIGl0LCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcmUgd2UgbG9va2luZyBhdCBkaXJlY3QgY2FsbHMsIGluZGlyZWN0IGNhbGxzIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGxlci4gV2hhdCBkYXRhIGlzIGJlaW5nIHBhc3NlZCB0byBgZGFtb3NfYXBwbHlfdGFyZ2V0YCwgYW5kIGhvdyBpcyBpdCB1c2VkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY2FsbHMgYXJlIGhhcHBlbmluZyBpbiB0aGUgc2FtZSBjb250ZXh0LCBzYW1lIHRhc2ssIG9yIGlmIHRoZSBjYWxscyBhcmUgaGFwcGVuaW5nIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQuIFRoaXMgd2lsbCBpbXBhY3QgdGhlIHRyYWNpbmcgZWZmb3J0cywgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIyMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjI0LjUwODY0NDIyNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4OTk4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfYXBwbHlfdGFyZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9Mjc0MD1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc3Ny0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyNzc4OiAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cXG5tbS9kYW1vbi9jb3JlLmMtMjc3OS0gKiBAYzpcXHRcXHRcXHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3OTQtICovXFxubW0vZGFtb24vY29yZS5jOjI3OTU6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTI3OTYtXFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNTc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM4My1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MzM4NDpcXHRcXHRkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTMzODUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDoyNC41ODI1NDk3NzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIzMTk3ODcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gREFNT04ncyBTY2hlbWUgQXBwbGljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBjb2RlLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gIFRoZSBsb2cgY2xlYXJseSBpZGVudGlmaWVzIHRoYXQgZnVuY3Rpb24ncyBjYWxsIG9yaWdpbiDigJMgaXQncyB0cmlnZ2VyZWQgYnkgYGtkYW1vbmRfZm5gIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gIEdvb2QuIE5vdyB0aGF0IEkga25vdyB3aGVyZSB0aGUgYWN0aW9uICpzdGFydHMqLCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogdGhlIGFjdGlvbiBkb2VzIGFuZCBob3cgaXRzIGNvbnRyb2xsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIHNjaGVtZSBhcHBsaWNhdGlvbi4gIFxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gYnJvYWRlbiB0aGUgc2VhcmNoLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgZmlsZSBgbW0vZGFtb24vY29yZS5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcm5hbHMgb2YgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIEknbGwgYWxzbyBjaGVjayBvdXQgYG1tL2RhbW9uL3N5c2ZzLmNgIGFuZCBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gVGhlc2Ugc3lzZnMgaW50ZXJmYWNlcyBhcmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciBzY2hlbWVzIGFyZSBsaWtlbHkgZGVmaW5lZCBhbmQgaG93IHRoZXkgYXJlIGNvbnRyb2xsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDoyNy44MTQ1MzMxNzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MTY1NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4Mzc3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9kYW1vbi9jb3JlLmMtMTktXFxubW0vZGFtb24vY29yZS5jOjIwOi8qIGZvciBkYW1vbl9nZXRfZm9saW8oKSB1c2VkIGJ5IG5vZGUgZWxpZ2libGUgbWVtb3J5IG1ldHJpY3MgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjEtI2luY2x1ZGUgXFxcIm9wcy1jb21tb24uaFxcXCJcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNS1cXG5tbS9kYW1vbi9jb3JlLmM6MjY6c3RhdGljIERFRklORV9NVVRFWChkYW1vbl9sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjctc3RhdGljIGludCBucl9ydW5uaW5nX2N0eHM7XFxubW0vZGFtb24vY29yZS5jPTI4PXN0YXRpYyBib29sIHJ1bm5pbmdfZXhjbHVzaXZlX2N0eHM7XFxubW0vZGFtb24vY29yZS5jLTI5LVxcbm1tL2RhbW9uL2NvcmUuYzozMDpzdGF0aWMgREVGSU5FX01VVEVYKGRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzE6c3RhdGljIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGRhbW9uX3JlZ2lzdGVyZWRfb3BzW05SX0RBTU9OX09QU107XFxubW0vZGFtb24vY29yZS5jLTMyLVxcbm1tL2RhbW9uL2NvcmUuYzozMzpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRhbW9uX3JlZ2lvbl9jYWNoZSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vZGFtb24vY29yZS5jLTM0LVxcbm1tL2RhbW9uL2NvcmUuYzozNTovKiBTaG91bGQgYmUgY2FsbGVkIHVuZGVyIGRhbW9uX29wc19sb2NrIHdpdGggaWQgc21hbGxlciB0aGFuIE5SX0RBTU9OX09QUyAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNjpzdGF0aWMgYm9vbCBfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbm1tL2RhbW9uL2NvcmUuYy0zNy17XFxubW0vZGFtb24vY29yZS5jOjM4OlxcdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGVtcHR5X29wcyA9IHt9O1xcbm1tL2RhbW9uL2NvcmUuYy0zOS1cXG5tbS9kYW1vbi9jb3JlLmM6NDA6XFx0aWYgKCFtZW1jbXAoXFx1MDAyNmVtcHR5X29wcywgXFx1MDAyNmRhbW9uX3JlZ2lzdGVyZWRfb3BzW2lkXSwgc2l6ZW9mKGVtcHR5X29wcykpKVxcbm1tL2RhbW9uL2NvcmUuYy00MS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDUtLyoqXFxubW0vZGFtb24vY29yZS5jOjQ2OiAqIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKCkgLSBDaGVjayBpZiBhIGdpdmVuIGRhbW9uX29wZXJhdGlvbnMgaXMgcmVnaXN0ZXJlZC5cXG5tbS9kYW1vbi9jb3JlLmM6NDc6ICogQGlkOlxcdElkIG9mIHRoZSBkYW1vbl9vcGVyYXRpb25zIHRvIGNoZWNrIGlmIHJlZ2lzdGVyZWQuXFxubW0vZGFtb24vY29yZS5jLTQ4LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTAtICovXFxubW0vZGFtb24vY29yZS5jOjUxOmJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxubW0vZGFtb24vY29yZS5jLTUyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxubW0vZGFtb24vY29yZS5jOjU3OlxcdG11dGV4X2xvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmM6NTg6XFx0cmVnaXN0ZXJlZCA9IF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoaWQpO1xcbm1tL2RhbW9uL2NvcmUuYzo1OTpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmMtNjAtXFx0cmV0dXJuIHJlZ2lzdGVyZWQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjMtLyoqXFxubW0vZGFtb24vY29yZS5jOjY0OiAqIGRhbW9uX3JlZ2lzdGVyX29wcygpIC0gUmVnaXN0ZXIgYSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgc2V0IHRvIERBTU9OLlxcbm1tL2RhbW9uL2NvcmUuYy02NS0gKiBAb3BzOlxcdG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBzZXQgdG8gcmVnaXN0ZXIuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjctICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgc2V0IG9mIHZhbGlkIFxcdTAwMjZzdHJ1Y3RcXG5tbS9kYW1vbi9jb3JlLmM6Njg6ICogZGFtb25fb3BlcmF0aW9ucy1cXHUwMDNlaWQgc28gdGhhdCBvdGhlcnMgY2FuIGZpbmQgYW5kIHVzZSB0aGVtIGxhdGVyLlxcbm1tL2RhbW9uL2NvcmUuYy02OS0gKlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3MjppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXFxubW0vZGFtb24vY29yZS5jLTczLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OC1cXG5tbS9kYW1vbi9jb3JlLmM6Nzk6XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy04MC1cXHQvKiBGYWlsIGZvciBhbHJlYWR5IHJlZ2lzdGVyZWQgb3BzICovXFxubW0vZGFtb24vY29yZS5jOjgxOlxcdGlmIChfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKG9wcy1cXHUwMDNlaWQpKVxcbm1tL2RhbW9uL2NvcmUuYy04Mi1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbm1tL2RhbW9uL2NvcmUuYy04My1cXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjg0OlxcdFxcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW29wcy1cXHUwMDNlaWRdID0gKm9wcztcXG5tbS9kYW1vbi9jb3JlLmM6ODU6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9vcHNfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTg2LVxcdHJldHVybiBlcnI7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODktLyoqXFxubW0vZGFtb24vY29yZS5jOjkwOiAqIGRhbW9uX3NlbGVjdF9vcHMoKSAtIFNlbGVjdCBhIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyB0byB1c2Ugd2l0aCB0aGUgY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmMtOTEtICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHQgdG8gdXNlIHRoZSBvcGVyYXRpb25zLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTk4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo5OTppbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbm1tL2RhbW9uL2NvcmUuYy0xMDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwNS1cXG5tbS9kYW1vbi9jb3JlLmM6MTA2OlxcdG11dGV4X2xvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTA3OlxcdGlmICghX19kYW1vbl9pc19yZWdpc3RlcmVkX29wcyhpZCkpXFxubW0vZGFtb24vY29yZS5jLTEwOC1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDktXFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMTA6XFx0XFx0Y3R4LVxcdTAwM2VvcHMgPSBkYW1vbl9yZWdpc3RlcmVkX29wc1tpZF07XFxubW0vZGFtb24vY29yZS5jOjExMTpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTEyLVxcdHJldHVybiBlcnI7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE0LVxcbm1tL2RhbW9uL2NvcmUuYzoxMTU6c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTYte1xcbm1tL2RhbW9uL2NvcmUuYzoxMTc6XFx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XFxubW0vZGFtb24vY29yZS5jLTExOC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjYtXFxubW0vZGFtb24vY29yZS5jOjEyNzp2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXFxubW0vZGFtb24vY29yZS5jLTEyOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTMxLVxcbm1tL2RhbW9uL2NvcmUuYzoxMzI6c3RhdGljIHZvaWQgZGFtb25fZGVsX3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKnApXFxubW0vZGFtb24vY29yZS5jLTEzMy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM2LVxcbm1tL2RhbW9uL2NvcmUuYzoxMzc6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTQyOnN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMTQzLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OlxcdGRhbW9uX2RlbF9wcmVwKHApO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDU6XFx0ZGFtb25fZnJlZV9wcmVwKHApO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDYtfVxcbm1tL2RhbW9uL2NvcmUuYy0xNDctXFxubW0vZGFtb24vY29yZS5jOjE0ODpzdGF0aWMgc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX250aF9wcmVwKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxubW0vZGFtb24vY29yZS5jLTE0OS17XFxubW0vZGFtb24vY29yZS5jOjE1MDpcXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcXG5tbS9kYW1vbi9jb3JlLmMtMTUxLVxcdGludCBpID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTUyLVxcbm1tL2RhbW9uL2NvcmUuYzoxNTM6XFx0ZGFtb25fZm9yX2VhY2hfcHJlcChwcmVwLCBwKSB7XFxubW0vZGFtb24vY29yZS5jLTE1NC1cXHRcXHRpZiAoaSsrID09IG4pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU5LVxcbm1tL2RhbW9uL2NvcmUuYzoxNjA6c3RhdGljIGJvb2wgZGFtb25faGFzX3ByZXAoc3RydWN0IGRhbW9uX2N0eCAqYylcXG5tbS9kYW1vbi9jb3JlLmMtMTYxLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTYyOlxcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xcbm1tL2RhbW9uL2NvcmUuYzoxNjM6XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcXG5tbS9kYW1vbi9jb3JlLmMtMTY0LVxcbm1tL2RhbW9uL2NvcmUuYzoxNjU6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTY2OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcHJvYmUpXFxubW0vZGFtb24vY29yZS5jLTE2Ny1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzEtXFxubW0vZGFtb24vY29yZS5jOjE3MjpzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG5tbS9kYW1vbi9jb3JlLmMtMTczLVxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXFxubW0vZGFtb24vY29yZS5jLTE3NC17XFxubW0vZGFtb24vY29yZS5jOjE3NTpcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXI7XFxubW0vZGFtb24vY29yZS5jLTE3Ni1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODYtXFxubW0vZGFtb24vY29yZS5jOjE4Nzp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xODgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTkyOnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTkzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTYtXFxubW0vZGFtb24vY29yZS5jOjE5NzpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwMS1cXG5tbS9kYW1vbi9jb3JlLmM6MjAyOnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMjAzLXtcXG5tbS9kYW1vbi9jb3JlLmM6MjA0OlxcdGRhbW9uX2RlbF9maWx0ZXIoZik7XFxubW0vZGFtb24vY29yZS5jOjIwNTpcXHRkYW1vbl9mcmVlX2ZpbHRlcihmKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjA2LX1cXG5tbS9kYW1vbi9jb3JlLmMtMjA3LVxcbm1tL2RhbW9uL2NvcmUuYzoyMDg6c3RhdGljIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX250aF9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMjA5LXtcXG5tbS9kYW1vbi9jb3JlLmM6MjEwOlxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7XFxubW0vZGFtb24vY29yZS5jLTIxMS1cXHRpbnQgaSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTIxMi1cXG5tbS9kYW1vbi9jb3JlLmM6MjEzOlxcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7XFxubW0vZGFtb24vY29yZS5jLTIxNC1cXHRcXHRpZiAoaSsrID09IG4pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE5LVxcbm1tL2RhbW9uL2NvcmUuYzoyMjA6c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtMjIxLXtcXG5tbS9kYW1vbi9jb3JlLmM6MjIyOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG5tbS9kYW1vbi9jb3JlLmMtMjIzLVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIzMy1cXG5tbS9kYW1vbi9jb3JlLmM6MjM0OnZvaWQgZGFtb25fYWRkX3Byb2JlKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjM1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzgtXFxubW0vZGFtb24vY29yZS5jOjIzOTpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0My1cXG5tbS9kYW1vbi9jb3JlLmM6MjQ0OnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDUte1xcbm1tL2RhbW9uL2NvcmUuYzoyNDY6XFx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXAsICpwcmVwX25leHQ7XFxubW0vZGFtb24vY29yZS5jOjI0NzpcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ4LVxcbm1tL2RhbW9uL2NvcmUuYzoyNDk6XFx0ZGFtb25fZm9yX2VhY2hfcHJlcF9zYWZlKHByZXAsIHByZXBfbmV4dCwgcClcXG5tbS9kYW1vbi9jb3JlLmM6MjUwOlxcdFxcdGRhbW9uX2ZyZWVfcHJlcChwcmVwKTtcXG5tbS9kYW1vbi9jb3JlLmM6MjUxOlxcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcl9zYWZlKGYsIG5leHQsIHApXFxubW0vZGFtb24vY29yZS5jOjI1MjpcXHRcXHRkYW1vbl9mcmVlX2ZpbHRlcihmKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjUzLVxcdGtmcmVlKHApO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI1NS1cXG5tbS9kYW1vbi9jb3JlLmM6MjU2OnN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxcbm1tL2RhbW9uL2NvcmUuYy0yNTcte1xcbm1tL2RhbW9uL2NvcmUuYzoyNTg6XFx0ZGFtb25fZGVsX3Byb2JlKHApO1xcbm1tL2RhbW9uL2NvcmUuYzoyNTk6XFx0ZGFtb25fZnJlZV9wcm9iZShwKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjYwLX1cXG5tbS9kYW1vbi9jb3JlLmMtMjYxLVxcbm1tL2RhbW9uL2NvcmUuYzoyNjI6c3RhdGljIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbnRoX3Byb2JlKGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTI2My17XFxubW0vZGFtb24vY29yZS5jOjI2NDpcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XFxubW0vZGFtb24vY29yZS5jLTI2NS1cXHRpbnQgaSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTI2Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MjY3OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYy0yNjgtXFx0XFx0aWYgKGkrKyA9PSBuKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3My1cXG5tbS9kYW1vbi9jb3JlLmM6Mjc0OnN0YXRpYyBib29sIGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxubW0vZGFtb24vY29yZS5jLTI3NS17XFxubW0vZGFtb24vY29yZS5jOjI3NjpcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XFxubW0vZGFtb24vY29yZS5jLTI3Ny1cXG5tbS9kYW1vbi9jb3JlLmM6Mjc4OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMjc5LVxcdFxcdGlmIChwLVxcdTAwM2V3ZWlnaHQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjg1LS8qXFxubW0vZGFtb24vY29yZS5jOjI4NjogKiBkYW1vbl9tdnN1bSgpIC0gUmV0dXJucyBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBmb3IgYSB0aW1lIHdpbmRvdy5cXG5tbS9kYW1vbi9jb3JlLmMtMjg3LSAqIEBjdXJyZW50X25yOlxcdFxcdFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMDY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fbXZzdW0odW5zaWduZWQgbG9uZyBjdXJyZW50X25yLFxcbm1tL2RhbW9uL2NvcmUuYy0zMDctXFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X25yLCB1bnNpZ25lZCBsb25nIGxlZnRfd2luZG93X2JwKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxMi0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MzEzOiAqIGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKCkgLSBSZXR1cm5zIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS5cXG5tbS9kYW1vbi9jb3JlLmMtMzE0LSAqIEByOlxcdFxcdFJlZ2lvbiB0byBnZXQgdGhlIGFjY2VzcyBmcmVxdWVuY3kgb2YuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzE3LSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBmb3IgaG93IG1hbnkgc2FtcGxpbmcgaXRlcmF0aW9ucyBpbiB0aGUgbGFzdFxcbm1tL2RhbW9uL2NvcmUuYzozMTg6ICogYWdncmVnYXRpb24gaW50ZXJ2YWwgKFxcdTAwMjZkYW1vbl9hdHRycy1cXHUwMDNlYWdncl9pbnRlcnZhbCkgdGhlIHJlZ2lvbiB3YXMgZm91bmQgdG9cXG5tbS9kYW1vbi9jb3JlLmMtMzE5LSAqIGJlIGFjY2Vzc2VkLiAgSGVuY2UgdGhlIHZhbHVlIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgcmVsYXRpdmUgYWNjZXNzXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjY6dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jOjMyNzpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTMyOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQ1LVxcbm1tL2RhbW9uL2NvcmUuYzozNDY6XFx0cmV0dXJuIGRhbW9uX212c3VtKHItXFx1MDAzZW5yX2FjY2Vzc2VzLCByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL2NvcmUuYy0zNDctXFx0XFx0XFx0bGVmdF93aW5kb3dfYnApO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0OS1cXG5tbS9kYW1vbi9jb3JlLmM6MzUwOnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYzozNTE6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0zNTIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM2OS1cXG5tbS9kYW1vbi9jb3JlLmM6MzcwOlxcdHJldHVybiBkYW1vbl9tdnN1bShyLVxcdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXFxubW0vZGFtb24vY29yZS5jLTM3MS1cXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NC0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYzozNzU6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxubW0vZGFtb24vY29yZS5jLTM3Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc5LSNlbHNlXFxubW0vZGFtb24vY29yZS5jOjM4MDpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5tbS9kYW1vbi9jb3JlLmMtMzgxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODUtLypcXG5tbS9kYW1vbi9jb3JlLmM6Mzg2OiAqIENvbnN0cnVjdCBhIGRhbW9uX3JlZ2lvbiBzdHJ1Y3RcXG5tbS9kYW1vbi9jb3JlLmMtMzg3LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzg5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozOTA6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5tbS9kYW1vbi9jb3JlLmMtMzkxLXtcXG5tbS9kYW1vbi9jb3JlLmM6MzkyOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbjtcXG5tbS9kYW1vbi9jb3JlLmMtMzkzLVxcdGludCBpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTQtXFxubW0vZGFtb24vY29yZS5jOjM5NTpcXHRkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbihzdGFydCwgZW5kKTtcXG5tbS9kYW1vbi9jb3JlLmM6Mzk2OlxcdHJlZ2lvbiA9IGttZW1fY2FjaGVfYWxsb2MoZGFtb25fcmVnaW9uX2NhY2hlLCBHRlBfS0VSTkVMKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzk3LVxcdGlmICghcmVnaW9uKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQxNC1cXG5tbS9kYW1vbi9jb3JlLmM6NDE1OnN0YXRpYyB2b2lkIGRhbW9uX2FkZF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtNDE2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MjMtICovXFxubW0vZGFtb24vY29yZS5jOjQyNDpzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYzo0MjU6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldiwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV4dCxcXG5tbS9kYW1vbi9jb3JlLmM6NDI2OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTQyNy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDMyLSNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jOjQzMzpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy00MzQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTQzNy0jZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzo0Mzg6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2RlbF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtNDM5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NDItXFxubW0vZGFtb24vY29yZS5jOjQ0MzpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTQ0NC17XFxubW0vZGFtb24vY29yZS5jOjQ0NTpcXHRkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbih0KTtcXG5tbS9kYW1vbi9jb3JlLmMtNDQ2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ1MC1cXG5tbS9kYW1vbi9jb3JlLmM6NDUxOnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxubW0vZGFtb24vY29yZS5jLTQ1Mi17XFxubW0vZGFtb24vY29yZS5jOjQ1MzpcXHRrbWVtX2NhY2hlX2ZyZWUoZGFtb25fcmVnaW9uX2NhY2hlLCByKTtcXG5tbS9kYW1vbi9jb3JlLmMtNDU0LX1cXG5tbS9kYW1vbi9jb3JlLmMtNDU1LVxcbm1tL2RhbW9uL2NvcmUuYzo0NTY6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmM6NDU3OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTQ1OC17XFxubW0vZGFtb24vY29yZS5jOjQ1OTpcXHRkYW1vbl9kZWxfcmVnaW9uKHIsIHQpO1xcbm1tL2RhbW9uL2NvcmUuYzo0NjA6XFx0ZGFtb25fZnJlZV9yZWdpb24ocik7XFxubW0vZGFtb24vY29yZS5jLTQ2MS19XFxubW0vZGFtb24vY29yZS5jLTQ2Mi1cXG5tbS9kYW1vbi9jb3JlLmM6NDYzOnN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jOjQ2NDpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy00NjUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ2OS0vKipcXG5tbS9kYW1vbi9jb3JlLmM6NDcwOiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cXG5tbS9kYW1vbi9jb3JlLmMtNDcxLSAqIEByOlxcdFxcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NzYtICovXFxubW0vZGFtb24vY29yZS5jOjQ3Nzp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG5tbS9kYW1vbi9jb3JlLmM6NDc4OlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtNDc5LXtcXG5tbS9kYW1vbi9jb3JlLmM6NDgwOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxubW0vZGFtb24vY29yZS5jLTQ4MS1cXHR1bnNpZ25lZCBpbnQgc3VtID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00ODMtXFxubW0vZGFtb24vY29yZS5jOjQ4NDpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jLTQ4NS1cXHRcXHRpZiAobGFzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00OTctICovXFxubW0vZGFtb24vY29yZS5jOjQ5ODpzdGF0aWMgYm9vbCBkYW1vbl9pbnRlcnNlY3Qoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmM6NDk5OlxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyZSlcXG5tbS9kYW1vbi9jb3JlLmMtNTAwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01MDYtICovXFxubW0vZGFtb24vY29yZS5jOjUwNzpzdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG5tbS9kYW1vbi9jb3JlLmM6NTA4OlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmxhc3QsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTUwOS17XFxubW0vZGFtb24vY29yZS5jOjUxMDpcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZmlyc3Q7XFxubW0vZGFtb24vY29yZS5jLTUxMS1cXG5tbS9kYW1vbi9jb3JlLmM6NTEyOlxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9mcm9tKHIsIHQpIHtcXG5tbS9kYW1vbi9jb3JlLmM6NTEzOlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKm5leHQsICpuZXdyO1xcbm1tL2RhbW9uL2NvcmUuYy01MTQtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTE2LVxcdFxcdFxcdGJyZWFrO1xcbm1tL2RhbW9uL2NvcmUuYzo1MTc6XFx0XFx0bmV4dCA9IGRhbW9uX25leHRfcmVnaW9uKHIpO1xcbm1tL2RhbW9uL2NvcmUuYy01MTgtXFx0XFx0aWYgKHItXFx1MDAzZWFyLmVuZCAhPSBuZXh0LVxcdTAwM2Vhci5zdGFydCkge1xcbm1tL2RhbW9uL2NvcmUuYzo1MTk6XFx0XFx0XFx0bmV3ciA9IGRhbW9uX25ld19yZWdpb24oci1cXHUwMDNlYXIuZW5kLCBuZXh0LVxcdTAwM2Vhci5zdGFydCk7XFxubW0vZGFtb24vY29yZS5jLTUyMC1cXHRcXHRcXHRpZiAoIW5ld3IpXFxubW0vZGFtb24vY29yZS5jLTUyMS1cXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9jb3JlLmM6NTIyOlxcdFxcdFxcdGRhbW9uX2luc2VydF9yZWdpb24obmV3ciwgciwgbmV4dCwgdCk7XFxubW0vZGFtb24vY29yZS5jLTUyMy1cXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTI4LS8qXFxubW0vZGFtb24vY29yZS5jOjUyOTogKiBkYW1vbl9zZXRfcmVnaW9ucygpIC0gU2V0IHJlZ2lvbnMgb2YgYSB0YXJnZXQgZm9yIGdpdmVuIGFkZHJlc3MgcmFuZ2VzLlxcbm1tL2RhbW9uL2NvcmUuYy01MzAtICogQHQ6XFx0XFx0dGhlIGdpdmVuIHRhcmdldC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01MzktICovXFxubW0vZGFtb24vY29yZS5jOjU0MDppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5tbS9kYW1vbi9jb3JlLmMtNTQxLVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG5tbS9kYW1vbi9jb3JlLmMtNTQyLXtcXG5tbS9kYW1vbi9jb3JlLmM6NTQzOlxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpuZXh0O1xcbm1tL2RhbW9uL2NvcmUuYy01NDQtXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTYwLVxcdC8qIFJlbW92ZSByZWdpb25zIHdoaWNoIGFyZSBub3QgaW4gdGhlIG5ldyByYW5nZXMgKi9cXG5tbS9kYW1vbi9jb3JlLmM6NTYxOlxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcXG5tbS9kYW1vbi9jb3JlLmMtNTYyLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9yYW5nZXM7IGkrKykge1xcbm1tL2RhbW9uL2NvcmUuYzo1NjM6XFx0XFx0XFx0aWYgKGRhbW9uX2ludGVyc2VjdChyLCBcXHUwMDI2cmFuZ2VzW2ldKSlcXG5tbS9kYW1vbi9jb3JlLmMtNTY0LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTU2Ni1cXHRcXHRpZiAoaSA9PSBucl9yYW5nZXMpXFxubW0vZGFtb24vY29yZS5jOjU2NzpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTtcXG5tbS9kYW1vbi9jb3JlLmMtNTY4LVxcdH1cXG5tbS9kYW1vbi9jb3JlLmMtNTY5LVxcbm1tL2RhbW9uL2NvcmUuYzo1NzA6XFx0aWYgKCFkYW1vbl9ucl9yZWdpb25zKHQpKSB7XFxubW0vZGFtb24vY29yZS5jLTU3MS1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6NTcyOlxcdFxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKFxcbm1tL2RhbW9uL2NvcmUuYy01NzMtXFx0XFx0XFx0XFx0XFx0QUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTc3LVxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzo1Nzg6XFx0XFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG5tbS9kYW1vbi9jb3JlLmMtNTc5LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01ODItXFxubW0vZGFtb24vY29yZS5jOjU4MzpcXHRyID0gZGFtb25fZmlyc3RfcmVnaW9uKHQpO1xcbm1tL2RhbW9uL2NvcmUuYy01ODQtXFx0LyogQWRkIG5ldyByZWdpb25zIG9yIHJlc2l6ZSBleGlzdGluZyByZWdpb25zIHRvIGZpdCBpbiB0aGUgcmFuZ2VzICovXFxubW0vZGFtb24vY29yZS5jLTU4NS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6NTg2OlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0ID0gTlVMTCwgKmxhc3QsICpuZXdyO1xcbm1tL2RhbW9uL2NvcmUuYzo1ODc6XFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlO1xcbm1tL2RhbW9uL2NvcmUuYy01ODgtXFx0XFx0Ym9vbCBpbnNlcnRfYmVmb3JlX3IgPSBmYWxzZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01OTEtXFx0XFx0LyogR2V0IHRoZSBmaXJzdC9sYXN0IHJlZ2lvbnMgaW50ZXJzZWN0aW5nIHdpdGggdGhlIHJhbmdlICovXFxubW0vZGFtb24vY29yZS5jOjU5MjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fZnJvbShyLCB0KSB7XFxubW0vZGFtb24vY29yZS5jOjU5MzpcXHRcXHRcXHRpZiAoZGFtb25faW50ZXJzZWN0KHIsIHJhbmdlKSkge1xcbm1tL2RhbW9uL2NvcmUuYy01OTQtXFx0XFx0XFx0XFx0aWYgKCFmaXJzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MDQtXFx0XFx0XFx0Lyogbm8gcmVnaW9uIGludGVyc2VjdHMgd2l0aCB0aGlzIHJhbmdlICovXFxubW0vZGFtb24vY29yZS5jOjYwNTpcXHRcXHRcXHRuZXdyID0gZGFtb25fbmV3X3JlZ2lvbihcXG5tbS9kYW1vbi9jb3JlLmMtNjA2LVxcdFxcdFxcdFxcdFxcdEFMSUdOX0RPV04ocmFuZ2UtXFx1MDAzZXN0YXJ0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYxMS1cXHRcXHRcXHRpZiAoaW5zZXJ0X2JlZm9yZV9yKVxcbm1tL2RhbW9uL2NvcmUuYzo2MTI6XFx0XFx0XFx0XFx0ZGFtb25faW5zZXJ0X3JlZ2lvbihuZXdyLCBkYW1vbl9wcmV2X3JlZ2lvbihyKSxcXG5tbS9kYW1vbi9jb3JlLmMtNjEzLVxcdFxcdFxcdFxcdFxcdFxcdHIsIHQpO1xcbm1tL2RhbW9uL2NvcmUuYy02MTQtXFx0XFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzo2MTU6XFx0XFx0XFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihuZXdyLCB0KTtcXG5tbS9kYW1vbi9jb3JlLmMtNjE2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjIyLVxcdFxcdFxcdC8qIGZpbGwgcG9zc2libGUgaG9sZXMgaW4gdGhlIHJhbmdlICovXFxubW0vZGFtb24vY29yZS5jOjYyMzpcXHRcXHRcXHRlcnIgPSBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoZmlyc3QsIGxhc3QsIHQpO1xcbm1tL2RhbW9uL2NvcmUuYy02MjQtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03MzM9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc0NS1cXG5tbS9kYW1vbi9jb3JlLmM6NzQ2OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXFxubW0vZGFtb24vY29yZS5jLTc0Ny1cXHRcXHRcXHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzYzLVxcdCAqIHJ1bm5pbmcsIGl0IHdpbGwgYWxzbyB1cGRhdGVkIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIERBTU9OIGNvbnRleHQsXFxubW0vZGFtb24vY29yZS5jOjc2NDpcXHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cXG5tbS9kYW1vbi9jb3JlLmMtNzY1LVxcdCAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTc4Ny1cXG5tbS9kYW1vbi9jb3JlLmM6Nzg4OnN0YXRpYyB2b2lkIGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtNzg5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTgtXFxubW0vZGFtb24vY29yZS5jOjc5OTp2b2lkIGRhbW9uX2FkZF9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTgwMC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODA0LVxcbm1tL2RhbW9uL2NvcmUuYzo4MDU6c3RhdGljIHZvaWQgZGFtb25fZGVsX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTgwNi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODA5LVxcbm1tL2RhbW9uL2NvcmUuYzo4MTA6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy04MTEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTgxNC1cXG5tbS9kYW1vbi9jb3JlLmM6ODE1OnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy04MTYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzMC1cXHRrZnJlZShzLVxcdTAwM2VtaWdyYXRlX2Rlc3RzLndlaWdodF9hcnIpO1xcbm1tL2RhbW9uL2NvcmUuYzo4MzE6XFx0ZGFtb25fZGVsX3NjaGVtZShzKTtcXG5tbS9kYW1vbi9jb3JlLmM6ODMyOlxcdGRhbW9uX2ZyZWVfc2NoZW1lKHMpO1xcbm1tL2RhbW9uL2NvcmUuYy04MzMtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzNS0vKlxcbm1tL2RhbW9uL2NvcmUuYzo4MzY6ICogQ29uc3RydWN0IGEgZGFtb25fdGFyZ2V0IHN0cnVjdFxcbm1tL2RhbW9uL2NvcmUuYy04MzctICpcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MzktICovXFxubW0vZGFtb24vY29yZS5jOjg0MDpzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTg0MS17XFxubW0vZGFtb24vY29yZS5jOjg0MjpcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbm1tL2RhbW9uL2NvcmUuYy04NDMtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODU2LVxcbm1tL2RhbW9uL2NvcmUuYzo4NTc6dm9pZCBkYW1vbl9hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtODU4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NjQtICovXFxubW0vZGFtb24vY29yZS5jOjg2NTppbnQgZGFtb25fc2V0X3RhcmdldF9waWQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IHBpZClcXG5tbS9kYW1vbi9jb3JlLmMtODY2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NzItXFxubW0vZGFtb24vY29yZS5jOjg3MzpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTg3NC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODc3LVxcbm1tL2RhbW9uL2NvcmUuYzo4Nzg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy04Nzkte1xcbm1tL2RhbW9uL2NvcmUuYzo4ODA6XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTg4MS1cXG5tbS9kYW1vbi9jb3JlLmM6ODgyOlxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpXFxubW0vZGFtb24vY29yZS5jOjg4MzpcXHRcXHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcXG5tbS9kYW1vbi9jb3JlLmMtODg0LVxcdGtmcmVlKHQpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTg4Ni1cXG5tbS9kYW1vbi9jb3JlLmM6ODg3OnZvaWQgZGFtb25fZGVzdHJveV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04ODgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTg5Mi1cXG5tbS9kYW1vbi9jb3JlLmM6ODkzOlxcdGRhbW9uX2RlbF90YXJnZXQodCk7XFxubW0vZGFtb24vY29yZS5jOjg5NDpcXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcXG5tbS9kYW1vbi9jb3JlLmMtODk1LX1cXG5tbS9kYW1vbi9jb3JlLmMtODk2LVxcbm1tL2RhbW9uL2NvcmUuYzo4OTc6dW5zaWduZWQgaW50IGRhbW9uX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtODk4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05MDEtXFxubW0vZGFtb24vY29yZS5jOjkwMjpzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTkwMy17XFxubW0vZGFtb24vY29yZS5jOjkwNDpcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxubW0vZGFtb24vY29yZS5jLTkwNS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05NDEtXFxubW0vZGFtb24vY29yZS5jOjk0MjpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy05NDMte1xcbm1tL2RhbW9uL2NvcmUuYzo5NDQ6XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgKm5leHRfdDtcXG5tbS9kYW1vbi9jb3JlLmMtOTQ1LVxcbm1tL2RhbW9uL2NvcmUuYzo5NDY6XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0X3NhZmUodCwgbmV4dF90LCBjdHgpXFxubW0vZGFtb24vY29yZS5jOjk0NzpcXHRcXHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy05NDgtfVxcbm1tL2RhbW9uL2NvcmUuYy05NDktXFxubW0vZGFtb24vY29yZS5jOjk1MDp2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtOTUxLXtcXG5tbS9kYW1vbi9jb3JlLmMtOTUyLVxcdHN0cnVjdCBkYW1vcyAqcywgKm5leHRfcztcXG5tbS9kYW1vbi9jb3JlLmM6OTUzOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgKm5leHRfcDtcXG5tbS9kYW1vbi9jb3JlLmMtOTU0LVxcbm1tL2RhbW9uL2NvcmUuYzo5NTU6XFx0ZGFtb25fZGVzdHJveV90YXJnZXRzKGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTk1Ni1cXG5tbS9kYW1vbi9jb3JlLmM6OTU3OlxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZV9zYWZlKHMsIG5leHRfcywgY3R4KVxcbm1tL2RhbW9uL2NvcmUuYzo5NTg6XFx0XFx0ZGFtb25fZGVzdHJveV9zY2hlbWUocyk7XFxubW0vZGFtb24vY29yZS5jLTk1OS1cXG5tbS9kYW1vbi9jb3JlLmM6OTYwOlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUocCwgbmV4dF9wLCBjdHgpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjI3Ljg4MzcwNTU4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDgyMzIxOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgREFNT04ncyBJbml0aWF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgREFNT04gcHJvY2Vzcy4gTXkgcHJpbWFyeSBmb2N1cyBpcyB1bmRlcnN0YW5kaW5nIGl0cyBzdGFydHVwIGFuZCBleGVjdXRpb24uIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgYGRhbW9uX3N0YXJ0YCBpcyBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBJJ2xsIHByb2JhYmx5IGFsc28gbmVlZCB0byB0cmFjZSBpdCBmcm9tIHRoZSBzeXNmcyBlbnRyeXBvaW50cyBhcyB3ZWxsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IGl0IGlzIHRyaWdnZXJlZC4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93LCBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgbWFpbiBsb29wLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIGxvb2tpbmcgYXQgbWVtb3J5IG1hcHBpbmcsIHNhbXBsaW5nLCBhbmQgbW9uaXRvcmluZyBsb2dpYywgYnV0IGZpcnN0LCBJIG5lZWQgdGhlIHByZWNpc2UgaW5pdGlhbGl6YXRpb24gY2FsbHMgYW5kIHRoZSByZWxhdGVkIHN5c2ZzIG9wdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBmb3IgREFNT04ncyBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjE3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6MzEuOTY2MDMwMTc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYxNTc0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jLTExMTAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMjI9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwMjQtLypcXG5tbS9kYW1vbi9jb3JlLmM6MjAyNTogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTIwMjYtICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDMxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDMyOnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwMzMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNTQtLyoqXFxubW0vZGFtb24vY29yZS5jOjIwNTU6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxubW0vZGFtb24vY29yZS5jLTIwNTYtICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2My0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcXG5tbS9kYW1vbi9jb3JlLmM6MjA2NDogKiAnZGFtb25fc3RhcnQoKScgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XFxubW0vZGFtb24vY29yZS5jLTIwNjUtICogcmV0dXJucyAtRUJVU1kuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2OC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA2OTppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjA3MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA5NC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIwOTU6XFx0XFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ni1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIxNjU9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTkyLSAqXFxubW0vZGFtb24vY29yZS5jOjIxOTM6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcXG5tbS9kYW1vbi9jb3JlLmMtMjE5NC0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMjAxPWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjQ3LSAqXFxubW0vZGFtb24vY29yZS5jOjIyNDg6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcXG5tbS9kYW1vbi9jb3JlLmMtMjI0OS0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MjEtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MjI6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MjMtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzA9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDItXFxubW0vZGFtb24vcmVjbGFpbS5jOjM0MzpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ0LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MjAwPXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zdGFydCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTIxMi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9zdGF0LmM6MjEzOlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZkYW1vbl9zdGF0X2NvbnRleHQsIDEsIHRydWUpO1xcbm1tL2RhbW9uL3N0YXQuYy0yMTQtXFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNTExPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjUzNS1cXHR9XFxubW0vZGFtb24vc3lzZnMuYzoyNTM2OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIGZhbHNlKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI1MzctXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDozMi40NzIxOTM3MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ2MjMwNzIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIERBTU9OIENvbmZpZ3VyYXRpb24gVGhyb3VnaCBzeXNmcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIGZpZ3VyaW5nIG91dCBob3cgdGhlIHN5c2ZzIGludGVyZmFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgY29udHJvbGxpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBtb25pdG9yaW5nLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYG1tL2RhbW9uL3N5c2ZzLmNgIGlzIHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgdGhpcyBmaWxlLCBmcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBwcm92aWRlcyB0aGUgcHJpbWFyeSBzeXNmcyBpbnRlcmZhY2UuIFdpdGhpbiBpdCwgSSBzaG91bGQgZXhwZWN0IHRvIGZpbmQgdGhlIG1lY2hhbmlzbXMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBjb3JlIERBTU9OIGNvbXBvbmVudHM6IGl0cyBjb250ZXh0cywgdGhlIHRhcmdldHMgaXQgbW9uaXRvcnMsIHRoZSB2YXJpb3VzIHNjaGVtZXMgZW1wbG95ZWQsIHNldHRpbmcgcXVvdGFzLCBhbmQsIGNyaXRpY2FsbHksIHRoZSBjb250cm9sIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBEQU1PTiBmdW5jdGlvbmFsaXR5IGl0c2VsZiwgbGlrZWx5IHRocm91Z2ggYSBmdW5jdGlvbiBsaWtlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC5cblxuVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgY2FuJ3QganVzdCBzdG9wIHRoZXJlLiBJIGFsc28gbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgc3BlY2lmaWNzIG9mIHNjaGVtZSBhbmQgcXVvdGEgY29uZmlndXJhdGlvbi4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gVGhhdCBzaG91bGQgc2hvdyBtZSB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHNjaGVtZXMgYW5kIHF1b3RhcyBhcmUgbWFuaXB1bGF0ZWQgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLCBhcyB0aGV5IGFyZSBjcnVjaWFsIGFzcGVjdHMgdG8gREFNT04ncyBvdmVyYWxsIHR1bmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDozOC45MzQ1MDUzODlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDAxNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE0MjYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL2RhbW9uL2NvcmUuYz02ODM9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTY4OC1cXG5tbS9kYW1vbi9jb3JlLmM6Njg5OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmM6NjkwOlxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbm1tL2RhbW9uL2NvcmUuYy02OTEtXFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXFxubW0vZGFtb24vY29yZS5jLTY5Mi17XFxubW0vZGFtb24vY29yZS5jOjY5MzpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG5tbS9kYW1vbi9jb3JlLmMtNjk0LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcwNS1cXG5tbS9kYW1vbi9jb3JlLmM6NzA2OnZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG5tbS9kYW1vbi9jb3JlLmMtNzA3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MTAtXFxubW0vZGFtb24vY29yZS5jOjcxMTpzdGF0aWMgdm9pZCBkYW1vc19kZWxfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG5tbS9kYW1vbi9jb3JlLmMtNzEyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MTUtXFxubW0vZGFtb24vY29yZS5jOjcxNjpzdGF0aWMgdm9pZCBkYW1vc19mcmVlX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxubW0vZGFtb24vY29yZS5jLTcxNy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzIwLVxcbm1tL2RhbW9uL2NvcmUuYzo3MjE6dm9pZCBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxubW0vZGFtb24vY29yZS5jLTcyMi17XFxubW0vZGFtb24vY29yZS5jOjcyMzpcXHRkYW1vc19kZWxfcXVvdGFfZ29hbChnKTtcXG5tbS9kYW1vbi9jb3JlLmM6NzI0OlxcdGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChnKTtcXG5tbS9kYW1vbi9jb3JlLmMtNzI1LX1cXG5tbS9kYW1vbi9jb3JlLmMtNzI2LVxcbm1tL2RhbW9uL2NvcmUuYzo3Mjc6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkoc3RydWN0IGRhbW9zX3F1b3RhICpxKVxcbm1tL2RhbW9uL2NvcmUuYy03Mjgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTczMS1cXG5tbS9kYW1vbi9jb3JlLmM6NzMyOi8qIGluaXRpYWxpemUgZmllbGRzIG9mIEBxdW90YSB0aGF0IG5vcm1hbGx5IEFQSSB1c2VycyB3b3VsZG4ndCBzZXQgKi9cXG5tbS9kYW1vbi9jb3JlLmM6NzMzOnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG5tbS9kYW1vbi9jb3JlLmMtNzM0LXtcXG5tbS9kYW1vbi9jb3JlLmM6NzM1OlxcdHF1b3RhLVxcdTAwM2Vlc3ogPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3MzY6XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3Mzc6XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3Mzg6XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3Mzk6XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XFxubW0vZGFtb24vY29yZS5jOjc0MDpcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmM6NzQxOlxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6NzQyOlxcdHF1b3RhLVxcdTAwM2Vlc3pfYnAgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3NDM6XFx0cmV0dXJuIHF1b3RhO1xcbm1tL2RhbW9uL2NvcmUuYy03NDQtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTc0Nj1zdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc0OC1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzLFxcbm1tL2RhbW9uL2NvcmUuYzo3NDk6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVxcdFxcdFxcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzICp3bWFya3MsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzc0LVxcbm1tL2RhbW9uL2NvcmUuYzo3NzU6XFx0c2NoZW1lLVxcdTAwM2VxdW90YSA9ICooZGFtb3NfcXVvdGFfaW5pdChxdW90YSkpO1xcbm1tL2RhbW9uL2NvcmUuYzo3NzY6XFx0LyogcXVvdGEuZ29hbHMgc2hvdWxkIGJlIHNlcGFyYXRlbHkgc2V0IGJ5IGNhbGxlciAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3Nzc6XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEuZ29hbHMpO1xcbm1tL2RhbW9uL2NvcmUuYy03NzgtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODE1PXZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy04MTYte1xcbm1tL2RhbW9uL2NvcmUuYzo4MTc6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcsICpnX25leHQ7XFxubW0vZGFtb24vY29yZS5jLTgxOC1cXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmMtODE5LVxcbm1tL2RhbW9uL2NvcmUuYzo4MjA6XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXFx1MDAyNnMtXFx1MDAzZXF1b3RhKVxcbm1tL2RhbW9uL2NvcmUuYzo4MjE6XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xcbm1tL2RhbW9uL2NvcmUuYy04MjItXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTE2Nj12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTc3LVxcbm1tL2RhbW9uL2NvcmUuYzoxMTc4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbnRoX3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jOjExNzk6XFx0XFx0aW50IG4sIHN0cnVjdCBkYW1vc19xdW90YSAqcSlcXG5tbS9kYW1vbi9jb3JlLmMtMTE4MC17XFxubW0vZGFtb24vY29yZS5jOjExODE6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vY29yZS5jLTExODItXFx0aW50IGkgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTgzLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTg0OlxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcSkge1xcbm1tL2RhbW9uL2NvcmUuYy0xMTg1LVxcdFxcdGlmIChpKysgPT0gbilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTkwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTkxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbm1tL2RhbW9uL2NvcmUuYzoxMTkyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExOTMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyMTQtXFxubW0vZGFtb24vY29yZS5jOjEyMTU6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jOjEyMTY6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTIxNy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIyMS1cXHRcXHRkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vY29yZS5jOjEyMjI6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjIzLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjI1LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxMjI2OiAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIC0gQ29tbWl0IERBTU9TIHF1b3RhIGdvYWxzIHRvIGFub3RoZXIgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jOjEyMjc6ICogQGRzdDpcXHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxcbm1tL2RhbW9uL2NvcmUuYzoxMjI4OiAqIEBzcmM6XFx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT1MgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jLTEyMjktICpcXG5tbS9kYW1vbi9jb3JlLmM6MTIzMDogKiBDb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmb3IgcXVvdGEgZ29hbHMgZnJvbSBAc3JjIHRvIEBkc3QuICBVc2Vyc1xcbm1tL2RhbW9uL2NvcmUuYzoxMjMxOiAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xcbm1tL2RhbW9uL2NvcmUuYy0xMjMyLSAqIERBTU9OIGNvbnRleHRzLCBpbnN0ZWFkIG9mIG1hbnVhbCBpbi1wbGFjZSB1cGRhdGVzLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyMzYtICovXFxubW0vZGFtb24vY29yZS5jOjEyMzc6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTEyMzgte1xcbm1tL2RhbW9uL2NvcmUuYzoxMjM5OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjQwLVxcdGludCBpID0gMCwgaiA9IDA7XFxubW0vZGFtb24vY29yZS5jLTEyNDEtXFxubW0vZGFtb24vY29yZS5jOjEyNDI6XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGRzdF9nb2FsLCBuZXh0LCBkc3QpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTI0MzpcXHRcXHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkrKywgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI0NC1cXHRcXHRpZiAoc3JjX2dvYWwpXFxubW0vZGFtb24vY29yZS5jOjEyNDU6XFx0XFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI0Ni1cXHRcXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjEyNDc6XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGRzdF9nb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI0OC1cXHR9XFxubW0vZGFtb24vY29yZS5jOjEyNDk6XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKHNyY19nb2FsLCBuZXh0LCBzcmMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTI1MC1cXHRcXHRpZiAoaisrIFxcdTAwM2MgaSlcXG5tbS9kYW1vbi9jb3JlLmMtMTI1MS1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTI1MjpcXHRcXHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMjUzLVxcdFxcdFxcdFxcdHNyY19nb2FsLVxcdTAwM2VtZXRyaWMsIHNyY19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNTUtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjEyNTY6XFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTI1NzpcXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI1OC1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI2MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTI2MjpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTEyNjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNjgtXFx0ZHN0LVxcdTAwM2VzeiA9IHNyYy1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jOjEyNjk6XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI3MC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1MTk9c3RhdGljIGludCBkYW1vc19jb21taXQoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1MjYtXFxubW0vZGFtb24vY29yZS5jOjE1Mjc6XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhKFxcdTAwMjZkc3QtXFx1MDAzZXF1b3RhLCBcXHUwMDI2c3JjLVxcdTAwM2VxdW90YSk7XFxubW0vZGFtb24vY29yZS5jLTE1MjgtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTQ2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU2Ny1cXHRcXHRcXHRcXHRzcmNfc2NoZW1lLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cyxcXG5tbS9kYW1vbi9jb3JlLmM6MTU2ODpcXHRcXHRcXHRcXHRcXHUwMDI2c3JjX3NjaGVtZS1cXHUwMDNlcXVvdGEsIFxcdTAwMjZzcmNfc2NoZW1lLVxcdTAwM2V3bWFya3MsXFxubW0vZGFtb24vY29yZS5jLTE1NjktXFx0XFx0XFx0XFx0TlVNQV9OT19OT0RFKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjc5PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTcwNS1cXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XFxubW0vZGFtb24vY29yZS5jOjE3MDY6XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XFxubW0vZGFtb24vY29yZS5jOjE3MDc6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmM6MTcwODpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTcwOS1cXHRcXHRcXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTg2Mj1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODY1LVxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbm1tL2RhbW9uL2NvcmUuYzoxODY2OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy0xODY3LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NzQtXFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XFxubW0vZGFtb24vY29yZS5jOjE4NzU6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhO1xcbm1tL2RhbW9uL2NvcmUuYy0xODc2LVxcbm1tL2RhbW9uL2NvcmUuYzoxODc3OlxcdFxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTg3OC1cXHRcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjM3MT1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjM4Ni0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyMzg3OiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXFxubW0vZGFtb24vY29yZS5jOjIzODg6ICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG5tbS9kYW1vbi9jb3JlLmMtMjM4OS0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyMzkwOiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVvdGEgaXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuXFxubW0vZGFtb24vY29yZS5jLTIzOTEtICovXFxubW0vZGFtb24vY29yZS5jOjIzOTI6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxubW0vZGFtb24vY29yZS5jLTIzOTMte1xcbm1tL2RhbW9uL2NvcmUuYzoyMzk0OlxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IHx8IHF1b3RhLVxcdTAwM2VzeiB8fCBxdW90YS1cXHUwMDNlbXMgfHxcXG5tbS9kYW1vbi9jb3JlLmM6MjM5NTpcXHRcXHQhZGFtb3NfcXVvdGFfZ29hbHNfZW1wdHkocXVvdGEpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMzk2LX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMzk4PXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MDItXFxubW0vZGFtb24vY29yZS5jOjI0MDM6XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjQwNC1cXHRcXHRyZXR1cm4gcmV0O1xcbm1tL2RhbW9uL2NvcmUuYy0yNDA1LVxcbm1tL2RhbW9uL2NvcmUuYzoyNDA2OlxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxubW0vZGFtb24vY29yZS5jLTI0MDctfVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MTAtICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXFxubW0vZGFtb24vY29yZS5jOjI0MTE6ICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jLTI0MTItICogQHQ6XFx0VGhlIHRhcmdldCBvZiB0aGUgcmVnaW9uLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MTYtICpcXG5tbS9kYW1vbi9jb3JlLmM6MjQxNzogKiBJZiBhIHF1b3RhIG9mIGEgc2NoZW1lIGhhcyBleGNlZWRlZCBpbiBhIHF1b3RhIGNoYXJnZSB3aW5kb3csIHRoZSBzY2hlbWUnc1xcbm1tL2RhbW9uL2NvcmUuYy0yNDE4LSAqIGFjdGlvbiB3b3VsZCBhcHBsaWVkIHRvIG9ubHkgYSBwYXJ0IG9mIHRoZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4gZnVsZmlsbGluZ1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI0MzQ9c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0Mzcte1xcbm1tL2RhbW9uL2NvcmUuYzoyNDM4OlxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jLTI0MzktXFx0dW5zaWduZWQgbG9uZyBzel90b19za2lwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0NDEtXFx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyNDQyOlxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XFxubW0vZGFtb24vY29yZS5jOjI0NDM6XFx0XFx0aWYgKHQgIT0gcXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcXG5tbS9kYW1vbi9jb3JlLmMtMjQ0NC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ0NS1cXHRcXHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNDQ2OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYzoyNDQ3OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ0OC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ0OS1cXHRcXHR9XFxubW0vZGFtb24vY29yZS5jOjI0NTA6XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFxcdTAwMjZcXHUwMDI2XFxubW0vZGFtb24vY29yZS5jOjI0NTE6XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kIFxcdTAwM2M9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDUyLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDUzLVxcbm1tL2RhbW9uL2NvcmUuYzoyNDU0OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcXHUwMDI2XFx1MDAyNiByLVxcdTAwM2Vhci5zdGFydCBcXHUwMDNjXFxubW0vZGFtb24vY29yZS5jOjI0NTU6XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjQ1NjpcXHRcXHRcXHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSAtXFxubW0vZGFtb24vY29yZS5jLTI0NTctXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0NjUtXFx0XFx0fVxcbm1tL2RhbW9uL2NvcmUuYzoyNDY2OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYzoyNDY3OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ2OC1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjYxOT1zdGF0aWMgdm9pZCBkYW1vc193YWxrX2NhbmNlbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjYzNS1cXG5tbS9kYW1vbi9jb3JlLmM6MjYzNjpzdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5tbS9kYW1vbi9jb3JlLmMtMjYzNy1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X3JlZ2lvbiwgdW5zaWduZWQgbG9uZyBzel9hcHBsaWVkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NDMtXFx0ICovXFxubW0vZGFtb24vY29yZS5jOjI2NDQ6XFx0aWYgKCFxdW90YS1cXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20gfHwgc3pfYXBwbGllZCBcXHUwMDNlIHN6X3JlZ2lvbilcXG5tbS9kYW1vbi9jb3JlLmM6MjY0NTpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArPSBzel9yZWdpb247XFxubW0vZGFtb24vY29yZS5jLTI2NDYtXFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoyNjQ3OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ICs9IHN6X2FwcGxpZWQgKyBtdWx0X2ZyYWMoXFxubW0vZGFtb24vY29yZS5jLTI2NDgtXFx0XFx0XFx0XFx0KHN6X3JlZ2lvbiAtIHN6X2FwcGxpZWQpLFxcbm1tL2RhbW9uL2NvcmUuYzoyNjQ5OlxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9udW0sXFxubW0vZGFtb24vY29yZS5jOjI2NTA6XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWZhaWxfY2hhcmdlX2Rlbm9tKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjY1MS19XFxubW0vZGFtb24vY29yZS5jLTI2NTItXFxubW0vZGFtb24vY29yZS5jOjI2NTM6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbm1tL2RhbW9uL2NvcmUuYy0yNjU0LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG5tbS9kYW1vbi9jb3JlLmMtMjY1NS17XFxubW0vZGFtb24vY29yZS5jOjI2NTY6XFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxcbm1tL2RhbW9uL2NvcmUuYy0yNjU3LVxcdFxcdHJldHVybiBmYWxzZTtcXG5tbS9kYW1vbi9jb3JlLmM6MjY1ODpcXHRpZiAoIXF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6KVxcbm1tL2RhbW9uL2NvcmUuYy0yNjU5LVxcdFxcdHJldHVybiBmYWxzZTtcXG5tbS9kYW1vbi9jb3JlLmM6MjY2MDpcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeilcXG5tbS9kYW1vbi9jb3JlLmMtMjY2MS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjYzLVxcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFxcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xcbm1tL2RhbW9uL2NvcmUuYzoyNjY0OlxcdCAqIHF1b3RhIG1lYW5zIHRoZSBxdW90YSBpcyBlZmZlY3RpdmVseSBmdWxsLlxcbm1tL2RhbW9uL2NvcmUuYy0yNjY1LVxcdCAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyNjY2OlxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xcbm1tL2RhbW9uL2NvcmUuYy0yNjY3LX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjY5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NzEte1xcbm1tL2RhbW9uL2NvcmUuYzoyNjcyOlxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jLTI2NzMtXFx0dW5zaWduZWQgbG9uZyBzeiA9IGRhbW9uX3N6X3JlZ2lvbihyKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzA2LVxcdGlmIChjLVxcdTAwM2VvcHMuYXBwbHlfc2NoZW1lKSB7XFxubW0vZGFtb24vY29yZS5jOjI3MDc6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kYW1vbi9jb3JlLmM6MjcwODpcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArIHN6IFxcdTAwM2UgcXVvdGEtXFx1MDAzZWVzeikge1xcbm1tL2RhbW9uL2NvcmUuYzoyNzA5OlxcdFxcdFxcdHN6ID0gQUxJR05fRE9XTihxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3osXFxubW0vZGFtb24vY29yZS5jLTI3MTAtXFx0XFx0XFx0XFx0XFx0Yy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjcyNC1cXHRcXHRrdGltZV9nZXRfY29hcnNlX3RzNjQoXFx1MDAyNmVuZCk7XFxubW0vZGFtb24vY29yZS5jOjI3MjU6XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgKz0gdGltZXNwZWM2NF90b19ucyhcXHUwMDI2ZW5kKSAtXFxubW0vZGFtb24vY29yZS5jLTI3MjYtXFx0XFx0XFx0dGltZXNwZWM2NF90b19ucyhcXHUwMDI2YmVnaW4pO1xcbm1tL2RhbW9uL2NvcmUuYzoyNzI3OlxcdFxcdGRhbW9zX2NoYXJnZV9xdW90YShxdW90YSwgc3osIHN6X2FwcGxpZWQpO1xcbm1tL2RhbW9uL2NvcmUuYzoyNzI4OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNzI5OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xcbm1tL2RhbW9uL2NvcmUuYzoyNzMwOlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gci1cXHUwMDNlYXIuZW5kO1xcbm1tL2RhbW9uL2NvcmUuYy0yNzMxLVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNzQwPXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzQ2LVxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxubW0vZGFtb24vY29yZS5jOjI3NDc6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG5tbS9kYW1vbi9jb3JlLmMtMjc0OC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzU0LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzU1OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWVzeilcXG5tbS9kYW1vbi9jb3JlLmMtMjc1Ni1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjc1Ny1cXG5tbS9kYW1vbi9jb3JlLmM6Mjc1ODpcXHRcXHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mjc1OTpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTI3NjAtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc4Mi0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyNzgzOiAqIFRoaXMgZnVuY3Rpb24gY291bGQgc3BsaXQgcmVnaW9ucyBmb3Iga2VlcGluZyB0aGUgcXVvdGEuICBUbyBtaW5pbWl6ZVxcbm1tL2RhbW9uL2NvcmUuYy0yNzg0LSAqIG92ZXJoZWFkIGZyb20gdGhlIHNwbGl0IG9wZXJhdGlvbnMgaW5jcmVhc2VkIG51bWJlciBvZiByZWdpb25zLCB0aGlzXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjc5NT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODA1LVxcdFxcdCAqIGRhbW9uX2RvX2FwcGx5X3NjaGVlbXMoKSBjb3VsZCBzcGxpdCB0aGUgcmVnaW9uIGZvciB0aGVcXG5tbS9kYW1vbi9jb3JlLmM6MjgwNjpcXHRcXHQgKiBxdW90YS4gIEtlZXBpbmcgdGhlIG5ldyBzbGljZXMgaXMgYW4gb3ZlcmhlYWQuICBNZXJnZSBiYWNrXFxubW0vZGFtb24vY29yZS5jLTI4MDctXFx0XFx0ICogdGhlIHNsaWNlcyBpbnRvIHRoZSBwcmV2aW91cyByZWdpb24gaWYgaXQgZG9lc24ndCBsb3NlIGFueVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5MDU9c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxcbm1tL2RhbW9uL2NvcmUuYzoyOTA2OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbm1tL2RhbW9uL2NvcmUuYy0yOTA3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yOTMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXFxubW0vZGFtb24vY29yZS5jOjI5MzQ6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxubW0vZGFtb24vY29yZS5jLTI5MzUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMwODc9c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxcbm1tL2RhbW9uL2NvcmUuYzozMDg4OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbm1tL2RhbW9uL2NvcmUuYy0zMDg5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDkzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXFxubW0vZGFtb24vY29yZS5jOjMwOTQ6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxubW0vZGFtb24vY29yZS5jLTMwOTUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxMjQ9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19odWdlcGFnZV9tZW1fYnAodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTM5LVxcbm1tL2RhbW9uL2NvcmUuYzozMTQwOnN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG5tbS9kYW1vbi9jb3JlLmM6MzE0MTpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbm1tL2RhbW9uL2NvcmUuYy0zMTQyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTg0LS8qIFJldHVybiB0aGUgaGlnaGVzdCBzY29yZSBzaW5jZSBpdCBtYWtlcyBzY2hlbWVzIGxlYXN0IGFnZ3Jlc3NpdmUgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzE4NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMxODYte1xcbm1tL2RhbW9uL2NvcmUuYzozMTg3OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYzozMTg4OlxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jLTMxODktXFx0dW5zaWduZWQgbG9uZyBoaWdoZXN0X3Njb3JlID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMzE5MC1cXG5tbS9kYW1vbi9jb3JlLmM6MzE5MTpcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XFxubW0vZGFtb24vY29yZS5jOjMxOTI6XFx0XFx0ZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShjLCBzLCBnb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzE5My1cXHRcXHRoaWdoZXN0X3Njb3JlID0gbWF4KGhpZ2hlc3Rfc2NvcmUsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIwMT1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjAyLXtcXG5tbS9kYW1vbi9jb3JlLmM6MzIwMzpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbm1tL2RhbW9uL2NvcmUuYzozMjA0OlxcdHVuc2lnbmVkIGxvbmcgc2NvcmUgPSBkYW1vc19xdW90YV9zY29yZShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzIwNS1cXG5tbS9kYW1vbi9jb3JlLmM6MzIwNjpcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQoXFxubW0vZGFtb24vY29yZS5jOjMyMDc6XFx0XFx0XFx0bWF4KHF1b3RhLVxcdTAwM2Vlc3pfYnAsIDEwMDAwVUwpLCBzY29yZSk7XFxubW0vZGFtb24vY29yZS5jLTMyMDgtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyMTA9c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMTIte1xcbm1tL2RhbW9uL2NvcmUuYzozMjEzOlxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jOjMyMTQ6XFx0dW5zaWduZWQgbG9uZyBzY29yZSA9IGRhbW9zX3F1b3RhX3Njb3JlKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjE1LVxcbm1tL2RhbW9uL2NvcmUuYy0zMjE2LVxcdGlmIChzY29yZSBcXHUwMDNlPSAxMDAwMClcXG5tbS9kYW1vbi9jb3JlLmM6MzIxNzpcXHRcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6MzIxODpcXHRlbHNlIGlmIChxdW90YS1cXHUwMDNlc3opXFxubW0vZGFtb24vY29yZS5jOjMyMTk6XFx0XFx0cXVvdGEtXFx1MDAzZWVzel9icCA9IHF1b3RhLVxcdTAwM2VzeiAqIDEwMDAwO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjIwLVxcdGVsc2VcXG5tbS9kYW1vbi9jb3JlLmM6MzIyMTpcXHRcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gVUxPTkdfTUFYO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjIyLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjI0LS8qXFxubW0vZGFtb24vY29yZS5jOjMyMjU6ICogQ2FsbGVkIG9ubHkgaWYgcXVvdGEtXFx1MDAzZW1zLCBvciBxdW90YS1cXHUwMDNlc3ogYXJlIHNldCwgb3IgcXVvdGEtXFx1MDAzZWdvYWxzIGlzIG5vdCBlbXB0eVxcbm1tL2RhbW9uL2NvcmUuYy0zMjI2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjI3OnN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMyMjgte1xcbm1tL2RhbW9uL2NvcmUuYzozMjI5OlxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jLTMyMzAtXFx0dW5zaWduZWQgbG9uZyB0aHJvdWdocHV0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMzItXFxubW0vZGFtb24vY29yZS5jOjMyMzM6XFx0aWYgKCFxdW90YS1cXHUwMDNlbXMgXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMjM0OlxcdFxcdHF1b3RhLVxcdTAwM2Vlc3ogPSBxdW90YS1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jLTMyMzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMzctXFxubW0vZGFtb24vY29yZS5jOjMyMzg6XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZxdW90YS1cXHUwMDNlZ29hbHMpKSB7XFxubW0vZGFtb24vY29yZS5jOjMyMzk6XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVClcXG5tbS9kYW1vbi9jb3JlLmMtMzI0MC1cXHRcXHRcXHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3QoY3R4LCBzKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzI0MTpcXHRcXHRlbHNlIGlmIChxdW90YS1cXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjQyLVxcdFxcdFxcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoY3R4LCBzKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzI0MzpcXHRcXHRlc3ogPSBxdW90YS1cXHUwMDNlZXN6X2JwIC8gMTAwMDA7XFxubW0vZGFtb24vY29yZS5jLTMyNDQtXFx0fVxcbm1tL2RhbW9uL2NvcmUuYy0zMjQ1LVxcbm1tL2RhbW9uL2NvcmUuYzozMjQ2OlxcdGlmIChxdW90YS1cXHUwMDNlbXMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzI0NzpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMpXFxubW0vZGFtb24vY29yZS5jOjMyNDg6XFx0XFx0XFx0dGhyb3VnaHB1dCA9IG11bHRfZnJhYyhxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeixcXG5tbS9kYW1vbi9jb3JlLmM6MzI0OTpcXHRcXHRcXHRcXHRcXHQxMDAwMDAwLCBxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9ucyk7XFxubW0vZGFtb24vY29yZS5jLTMyNTAtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYy0zMjUxLVxcdFxcdFxcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xcbm1tL2RhbW9uL2NvcmUuYzozMjUyOlxcdFxcdGVzeiA9IG1pbih0aHJvdWdocHV0ICogcXVvdGEtXFx1MDAzZW1zLCBlc3opO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjUzLVxcdFxcdGVzeiA9IG1heChjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3osIGVzeik7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI1NS1cXG5tbS9kYW1vbi9jb3JlLmM6MzI1NjpcXHRpZiAocXVvdGEtXFx1MDAzZXN6IFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2VzeiBcXHUwMDNjIGVzeilcXG5tbS9kYW1vbi9jb3JlLmM6MzI1NzpcXHRcXHRlc3ogPSBxdW90YS1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jLTMyNTgtXFxubW0vZGFtb24vY29yZS5jOjMyNTk6XFx0cXVvdGEtXFx1MDAzZWVzeiA9IGVzejtcXG5tbS9kYW1vbi9jb3JlLmMtMzI2MC19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzI2Mj1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbm1tL2RhbW9uL2NvcmUuYzozMjYzOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxubW0vZGFtb24vY29yZS5jLTMyNjQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyNzItXFx0fVxcbm1tL2RhbW9uL2NvcmUuYzozMjczOlxcdHRyYWNlX2RhbW9zX2VzeihjaWR4LCBzaWR4LCBxdW90YS1cXHUwMDNlZXN6KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzI3NC19XFxubW0vZGFtb24vY29yZS5jLTMyNzUtXFxubW0vZGFtb24vY29yZS5jOjMyNzY6c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMzI3Ny17XFxubW0vZGFtb24vY29yZS5jOjMyNzg6XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG5tbS9kYW1vbi9jb3JlLmMtMzI3OS1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyODMtXFxubW0vZGFtb24vY29yZS5jOjMyODQ6XFx0aWYgKCFxdW90YS1cXHUwMDNlbXMgXFx1MDAyNlxcdTAwMjYgIXF1b3RhLVxcdTAwM2VzeiBcXHUwMDI2XFx1MDAyNiBsaXN0X2VtcHR5KFxcdTAwMjZxdW90YS1cXHUwMDNlZ29hbHMpKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjg1LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjg3LVxcdC8qIEZpcnN0IGNoYXJnZSB3aW5kb3cgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzI4ODpcXHRpZiAoIXF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6IFxcdTAwMjZcXHUwMDI2ICFxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tKSB7XFxubW0vZGFtb24vY29yZS5jOjMyODk6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxubW0vZGFtb24vY29yZS5jOjMyOTA6XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzI5MS1cXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG5tbS9kYW1vbi9jb3JlLmM6MzI5MjpcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjkzLVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjk1LVxcdC8qIE5ldyBjaGFyZ2Ugd2luZG93IHN0YXJ0cyAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjk2OlxcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20sXFxubW0vZGFtb24vY29yZS5jOjMyOTc6XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSArXFxubW0vZGFtb24vY29yZS5jOjMyOTg6XFx0XFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMjk5OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG5tbS9kYW1vbi9jb3JlLmMtMzMwMC1cXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG5tbS9kYW1vbi9jb3JlLmM6MzMwMTpcXHRcXHRxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiArPSBxdW90YS1cXHUwMDNlY2hhcmdlZF9zejtcXG5tbS9kYW1vbi9jb3JlLmM6MzMwMjpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG5tbS9kYW1vbi9jb3JlLmM6MzMwMzpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxubW0vZGFtb24vY29yZS5jLTMzMDQtXFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxubW0vZGFtb24vY29yZS5jOjMzMDU6XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxubW0vZGFtb24vY29yZS5jOjMzMDY6XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzMwNzpcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBxdW90YS1cXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXFxubW0vZGFtb24vY29yZS5jOjMzMDg6XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMwOS1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMzNC1cXHRcXHRjdW11bGF0ZWRfc3ogKz0gYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xcbm1tL2RhbW9uL2NvcmUuYzozMzM1OlxcdFxcdGlmIChjdW11bGF0ZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeiB8fCAhc2NvcmUpXFxubW0vZGFtb24vY29yZS5jLTMzMzYtXFx0XFx0XFx0YnJlYWs7XFxubW0vZGFtb24vY29yZS5jLTMzMzctXFx0fVxcbm1tL2RhbW9uL2NvcmUuYzozMzM4OlxcdHF1b3RhLVxcdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMzOS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzM1Nz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzcyLVxcbm1tL2RhbW9uL2NvcmUuYzozMzczOlxcdFxcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzM3NC1cXHR9XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTM5PXN0YXRpYyBib29sIGNvbW1pdF9pbnB1dHMgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDMtICpcXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ0OiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDU6ICogYXV0b21hdGljYWxseSBpbmNyZWFzZXMgYW5kIGRlY3JlYXNlcyB0aGUgZWZmZWN0aXZlIGxldmVsIG9mIHRoZSBxdW90YVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDYtICogYWltaW5nIHRoZSBMUlUgW2RlXXByaW9yaXRpemF0aW9ucyBvZiB0aGUgaG90IGFuZCBjb2xkIG1lbW9yeSByZXN1bHRpbmcgaW5cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTA0PW1vZHVsZV9wYXJhbShjb2xkX21pbl9hZ2UsIHVsb25nLCAwNjAwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTEwNS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjEwNjpzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhIGRhbW9uX2xydV9zb3J0X3F1b3RhID0ge1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTA3LVxcdC8qIFVzZSB1cCB0byAxMCBtcyBwZXIgMSBzZWMsIGJ5IGRlZmF1bHQgKi9cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTEwLVxcdC5yZXNldF9pbnRlcnZhbCA9IDEwMDAsXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTE6XFx0LyogV2l0aGluIHRoZSBxdW90YSwgbWFyayBob3R0ZXIgcmVnaW9ucyBhY2Nlc3NlZCBmaXJzdC4gKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jLTExMi1cXHQud2VpZ2h0X3N6ID0gMCxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTE1LX07XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTY6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfVElNRV9RVU9UQShkYW1vbl9scnVfc29ydF9xdW90YSk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMTctXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTE2ND1ERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19TVEFUU19QQVJBTVMoZGFtb25fbHJ1X3NvcnRfaG90X3N0YXQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNjUtXFx0XFx0bHJ1X3NvcnRfdHJpZWRfaG90X3JlZ2lvbnMsIGxydV9zb3J0ZWRfaG90X3JlZ2lvbnMsXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxNjY6XFx0XFx0aG90X3F1b3RhX2V4Y2VlZHMpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTY3LVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0xNjk9REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX2xydV9zb3J0X2NvbGRfc3RhdCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTE3MC1cXHRcXHRscnVfc29ydF90cmllZF9jb2xkX3JlZ2lvbnMsIGxydV9zb3J0ZWRfY29sZF9yZWdpb25zLFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTcxOlxcdFxcdGNvbGRfcXVvdGFfZXhjZWVkcyk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNzItXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTE4OD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lKFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xOTAte1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTkxOlxcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IGRhbW9uX2xydV9zb3J0X3F1b3RhO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTkyLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTkzOlxcdC8qIFVzZSBoYWxmIG9mIHRvdGFsIHF1b3RhIGZvciBob3QvY29sZCBwYWdlcyBzb3J0aW5nICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxOTQ6XFx0cXVvdGEubXMgPSBxdW90YS5tcyAvIDI7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xOTUtXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTIwMi1cXHRcXHRcXHQwLFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjAzOlxcdFxcdFxcdC8qIHVuZGVyIHRoZSBxdW90YS4gKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjIwNDpcXHRcXHRcXHRcXHUwMDI2cXVvdGEsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMDUtXFx0XFx0XFx0LyogKERlKWFjdGl2YXRlIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSB3YXRlcm1hcmtzLiAqL1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjA9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X2NvbGRfc2NoZW1lKHVuc2lnbmVkIGludCBjb2xkX3RocmVzKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMjgtXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjM5LjAxNjUxMzkwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTg1Njk3MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgREFNT04ncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNT05pdG9yIHdpdGhpbiB0aGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vZGFtb24vYCksIG5lZWRzIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLCBwYXJ0aWN1bGFybHkgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBrZXkgZm9yIG91ciB0ZXN0aW5nLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiAgR29vZCwgREFNT04gaXMgY29uZmlndXJhYmxlIHZpYSBgc3lzZnNgIChgQ09ORklHX0RBTU9OX1NZU0ZTYCkgYW5kIG1vZHVsZXMgKGBDT05GSUdfREFNT05fUkVDTEFJTWAsIGBDT05GSUdfREFNT05fTFJVX1NPUlRgLCBgQ09ORklHX0RBTU9OX1NUQVRgKSwgd2hpY2ggbWVhbnMgSSBjYW4gZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCBpdCB0aHJvdWdoIHRoZSBgL3N5cy9rZXJuZWwvbW0vZGFtb24vLi4uYCBpbnRlcmZhY2UgdG8gc2V0IHVwIGl0cyBzY2hlbWVzLCBxdW90YXMsIHRhcmdldHMsIGFuZCB0cmlnZ2VyIGl0cyBleGVjdXRpb24uICBUaGF0J3MgYSBkZWZpbml0ZSBwbHVzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgdGhpcyB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/ICBMZXQncyBjb25zaWRlciB0aGUgdXN1YWwgY3JpdGVyaWE6XG5cbiogICAqKlN1YnN5c3RlbToqKiBJdCBpcyBpbiBgbW0vZGFtb25gLCBkZWZpbml0ZWx5IG5vdCBqdXN0IGRvY3VtZW50YXRpb24gb3IgY29zbWV0aWMgY2hhbmdlcy4gQ2hlY2suXG4qICAgKipFeGVjdXRpb24gZmxvdzoqKiBOb3QgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyBvciBtYWNyb3MuIFRoZSBjb3JlIGxvZ2ljIGluIGBkYW1vc19xdW90YV9pc19mdWxsYCBhbmQgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGlzIGRlZmluaXRlbHkgaW50ZXJlc3RpbmcsIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LiBDaGVjay5cbiogICAqKlNwZWNpZmljIERvbWFpbjoqKiBUaGlzIGlzbid0IGEgaGFyZHdhcmUgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlci4gSXQncyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBtZWFucyBpdCB3aWxsIGJlIG1vcmUgaW1wYWN0ZnVsIGlmIHRoZXJlIGlzIGEgdnVsbmVyYWJpbGl0eS4gQ2hlY2suXG4qICAgKipSdW50aW1lIExvZ2ljOioqIEl0J3Mgbm90IGp1c3QgdGVhcmRvd24gZWl0aGVyLCBpdCBpcyByZWd1bGFyIHJ1bnRpbWUgbG9naWMuIENoZWNrLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYHRydWVgLiBXZSBoYXZlIGVub3VnaCBjb21wbGV4aXR5IGluIHRoZSBkYXRhIGFuZCBjb250cm9sIGZsb3csIHdoaWNoIGhhcyBnb29kIHJlYWNoYWJpbGl0eS5cblxuQWxyaWdodCwgc28gd2hhdCdzIG5leHQ/IEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBiZSBsb29raW5nIGNsb3NlbHkgYXQgYG1tL2RhbW9uL3N5c2ZzLmNgIGZvciB0aG9zZSBgc3lzZnNgIGludGVyYWN0aW9uIHBvaW50cywgYXMgd2VsbCBhcyBgbW0vZGFtb24vY29yZS5jYCBmb3IgdGhlIGNvcmUgREFNT04gbG9naWMuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIGVudHJ5IHBvaW50cyBmb3IgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgbGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6NDguMDAyMjE0NjEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDg2MTQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipkYW1vbnxkYW1vbl9zeXNmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNjg3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOkRFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjE2OnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTctXFx0XFx0dW5zaWduZWQgbG9uZyBtaW4sXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xOS17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MjA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGttYWxsb2Nfb2JqKCpyYW5nZSk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMjEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0zMT1zdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMzMte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjM0OlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzozNTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTM2LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NDA9c3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00Mi17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NDM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQ0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNDUtXFx0dW5zaWduZWQgbG9uZyBtaW47XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz01Nj1zdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNTgte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjU5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTYxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy02Ny17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6Njg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjY5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNzAtXFx0dW5zaWduZWQgbG9uZyBtYXg7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4MTp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODIte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgzOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04NC19XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc191bF9yYW5nZV9taW5fYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODctXFx0XFx0X19BVFRSX1JXX01PREUobWluLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04OC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21heF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05MC1cXHRcXHRfX0FUVFJfUldfTU9ERShtYXgsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTkxLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkyOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkzOlxcdFxcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9taW5fYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjk0OlxcdFxcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9tYXhfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk1LVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTYtfTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5NzpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3VsX3JhbmdlKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05OC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5OTpjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMDpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAxLVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTAyOlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMDMtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMDY6c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA3LVxcdFxcdGNoYXIgKm1lbWNnX3BhdGhfYnVmLCBjaGFyICpwYXRoKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExNzppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExOC17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzQtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTM1OlxcdFxcdGlmIChkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKG1lbWNnLCBwYXRoLCBtZW1jZ19wYXRoKSkge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNi1cXHRcXHRcXHQqaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6OTpleHRlcm4gc3RydWN0IG11dGV4IGRhbW9uX3N5c2ZzX2xvY2s7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTE6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlIHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xMi1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTc6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xOC1cXHRcXHR1bnNpZ25lZCBsb25nIG1pbixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xOS1cXHRcXHR1bnNpZ25lZCBsb25nIG1heCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MjA6dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMjpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTI3LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjI4OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzIHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yOS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjMwOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKipzY2hlbWVzX2FycjtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMS1cXHRpbnQgbnI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMy1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mzc6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQwOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQzOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ0LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTI6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD01Nz12b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU4OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU5LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NjE6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYxLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcmVnaW9uX2FkZF9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDI9c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcmVnaW9uX3JtX2RpcnMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwMzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDQte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwOT1zdGF0aWMgc3NpemVfdCBzdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjExLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEyOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjE0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxOD1zdGF0aWMgc3NpemVfdCBlbmRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMjc9c3RhdGljIHNzaXplX3QgbnJfYWNjZXNzZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjM2PXN0YXRpYyBzc2l6ZV90IGFnZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjM5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI0NT1zdGF0aWMgc3NpemVfdCBzel9maWx0ZXJfcGFzc2VkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQ3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUwLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU2OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjYyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYzLVxcdFxcdF9fQVRUUl9ST19NT0RFKHN0YXJ0LCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2VuZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY2LVxcdFxcdF9fQVRUUl9ST19NT0RFKGVuZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ucl9hY2Nlc3Nlc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY5LVxcdFxcdF9fQVRUUl9ST19NT0RFKG5yX2FjY2Vzc2VzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FnZV9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcyLVxcdFxcdF9fQVRUUl9ST19NT0RFKGFnZSwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc0OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zel9maWx0ZXJfcGFzc2VkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzUtXFx0XFx0X19BVFRSX1JPX01PREUoc3pfZmlsdGVyX3Bhc3NlZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3ODpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3OTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODA6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fbnJfYWNjZXNzZXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODE6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWdlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgyOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODMtXFx0TlVMTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg0LX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NTpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODg6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OS1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTA6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MS19O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk3OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0OnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKlxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDU6ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA3OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucyA9IGttYWxsb2Nfb2JqKCpyZWdpb25zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxOT1zdGF0aWMgc3NpemVfdCB0b3RhbF9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzIzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyNC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyODpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjk6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpyZWdpb25zKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMzE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnIsICpuZXh0O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDI6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQzLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzQ0OlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ1LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ4LVxcdFxcdF9fQVRUUl9ST19NT0RFKHRvdGFsX2J5dGVzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTA6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1MTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTItXFx0TlVMTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzUzLX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NDpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzU1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTY6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NzpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1OC1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTk6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfZ3JvdXBzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjAtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM2NjpzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjctXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM3ODpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODA6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4MS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzgzPXN0YXRpYyBzc2l6ZV90IG5yX3RyaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODUte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODY6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM5Mj1zdGF0aWMgc3NpemVfdCBzel90cmllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzk0LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzk1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzk2OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM5Ny1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MDE9c3RhdGljIHNzaXplX3QgbnJfYXBwbGllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwMy17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MDYtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDEwPXN0YXRpYyBzc2l6ZV90IHN6X2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MTIte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDE1LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBzel9vcHNfZmlsdGVyX3Bhc3NlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQyMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQyMjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQyMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDI4PXN0YXRpYyBzc2l6ZV90IHF0X2V4Y2VlZHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDMzLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQzNz1zdGF0aWMgc3NpemVfdCBucl9zbmFwc2hvdHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Mzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQyLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQ0Nj1zdGF0aWMgc3NpemVfdCBtYXhfbnJfc25hcHNob3RzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQ4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQ5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDUwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ1MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00NTU9c3RhdGljIHNzaXplX3QgbWF4X25yX3NuYXBzaG90c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDYwLVxcdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cywgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2bWF4X25yX3NuYXBzaG90cyk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDY3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Njg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc3RhdHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDY5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDcwOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDcxLX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDcyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc0LVxcdFxcdF9fQVRUUl9ST19NT0RFKG5yX3RyaWVkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel90cmllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc3LVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X3RyaWVkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Nzk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9hcHBsaWVkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODAtXFx0XFx0X19BVFRSX1JPX01PREUobnJfYXBwbGllZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDgyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDgzLVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X2FwcGxpZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3N6X29wc19maWx0ZXJfcGFzc2VkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODYtXFx0XFx0X19BVFRSX1JPX01PREUoc3pfb3BzX2ZpbHRlcl9wYXNzZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3F0X2V4Y2VlZHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4OS1cXHRcXHRfX0FUVFJfUk9fTU9ERShxdF9leGNlZWRzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5Mi1cXHRcXHRfX0FUVFJfUk9fTU9ERShucl9zbmFwc2hvdHMsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5NDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX21heF9ucl9zbmFwc2hvdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5NS1cXHRcXHRfX0FUVFJfUldfTU9ERShtYXhfbnJfc25hcHNob3RzLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDk2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTc6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3N0YXRzX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5ODpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfdHJpZWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTk6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X3RyaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAwOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl9hcHBsaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAxOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel9hcHBsaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAyOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel9vcHNfZmlsdGVyX3Bhc3NlZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMzpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfcXRfZXhjZWVkc19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfc25hcHNob3RzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA1OlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19tYXhfbnJfc25hcHNob3RzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA2LVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwNy19O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDg6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zdGF0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwOS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTEwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3N0YXRzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTE6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MTItXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTEzOlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3N0YXRzX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTE0LX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTIzPWVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1Mjk6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MzAtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0MTpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Mi1cXHRcXHRlbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIgbGF5ZXIpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcXHRmaWx0ZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Ny1cXHRpZiAoZmlsdGVyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTU5Mz1zdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk2OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk4LVxcdGludCBpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTYyNz1zdGF0aWMgc3NpemVfdCB0eXBlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYyOS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjYzMDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjYzMTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYzMi1cXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NjUyPXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjU0LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjU1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjU2OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjU3LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY2MT1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjQ6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjYtXFx0Ym9vbCBtYXRjaGluZztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02NzY9c3RhdGljIHNzaXplX3QgYWxsb3dfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Nzgte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2Nzk6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02ODEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njg1PXN0YXRpYyBzc2l6ZV90IGFsbG93X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4Ny17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4ODpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY5MC1cXHRib29sIGFsbG93O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTcwMD1zdGF0aWMgc3NpemVfdCBtZW1jZ19wYXRoX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzAyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzAzOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzA1LVxcdGludCBsZW47XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwNi1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA3OlxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwOC1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcxMC1cXHRcXHRcXHRmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggPyBmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggOiBcXFwiXFxcIik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcxMTpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTItXFx0cmV0dXJuIGxlbjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03MTU9c3RhdGljIHNzaXplX3QgbWVtY2dfcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjAtXFx0Y2hhciAqcGF0aCA9IGttYWxsb2NfYXJyYXkoc2l6ZV9hZGQoY291bnQsIDEpLCBzaXplb2YoKnBhdGgpLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyNi1cXHRzdHJzY3B5KHBhdGgsIGJ1ZiwgY291bnQgKyAxKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzI3OlxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzI4LVxcdFxcdGtmcmVlKHBhdGgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczMi1cXHRmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggPSBwYXRoO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MzM6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzM0LVxcdHJldHVybiBjb3VudDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03Mzc9c3RhdGljIHNzaXplX3QgYWRkcl9zdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczOS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0MDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0MTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0Mi1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NDY9c3RhdGljIHNzaXplX3QgYWRkcl9zdGFydF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDgte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDk6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NTEtXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZS5zdGFydCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzU2PXN0YXRpYyBzc2l6ZV90IGFkZHJfZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzU4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzU5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzYwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzYxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc2NT1zdGF0aWMgc3NpemVfdCBhZGRyX2VuZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Njcte1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDo0OC4wODMwODE2NjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyODMzODYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBGdXp6aW5nIFN0cmF0ZWd5OiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBpcyB0byBwaW5wb2ludCBwb3RlbnRpYWwgYXJlYXMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEZpcnN0LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IERBTU9OIHN5bWJvbHMuIFdlIG5lZWQgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vay4gVGhpbmtpbmcgc3RyYXRlZ2ljYWxseSwgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBhcmUgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMuIEknbSBmb2N1c2luZyBvbiB0aG9zZSBlbnRyeSBwb2ludHMgYXMgdGhlIGluaXRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdGVzdCBmdW5jdGlvbnMgbGlrZSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBhbmQgdGhlaXIgcmVsYXRlZCB2YXJpYW50cyBmb3Igc2V0dGluZywgY29tbWl0dGluZyBzY2hlbWVzL3RhcmdldHMsIGFuZCBmdW5jdGlvbiBjYWxscy4gQWxzbywgaW5jbHVkZSBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBgZGFtb25fc2V0X3JlZ2lvbnNgLCBhbmQgYGRhbW9uX25ld19zY2hlbWVgLlxuXG5Ob3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZXhwb3J0ZWQsIG5vbi1zdGF0aWMgc3ltYm9scyB3aXRoaW4gdGhlIGNvcmUgREFNT04gZmlsZXM6IGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBgbW0vZGFtb24vc3lzZnMuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBwb3RlbnRpYWxseSB1bmNvdmVyIGFkZGl0aW9uYWwgZW50cnkgcG9pbnRzIG9yIGltcG9ydGFudCBpbnRlcm5hbCBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIHdpdGggdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODI3LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjUxLjAxMTQyMzQyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1MDMwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxzdHJ1Y3QgW2Etel9dKyBcXFxcKikgW2EtejAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NTE9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NzI6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxcbm1tL2RhbW9uL2NvcmUuYy03My17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTgtICovXFxubW0vZGFtb24vY29yZS5jOjk5OmludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxubW0vZGFtb24vY29yZS5jLTEwMC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTE1PXN0cnVjdCBkYW1vbl9wcmVwICpkYW1vbl9uZXdfcHJlcChlbnVtIGRhbW9uX3ByZXBfYWN0aW9uIGFjdGlvbilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjYtXFxubW0vZGFtb24vY29yZS5jOjEyNzp2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXFxubW0vZGFtb24vY29yZS5jLTEyOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTcyPXN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MTg3OnZvaWQgZGFtb25fYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXFxubW0vZGFtb24vY29yZS5jLTE4OC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTk3PXN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjAxLVxcbm1tL2RhbW9uL2NvcmUuYzoyMDI6dm9pZCBkYW1vbl9kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyMD1zdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIzMy1cXG5tbS9kYW1vbi9jb3JlLmM6MjM0OnZvaWQgZGFtb25fYWRkX3Byb2JlKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjM1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz01MDc9c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTM5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo1NDA6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxubW0vZGFtb24vY29yZS5jLTU0MS1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NjUzPWJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTY2NC1cXG5tbS9kYW1vbi9jb3JlLmM6NjY1OnZvaWQgZGFtb3NfYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxubW0vZGFtb24vY29yZS5jLTY2Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Njc4PXN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjgyLVxcbm1tL2RhbW9uL2NvcmUuYzo2ODM6dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy02ODQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTY4OT1zdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzA1LVxcbm1tL2RhbW9uL2NvcmUuYzo3MDY6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy03MDcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTcxNj1zdGF0aWMgdm9pZCBkYW1vc19mcmVlX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzIwLVxcbm1tL2RhbW9uL2NvcmUuYzo3MjE6dm9pZCBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxubW0vZGFtb24vY29yZS5jLTcyMi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Nzg4PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTgtXFxubW0vZGFtb24vY29yZS5jOjc5OTp2b2lkIGRhbW9uX2FkZF9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTgwMC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODEwPXN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MTQtXFxubW0vZGFtb24vY29yZS5jOjgxNTp2b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtODE2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04NDA9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTg1Ni1cXG5tbS9kYW1vbi9jb3JlLmM6ODU3OnZvaWQgZGFtb25fYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTg1OC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODY0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo4NjU6aW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpXFxubW0vZGFtb24vY29yZS5jLTg2Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODczPXN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NzctXFxubW0vZGFtb24vY29yZS5jOjg3ODp2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTg3OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODg2LVxcbm1tL2RhbW9uL2NvcmUuYzo4ODc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTg4OC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9OTQyPXN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTQ5LVxcbm1tL2RhbW9uL2NvcmUuYzo5NTA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTk1MS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTA4Mz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMTctICovXFxubW0vZGFtb24vY29yZS5jOjExMTg6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxubW0vZGFtb24vY29yZS5jLTExMTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjUtICovXFxubW0vZGFtb24vY29yZS5jOjExNjY6dm9pZCBkYW1vbl9zZXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqKnNjaGVtZXMsXFxubW0vZGFtb24vY29yZS5jLTExNjctXFx0XFx0XFx0c3NpemVfdCBucl9zY2hlbWVzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyMTU9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIzNi0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTIzNzppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTIzOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkyMD1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTQ4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTQ5OmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTUwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDMyPXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2OC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA2OTppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjA3MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjExND1zdGF0aWMgdm9pZCBfX2RhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxMzMtICovXFxubW0vZGFtb24vY29yZS5jOjIxMzQ6dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcXG5tbS9kYW1vbi9jb3JlLmMtMjEzNS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjE0OT1ib29sIGRhbW9uX2lzX3J1bm5pbmcoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNjQtICovXFxubW0vZGFtb24vY29yZS5jOjIxNjU6aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMjE2Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjIwMC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjIwMTppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxubW0vZGFtb24vY29yZS5jLTIyMDIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyNTMtICovXFxubW0vZGFtb24vY29yZS5jOjIyNTQ6aW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKVxcbm1tL2RhbW9uL2NvcmUuYy0yMjU1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz00MDk0PXN0YXRpYyBib29sIGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDEyNS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDEyNjppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTQxMjctXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MTUwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0MTUxOnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKVxcbm1tL2RhbW9uL2NvcmUuYy00MTUyLXtcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTQtICovXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYzoxNTppbnQgZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cCxcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTE2LVxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKip0YXJnZXRwKVxcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC00NS1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oOjQ2OmludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNDctXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqKnRhcmdldHApO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI0PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQxLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo0Mjp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDMte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTcyLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo3Mzp2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzQte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwMy1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTA0OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA1LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNDktXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE1MDppbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTEtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzMtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3NDp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3NS17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9OD1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTktXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjEwOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTE6dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMjp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMy1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xNC1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTU6aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTYtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTc6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xOC1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4MTp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODIte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTA2PXN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExNzppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExOC17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0xNz1zdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTktXFx0XFx0dW5zaWduZWQgbG9uZyBtYXgpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjIwOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0zND1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9Mzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQwLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQzLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTItXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTc6dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01OC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTYwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjYxOmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI2ODQ9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjg4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjg5OnZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjkwLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODUxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTg6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTktXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MzM6dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkzNC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTc0PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQ3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ4OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDktXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA2Nzp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDY4LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMDQtICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDU6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTA2LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTUxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTUyOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNTMtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjUxLjA3OTkzMTA3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NzgwNjI2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gcmV2aWV3aW5nIHRoZSBjb3JlIERBTU9OIGNvbXBvbmVudHM6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9jYWxsYCwgYWxvbmcgd2l0aCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBmdW5jdGlvbiBjYWxscywgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMuIFdlIGhhdmUgYERBTU9OYCwgd2hpY2ggYnVpbGRzIHRoZSBjb3JlIG1vZHVsZSAoYG1tL2RhbW9uL2NvcmUub2ApLiBUaGVuLCBgREFNT05fU1lTRlNgIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgc3lzZnMgaW50ZXJmYWNlLCBidWlsZGluZyByZWxhdGVkIG1vZHVsZXMsIHdoaWNoIGlzIGdyZWF0IGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBXZSBoYXZlIGBEQU1PTl9QQUREUmAgZm9yIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgYW5kIGBEQU1PTl9WQUREUmAgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIOKAkyBzdGFuZGFyZCBvZmZlcmluZ3MuXG5cbkknbSB2ZXJpZnlpbmcgdGhlIGRlcGVuZGVuY2llcy4gYERBTU9OX1NZU0ZTYCBjb3JyZWN0bHkgZGVwZW5kcyBvbiBib3RoIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIGlzIGNydWNpYWwuIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9WQUREUmAgYXJlIGNvcnJlY3RseSBkZXBlbmRlbnQgb24gYm90aCBgREFNT05gIGFuZCBgTU1VYC4gVGhpcyBlbnN1cmVzIHRoZSBwcm9wZXIgZm91bmRhdGlvbiBpcyBpbiBwbGFjZS4gSSdtIGFsc28gY29uZmlybWluZyB0aGF0IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBzdWNoIGFzIGBEQU1PTl9SRUNMQUlNYCBhbmQgYERBTU9OX0xSVV9TT1JUYCwgYXJlIGFwcHJvcHJpYXRlbHkgY29uc2lkZXJlZCBhbmQgbm90IGNhdXNpbmcgYW55IGNvbmZsaWN0cy5cblxuSSB0aGVuIHJldmlzaXRlZCB0aGUgbGlzdCBvZiBcIkZvY3VzU3ltYm9sc1wiIOKAkyBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCDigJMgdG8gZW5zdXJlIHRoZXkgYWxpZ24gd2l0aCB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgYWxsIHRoZSBLY29uZmlnIG9wdGlvbnMgYXJlIGNvbnNpc3RlbnQgd2l0aCBlYWNoIG90aGVyLiBUaGlzIGNvbmZpcm1zIHRoZWlyIGNvcnJlY3QgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBwcm9qZWN0LlxuXG5FdmVyeXRoaW5nIGlzIGNsZWFyLiBObyBmdXJ0aGVyIGNoZWNrcyBhcmUgbmVlZGVkLCBzbywgSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3MzEsIk91dHB1dFRva2VucyI6MTg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU0OjU0Ljk1Nzk5Nzg2NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTA1NTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHNjaGVtZSBxdW90YSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyAoc3BlY2lmaWNhbGx5IGRhbW9zX3F1b3RhX2lzX2Z1bGwgYW5kIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMpIHRvIGhhbmRsZSB6ZXJvIGNoYXJnZWQgc2l6ZSBhbmQgemVybyBlZmZlY3RpdmUgc2NoZW1lIHNpemUgY29uZGl0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIGtlcm5lbCBBUElzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgc2NoZW1lIHF1b3RhIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIChzcGVjaWZpY2FsbHkgZGFtb3NfcXVvdGFfaXNfZnVsbCBhbmQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcykgdG8gaGFuZGxlIHplcm8gY2hhcmdlZCBzaXplIGFuZCB6ZXJvIGVmZmVjdGl2ZSBzY2hlbWUgc2l6ZSBjb25kaXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQga2VybmVsIEFQSXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NDo1NS4wODcwNjAwMDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NjIwMDYzMjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6NTUuMDg3NTE5OTA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc2MTk1OTg0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgZWFybHkgcmV0dXJuIGNoZWNrcyB3aGVuIGBxdW90YS1cXHUwMDNlY2hhcmdlZF9zemAgb3IgYHF1b3RhLVxcdTAwM2Vlc3pgIGFyZSB6ZXJvIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lcygpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzOlxcbjEuIERvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LlxcbjIuIERvIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBPbmx5IGFkZCBjb25kaXRpb25hbCBjaGVja3Mgb24gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgLlxcblxcbkJlY2F1c2UgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjVjOGZiOTYzOWI4YzhjODg0Y2ZjMjUzNzQwM2JiYTM5MDU2ODg3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDA6NTM6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IGRmMjI2MjE3NjU5MTEuLmY4Yzc4NGRmMjQ2MDAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI2NTUsNiArMjY1NSw4IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbiB7XG4gXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghcXVvdGEtXHUwMDNlY2hhcmdlZF9zeilcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0LypcbkBAIC0yNzUwLDYgKzI3NTIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRpZiAoIXF1b3RhLVx1MDAzZWVzeilcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG4gXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTQ6NTUuMDg3NTIxMTM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTA4NTM5MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFBhdGNoIEFzc2Vzc21lbnQ6IEtNU0FOIFJpc2sgRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgYG1tL2RhbW9uL2NvcmUuY2AgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIEtBU0FOIGNoZWNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGxlYW5zIHRvd2FyZHMgYSBkZWZlbnNpdmUsIFFBLWZvY3VzZWQgZXZhbHVhdGlvbiDigJMgc29tZXRoaW5nIHNhZmUgYW5kIHN0cmFpZ2h0Zm9yd2FyZCB0byBkby4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgZGlmZiBpdHNlbGYgaXMgcmVsYXRpdmVseSBzbWFsbC4gSSBzZWUgYWRkaXRpb25zIHdpdGhpbiB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgZnVuY3Rpb25zLiBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgY2hlY2tzIGZvciBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgYW5kIGBxdW90YS1cdTAwM2Vlc3pgIGJlaW5nIG5vbi16ZXJvIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggY2VydGFpbiBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gcXVvdGEgbWFuYWdlbWVudCBhbmQgc2NoZW1lIGFwcGxpY2F0aW9uIHdpdGhpbiBEQU1PTi5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCBgY2hhcmdlZF9zemAgYW5kIGBlc3pgIHJlcHJlc2VudCBhbmQgaG93IHRoZXkgYXJlIGluaXRpYWxpemVkIGFuZCB1c2VkIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBlciBza2lsbHMgb3IgcmVhZCB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXNlIGNoZWNrcyBhcmUgYWN0dWFsbHkgKnJlbW92aW5nKiBhIHBvdGVudGlhbCByaXNrLCBieSBlbnN1cmluZyB0aGF0IGNlcnRhaW4gY29tcHV0YXRpb25zIGRvbid0IG9jY3VyIHdoZW4gdGhlIHF1b3RhIGlzIGVtcHR5IG9yIG5vdCBpbml0aWFsaXplZC4gU28sIGl0ICptaWdodCogYmUgYSBnb29kIHRoaW5nLlxuXG5JJ20gdGhpbmtpbmcgdGhpcyBwYXRjaCBpcyBsaWtlbHkgYWltZWQgYXQgcHJldmVudGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3RoZXIgaXNzdWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSB1c2luZyB1bmluaXRpYWxpemVkIG9yIHplcm8gdmFsdWVzIGluIGNhbGN1bGF0aW9ucyByZWxhdGVkIHRvIHF1b3Rhcy4gVGhlIGFkZGl0aW9uIG9mIHRoZXNlIGNoZWNrcyB3b3VsZCBtZWFuIEtNU0FOIGlzIHByb2JhYmx5IG5vdCBuZWVkZWQuIEEgdGhvcm91Z2ggY29kZSByZXZpZXcgYW5kIGxvb2tpbmcgZm9yIG90aGVyIHJlZmVyZW5jZXMgdG8gdGhlIHZhcmlhYmxlcyBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLCBhbmQgSSdsbCBuZWVkIHRvIHRyYWNrIGRvd24gYW55IHBvdGVudGlhbCBpbml0aWFsaXphdGlvbiBwYXRocyB0byBjb25maXJtIG15IHN1c3BpY2lvbnMsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYSBkZWZlbnNpdmUgcGF0Y2ggdGhhdCBpcyBwcm9iYWJseSBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTU6MDYuNTk2MDY0MzQ4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjcyNzQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19xdW90YV9pc19mdWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjYzNj1zdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjUyLVxcbm1tL2RhbW9uL2NvcmUuYzoyNjUzOnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5tbS9kYW1vbi9jb3JlLmMtMjY1NC1cXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY2OT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzI3LVxcdFxcdGRhbW9zX2NoYXJnZV9xdW90YShxdW90YSwgc3osIHN6X2FwcGxpZWQpO1xcbm1tL2RhbW9uL2NvcmUuYzoyNzI4OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbm1tL2RhbW9uL2NvcmUuYy0yNzI5LVxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI3NDA9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NTgtXFx0XFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXFxubW0vZGFtb24vY29yZS5jOjI3NTk6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbm1tL2RhbW9uL2NvcmUuYy0yNzYwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyNzY9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjk4LVxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzI5OTpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTMzMDAtXFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5xdF9leGNlZWRzKys7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU1OjA2LjY4ODgwMTY3NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzk0MDE3OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDI2NTAtMjc3MCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMgZm9yIERBTU9OIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgaGVhcnQgb2YgdGhlIG1vbml0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBsb2dpYy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgKnJlYWxseSogd29ya2luZywgbm90IGp1c3QgdGhlIGhpZ2gtbGV2ZWwgZXhwbGFuYXRpb25zLiBJJ20gaG9waW5nIHRvIHNlZSB0aGUgaW50cmljYXRlIGRldGFpbHMgb2YgbWVtb3J5IGFjY2VzcyB0cmFja2luZywgcG90ZW50aWFsIGV2aWN0aW9uIHRyaWdnZXJzLCBhbmQgbWF5YmUgZXZlbiBhIGdsaW1wc2Ugb2YgdGhlIHNhbXBsaW5nIHN0cmF0ZWd5LiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gYXNzZXNzIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIGFuZCBJJ20gcHJlcGFyZWQgdG8gZGlzc2VjdCB0aGUgY29kZSB3aXRoIGEgY3JpdGljYWwgZXllLCBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBvciBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBhbGdvcml0aG1zIGVtcGxveWVkLiBLbm93aW5nIGhvdyByb2J1c3QgdGhpcyBzZWN0aW9uIGlzIHdpbGwgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIG92ZXJhbGwgaGVhbHRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTU6MDguNDgyODIxNTk3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY0NSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY0NTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArPSBzel9yZWdpb247XFxuMjY0NjpcXHRcXHRlbHNlXFxuMjY0NzpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArPSBzel9hcHBsaWVkICsgbXVsdF9mcmFjKFxcbjI2NDg6XFx0XFx0XFx0XFx0XFx0KHN6X3JlZ2lvbiAtIHN6X2FwcGxpZWQpLFxcbjI2NDk6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWZhaWxfY2hhcmdlX251bSxcXG4yNjUwOlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XFxuMjY1MTpcXHR9XFxuMjY1MjpcXHRcXG4yNjUzOlxcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4yNjU0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNjU1OlxcdHtcXG4yNjU2OlxcdFxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG4yNjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yNjU4OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3opXFxuMjY1OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjY2MDpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeilcXG4yNjYxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI2NjI6XFx0XFx0LypcXG4yNjYzOlxcdFxcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFxcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xcbjI2NjQ6XFx0XFx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXFxuMjY2NTpcXHRcXHQgKi9cXG4yNjY2OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xcbjI2Njc6XFx0fVxcbjI2Njg6XFx0XFxuMjY2OTpcXHRzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNjcwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcXG4yNjcxOlxcdHtcXG4yNjcyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjY3MzpcXHRcXHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xcbjI2NzQ6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgYmVnaW4sIGVuZDtcXG4yNjc1OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCA9IDA7XFxuMjY3NjpcXHRcXHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkID0gMDtcXG4yNjc3OlxcdFxcdC8qXFxuMjY3ODpcXHRcXHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcXG4yNjc5OlxcdFxcdCAqIGltcGxpZXMgd2l0aCAnbnJfY29udGV4dHMnIGZpbGUuICBOZXZlcnRoZWxlc3MsIG9ubHkgc2luZ2xlIGNvbnRleHRcXG4yNjgwOlxcdFxcdCAqIHBlciBrZGFtb25kIGlzIHN1cHBvcnRlZCBmb3Igbm93LiAgU28sIHdlIGNhbiBzaW1wbHkgdXNlICcwJyBjb250ZXh0XFxuMjY4MTpcXHRcXHQgKiBpbmRleCBoZXJlLlxcbjI2ODI6XFx0XFx0ICovXFxuMjY4MzpcXHRcXHR1bnNpZ25lZCBpbnQgY2lkeCA9IDA7XFxuMjY4NDpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1xcdFxcdC8qIHNjaGVtZXMgaXRlcmF0b3IgKi9cXG4yNjg1OlxcdFxcdHVuc2lnbmVkIGludCBzaWR4ID0gMDtcXG4yNjg2OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpdGVyO1xcdC8qIHRhcmdldHMgaXRlcmF0b3IgKi9cXG4yNjg3OlxcdFxcdHVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwO1xcbjI2ODg6XFx0XFx0Ym9vbCBkb190cmFjZSA9IGZhbHNlO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHQvKiBnZXQgaW5kaWNlcyBmb3IgdHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5KCkgKi9cXG4yNjkxOlxcdFxcdGlmICh0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHlfZW5hYmxlZCgpKSB7XFxuMjY5MjpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcXG4yNjkzOlxcdFxcdFxcdFxcdGlmIChzaXRlciA9PSBzKVxcbjI2OTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjY5NTpcXHRcXHRcXHRcXHRzaWR4Kys7XFxuMjY5NjpcXHRcXHRcXHR9XFxuMjY5NzpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodGl0ZXIsIGMpIHtcXG4yNjk4OlxcdFxcdFxcdFxcdGlmICh0aXRlciA9PSB0KVxcbjI2OTk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcwMDpcXHRcXHRcXHRcXHR0aWR4Kys7XFxuMjcwMTpcXHRcXHRcXHR9XFxuMjcwMjpcXHRcXHRcXHRucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHIsIGMpO1xcbjI3MDM6XFx0XFx0XFx0ZG9fdHJhY2UgPSB0cnVlO1xcbjI3MDQ6XFx0XFx0fVxcbjI3MDU6XFx0XFxuMjcwNjpcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLmFwcGx5X3NjaGVtZSkge1xcbjI3MDc6XFx0XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXFx1MDAyNlxcdTAwMjZcXG4yNzA4OlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ICsgc3ogXFx1MDAzZSBxdW90YS1cXHUwMDNlZXN6KSB7XFxuMjcwOTpcXHRcXHRcXHRcXHRzeiA9IEFMSUdOX0RPV04ocXVvdGEtXFx1MDAzZWVzeiAtIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6LFxcbjI3MTA6XFx0XFx0XFx0XFx0XFx0XFx0Yy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuMjcxMTpcXHRcXHRcXHRcXHRpZiAoIXN6KVxcbjI3MTI6XFx0XFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4yNzEzOlxcdFxcdFxcdFxcdGlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKVxcbjI3MTQ6XFx0XFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4yNzE1OlxcdFxcdFxcdH1cXG4yNzE2OlxcdFxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxuMjcxNzpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjcxODpcXHRcXHRcXHRrdGltZV9nZXRfY29hcnNlX3RzNjQoXFx1MDAyNmJlZ2luKTtcXG4yNzE5OlxcdFxcdFxcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcyxcXG4yNzIwOlxcdFxcdFxcdFxcdFxcdGRhbW9uX25yX3JlZ2lvbnModCksIGRvX3RyYWNlKTtcXG4yNzIxOlxcdFxcdFxcdHN6X2FwcGxpZWQgPSBjLVxcdTAwM2VvcHMuYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMsXFxuMjcyMjpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2c3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xcbjI3MjM6XFx0XFx0XFx0ZGFtb3Nfd2Fsa19jYWxsX3dhbGsoYywgdCwgciwgcywgc3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xcbjI3MjQ6XFx0XFx0XFx0a3RpbWVfZ2V0X2NvYXJzZV90czY0KFxcdTAwMjZlbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NTowOC40ODMwNTE1NDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3MTQxNjc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgY29uc2lkZXJpbmcgaXQgYXMgbXkgb3duIHRob3VnaHQ6XG5cbioqRm9jdXNpbmcgSW46IEEgVGFyZ2V0ZWQgUmVhZCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgY2xlYXIuIEkndmUgYmVlbiB3b3JraW5nIG9uIHRoaXMgbWF0ZXJpYWwsIGJ1dCBJIG5lZWQgdG8gaG9uZSBpbiBvbiBhIHNwZWNpZmljIHNlY3Rpb24uIFRoaXMgaXNuJ3QgYSBjYXN1YWwgc2NhbjsgaXQncyBhIHN0cmF0ZWdpYyBkZWVwIGRpdmUuIFRoZSBpbnN0cnVjdGlvbiB0byByZWFkIGFyb3VuZCB0aGUgMjc0MC0yNzgwIHJhbmdlIG1lYW5zIHRoYXQgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhvc2Ugc3BlY2lmaWMgcGFnZXMgb3IgbGluZXMuIEknbGwgbmVlZCB0byBiZSByZWFkeSB0byBhbmFseXplIHRoYXQgcGFydGljdWxhciB0ZXh0IHdpdGggbXkgZXhwZXJ0IGxlbnMsIGxvb2tpbmcgZm9yIHN1YnRsZXRpZXMsIGNvbnRleHR1YWwgY3VlcywgYW5kIGNvbm5lY3Rpb25zIHRvIHRoZSBicm9hZGVyIHRvcGljIGF0IGhhbmQuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc3BlY2lmaWMgY2hhbGxlbmdlcyB3aXRoaW4gdGhhdCB0ZXh0IHRvIGNvbnNpZGVyLiBNeSBpbnR1aXRpb24gd291bGQgYmUgdG8gcmV2aWV3IHRoZSB0ZXh0IGFuZCB0YWtlIG5vdGVzIG9uIHNvbWUgb2YgdGhlIGtleSBjb25jZXB0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTU6MTAuNTU0NDcxMzM5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc0MDpcXHRzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMjc0MTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI3NDI6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4yNzQzOlxcdHtcXG4yNzQ0OlxcdFxcdHN0cnVjdCBkYW1vcyAqcztcXG4yNzQ1OlxcdFxcbjI3NDY6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4yNzQ3OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjc0ODpcXHRcXG4yNzQ5OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjI3NTA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc1MTpcXHRcXG4yNzUyOlxcdFxcdFxcdGlmICghcy1cXHUwMDNld21hcmtzLmFjdGl2YXRlZClcXG4yNzUzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3NTQ6XFx0XFxuMjc1NTpcXHRcXHRcXHRpZiAoIXF1b3RhLVxcdTAwM2Vlc3opXFxuMjc1NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzU3OlxcdFxcbjI3NTg6XFx0XFx0XFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXFxuMjc1OTpcXHRcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMjc2MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzYxOlxcdFxcbjI3NjI6XFx0XFx0XFx0aWYgKGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24odCwgciwgcywgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMjc2MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzY0OlxcdFxcbjI3NjU6XFx0XFx0XFx0aWYgKHMtXFx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXFx1MDAyNlxcdTAwMjZcXG4yNzY2OlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXFx1MDAzYz0gcy1cXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMpXFxuMjc2NzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzY4OlxcdFxcbjI3Njk6XFx0XFx0XFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcXG4yNzcwOlxcdFxcdFxcdFxcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcXG4yNzcxOlxcdFxcbjI3NzI6XFx0XFx0XFx0aWYgKGRhbW9uX2lzX2xhc3RfcmVnaW9uKHIsIHQpKVxcbjI3NzM6XFx0XFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMrKztcXG4yNzc0OlxcdFxcdH1cXG4yNzc1OlxcdH1cXG4yNzc2OlxcdFxcbjI3Nzc6XFx0LypcXG4yNzc4OlxcdCAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cXG4yNzc5OlxcdCAqIEBjOlxcdFxcdFxcdG1vbml0b3JpbmcgY29udGV4dCB0byBhcHBseSBpdHMgREFNT1Mgc2NoZW1lcyB0by4uXFxuMjc4MDpcXHQgKiBAdDpcXHRcXHRcXHRtb25pdG9yaW5nIHRhcmdldCB0byBhcHBseSB0aGUgc2NoZW1lcyB0by5cXG4yNzgxOlxcdCAqIEBtYXhfcmVnaW9uX3N6OlxcdG1heGltdW0gcmVnaW9uIHNpemUgZm9yIEBjLlxcbjI3ODI6XFx0ICpcXG4yNzgzOlxcdCAqIFRoaXMgZnVuY3Rpb24gY291bGQgc3BsaXQgcmVnaW9ucyBmb3Iga2VlcGluZyB0aGUgcXVvdGEuICBUbyBtaW5pbWl6ZVxcbjI3ODQ6XFx0ICogb3ZlcmhlYWQgZnJvbSB0aGUgc3BsaXQgb3BlcmF0aW9ucyBpbmNyZWFzZWQgbnVtYmVyIG9mIHJlZ2lvbnMsIHRoaXNcXG4yNzg1OlxcdCAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBtZXJnZSByZWdpb25zIGFmdGVyIHRoZSBzY2hlbWVzIGFwcGx5aW5nIGF0dGVtcHQgaXMgZG9uZSxcXG4yNzg2OlxcdCAqIGZvciBlYWNoIHJlZ2lvbi4gIFRoZSBtZXJnZSBvcGVyYXRpb24gaXMgbWFkZSBvbmx5IHdoZW4gaXQgZG9lc24ndCBsb3NlIHRoZVxcbjI3ODc6XFx0ICogbW9uaXRvcmluZyBpbmZvcm1hdGlvbiBhbmQgbm90IHZpb2xhdGluZyBAbWF4X3JlZ2lvbl9zei5cXG4yNzg4OlxcdCAqXFxuMjc4OTpcXHQgKiBIZW5jZSwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVnaW9ucyBjb3VsZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NToxMC41NTQ5MDU5NDlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4NTY0NDg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogUXVvdGEgYW5kIFNpemUgQ2hlY2tzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgY2hhbmdlcy4gRmlyc3QsIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgLCB0aGVyZSdzIHRoaXMgbmV3IGNoZWNrOiBgaWYgKCFxdW90YS1cdTAwM2VjaGFyZ2VkX3N6KSByZXR1cm4gZmFsc2U7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgaXMgdGhpcyBuZWNlc3Nhcnk/IFByZXZpb3VzbHksIGl0IHNlZW1zIHRoZSBjb2RlIGNvdWxkIGhhdmUgcmV0dXJuZWQgYHRydWVgIHVuZGVyIGNlcnRhaW4gZWRnZSBjYXNlcywgbGlrZSB3aGVyZSBgcXVvdGEtXHUwMDNlZXN6YCAodGhlIGVzdGltYXRlZCBzaXplKSB3YXMgemVybyBvciB2ZXJ5IHNtYWxsLCBwZXJoYXBzIGxlc3MgdGhhbiBgbWluX3JlZ2lvbl9zemAsIHdoaWxlIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCAodGhlIGNoYXJnZWQgc2l6ZSkgd2FzIHN0aWxsIHplcm8uIEluIHN1Y2ggc2NlbmFyaW9zLCB0aGUgcHJldmlvdXMgY29tcGFyaXNvbiBgcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zemAgbWlnaHQgaGF2ZSBnaXZlbiBhIG1pc2xlYWRpbmcgcmVzdWx0LCBwb3RlbnRpYWxseSBjbGFpbWluZyB0aGUgcXVvdGEgd2FzIGZ1bGwgd2hlbiBpdCB3YXMsIGluIGZhY3QsIGVtcHR5LiBUaGlzIG5ldyBjaGVjayBlZmZlY3RpdmVseSBwcmV2ZW50cyB0aG9zZSBzaXR1YXRpb25zLiBXZSBkb24ndCB3YW50IHRvIHByZW1hdHVyZWx5IGZsYWcgYSBxdW90YSBhcyBmdWxsIHdoZW4gbm90aGluZyBoYXMgYWN0dWFsbHkgYmVlbiBjaGFyZ2VkLCBvciB3aGVuIHRoZSBlc3RpbWF0ZWQgc2l6ZSBpcyB6ZXJvLlxuXG5OZXh0LCBpbiBgZGFtb25fZG9fYXBwbHlfc2NoZW1lcygpYCwgd2UncmUgbm93IHNraXBwaW5nIHRoZSBzY2hlbWUgYXBwbGljYXRpb24gaWYgYHF1b3RhLVx1MDAzZWVzemAgaXMgemVybzogYGlmICghcXVvdGEtXHUwMDNlZXN6KSBjb250aW51ZTtgLiBUaGlzIG1ha2VzIHNlbnNlLiBJZiB0aGUgZXN0aW1hdGVkIHNpemUgaXMgemVybywgdGhlbiB0aGVyZSdzIGxpa2VseSBubyBtZWFuaW5nZnVsIHF1b3RhIHRvIG1hbmFnZS4gQXBwbHlpbmcgYSBzY2hlbWUgaW4gc3VjaCBjYXNlcyB3b3VsZCBiZSBhIHdhc3RlIG9mIHJlc291cmNlcyBhbmQgcG90ZW50aWFsbHkgbGVhZCB0byBpbmNvcnJlY3QgYmVoYXZpb3IuXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlc2UgYHF1b3RhLVx1MDAzZWVzemAgYW5kIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCBtZW1iZXJzIGFyZSB3aXRoaW4gdGhlIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgIGluc2lkZSB0aGUgYHN0cnVjdCBkYW1vc2AuIEknbGwgYWxzbyBuZWVkIHRvIHJldmlzaXQgaG93IHRoZSBgZGFtb3NfcXVvdGFfaXNfc2V0YCBmdW5jdGlvbiBiZWhhdmVzIGluIHRoZXNlIHNjZW5hcmlvcywgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjU1OjEzLjY0MDU1Mzc2N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNzcwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfaXNfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjM3MT1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjM4Ni0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyMzg3OiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXFxubW0vZGFtb24vY29yZS5jLTIzODgtICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzkxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMzkyOnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbm1tL2RhbW9uL2NvcmUuYy0yMzkzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMzk4PXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MDItXFxubW0vZGFtb24vY29yZS5jOjI0MDM6XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjQwNC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI2NTM9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NTUte1xcbm1tL2RhbW9uL2NvcmUuYzoyNjU2OlxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG5tbS9kYW1vbi9jb3JlLmMtMjY1Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY2OT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzA2LVxcdGlmIChjLVxcdTAwM2VvcHMuYXBwbHlfc2NoZW1lKSB7XFxubW0vZGFtb24vY29yZS5jOjI3MDc6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kYW1vbi9jb3JlLmMtMjcwOC1cXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArIHN6IFxcdTAwM2UgcXVvdGEtXFx1MDAzZWVzeikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NToxMy42OTE4MzU5MTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzNzU2MDMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBTZXR0aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKWAgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBwcmV0dHkgZ29vZCBjbHVlLCBzdWdnZXN0aW5nIGEgY2hlY2sgcmVsYXRlZCB0byBxdW90YXMgaW4gREFNT04uIE5vdywgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIGluIGNvbnRleHQsIHRvIHNlZSB3aGF0IHRoZSBwYXJhbWV0ZXJzIG1lYW4sIGFuZCBob3cgdGhpcyBjaGVjayBmYWN0b3JzIGludG8gdGhlIGJyb2FkZXIgc2NoZW1lLiBJdCdzIGEga2V5IHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGEgbWlzc3RlcCBoZXJlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wYWN0cy4gTGV0IG1lIHNlZS4uLiBJJ2xsIHB1bGwgdXAgdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUgYW5kIGp1bXAgdG8gbGluZXMgMjM4NSB0aHJvdWdoIDIzOTcuIEhvcGVmdWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZ2l2ZXMgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBxdW90YSBjaGVjay4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IGNvbnN0aXR1dGVzIGEgdmFsaWQgcXVvdGEgc2V0dGluZyBhbmQgdGhlIGNvbmRpdGlvbnMgd2hpY2ggdHJpZ2dlciB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbi4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjkxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTU6MTYuMTI5Mzk4NDkxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM4NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM4NTpcXHRcXG4yMzg2OlxcdC8qXFxuMjM4NzpcXHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxcbjIzODg6XFx0ICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4yMzg5OlxcdCAqXFxuMjM5MDpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1b3RhIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbjIzOTE6XFx0ICovXFxuMjM5MjpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4yMzkzOlxcdHtcXG4yMzk0OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IHx8IHF1b3RhLVxcdTAwM2VzeiB8fCBxdW90YS1cXHUwMDNlbXMgfHxcXG4yMzk1OlxcdFxcdFxcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XFxuMjM5NjpcXHR9XFxuMjM5NzpcXHRcXG4yMzk4OlxcdHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbjIzOTk6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo1NToxNi4xMjk2MzA0OTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU3NzQ2Njk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIE15IGluaXRpYWwgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCBoaW5nZXMgb24gYSBjYXJlZnVsIGFzc2Vzc21lbnQgb2YgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgcmlza3MuIE15IHByb2Nlc3MgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgY2hlY2tsaXN0OlxuXG4xLiAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uPyoqIE5vcGUuIFRoaXMgcGF0Y2ggZG9lc24ndCB0b3VjaCBhbnkgb2YgdGhlIHVzZXItc3BhY2UgY29weSBmdW5jdGlvbnMgbGlrZSBgY29weV90b191c2VyYC4gQSBnb29kIHN0YXJ0LlxuXG4yLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlcz8qKiBObywgbm90aGluZyB0byB3b3JyeSBhYm91dCBoZXJlIGVpdGhlci4gVGhlIGBxdW90YWAgc3RydWN0dXJlLCB3aGljaCBpcyB0aGUgZm9jdXMgb2YgdGhlc2UgY2hhbmdlcywgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHkgd2hlbiBEQU1PTiBzY2hlbWVzIGFyZSBjcmVhdGVkIHVzaW5nIGVpdGhlciB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIG9yIHRoZSBBUEkuIFdlJ3JlIHVzaW5nIGBremFsbG9jYCBvciBkZWZhdWx0IGluaXRpYWxpemF0aW9uLCBzbyB3ZSdyZSBnb29kIHRoZXJlLlxuXG4zLiAgKipNZW1vcnkgTWFuaXB1bGF0aW9uPyoqIFRoaXMgaXMgY3J1Y2lhbC4gQW0gSSBjaGFuZ2luZyBhbnkgbWVtb3J5IGFsbG9jYXRpb25zPyBBbSBJIG1vZGlmeWluZyBkYXRhIGNvcHlpbmcgaW4gbmV3IHdheXM/IFN0cnVjdCBsYXlvdXQgY2hhbmdlcz8gRXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhPyBObyB0byBhbGwgb2YgdGhlIGFib3ZlLiBUaGlzIHBhdGNoIHNpbXBseSBhZGRzIHR3byBlYXJseS1leGl0IHNhbml0eSBjaGVja3Mgb24gZXhpc3RpbmcgZmllbGRzOiBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgYW5kIGBxdW90YS1cdTAwM2Vlc3pgLiBUaGlzIGlzIHRvIHByZXZlbnQgbG9naWNhbCBlcnJvcnMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIHN1Y2ggYXMgZGl2aXNpb24gYnkgemVybyBvciBhbiBpbmFwcHJvcHJpYXRlIHNjaGVtZSBhcHBsaWNhdGlvbiB3aGVuIHRoZSBxdW90YSBpcyB6ZXJvIG9yIGNoYXJnZWQgc2l6ZSBpcyB6ZXJvLlxuXG40LiAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrPyoqIEFic29sdXRlbHkgbm9uZS4gTXkgYXNzZXNzbWVudCBjb25jbHVkZXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgcmlza3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBuZWVkIGZvciBhIEtNU0FOIGRlZGljYXRlZCBmdXp6aW5nIHJ1biB2cyBLQVNBTjpcblxuKiAgIEkga25vdyBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzIGFscmVhZHkgaW5jbHVkZSBLQVNBTiwgTE9DS0RFUCwgVUJTQU4sIGV0Yy5cbiogICBLTVNBTiBpcyB0aGUgaGVhdnkgaGl0dGVyIGhlcmUuIEl0J3MgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuXG4qICAgSSBvbmx5IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpZiBhIGNoYW5nZSBpbnRyb2R1Y2VzIG9yICpleHBvc2VzKiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLlxuKiAgIEFuZCBoZXJlPyBUaGVzZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQgYXJpdGhtZXRpYyBhbmQgbG9naWNhbCBjaGVja3Mgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0gKGBtbS9kYW1vbi9jb3JlLmNgKS4gVGhleSAqZG9uJ3QqIGFsbG9jYXRlIG1lbW9yeS4gVGhleSAqZG9uJ3QqIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGV5ICpkb24ndCogcmVhZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW5kIHRoZXkgKmRvbid0KiBhbHRlciBidWZmZXIgYm91bmRzLlxuXG5UaGUgY29uY2x1c2lvbiBpcyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBoZXJlLlxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIGV2ZXJ5IGRldGFpbCB0byBlbnN1cmUgbXkgYXNzZXNzbWVudCBpcyBzb3VuZC4gU28gbGV0IG1lIHN1bW1hcml6ZSBzdWNjaW5jdGx5OiBUaGUgcGF0Y2ggYWx0ZXJzIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lcygpYCBpbiBEQU1PTiBjb3JlIHRvIGluY2x1ZGUgY2hlY2tzIGZvciBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9PSAwYCBhbmQgYHF1b3RhLVx1MDAzZWVzeiA9PSAwYC4gTm8gbmV3IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vdGhpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyBpcyByZWFkIG9yIGV4cG9zZWQuIFRoZSBmaWVsZHMgYWNjZXNzZWQgKGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6YCwgYHF1b3RhLVx1MDAzZWVzemApIGFyZSBwYXJ0IG9mIGVzdGFibGlzaGVkIERBTU9OIHNjaGVtZSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIG1hbmFnZWQgd2VsbCBieSBEQU1PTiBpdHNlbGYuIEFueSBidWdzIHdpbGwgcmVsYXRlIHRvIHRoZSBleGlzdGluZyBib3VuZGFyeSBjb25kaXRpb25zIGluIHF1b3RhIGNhbGN1bGF0aW9ucywgYnV0IG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gR2l2ZW4gYWxsIG9mIHRoaXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBJIGNhbiBub3cgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDYsIk91dHB1dFRva2VucyI6MTk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NTU6MjIuNzA3MTAwMTFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgZWFybHkgcmV0dXJuIGNoZWNrcyB3aGVuIGBxdW90YS1cXHUwMDNlY2hhcmdlZF9zemAgb3IgYHF1b3RhLVxcdTAwM2Vlc3pgIGFyZSB6ZXJvIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lcygpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzOlxcbjEuIERvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LlxcbjIuIERvIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBPbmx5IGFkZCBjb25kaXRpb25hbCBjaGVja3Mgb24gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgLlxcblxcbkJlY2F1c2UgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gcXVvdGEgY2FsY3VsYXRpb24gbG9naWMgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBlYXJseSByZXR1cm4gY2hlY2tzIHdoZW4gYHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6YCBvciBgcXVvdGEtXFx1MDAzZWVzemAgYXJlIHplcm8gaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzKClgLlxcblxcblRoZXNlIGNoYW5nZXM6XFxuMS4gRG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuXFxuMi4gRG8gbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZSBvciBhbHRlciBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcbjMuIE9ubHkgYWRkIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBkYW1vc19xdW90YWAuXFxuXFxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownbplw[1] Phase: Succeeded StartedAt: 2026-09-03 00:55:45 +0000 UTC FinishedAt: 2026-09-03 00:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 00:55:45 +0000 UTC FinishedAt: 2026-09-03 00:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2] Phase: Succeeded StartedAt: 2026-09-03 00:55:45 +0000 UTC FinishedAt: 2026-09-03 04:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 00:55:45 +0000 UTC FinishedAt: 2026-09-03 04:36:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","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-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 00:55:45 +0000 UTC FinishedAt: 2026-09-03 00:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 00:55:45 +0000 UTC FinishedAt: 2026-09-03 00:55:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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-workflownbplw/series-workflownbplw-convert-artifact-3156759094/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 00:55:55 +0000 UTC FinishedAt: 2026-09-03 01:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 00:55:55 +0000 UTC FinishedAt: 2026-09-03 01:13:32 +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:*497bb2f4-2783-47ca-b956-c94a08b491c8,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-workflownbplw/series-workflownbplw-convert-artifact-3156759094/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": "ae54b9ba-de9d-498d-aefb-e58dbc9ef5d5", "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-workflownbplw/series-workflownbplw-build-action-3078191436/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 00:55:55 +0000 UTC FinishedAt: 2026-09-03 01:13:22 +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:*497bb2f4-2783-47ca-b956-c94a08b491c8,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-workflownbplw/series-workflownbplw-convert-artifact-3156759094/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": "ae54b9ba-de9d-498d-aefb-e58dbc9ef5d5", "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-workflownbplw/series-workflownbplw-build-action-3078191436/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 01:13:32 +0000 UTC FinishedAt: 2026-09-03 01:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 01:13:32 +0000 UTC FinishedAt: 2026-09-03 01:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 01:13:32 +0000 UTC FinishedAt: 2026-09-03 01:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 01:13:32 +0000 UTC FinishedAt: 2026-09-03 01:13:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","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-workflownbplw/series-workflownbplw-convert-artifact-4134152393/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 01:13:42 +0000 UTC FinishedAt: 2026-09-03 01:15:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 01:13:42 +0000 UTC FinishedAt: 2026-09-03 01:15:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ae54b9ba-de9d-498d-aefb-e58dbc9ef5d5,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-workflownbplw/series-workflownbplw-build-action-3078191436/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-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 01:15:34 +0000 UTC FinishedAt: 2026-09-03 01:15:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 01:15:34 +0000 UTC FinishedAt: 2026-09-03 01:15:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 01:15:34 +0000 UTC FinishedAt: 2026-09-03 01:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 01:15:34 +0000 UTC FinishedAt: 2026-09-03 01:31:27 +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:*497bb2f4-2783-47ca-b956-c94a08b491c8,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-workflownbplw/series-workflownbplw-convert-artifact-4134152393/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": "88a2b4f5-61f6-4479-8222-d34a497f5b04", "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-workflownbplw/series-workflownbplw-build-action-1752151973/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 01:15:34 +0000 UTC FinishedAt: 2026-09-03 01:31:17 +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:*497bb2f4-2783-47ca-b956-c94a08b491c8,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-workflownbplw/series-workflownbplw-convert-artifact-4134152393/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": "88a2b4f5-61f6-4479-8222-d34a497f5b04", "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-workflownbplw/series-workflownbplw-build-action-1752151973/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 01:31:27 +0000 UTC FinishedAt: 2026-09-03 01:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 01:31:27 +0000 UTC FinishedAt: 2026-09-03 01:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 01:31:27 +0000 UTC FinishedAt: 2026-09-03 01:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 01:31:27 +0000 UTC FinishedAt: 2026-09-03 01:33:14 +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:*88a2b4f5-61f6-4479-8222-d34a497f5b04,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-workflownbplw/series-workflownbplw-build-action-1752151973/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-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 01:33:23 +0000 UTC FinishedAt: 2026-09-03 04:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 01:33:23 +0000 UTC FinishedAt: 2026-09-03 04:36:07 +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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"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:*ae54b9ba-de9d-498d-aefb-e58dbc9ef5d5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*88a2b4f5-61f6-4479-8222-d34a497f5b04,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-workflownbplw/series-workflownbplw-build-action-3078191436/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-workflownbplw/series-workflownbplw-build-action-1752151973/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 01:33:23 +0000 UTC FinishedAt: 2026-09-03 01:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 01:33:23 +0000 UTC FinishedAt: 2026-09-03 01:33:32 +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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"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-workflownbplw/series-workflownbplw-convert-artifact-3754928414/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 01:33:23 +0000 UTC FinishedAt: 2026-09-03 01:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 01:33:23 +0000 UTC FinishedAt: 2026-09-03 01:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 01:33:23 +0000 UTC FinishedAt: 2026-09-03 01:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 01:33:44 +0000 UTC FinishedAt: 2026-09-03 04:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownbplw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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_start","damon_set_schemes","damon_commit_ctx","damos_commit_quota_goals","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"64372cb2-1b58-42da-a1da-4f4b8982cc49","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 01:33:44 +0000 UTC FinishedAt: 2026-09-03 04:35:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ae54b9ba-de9d-498d-aefb-e58dbc9ef5d5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*88a2b4f5-61f6-4479-8222-d34a497f5b04,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-workflownbplw/series-workflownbplw-build-action-3078191436/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-workflownbplw/series-workflownbplw-build-action-1752151973/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-workflownbplw/series-workflownbplw-convert-artifact-3754928414/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,}