Name: series-workflowzh2xl Phase: Succeeded StartedAt: 2026-06-29 15:43:51 +0000 UTC FinishedAt: 2026-06-29 19:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[0] Phase: Succeeded StartedAt: 2026-06-29 15:43:51 +0000 UTC FinishedAt: 2026-06-29 15:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 15:43:51 +0000 UTC FinishedAt: 2026-06-29 15:52:39 +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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_STAT" ], "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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_STAT" ], "series_id": "79cb40d2-9da8-4197-a181-6c07fa657fe7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_commit_target_regions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgdG8gdXNlIGBrdm1hbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgLCBhbGxvd2luZyBsYXJnZSBhbGxvY2F0aW9ucyB0byBmYWxsIGJhY2sgdG8gdm1hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBmYWxsYmFjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4gT3RoZXIgY2hhbmdlcyBpbmNsdWRlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdHlwbyBmaXhlcywgYSBtYWNybyBzaW1wbGlmaWNhdGlvbiBpbiBgZGFtb25fc3RhdC5jYCwgYW5kIGEgbmV3IEtVbml0IHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNDVkN2ZlZjNkZmIyMDA2NDNkYjJjMTQ3OGE4YzcyMDlhNzZkNjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTU6NTA6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggMDExMjk2ZjFlN2MyMTkuLmIyNjQ5ZWEwMTFmOTMxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5AQCAtMjQ2LDcgJiM0MzsyNDYsNyBAQCB3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhlIGZpbGVzLlxuIFVuZGVyIGBgbnJfcmVnaW9uc2BgIGRpcmVjdG9yeSwgdHdvIGZpbGVzIGZvciB0aGUgbG93ZXItYm91bmQgYW5kIHVwcGVyLWJvdW5kXG4gb2YgREFNT04mIzM5O3MgbW9uaXRvcmluZyByZWdpb25zIChgYG1pbmBgIGFuZCBgYG1heGBgLCByZXNwZWN0aXZlbHkpLCB3aGljaFxuIGNvbnRyb2xzIHRoZSBtb25pdG9yaW5nIG92ZXJoZWFkLCBleGlzdC4gIFlvdSBjYW4gc2V0IGFuZCBnZXQgdGhlIHZhbHVlcyBieVxuLXdyaXRpbmcgdG8gYW5kIHJhZGluZyBmcm9tIHRoZSBmaWxlcy5cbiYjNDM7d3JpdGluZyB0byBhbmQgcmVhZGluZyBmcm9tIHRoZSBmaWxlcy5cbiBcbiBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBpbnRlcnZhbHMgYW5kIG1vbml0b3JpbmcgcmVnaW9ucyByYW5nZSwgcGxlYXNlIHJlZmVyXG4gdG8gdGhlIERlc2lnbiBkb2N1bWVudCAoOmRvYzpgL21tL2RhbW9uL2Rlc2lnbmApLlxuQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgUGxlYXNlIHJlZmVyIHRvICB0aGUgOnJlZjpgZGVzaWduIGRvY3VtZW50IG9mIHRoZSBmZWF0dXJlXG4gXHUwMDNjZGFtb25fZGVzaWduX21vbml0b3JpbmdfaW50ZXJ2YWxzX2F1dG90dW5pbmdcdTAwM2VgIGZvciB0aGUgaW50ZXJuYWwgb2YgdGhlIHR1bmluZ1xuIG1lY2hhbmlzbS4gIFJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIGZvdXIgZmlsZXMgdW5kZXIgYGBpbnRlcnZhbHNfZ29hbGBgXG4gZGlyZWN0b3J5IHNob3dzIGFuZCB1cGRhdGVzIHRoZSB0dW5pbmcgcGFyYW1ldGVycyB0aGF0IGRlc2NyaWJlZCBpbiB0aGVcbi06cmVmOmRlc2lnbiBkb2MgXHUwMDNjZGFtb25fZGVzaWduX21vbml0b3JpbmdfaW50ZXJ2YWxzX2F1dG90dW5pbmdcdTAwM2VgIHdpdGggdGhlIHNhbWVcbiYjNDM7OnJlZjpgZGVzaWduIGRvYyBcdTAwM2NkYW1vbl9kZXNpZ25fbW9uaXRvcmluZ19pbnRlcnZhbHNfYXV0b3R1bmluZ1x1MDAzZWAgd2l0aCB0aGUgc2FtZVxuIG5hbWVzLiAgVGhlIHR1bmluZyBzdGFydHMgd2l0aCB0aGUgdXNlci1zZXQgYGBzYW1wbGVfdXNgYCBhbmQgYGBhZ2dyX3VzYGAuICBUaGVcbiB0dW5pbmctYXBwbGllZCBjdXJyZW50IHZhbHVlcyBvZiB0aGUgdHdvIGludGVydmFscyBjYW4gYmUgcmVhZCBmcm9tIHRoZVxuIGBgc2FtcGxlX3VzYGAgYW5kIGBgYWdncl91c2BgIGZpbGVzIGFmdGVyIHdyaXRpbmcgYGB1cGRhdGVfdHVuZWRfaW50ZXJ2YWxzYGAgdG9cbkBAIC0zNzcsNyAmIzQzOzM3Nyw3IEBAIHNjaGVtZXMvXHUwMDNjTlx1MDAzZS9cbiBJbiBlYWNoIHNjaGVtZSBkaXJlY3RvcnksIG5pbmUgZGlyZWN0b3JpZXMgKGBgYWNjZXNzX3BhdHRlcm5gYCwgYGBxdW90YXNgYCxcbiBgYHdhdGVybWFya3NgYCwgYGBjb3JlX2ZpbHRlcnNgYCwgYGBvcHNfZmlsdGVyc2BgLCBgYGZpbHRlcnNgYCwgYGBkZXN0c2BgLFxuIGBgc3RhdHNgYCwgYW5kIGBgdHJpZWRfcmVnaW9uc2BgKSBhbmQgdGhyZWUgZmlsZXMgKGBgYWN0aW9uYGAsIGBgdGFyZ2V0X25pZGBgXG4tYW5kIGBgYXBwbHlfaW50ZXJ2YWxgYCkgZXhpc3QuXG4mIzQzO2FuZCBgYGFwcGx5X2ludGVydmFsX3VzYGApIGV4aXN0LlxuIFxuIFRoZSBgYGFjdGlvbmBgIGZpbGUgaXMgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIHNjaGVtZSYjMzk7cyA6cmVmOmBhY3Rpb25cbiBcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfYWN0aW9uXHUwMDNlYC4gIFRoZSBrZXl3b3JkcyB0aGF0IGNhbiBiZSB3cml0dGVuIHRvIGFuZCByZWFkXG5AQCAtNzQzLDcgJiM0Mzs3NDMsNyBAQCBjb3VudGVyKS4gIEZpbmFsbHkgdGhlIHRlbnRoIGZpZWxkIChgYFhgYCkgc2hvd3MgdGhlIGBgYWdlYGAgb2YgdGhlIHJlZ2lvblxuIChyZWZlciB0byA6cmVmOmBkZXNpZ24gXHUwMDNjZGFtb25fZGVzaWduX2FnZV90cmFja2luZ1x1MDAzZWAgZm9yIG1vcmUgZGV0YWlscyBvZiB0aGVcbiBjb3VudGVyKS5cbiBcbi1JZiB0aGUgZXZlbnQgd2FzIGBgZGFtb246ZGFtb3NfYmVvZnJlX2FwcGx5YGAsIHRoZSBgYHBlcmYgc2NyaXB0YGAgb3V0cHV0IHdvdWxkXG4mIzQzO0lmIHRoZSBldmVudCB3YXMgYGBkYW1vbjpkYW1vc19iZWZvcmVfYXBwbHlgYCwgdGhlIGBgcGVyZiBzY3JpcHRgYCBvdXRwdXQgd291bGRcbiBiZSBzb21ld2hhdCBsaWtlIGJlbG93OjpcbiBcbiAgICAga2RhbW9uZC4wIDQ3MjkzIFswMDBdIDgwODAxLjA2MDIxNDogZGFtb246ZGFtb3NfYmVmb3JlX2FwcGx5OiBjdHhfaWR4PTAgc2NoZW1lX2lkeD0wIHRhcmdldF9pZHg9MCBucl9yZWdpb25zPTExIDEyMTkzMjYwNzQ4OC0xMzUxMjg3MTExNjg6IDAgMTM2XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCAyZGE3Y2EwZDNkMTdhNC4uYzE2YTNiYjI4OGQwNzkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTg2LDcgJiM0Mzs4Niw3IEBAIFRvIGtub3cgaG93IHVzZXItc3BhY2UgY2FuIGRvIHRoZSBjb25maWd1cmF0aW9uIHZpYSA6cmVmOmBEQU1PTiBzeXNmcyBpbnRlcmZhY2VcbiBkb2N1bWVudGF0aW9uLlxuIFxuIFxuLSAuLiBfZGFtb25fZGVzaWduX3ZhZGRyX3RhcmdldF9yZWdpb25zX2NvbnN0cnVjdGlvbjpcbiYjNDM7Li4gX2RhbW9uX2Rlc2lnbl92YWRkcl90YXJnZXRfcmVnaW9uc19jb25zdHJ1Y3Rpb246XG4gXG4gVk1BLWJhc2VkIFRhcmdldCBBZGRyZXNzIFJhbmdlIENvbnN0cnVjdGlvblxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC05MzAsMTEgJiM0Mzs5MzAsMTEgQEAgY29udHJvbCBwYXJhbWV0ZXJzIGZvciB0aGUgdXNhZ2Ugd291bGQgYWxzbyBuZWVkIHRvIGJlIG9wdGltaXplZCBmb3IgdGhlXG4gcHVycG9zZS5cbiBcbiBUbyBzdXBwb3J0IHN1Y2ggY2FzZXMsIHlldCBtb3JlIERBTU9OIEFQSSB1c2VyIGtlcm5lbCBtb2R1bGVzIHRoYXQgcHJvdmlkZSBtb3JlXG4tc2ltcGxlIGFuZCBvcHRpbWl6ZWQgdXNlciBzcGFjZSBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUuICBDdXJyZW50bHksIHR3b1xuLW1vZHVsZXMgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiBhbmQgTFJVIGxpc3RzIG1hbmlwdWxhdGlvbiBhcmUgcHJvdmlkZWQuICBGb3Jcbi1tb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3IgdGhvc2Vcbi0oOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXRgLCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbWAgYW5kXG4tOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuXG4mIzQzO3NpbXBsZSBhbmQgb3B0aW1pemVkIHVzZXIgc3BhY2UgaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlLiAgQ3VycmVudGx5LCB0aHJlZVxuJiM0Mzttb2R1bGVzIGZvciBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzLCBwcm9hY3RpdmUgcmVjbGFtYXRpb24sIGFuZCBMUlUgbGlzdHNcbiYjNDM7bWFuaXB1bGF0aW9uIGFyZSBwcm92aWRlZC4gIEZvciBtb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3JcbiYjNDM7dGhvc2UgKDpkb2M6YC9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0YCwgOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW1gXG4mIzQzO2FuZCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnRgKS5cbiBcbiAuLiBfZGFtb25fZGVzaWduX3NwZWNpYWxfcHVycG9zZV9tb2R1bGVzX2V4Y2x1c2l2aXR5OlxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMDI3MjUwZTQzYzY2ZjIuLjY1OGU0ZTMyOTdiMDg2IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0xMzU2LDE0ICYjNDM7MTM1NiwxNCBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsXG4gXHRpZiAoIWkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuJiM0MztcdHJhbmdlcyA9IGt2bWFsbG9jX29ianMoKnJhbmdlcywgaSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4gXHRpZiAoIXJhbmdlcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRpID0gMDtcbiBcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihzcmNfcmVnaW9uLCBzcmMpXG4gXHRcdHJhbmdlc1tpJiM0MzsmIzQzO10gPSBzcmNfcmVnaW9uLVx1MDAzZWFyO1xuIFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbi1cdGtmcmVlKHJhbmdlcyk7XG4mIzQzO1x0a3ZmcmVlKHJhbmdlcyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zdGF0LmMgYi9tbS9kYW1vbi9zdGF0LmNcbmluZGV4IDBlMTRmNWJiOGY3NWQ5Li5iMDViNjhmNzNlMTBkZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N0YXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3RhdC5jXG5AQCAtMTM4LDcgJiM0MzsxMzgsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N0YXRfZGFtb25fY2FsbF9mbih2b2lkICpkYXRhKVxuIFxuIFx0LyogYXZvaWQgdW5uZWNlc3NhcmlseSBmcmVxdWVudCBzdGF0IHVwZGF0ZSAqL1xuIFx0aWYgKHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsIGRhbW9uX3N0YXRfbGFzdF9yZWZyZXNoX2ppZmZpZXMgJiM0Mztcbi1cdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoNSAqIE1TRUNfUEVSX1NFQykpKVxuJiM0MztcdFx0XHRcdHNlY3NfdG9famlmZmllcyg1KSkpXG4gXHRcdHJldHVybiAwO1xuIFx0ZGFtb25fc3RhdF9sYXN0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXM7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBmY2Y3YzdmYWRiNWZlNS4uYzVmNTEyNGMzZDFmNDYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTE0NTYsNiAmIzQzOzE0NTYsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFZlcmlmeSB0aGF0IGRhbW9zX3dhbGsoKSByZWplY3RzIG5ldyByZXF1ZXN0cyB3aGVuXG4mIzQzOyAqIHdhbGtfY29udHJvbF9vYnNvbGV0ZSBpcyBzZXQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OlxuJiM0MzsgKiBjb21taXQgMzNjM2Y2YzJiNDhjIChcJiMzNDttbS9kYW1vbi9jb3JlOiBmaXggZGFtb3Nfd2FsaygpIHZzIGtkYW1vbmRfZm4oKSBleGl0IHJhY2VcJiMzNDspXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCBjb250cm9sID0ge307XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtjdHggYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFNpbXVsYXRlIHNodXRkb3duIHBoYXNlICovXG4mIzQzO1x0Y3R4LVx1MDAzZXdhbGtfY29udHJvbF9vYnNvbGV0ZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRhbW9zX3dhbGsoY3R4LCBcdTAwMjZjb250cm9sKTtcbiYjNDM7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgLUVDQU5DRUxFRCk7XG4mIzQzO1xuJiM0MztcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF90YXJnZXQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3JlZ2lvbnMpLFxuQEAgLTE0ODUsNiAmIzQzOzE1MTIsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9ucyksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24pLFxuJiM0MztcdEtVTklUX0NBU0UoZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGUpLFxuIFx0e30sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL0tjb25maWcgYi9zYW1wbGVzL2RhbW9uL0tjb25maWdcbmluZGV4IGNiZjk2ZmQ4YThiZjljLi4wMGJlM2U2YmRkNjU5OSAxMDA2NDRcbi0tLSBhL3NhbXBsZXMvZGFtb24vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvc2FtcGxlcy9kYW1vbi9LY29uZmlnXG5AQCAtMzEsNyAmIzQzOzMxLDcgQEAgY29uZmlnIFNBTVBMRV9EQU1PTl9NVElFUlxuIFx0Ym9vbCBcJiMzNDtEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmluZ1wmIzM0O1xuIFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgREFNT05fUEFERFJcbiBcdGhlbHBcbi1cdCAgVGhwcyBidWlsZHMgREFNT04gc2FtcGxlIG1vZHVsZSBmb3IgbWVtb3J5IHRpZXJpZ24uXG4mIzQzO1x0ICBUaGlzIGJ1aWxkcyBEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmluZy5cbiBcbiBcdCAgVGhlIG1vZHVsZSBhc3N1bWVzIHRoZSBzeXN0ZW0gaXMgY29uc3RydWN0ZWQgd2l0aCB0d28gTlVNQSBub2RlcyxcbiBcdCAgd2hpY2ggc2VlbXMgYXMgbG9jYWwgYW5kIHJlbW90ZSBub2RlcyB0byBhbGwgQ1BVcy4gIEZvciBleGFtcGxlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgdG8gdXNlIGBrdm1hbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgLCBhbGxvd2luZyBsYXJnZSBhbGxvY2F0aW9ucyB0byBmYWxsIGJhY2sgdG8gdm1hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBmYWxsYmFjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4gT3RoZXIgY2hhbmdlcyBpbmNsdWRlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdHlwbyBmaXhlcywgYSBtYWNybyBzaW1wbGlmaWNhdGlvbiBpbiBgZGFtb25fc3RhdC5jYCwgYW5kIGEgbmV3IEtVbml0IHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0NWQ3ZmVmM2RmYjIwMDY0M2RiMmMxNDc4YThjNzIwOWE3NmQ2OGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxNTo1MDoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggMDExMjk2ZjFlN2MyMTkuLmIyNjQ5ZWEwMTFmOTMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdApAQCAtMjQ2LDcgJiM0MzsyNDYsNyBAQCB3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhlIGZpbGVzLgogVW5kZXIgYGBucl9yZWdpb25zYGAgZGlyZWN0b3J5LCB0d28gZmlsZXMgZm9yIHRoZSBsb3dlci1ib3VuZCBhbmQgdXBwZXItYm91bmQKIG9mIERBTU9OJiMzOTtzIG1vbml0b3JpbmcgcmVnaW9ucyAoYGBtaW5gYCBhbmQgYGBtYXhgYCwgcmVzcGVjdGl2ZWx5KSwgd2hpY2gKIGNvbnRyb2xzIHRoZSBtb25pdG9yaW5nIG92ZXJoZWFkLCBleGlzdC4gIFlvdSBjYW4gc2V0IGFuZCBnZXQgdGhlIHZhbHVlcyBieQotd3JpdGluZyB0byBhbmQgcmFkaW5nIGZyb20gdGhlIGZpbGVzLgomIzQzO3dyaXRpbmcgdG8gYW5kIHJlYWRpbmcgZnJvbSB0aGUgZmlsZXMuCiAKIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGludGVydmFscyBhbmQgbW9uaXRvcmluZyByZWdpb25zIHJhbmdlLCBwbGVhc2UgcmVmZXIKIHRvIHRoZSBEZXNpZ24gZG9jdW1lbnQgKDpkb2M6YC9tbS9kYW1vbi9kZXNpZ25gKS4KQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgUGxlYXNlIHJlZmVyIHRvICB0aGUgOnJlZjpgZGVzaWduIGRvY3VtZW50IG9mIHRoZSBmZWF0dXJlCiAmbHQ7ZGFtb25fZGVzaWduX21vbml0b3JpbmdfaW50ZXJ2YWxzX2F1dG90dW5pbmcmZ3Q7YCBmb3IgdGhlIGludGVybmFsIG9mIHRoZSB0dW5pbmcKIG1lY2hhbmlzbS4gIFJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIGZvdXIgZmlsZXMgdW5kZXIgYGBpbnRlcnZhbHNfZ29hbGBgCiBkaXJlY3Rvcnkgc2hvd3MgYW5kIHVwZGF0ZXMgdGhlIHR1bmluZyBwYXJhbWV0ZXJzIHRoYXQgZGVzY3JpYmVkIGluIHRoZQotOnJlZjpkZXNpZ24gZG9jICZsdDtkYW1vbl9kZXNpZ25fbW9uaXRvcmluZ19pbnRlcnZhbHNfYXV0b3R1bmluZyZndDtgIHdpdGggdGhlIHNhbWUKJiM0Mzs6cmVmOmBkZXNpZ24gZG9jICZsdDtkYW1vbl9kZXNpZ25fbW9uaXRvcmluZ19pbnRlcnZhbHNfYXV0b3R1bmluZyZndDtgIHdpdGggdGhlIHNhbWUKIG5hbWVzLiAgVGhlIHR1bmluZyBzdGFydHMgd2l0aCB0aGUgdXNlci1zZXQgYGBzYW1wbGVfdXNgYCBhbmQgYGBhZ2dyX3VzYGAuICBUaGUKIHR1bmluZy1hcHBsaWVkIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSB0d28gaW50ZXJ2YWxzIGNhbiBiZSByZWFkIGZyb20gdGhlCiBgYHNhbXBsZV91c2BgIGFuZCBgYGFnZ3JfdXNgYCBmaWxlcyBhZnRlciB3cml0aW5nIGBgdXBkYXRlX3R1bmVkX2ludGVydmFsc2BgIHRvCkBAIC0zNzcsNyAmIzQzOzM3Nyw3IEBAIHNjaGVtZXMvJmx0O04mZ3Q7LwogSW4gZWFjaCBzY2hlbWUgZGlyZWN0b3J5LCBuaW5lIGRpcmVjdG9yaWVzIChgYGFjY2Vzc19wYXR0ZXJuYGAsIGBgcXVvdGFzYGAsCiBgYHdhdGVybWFya3NgYCwgYGBjb3JlX2ZpbHRlcnNgYCwgYGBvcHNfZmlsdGVyc2BgLCBgYGZpbHRlcnNgYCwgYGBkZXN0c2BgLAogYGBzdGF0c2BgLCBhbmQgYGB0cmllZF9yZWdpb25zYGApIGFuZCB0aHJlZSBmaWxlcyAoYGBhY3Rpb25gYCwgYGB0YXJnZXRfbmlkYGAKLWFuZCBgYGFwcGx5X2ludGVydmFsYGApIGV4aXN0LgomIzQzO2FuZCBgYGFwcGx5X2ludGVydmFsX3VzYGApIGV4aXN0LgogCiBUaGUgYGBhY3Rpb25gYCBmaWxlIGlzIGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoZSBzY2hlbWUmIzM5O3MgOnJlZjpgYWN0aW9uCiAmbHQ7ZGFtb25fZGVzaWduX2RhbW9zX2FjdGlvbiZndDtgLiAgVGhlIGtleXdvcmRzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gYW5kIHJlYWQKQEAgLTc0Myw3ICYjNDM7NzQzLDcgQEAgY291bnRlcikuICBGaW5hbGx5IHRoZSB0ZW50aCBmaWVsZCAoYGBYYGApIHNob3dzIHRoZSBgYGFnZWBgIG9mIHRoZSByZWdpb24KIChyZWZlciB0byA6cmVmOmBkZXNpZ24gJmx0O2RhbW9uX2Rlc2lnbl9hZ2VfdHJhY2tpbmcmZ3Q7YCBmb3IgbW9yZSBkZXRhaWxzIG9mIHRoZQogY291bnRlcikuCiAKLUlmIHRoZSBldmVudCB3YXMgYGBkYW1vbjpkYW1vc19iZW9mcmVfYXBwbHlgYCwgdGhlIGBgcGVyZiBzY3JpcHRgYCBvdXRwdXQgd291bGQKJiM0MztJZiB0aGUgZXZlbnQgd2FzIGBgZGFtb246ZGFtb3NfYmVmb3JlX2FwcGx5YGAsIHRoZSBgYHBlcmYgc2NyaXB0YGAgb3V0cHV0IHdvdWxkCiBiZSBzb21ld2hhdCBsaWtlIGJlbG93OjoKIAogICAgIGtkYW1vbmQuMCA0NzI5MyBbMDAwXSA4MDgwMS4wNjAyMTQ6IGRhbW9uOmRhbW9zX2JlZm9yZV9hcHBseTogY3R4X2lkeD0wIHNjaGVtZV9pZHg9MCB0YXJnZXRfaWR4PTAgbnJfcmVnaW9ucz0xMSAxMjE5MzI2MDc0ODgtMTM1MTI4NzExMTY4OiAwIDEzNgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CmluZGV4IDJkYTdjYTBkM2QxN2E0Li5jMTZhM2JiMjg4ZDA3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdApAQCAtODYsNyAmIzQzOzg2LDcgQEAgVG8ga25vdyBob3cgdXNlci1zcGFjZSBjYW4gZG8gdGhlIGNvbmZpZ3VyYXRpb24gdmlhIDpyZWY6YERBTU9OIHN5c2ZzIGludGVyZmFjZQogZG9jdW1lbnRhdGlvbi4KIAogCi0gLi4gX2RhbW9uX2Rlc2lnbl92YWRkcl90YXJnZXRfcmVnaW9uc19jb25zdHJ1Y3Rpb246CiYjNDM7Li4gX2RhbW9uX2Rlc2lnbl92YWRkcl90YXJnZXRfcmVnaW9uc19jb25zdHJ1Y3Rpb246CiAKIFZNQS1iYXNlZCBUYXJnZXQgQWRkcmVzcyBSYW5nZSBDb25zdHJ1Y3Rpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkzMCwxMSAmIzQzOzkzMCwxMSBAQCBjb250cm9sIHBhcmFtZXRlcnMgZm9yIHRoZSB1c2FnZSB3b3VsZCBhbHNvIG5lZWQgdG8gYmUgb3B0aW1pemVkIGZvciB0aGUKIHB1cnBvc2UuCiAKIFRvIHN1cHBvcnQgc3VjaCBjYXNlcywgeWV0IG1vcmUgREFNT04gQVBJIHVzZXIga2VybmVsIG1vZHVsZXMgdGhhdCBwcm92aWRlIG1vcmUKLXNpbXBsZSBhbmQgb3B0aW1pemVkIHVzZXIgc3BhY2UgaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlLiAgQ3VycmVudGx5LCB0d28KLW1vZHVsZXMgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiBhbmQgTFJVIGxpc3RzIG1hbmlwdWxhdGlvbiBhcmUgcHJvdmlkZWQuICBGb3IKLW1vcmUgZGV0YWlsLCBwbGVhc2UgcmVhZCB0aGUgdXNhZ2UgZG9jdW1lbnRzIGZvciB0aG9zZQotKDpkb2M6YC9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0YCwgOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW1gIGFuZAotOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuCiYjNDM7c2ltcGxlIGFuZCBvcHRpbWl6ZWQgdXNlciBzcGFjZSBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUuICBDdXJyZW50bHksIHRocmVlCiYjNDM7bW9kdWxlcyBmb3IgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcywgcHJvYWN0aXZlIHJlY2xhbWF0aW9uLCBhbmQgTFJVIGxpc3RzCiYjNDM7bWFuaXB1bGF0aW9uIGFyZSBwcm92aWRlZC4gIEZvciBtb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3IKJiM0Mzt0aG9zZSAoOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXRgLCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbWAKJiM0MzthbmQgOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuCiAKIC4uIF9kYW1vbl9kZXNpZ25fc3BlY2lhbF9wdXJwb3NlX21vZHVsZXNfZXhjbHVzaXZpdHk6CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAwMjcyNTBlNDNjNjZmMi4uNjU4ZTRlMzI5N2IwODYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTEzNTYsMTQgJiM0MzsxMzU2LDE0IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKmRzdCwKIAlpZiAoIWkpCiAJCXJldHVybiAwOwogCi0JcmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwomIzQzOwlyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwogCWlmICghcmFuZ2VzKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpID0gMDsKIAlkYW1vbl9mb3JfZWFjaF9yZWdpb24oc3JjX3JlZ2lvbiwgc3JjKQogCQlyYW5nZXNbaSYjNDM7JiM0MztdID0gc3JjX3JlZ2lvbi0mZ3Q7YXI7CiAJZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTsKLQlrZnJlZShyYW5nZXMpOwomIzQzOwlrdmZyZWUocmFuZ2VzKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zdGF0LmMgYi9tbS9kYW1vbi9zdGF0LmMKaW5kZXggMGUxNGY1YmI4Zjc1ZDkuLmIwNWI2OGY3M2UxMGRlIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zdGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3RhdC5jCkBAIC0xMzgsNyAmIzQzOzEzOCw3IEBAIHN0YXRpYyBpbnQgZGFtb25fc3RhdF9kYW1vbl9jYWxsX2ZuKHZvaWQgKmRhdGEpCiAKIAkvKiBhdm9pZCB1bm5lY2Vzc2FyaWx5IGZyZXF1ZW50IHN0YXQgdXBkYXRlICovCiAJaWYgKHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsIGRhbW9uX3N0YXRfbGFzdF9yZWZyZXNoX2ppZmZpZXMgJiM0MzsKLQkJCQltc2Vjc190b19qaWZmaWVzKDUgKiBNU0VDX1BFUl9TRUMpKSkKJiM0MzsJCQkJc2Vjc190b19qaWZmaWVzKDUpKSkKIAkJcmV0dXJuIDA7CiAJZGFtb25fc3RhdF9sYXN0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXM7CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAppbmRleCBmY2Y3YzdmYWRiNWZlNS4uYzVmNTEyNGMzZDFmNDYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKQEAgLTE0NTYsNiAmIzQzOzE0NTYsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJZGFtb25fZnJlZV90YXJnZXQodCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFZlcmlmeSB0aGF0IGRhbW9zX3dhbGsoKSByZWplY3RzIG5ldyByZXF1ZXN0cyB3aGVuCiYjNDM7ICogd2Fsa19jb250cm9sX29ic29sZXRlIGlzIHNldC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OgomIzQzOyAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKCYjMzQ7bW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlJiMzNDspCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGUoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIGNvbnRyb2wgPSB7fTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJY3R4ID0gZGFtb25fbmV3X2N0eCgpOwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtjdHggYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogU2ltdWxhdGUgc2h1dGRvd24gcGhhc2UgKi8KJiM0MzsJY3R4LSZndDt3YWxrX2NvbnRyb2xfb2Jzb2xldGUgPSB0cnVlOwomIzQzOwomIzQzOwlyZXQgPSBkYW1vc193YWxrKGN0eCwgJmFtcDtjb250cm9sKTsKJiM0MzsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgLUVDQU5DRUxFRCk7CiYjNDM7CiYjNDM7CWRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdGFyZ2V0KSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfcmVnaW9ucyksCkBAIC0xNDg1LDYgJiM0MzsxNTEyLDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QpLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9ucyksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X2lzX2xhc3RfcmVnaW9uKSwKJiM0MzsJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZSksCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL0tjb25maWcgYi9zYW1wbGVzL2RhbW9uL0tjb25maWcKaW5kZXggY2JmOTZmZDhhOGJmOWMuLjAwYmUzZTZiZGQ2NTk5IDEwMDY0NAotLS0gYS9zYW1wbGVzL2RhbW9uL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvc2FtcGxlcy9kYW1vbi9LY29uZmlnCkBAIC0zMSw3ICYjNDM7MzEsNyBAQCBjb25maWcgU0FNUExFX0RBTU9OX01USUVSCiAJYm9vbCAmIzM0O0RBTU9OIHNhbXBsZSBtb2R1bGUgZm9yIG1lbW9yeSB0aWVyaW5nJiMzNDsKIAlkZXBlbmRzIG9uIERBTU9OICZhbXA7JmFtcDsgREFNT05fUEFERFIKIAloZWxwCi0JICBUaHBzIGJ1aWxkcyBEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmlnbi4KJiM0MzsJICBUaGlzIGJ1aWxkcyBEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmluZy4KIAogCSAgVGhlIG1vZHVsZSBhc3N1bWVzIHRoZSBzeXN0ZW0gaXMgY29uc3RydWN0ZWQgd2l0aCB0d28gTlVNQSBub2RlcywKIAkgIHdoaWNoIHNlZW1zIGFzIGxvY2FsIGFuZCByZW1vdGUgbm9kZXMgdG8gYWxsIENQVXMuICBGb3IgZXhhbXBsZSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDg1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBQYXRjaCBSZXZpZXc6IEluaXRpYWwgVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZS4gU2VlbXMgbGlrZSBpdCB0b3VjaGVzIGEgZmV3IGFyZWFzOiBkb2N1bWVudGF0aW9uLCBjb3JlIGNvZGUsIHNvbWUgc3RhdHMsIGFuZCBhIHRlc3QgZmlsZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMuCgpSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSBjaGFuZ2UgaW4gYG1tL2RhbW9uL2NvcmUuY2AuICBUaGV5JiMzOTt2ZSBzd2FwcGVkIGBrbWFsbG9jX29ianNgIGZvciBga3ZtYWxsb2Nfb2Jqc2AgYW5kIGNvcnJlc3BvbmRpbmdseSwgYGtmcmVlYCB0byBga3ZmcmVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWgsIGFsbG9jYXRvciBjaGFuZ2UuJiMzNDsgIEJ1dCB3YWl0LCB3aGF0JiMzOTtzIGBrbWFsbG9jX29ianNgPyBJcyBpdCBldmVuIGEgcmVhbCBmdW5jdGlvbj8gIEFoLCBpdCYjMzk7cyBub3QgYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24sIGl0IGlzIHByb2JhYmx5IGEgbWFjcm8uIFNvIGl0IGRvZXNuJiMzOTt0IG1hdHRlciwgaXQgaXMgYW4gYWxsb2NhdG9yIGNoYW5nZS4gT2ssIG5vdyBJJiMzOTttIGN1cmlvdXMsIGBrbWFsbG9jX29ianNgIG11c3QgYmUgYSB3cmFwcGVyIGZvciBzb21ldGhpbmcgZWxzZS4gSXMgaXQgYGttYWxsb2NfYXJyYXlgPyBMZXQgbWUgY2hlY2sgdGhlIGNvZGUuLi4gWWVwLCBkb2VzbiYjMzk7dCBtYXR0ZXIsIGl0JiMzOTtzIGFuIGFsbG9jYXRvciBjaGFuZ2UuCgpNb3Zpbmcgb24sIGBtbS9kYW1vbi9zdGF0LmNgIGhhcyBhIHNpbXBsZSBjaGFuZ2U6IGBtc2Vjc190b19qaWZmaWVzKDUgKiBNU0VDX1BFUl9TRUMpYCBiZWNvbWVzIGBzZWNzX3RvX2ppZmZpZXMoNSlgLiAgQ29tcGxldGVseSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwganVzdCBhIGRpZmZlcmVudCB3YXkgb2YgZXhwcmVzc2luZyB0aGUgc2FtZSB0aW1lIGludGVydmFsLiAgTm8gYmlnIGRlYWwgdGhlcmUuCgpUaGVuLCB0aGVyZSYjMzk7cyBhIG5ldyBLVW5pdCB0ZXN0IGFkZGVkIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBGaW5lLCBtb3JlIHRlc3RzIGFyZSBhbHdheXMgZ29vZC4KClNvLCB0aGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSByZWFsbHkgYm9pbHMgZG93biB0byBzd2FwcGluZyB0aGUgYWxsb2NhdG9yIGluIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgLiBCdXQgd2FpdCwgZG9lcyB0aGlzIGNvbnN0aXR1dGUgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IENoYW5naW5nIGZyb20gYGttYWxsb2NgIHRvIGBrdm1hbGxvY2AgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGNhbiBhbGxvdyBhbGxvY2F0aW9uIGZhaWx1cmVzIHRvIGJlIHByZXZlbnRlZCBmb3IgbGFyZ2UgYXJyYXlzLiBBY2NvcmRpbmcgdG8gdGhlIHByb21wdCBpdCBzYXlzLCAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuJiMzNDsKVGhpcyBhbGxvd3MgbGFyZ2VyIGFsbG9jYXRpb25zIHRvIHN1Y2NlZWQgYnkgZmFsbGluZyBiYWNrIHRvIHZtYWxsb2MuIFllcywgaXQgYWZmZWN0cyBleGVjdXRpb24gZmxvdy4gWWVzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLgpPaywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgcGFydCBvZiBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTEzMjg9c3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX250aF90YXJnZXQoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM0Ni0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMzQ3OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKmRzdCxcbm1tL2RhbW9uL2NvcmUuYy0xMzQ4LVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzcmMsIHVuc2lnbmVkIGxvbmcgc3JjX21pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTEzNzA9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0KFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzc2LVxubW0vZGFtb24vY29yZS5jOjEzNzc6XHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0LCBzcmMsIHNyY19taW5fcmVnaW9uX3N6KTtcbm1tL2RhbW9uL2NvcmUuYy0xMzc4LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTEzNz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTUzLVx0fVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExNTQ6XHRkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE1NS1cdGkgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyB0aGUgRnVuY3Rpb24gQ2FsbCBIaWVyYXJjaHkqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCBpcyBhY3R1YWxseSAqZG9pbmcqLiBUaGUgY29kZSYjMzk7cyBvcmdhbml6ZWQsIHNvIEkgY2FuIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxpbmcgZnVuY3Rpb25zLiBJdCBhcHBlYXJzIHRvIGJlIGNhbGxlZCBieSBgZGFtb25fY29tbWl0X3RhcmdldGAuIEFuZCBgZGFtb25fY29tbWl0X3RhcmdldGAsIGluIHR1cm4sIGlzIHRyaWdnZXJlZCBieSBgZGFtb25fY29tbWl0X2N0eGAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCBsaWtlbHkgcmVwcmVzZW50cyBhICpsb3dlci1sZXZlbCwgbW9yZSBncmFudWxhciogb3BlcmF0aW9uIHdpdGhpbiBhIGxhcmdlciBwcm9jZXNzLCBzaW5jZSBpdCYjMzk7cyBuZXN0ZWQgZGVlcCB3aXRoaW4gdGhlIGNhbGwgc3RhY2suIFRoZSAmIzM0O3JlZ2lvbnMmIzM0OyBpbiB0aGUgbmFtZSBhcmUgdGhlIGtleS4gSXQgbG9va3MgbGlrZSBgZGFtb25fY29tbWl0X3RhcmdldGAgaGFuZGxlcyBzb21lIGxhcmdlci1zY29wZWQgY29tbWl0bWVudCB0YXNrLCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgaXMgd2hhdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIGFjdHVhbCBtZW1vcnkgcmVnaW9ucywgdGhlIHNwZWNpZmljcywgdGhlIG1pbnV0aWFlLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGxlYWRpbmcgbWUgdG8gdGhpcyBjb25jbHVzaW9uLiBMZXQmIzM5O3MgZGVsdmUgaW4gdG8gdW5kZXJzdGFuZCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTg1Mj1zdHJ1Y3QgZGFtb25fY3R4IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODg4LVx0ICogaW5kaWNhdGUgaWYgdGhpcyBtYXkgYmUgY29ycnVwdGVkLiAgQ3VycmVudG9ubHkgdGhpcyBpcyBzZXQgb25seSBmb3JcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4ODk6XHQgKiBkYW1vbl9jb21taXRfY3R4KCkgZmFpbHVyZS5cbmluY2x1ZGUvbGludXgvZGFtb24uaC04OTAtXHQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA1Mj12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDUzLVx0XHRcdHN0cnVjdCBkYW1vcyAqKnNjaGVtZXMsIHNzaXplX3QgbnJfc2NoZW1lcyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA1NDppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpvbGRfY3R4LCBzdHJ1Y3QgZGFtb25fY3R4ICpuZXdfY3R4KTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDU1LWludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZCk7XG4tLVxubW0vZGFtb24vY29yZS5jPTE1Mjc9c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTU4LS8qKlxubW0vZGFtb24vY29yZS5jOjE1NTk6ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG5tbS9kYW1vbi9jb3JlLmMtMTU2MC0gKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTcwLSAqL1xubW0vZGFtb24vY29yZS5jOjE1NzE6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTU3Mi17XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDAtXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNDE6XHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQyLW91dDpcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI2Ny1cdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjY4Olx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjY5LW91dDpcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwODY9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwOTQtXHRcdHJldHVybiBOVUxMO1xubW0vZGFtb24vc3lzZnMuYzoyMDk1Olx0ZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcnVubmluZ19jdHgpO1xubW0vZGFtb24vc3lzZnMuYy0yMDk2LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjEwOT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCh2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjEyOC1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjEyOTpcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIxMzAtXHRpZiAoZXJyKVxubW0vZGFtb24vc3lzZnMuYy0yMTMxLVx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3N5c2ZzLmM6MjEzMjpcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgsIHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIxMzMtb3V0OlxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTc5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExOTItXHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTE5MzpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE5NC1cdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTk1Olx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTk2LVx0c3JjLVx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk2O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExOTctXHRzcmMtXHUwMDNlcGF1c2UgPSB0cnVlO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExOTg6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExOTktXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkc3QtXHUwMDNlcGF1c2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkaWZmIHJlbGF0ZWQgdG8gREFNT04uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGlzIHJlYWNoYWJsZSBmcm9tIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCB3aGljaCBpbiB0dXJuIGdldHMgdHJpZ2dlcmVkIGJ5IHN5c2ZzIHdyaXRlcy4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZCwgaXQgZ2l2ZXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdy4KClRoZW4gSSBub3RpY2VkIHRoZXJlJiMzOTtzIGEgbmV3IHRlc3QgYWRkZWQsIGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAsIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIHRlc3QgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIGBkYW1vc193YWxrKClgLCBiZWNhdXNlIHRoZSBwYXRjaCBzZWVtcyB0byBoYXZlIGFkZGVkIHRoaXMgdGVzdCB3aGljaCB0ZXN0cyBgZGFtb3Nfd2FsaygpYC4gSSBzaG91bGQgcHJvYmFibHkgZXhhbWluZSB0aGF0IHRlc3QgaW4gbW9yZSBkZXRhaWwgbGF0ZXIuCgpBbHJpZ2h0LCB3aGF0IGVsc2UgaGFzIGNoYW5nZWQ/IEkgbmVlZCB0byBnbyBiYWNrIG92ZXIgdGhlIGRpZmYgbW9yZSBjYXJlZnVsbHkuIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQgbG9va3MgbGlrZSBga21hbGxvY19vYmpzYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBrdm1hbGxvY19vYmpzYCBhbmQgY29ycmVzcG9uZGluZyBga2ZyZWVgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGt2ZnJlZWAgaW4gYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AuICBga21hbGxvY19vYmpzYCBkb2VzbiYjMzk7dCBzZWVtIGZhbWlsaWFyLCBJJiMzOTttIHRoaW5raW5nIGl0JiMzOTtzIHByb2JhYmx5IGEgbWFjcm8gb3IgaGVscGVyIGRlZmluZWQgd2l0aGluIERBTU9OIGl0c2VsZiwgbWF5YmUgaW4gYG1tL2RhbW9uL2NvcmUuY2Agb3Igc29tZXRoaW5nIGluY2x1ZGVkIGxpa2UgYGluY2x1ZGUvbGludXgvZGFtb24uaGAuICBMZXQgbWUgdmVyaWZ5IHRoaXMuLi53YWl0LCBJIHRoaW5rIGBrbWFsbG9jX2FycmF5YCAqaXMqIGEgc3RhbmRhcmQga2VybmVsIGZ1bmN0aW9uLiBTbyBga21hbGxvY19vYmpzYCBtdXN0IGJlIGEgREFNT04tc3BlY2lmaWMgYWJzdHJhY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jX29ianMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM2NjYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1OD1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYW4gYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjEtXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NjI6XHRwID0ga21hbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYzLVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDEtXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDI6XHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMy1cdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuYXJjaC9hcm0vbW0vcGdkLmMtMTktI2lmZGVmIENPTkZJR19BUk1fTFBBRVxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVx0XHRrbWFsbG9jX29ianMocGdkX3QsIFBUUlNfUEVSX1BHRCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVx0a2ZyZWUocGdkKVxuLS1cbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2NS17XG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYzo3NjY6XHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2Ny1cdFx0XHRcdCAgICAgTUFYX0NPVkVSQUdFX0VOVFJJRVMpO1xuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTM5MT11MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE0LVx0ICovXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzo0MTU6XHRkZXNjX2Jhc2UgPSAodTMyKSBrbWFsbG9jX29ianMoYXUxeF9kZG1hX2Rlc2NfdCwgZW50cmllcyxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNi1cdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTUzMj1hZGRfc3lzdGVtX21hcF9hZGRyZXNzZXMoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldiwgaW50IG51bV9hZGRycywgXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTUzOC1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzo1Mzk6XHRkZXYtXHUwMDNlYWRkciA9IGttYWxsb2Nfb2JqcygqZGV2LVx1MDAzZWFkZHIsIG51bV9hZGRycyk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTQwLVx0aWYoIWRldi1cdTAwM2VhZGRyKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cdFx0ICAgIGNmZy1cdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVx0aWYgKCFwYWdlcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1Olx0dmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXHRcdFx0XHRcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgJiM0MzsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVx0aWYgKGJsb2NrID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXHRpZiAoIWV2ZW50cykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1Olx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVx0aWYgKCFldmVudF9kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0Olx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jPTEyMD1zdGF0aWMgaW50IHBzZXJpZXNfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0My1cdHBkbiA9IHBjaV9nZXRfcGRuKHBkZXYpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcdHBkbi1cdTAwM2VwZV9udW1fbWFwID0ga21hbGxvY19vYmpzKCpwZG4tXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQ1LVx0aWYgKCFwZG4tXHUwMDNlcGVfbnVtX21hcClcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYz0xNTQ5PXZvaWQgX19pbml0IG1waWNfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYylcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQxLVx0LyogYWxsb2NhdGUgbWVtb3J5IHRvIHNhdmUgbXBpYyBzdGF0ZSAqL1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcdG1waWMtXHUwMDNlc2F2ZV9kYXRhID0ga21hbGxvY19vYmpzKCptcGljLVx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cdTAwM2VudW1fc291cmNlcyk7XG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQzLVx0QlVHX09OKG1waWMtXHUwMDNlc2F2ZV9kYXRhID09IE5VTEwpO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0zMD1zdGF0aWMgdm9pZCAqZGlhZzBjX3N0b3JlKHVuc2lnbmVkIGludCAqY291bnQpXG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTM3LVx0Y3B1X2NvdW50ID0gbnVtX29ubGluZV9jcHVzKCk7XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6Mzg6XHRjcHVfdmVjID0ga21hbGxvY19vYmpzKCpjcHVfdmVjLCBudW1fcG9zc2libGVfY3B1cygpKTtcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0zOS1cdGlmICghY3B1X3ZlYylcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaD0xOTA9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWRhbF9idWZmZXIgKippZGFsX2J1ZmZlcl9hcnJheV9hbGxvYyhzaXplX3Qgc2l6ZSwgaW50IHBhZ2Vfb3JkZXIpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgtMTk3LVx0Y291bnQgPSAoc2l6ZSAmIzQzOyBDQ1dfTUFYX0JZVEVfQ09VTlQgLSAxKSAvIENDV19NQVhfQllURV9DT1VOVDtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oOjE5ODpcdGlicyA9IGttYWxsb2Nfb2JqcygqaWJzLCBjb3VudCAmIzQzOyAxKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oLTE5OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYz0yNjY9c3RhdGljIGRlYnVnX2VudHJ5X3QgKioqZGVidWdfYXJlYXNfYWxsb2MoaW50IHBhZ2VzX3Blcl9hcmVhLCBpbnQgbnJfYXJlYXMpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3MC1cbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzoyNzE6XHRhcmVhcyA9IGttYWxsb2Nfb2JqcyhkZWJ1Z19lbnRyeV90ICoqLCBucl9hcmVhcyk7XG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjcyLVx0aWYgKCFhcmVhcylcbi0tXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjc1LVx0XHQvKiBHRlBfTk9XQVJOIHRvIGF2b2lkIHVzZXIgdHJpZ2dlcmFibGUgV0FSTiwgd2UgaGFuZGxlIGZhaWxzICovXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM6Mjc2Olx0XHRhcmVhc1tpXSA9IGttYWxsb2Nfb2JqcyhkZWJ1Z19lbnRyeV90ICosIHBhZ2VzX3Blcl9hcmVhLFxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3Ny1cdFx0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM9OTY0PXN0YXRpYyBfX2luaXQgc3RydWN0IGF0dHJpYnV0ZSAqKm1lcmdlX2F0dHIoc3RydWN0IGF0dHJpYnV0ZSAqKmEsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmMtOTc4LVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM6OTc5Olx0bmV3ID0ga21hbGxvY19vYmpzKHN0cnVjdCBhdHRyaWJ1dGUgKiwgaik7XG5hcmNoL3MzOTAva2VybmVsL3BlcmZfY3B1bV9jZl9ldmVudHMuYy05ODAtXHRpZiAoIW5ldylcbi0tXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM9MTA5Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqKiBfX2luaXQgYXR0cl9ldmVudF9pbml0KHN0cnVjdCBwYWlfcG11ICpwKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0xMTAxLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX3BhaS5jOjExMDI6XHRhdHRycyA9IGttYWxsb2Nfb2JqcygqYXR0cnMsIG1pbl9hdHRyICYjNDM7IDEsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0xMTAzLVx0aWYgKCFhdHRycylcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9MjAzPWludCBrdm1fczM5MF9pbXBvcnRfYnBfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTIzNC1cdGlmIChucl93cCBcdTAwM2UgMCkge1xuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjIzNTpcdFx0d3BfaW5mbyA9IGttYWxsb2Nfb2Jqcygqd3BfaW5mbywgbnJfd3AsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjM2LVx0XHRpZiAoIXdwX2luZm8pIHtcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjQxLVx0aWYgKG5yX2JwIFx1MDAzZSAwKSB7XG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MjQyOlx0XHRicF9pbmZvID0ga21hbGxvY19vYmpzKCpicF9pbmZvLCBucl9icCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNDMtXHRcdGlmICghYnBfaW5mbykge1xuLS1cbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jPTYyNT1TWVNDQUxMX0RFRklORTUodXRyYXBfaW5zdGFsbCwgdXRyYXBfZW50cnlfdCwgdHlwZSxcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYy02NTktXHRcdFx0Y3VycmVudF90aHJlYWRfaW5mbygpLVx1MDAzZXV0cmFwcyA9XG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYzo2NjA6XHRcdFx0XHRrbWFsbG9jX29ianMobG9uZywgVVRfVFJBUF9JTlNUUlVDVElPTl8zMSAmIzQzOyAxKTtcbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jLTY2MS1cdFx0XHRpZiAoIWN1cnJlbnRfdGhyZWFkX2luZm8oKS1cdTAwM2V1dHJhcHMpIHtcbi0tXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHViZF9pbml0KHZvaWQpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3MS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jOjEwNzI6XHRpcnFfcmVxX2J1ZmZlciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqLFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3My1cdFx0XHRcdCAgICAgIFVCRF9SRVFfQlVGRkVSX1NJWkUpO1xuLS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEwNzktXHR9XG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYzoxMDgwOlx0aW9fcmVxX2J1ZmZlciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqLFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA4MS1cdFx0XHRcdCAgICAgVUJEX1JFUV9CVUZGRVJfU0laRSk7XG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM9NTA3PXN0YXRpYyBzdHJ1Y3QgdmVjdG9yX3F1ZXVlICpjcmVhdGVfcXVldWUoXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTQ2LVx0XHRpZiAodnAtXHUwMDNlaGVhZGVyX3NpemUgXHUwMDNlIDApXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYzo1NDc6XHRcdFx0aW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgMyAmIzQzOyBudW1fZXh0cmFfZnJhZ3MpO1xuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTQ4LVx0XHRlbHNlXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYzo1NDk6XHRcdFx0aW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgMiAmIzQzOyBudW1fZXh0cmFfZnJhZ3MpO1xuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTUwLVx0XHRpZiAoaW92ID09IE5VTEwpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jPTQ4ND1zdGF0aWMgdm9pZCB1bWxfdmZpb19vcGVuX2RldmljZShzdHJ1Y3QgdW1sX3ZmaW9fZGV2aWNlICpkZXYpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jLTUxNi1cbmFyY2gvdW0vZHJpdmVycy92ZmlvX2tlcm4uYzo1MTc6XHRkZXYtXHUwMDNlaW50cl9jdHggPSBrbWFsbG9jX29ianMoc3RydWN0IHVtbF92ZmlvX2ludHJfY3R4LFxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jLTUxOC1cdFx0XHRcdCAgICAgZGV2LVx1MDAzZXVkZXYuaXJxX2NvdW50KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9Nzk3PXN0YXRpYyBib29sIF9faW5pdCBzZ3hfcGFnZV9jYWNoZV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgwMy1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo4MDQ6XHRzZ3hfbnVtYV9ub2RlcyA9IGttYWxsb2Nfb2Jqcygqc2d4X251bWFfbm9kZXMsIG51bV9wb3NzaWJsZV9ub2RlcygpKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04MDUtXHRpZiAoIXNneF9udW1hX25vZGVzKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rc3lzZnMuYz0zMjc9c3RhdGljIGludCBfX2luaXQgY3JlYXRlX3NldHVwX2RhdGFfbm9kZXMoc3RydWN0IGtvYmplY3QgKnBhcmVudClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3N5c2ZzLmMtMzQ2LVxuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jOjM0NzpcdGtvYmpwID0ga21hbGxvY19vYmpzKCprb2JqcCwgbnIpO1xuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jLTM0OC1cdGlmICgha29ianApIHtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTQ3MT1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE1MTYtXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTUxNzpcdFx0cG9ydHMgPSBrbWFsbG9jX29ianMoKnBvcnRzLCBzY2hlZF9wb2xsLm5yX3BvcnRzKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xNTE4LVx0XHRpZiAoIXBvcnRzKSB7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTIyMDM9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMjE4LVxuYXJjaC94ODYva3ZtL3hlbi5jOjIyMTk6XHRhbGxfZXZ0Y2huZmRzID0ga21hbGxvY19vYmpzKHN0cnVjdCBldnRjaG5mZCAqLCBuKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0yMjIwLVx0aWYgKCFhbGxfZXZ0Y2huZmRzKSB7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MjUyMT1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI1MzMtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoyNTM0Olx0YWRkcnMgPSBrbWFsbG9jX29ianMoKmFkZHJzLCBwcm9nLVx1MDAzZWxlbik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTM1LVx0aWYgKCFhZGRycylcbi0tXG5hcmNoL3g4Ni9wb3dlci9jcHUuYz0zODg9c3RhdGljIGludCBtc3JfYnVpbGRfY29udGV4dChjb25zdCB1MzIgKm1zcl9pZCwgY29uc3QgaW50IG51bSlcbi0tXG5hcmNoL3g4Ni9wb3dlci9jcHUuYy0zOTYtXG5hcmNoL3g4Ni9wb3dlci9jcHUuYzozOTc6XHRtc3JfYXJyYXkgPSBrbWFsbG9jX29ianMoc3RydWN0IHNhdmVkX21zciwgdG90YWxfbnVtKTtcbmFyY2gveDg2L3Bvd2VyL2NwdS5jLTM5OC1cdGlmICghbXNyX2FycmF5KSB7XG4tLVxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmM9MTAyPXN0YXRpYyBpbnQgYXJjaF9nbnR0YWJfdmFsbG9jKHN0cnVjdCBnbnR0YWJfdm1fYXJlYSAqYXJlYSwgdW5zaWduZWQgbnJfZnJhbWVzKVxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMtMTAzLXtcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jOjEwNDpcdGFyZWEtXHUwMDNlcHRlcyA9IGttYWxsb2Nfb2JqcygqYXJlYS1cdTAwM2VwdGVzLCBucl9mcmFtZXMpO1xuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMtMTA1LVx0aWYgKGFyZWEtXHUwMDNlcHRlcyA9PSBOVUxMKVxuLS1cbmFyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3Mvc2ltZGlzay5jPTMwOD1zdGF0aWMgaW50IF9faW5pdCBzaW1kaXNrX2luaXQodm9pZClcbi0tXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYy0zMjItXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYzozMjM6XHRzZGRldiA9IGttYWxsb2Nfb2Jqcygqc2RkZXYsIHNpbWRpc2tfY291bnQpO1xuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmMtMzI0LVx0aWYgKHNkZGV2ID09IE5VTEwpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz01Nzg9c3RhdGljIGJvb2wgYmZxcV9yZXF1ZXN0X292ZXJfbGltaXQoc3RydWN0IGJmcV9kYXRhICpiZnFkLFxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjA4LVx0XHRcdGtmcmVlKGVudGl0aWVzKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjA5Olx0XHRlbnRpdGllcyA9IGttYWxsb2Nfb2JqcygqZW50aXRpZXMsIGRlcHRoLCBHRlBfTk9JTyk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxMC1cdFx0aWYgKCFlbnRpdGllcylcbi0tXG5ibG9jay9ibGstc3RhdC5jPTEwMD1ibGtfc3RhdF9hbGxvY19jYWxsYmFjayh2b2lkICgqdGltZXJfZm4pKHN0cnVjdCBibGtfc3RhdF9jYWxsYmFjayAqKSxcbi0tXG5ibG9jay9ibGstc3RhdC5jLTEwOS1cbmJsb2NrL2Jsay1zdGF0LmM6MTEwOlx0Y2ItXHUwMDNlc3RhdCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYmxrX3JxX3N0YXQsIGJ1Y2tldHMpO1xuYmxvY2svYmxrLXN0YXQuYy0xMTEtXHRpZiAoIWNiLVx1MDAzZXN0YXQpIHtcbi0tXG5ibG9jay9mb3BzLmM9NTU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuYmxvY2svZm9wcy5jLTY3LVx0ZWxzZSB7XG5ibG9jay9mb3BzLmM6Njg6XHRcdHZlY3MgPSBrbWFsbG9jX29ianMoc3RydWN0IGJpb192ZWMsIG5yX3BhZ2VzKTtcbmJsb2NrL2ZvcHMuYy02OS1cdFx0aWYgKCF2ZWNzKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9MzUxPXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV90b2NibG9ja3Moc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSxcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM2NC1cdHRiWzBdID0gXHUwMDI2bGRiLVx1MDAzZXRvYztcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzY1Olx0dGJbMV0gPSBrbWFsbG9jX29ianMoKnRiWzFdLCAzKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY2LVx0aWYgKCF0YlsxXSkge1xuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM9MTQwNz1zdGF0aWMgaW50IGhsX2NzX2NvcHlfY2h1bmtfYXJyYXkoc3RydWN0IGhsX2RldmljZSAqaGRldixcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjItXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jOjE0MjM6XHQqY3NfY2h1bmtfYXJyYXkgPSBrbWFsbG9jX29ianMoKipjc19jaHVua19hcnJheSwgbnVtX2NodW5rcywgR0ZQX0FUT01JQyk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjQtXHRpZiAoISpjc19jaHVua19hcnJheSlcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM6MTQyNTpcdFx0KmNzX2NodW5rX2FycmF5ID0ga21hbGxvY19vYmpzKCoqY3NfY2h1bmtfYXJyYXksIG51bV9jaHVua3MpO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0xNDI2LVx0aWYgKCEqY3NfY2h1bmtfYXJyYXkpIHtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jPTMwMDU9c3RhdGljIGludCBobF9tdWx0aV9jc193YWl0X2lvY3RsKHN0cnVjdCBobF9mcHJpdiAqaHByaXYsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0zMDUzLVx0LyogYWxsb2NhdGUgYXJyYXkgZm9yIHRoZSBmZW5jZXMgKi9cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM6MzA1NDpcdGZlbmNlX2FyciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxfZmVuY2UgKiwgc2VxX2Fycl9sZW4pO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0zMDU1LVx0aWYgKCFmZW5jZV9hcnIpIHtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYz0yMDQ5PWludCBobF9kZWJ1Z2ZzX2RldmljZV9pbml0KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYpXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9kZWJ1Z2ZzLmMtMjA1NC1cdGRldl9lbnRyeS1cdTAwM2VoZGV2ID0gaGRldjtcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vZGVidWdmcy5jOjIwNTU6XHRkZXZfZW50cnktXHUwMDNlZW50cnlfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9kZWJ1Z2ZzX2VudHJ5LCBjb3VudCk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYy0yMDU2LVx0aWYgKCFkZXZfZW50cnktXHUwMDNlZW50cnlfYXJyKVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaHdfcXVldWUuYz04MjQ9c3RhdGljIGludCBleHRfYW5kX2NwdV9xdWV1ZV9pbml0KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBobF9od19xdWV1ZSAqcSxcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmMtODM5LVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9od19xdWV1ZS5jOjg0MDpcdHEtXHUwMDNlc2hhZG93X3F1ZXVlID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9jc19qb2IgKiwgSExfUVVFVUVfTEVOR1RIKTtcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaHdfcXVldWUuYy04NDEtXHRpZiAoIXEtXHUwMDNlc2hhZG93X3F1ZXVlKSB7XG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYz0zOTM4PXN0YXRpYyBpbnQgZ2F1ZGkyX3NwZWNpYWxfYmxvY2tzX2NvbmZpZyhzdHJ1Y3QgaGxfZGV2aWNlICpoZGV2KVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk0NS1cdHByb3AtXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzID0gQVJSQVlfU0laRShnYXVkaTJfc3BlY2lhbF9ibG9ja3MpO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYzozOTQ2Olx0cHJvcC1cdTAwM2VzcGVjaWFsX2Jsb2NrcyA9IGttYWxsb2Nfb2JqcygqcHJvcC1cdTAwM2VzcGVjaWFsX2Jsb2NrcyxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk0Ny1cdFx0XHRcdFx0ICAgIHByb3AtXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzKTtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NjAtXHRcdHByb3AtXHUwMDNlc2tpcF9zcGVjaWFsX2Jsb2Nrc19jZmcuYmxvY2tfdHlwZXMgPVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYzozOTYxOlx0XHRcdFx0a21hbGxvY19vYmpzKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3R5cGVzWzBdLFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYy0zOTYyLVx0XHRcdFx0XHQgICAgIEFSUkFZX1NJWkUoZ2F1ZGkyX2l0ZXJhdG9yX3NraXBfYmxvY2tfdHlwZXMpKTtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzYtXHRcdHByb3AtXHUwMDNlc2tpcF9zcGVjaWFsX2Jsb2Nrc19jZmcuYmxvY2tfcmFuZ2VzID1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmM6Mzk3NzpcdFx0XHRcdGttYWxsb2Nfb2JqcyhnYXVkaTJfaXRlcmF0b3Jfc2tpcF9ibG9ja19yYW5nZXNbMF0sXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzgtXHRcdFx0XHRcdCAgICAgQVJSQVlfU0laRShnYXVkaTJfaXRlcmF0b3Jfc2tpcF9ibG9ja19yYW5nZXMpKTtcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19jb250cm9sLmM9MzkzPXN0YXRpYyBpbnQgZmluZF9hbmRfbWFwX3VzZXJfcGFnZXMoc3RydWN0IHFhaWNfZGV2aWNlICpxZGV2LFxuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2NvbnRyb2wuYy00MjUtXHR3aGlsZSAoMSkge1xuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jOjQyNjpcdFx0cGFnZV9saXN0ID0ga21hbGxvY19vYmpzKCpwYWdlX2xpc3QsIG5yX3BhZ2VzLFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jLTQyNy1cdFx0XHRcdFx0IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYz00OTU9aW50IHJvY2tldF9qb2Jfb3BlbihzdHJ1Y3Qgcm9ja2V0X2ZpbGVfcHJpdiAqcm9ja2V0X3ByaXYpXG4tLVxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jLTQ5Ny1cdHN0cnVjdCByb2NrZXRfZGV2aWNlICpyZGV2ID0gcm9ja2V0X3ByaXYtXHUwMDNlcmRldjtcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYzo0OTg6XHRzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKipzY2hlZHMgPSBrbWFsbG9jX29ianMoKnNjaGVkcyxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy00OTktXHRcdFx0XHRcdFx0XHQgcmRldi1cdTAwM2VudW1fY29yZXMpO1xuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYz01NT1zdGF0aWMgX19pbml0IGludCBhY3BpX3BhcnNlX21ycm0oc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSlcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmMtODMtXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmM6ODQ6XHRtcnJtX21lbV9yYW5nZV9lbnRyeSA9IGttYWxsb2Nfb2JqcygqbXJybV9tZW1fcmFuZ2VfZW50cnksIG1yZV9jb3VudCxcbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYy04NS1cdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jPTc5OD1pbnQgYWNwaV92aWRlb19nZXRfbGV2ZWxzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMtODMxLVx0ICovXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jOjgzMjpcdGJyLVx1MDAzZWxldmVscyA9IGttYWxsb2Nfb2JqcygqYnItXHUwMDNlbGV2ZWxzLFxuZHJpdmVycy9hY3BpL2FjcGlfdmlkZW8uYy04MzMtXHRcdFx0XHQgIG9iai1cdTAwM2VwYWNrYWdlLmNvdW50ICYjNDM7IEFDUElfVklERU9fRklSU1RfTEVWRUwpO1xuLS1cbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jPTMxNT1zdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wZXJmb3JtYW5jZV9zdGF0ZXMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcilcbi0tXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYy0zNDMtXHRwci1cdTAwM2VwZXJmb3JtYW5jZS1cdTAwM2VzdGF0ZXMgPVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmM6MzQ0Olx0ICAgIGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcHgsIHBzcy1cdTAwM2VwYWNrYWdlLmNvdW50KTtcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jLTM0NS1cdGlmICghcHItXHUwMDNlcGVyZm9ybWFuY2UtXHUwMDNlc3RhdGVzKSB7XG4tLVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmM9NDg1PXN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfc3RhdGVzKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpXG4tLVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMtNTE0LVx0cHItXHUwMDNldGhyb3R0bGluZy5zdGF0ZXNfdHNzID1cbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jOjUxNTpcdCAgICBrbWFsbG9jX29ianMoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3R4X3RzcywgdHNzLVx1MDAzZXBhY2thZ2UuY291bnQpO1xuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMtNTE2LVx0aWYgKCFwci1cdTAwM2V0aHJvdHRsaW5nLnN0YXRlc190c3MpIHtcbi0tXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM9MzU5PXN0YXRpYyBpbnQgY29tcG9uZW50X21hdGNoX3JlYWxsb2Moc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2gsIHNpemVfdCBudW0pXG4tLVxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTM2NS1cbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYzozNjY6XHRuZXcgPSBrbWFsbG9jX29ianMoKm5ldywgbnVtKTtcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYy0zNjctXHRpZiAoIW5ldylcbi0tXG5kcml2ZXJzL2Jhc2UvbWFwLmM9MzI9aW50IGtvYmpfbWFwKHN0cnVjdCBrb2JqX21hcCAqZG9tYWluLCBkZXZfdCBkZXYsIHVuc2lnbmVkIGxvbmcgcmFuZ2UsXG4tLVxuZHJpdmVycy9iYXNlL21hcC5jLTQzLVxuZHJpdmVycy9iYXNlL21hcC5jOjQ0Olx0cCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcHJvYmUsIG4pO1xuZHJpdmVycy9iYXNlL21hcC5jLTQ1LVx0aWYgKHAgPT0gTlVMTClcbi0tXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmM9MTI0PWludCByZWdjYWNoZV9pbml0KHN0cnVjdCByZWdtYXAgKm1hcCwgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMtMTk5LVx0XHRtYXAtXHUwMDNlbnVtX3JlZ19kZWZhdWx0cyA9IGNvdW50O1xuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jOjIwMDpcdFx0bWFwLVx1MDAzZXJlZ19kZWZhdWx0cyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcmVnX2RlZmF1bHQsIGNvdW50KTtcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUuYy0yMDEtXHRcdGlmICghbWFwLVx1MDAzZXJlZ19kZWZhdWx0cylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0zNDA9c3RhdGljIGludCBsb19yd19haW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMzU0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MzU1Olx0XHRjbWQtXHUwMDNlYnZlYyA9IGttYWxsb2Nfb2JqcygqY21kLVx1MDAzZWJ2ZWMsIG5yX2J2ZWMsIEdGUF9OT0lPKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM1Ni1cdFx0aWYgKCFjbWQtXHUwMDNlYnZlYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3JiZC5jPTI1MzE9c3RhdGljIGludCByYmRfaW1nX2ZpbGxfcmVxdWVzdChzdHJ1Y3QgcmJkX2ltZ19yZXF1ZXN0ICppbWdfcmVxLFxuLS1cbmRyaXZlcnMvYmxvY2svcmJkLmMtMjU2Ny1cdGZvcl9lYWNoX29ial9yZXF1ZXN0KGltZ19yZXEsIG9ial9yZXEpIHtcbmRyaXZlcnMvYmxvY2svcmJkLmM6MjU2ODpcdFx0b2JqX3JlcS1cdTAwM2VidmVjX3Bvcy5idmVjcyA9IGttYWxsb2Nfb2Jqcygqb2JqX3JlcS1cdTAwM2VidmVjX3Bvcy5idmVjcyxcbmRyaXZlcnMvYmxvY2svcmJkLmMtMjU2OS1cdFx0XHRcdFx0XHQgICAgICAgb2JqX3JlcS1cdTAwM2VidmVjX2NvdW50LFxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE2MD1zdGF0aWMgaW50IHZpcnRibGtfc2V0dXBfZGlzY2FyZF93cml0ZV96ZXJvZXNfZXJhc2Uoc3RydWN0IHJlcXVlc3QgKnJlcSwgYm9vbCB1bm1hcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNzAtXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNzE6XHRyYW5nZSA9IGttYWxsb2Nfb2JqcygqcmFuZ2UsIHNlZ21lbnRzLCBHRlBfQVRPTUlDKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE3Mi1cdGlmICghcmFuZ2UpXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9OTYwPXN0YXRpYyBpbnQgaW5pdF92cShzdHJ1Y3QgdmlydGlvX2JsayAqdmJsaylcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy05OTUtXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzo5OTY6XHR2YmxrLVx1MDAzZXZxcyA9IGttYWxsb2Nfb2JqcygqdmJsay1cdTAwM2V2cXMsIG51bV92cXMpO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtOTk3LVx0aWYgKCF2YmxrLVx1MDAzZXZxcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAwLVx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBudW1fdnFzKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjEwMDE6XHR2cXMgPSBrbWFsbG9jX29ianMoKnZxcywgbnVtX3Zxcyk7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAyLVx0aWYgKCF2cXNfaW5mbyB8fCAhdnFzKSB7XG4tLVxuZHJpdmVycy9ibG9jay96MnJhbS5jPTE0Mz1zdGF0aWMgaW50IHoyX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3oycmFtLmMtMTg5LVx0XHRcdHoycmFtX21hcCA9XG5kcml2ZXJzL2Jsb2NrL3oycmFtLmM6MTkwOlx0XHRcdCAgICBrbWFsbG9jX29ianMoejJyYW1fbWFwWzBdLCBzaXplIC8gWjJSQU1fQ0hVTktTSVpFKTtcbmRyaXZlcnMvYmxvY2svejJyYW0uYy0xOTEtXHRcdFx0aWYgKHoycmFtX21hcCA9PSBOVUxMKSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTUxOD1zdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUzMTpcdFx0Y21kLVx1MDAzZWJ2ZWMgPSBrbWFsbG9jX29ianMoKmNtZC1cdTAwM2VidmVjLCBucl9idmVjLCBHRlBfTk9JTyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMyLVx0XHRpZiAoIWNtZC1cdTAwM2VidmVjKVxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jPTE4NDI9c3RhdGljIGludCBidGludGVsX3BjaWVfc2V0dXBfdHhxX2J1ZnMoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhLFxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTE4NDgtXHQvKiBBbGxvY2F0ZSB0aGUgc2FtZSBudW1iZXIgb2YgYnVmZmVycyBhcyB0aGUgZGVzY3JpcHRvciAqL1xuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM6MTg0OTpcdHR4cS1cdTAwM2VidWZzID0ga21hbGxvY19vYmpzKCpidWYsIHR4cS1cdTAwM2Vjb3VudCk7XG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xODUwLVx0aWYgKCF0eHEtXHUwMDNlYnVmcylcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYz0xODg2PXN0YXRpYyBpbnQgYnRpbnRlbF9wY2llX3NldHVwX3J4cV9idWZzKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSxcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xODkyLVx0LyogQWxsb2NhdGUgdGhlIHNhbWUgbnVtYmVyIG9mIGJ1ZmZlcnMgYXMgdGhlIGRlc2NyaXB0b3IgKi9cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jOjE4OTM6XHRyeHEtXHUwMDNlYnVmcyA9IGttYWxsb2Nfb2JqcygqYnVmLCByeHEtXHUwMDNlY291bnQpO1xuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMTg5NC1cdGlmICghcnhxLVx1MDAzZWJ1ZnMpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz02MzI9c3RhdGljIGludCBmc2xfbWNfZGV2aWNlX2dldF9tbWlvX3JlZ2lvbnMoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTY1NS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NjU2Olx0cmVnaW9ucyA9IGttYWxsb2Nfb2JqcyhyZWdpb25zWzBdLCBvYmpfZGVzYy1cdTAwM2VyZWdpb25fY291bnQpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy02NTctXHRpZiAoIXJlZ2lvbnMpXG4tLVxuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jPTY0PXN0YXRpYyBpbnQgYWdwXzNfNV9pc29jaHJvbm91c19ub2RlX2VuYWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsXG4tLVxuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jLTk0LVx0ICovXG5kcml2ZXJzL2NoYXIvYWdwL2lzb2NoLmM6OTU6XHRtYXN0ZXIgPSBrbWFsbG9jX29ianMoKm1hc3RlciwgbmRldnMpO1xuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jLTk2LVx0aWYgKG1hc3RlciA9PSBOVUxMKSB7XG4tLVxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYz0zNjk9c3RhdGljIGludCB1bmlub3J0aF9jcmVhdGVfZ2F0dF90YWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpXG4tLVxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDYtXG5kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jOjQwNzpcdHVuaW5vcnRoX3ByaXYucGFnZXNfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIDEgXHUwMDNjXHUwMDNjIHBhZ2Vfb3JkZXIpO1xuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDgtXHRpZiAodW5pbm9ydGhfcHJpdi5wYWdlc19hcnIgPT0gTlVMTClcbi0tXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYz03NTA9aW50IGlwbWlfc21pX3dhdGNoZXJfcmVnaXN0ZXIoc3RydWN0IGlwbWlfc21pX3dhdGNoZXIgKndhdGNoZXIpXG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzc5LVx0aWYgKGNvdW50IFx1MDAzZSAwKSB7XG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYzo3ODA6XHRcdGludGVyZmFjZXMgPSBrbWFsbG9jX29ianMoKmludGVyZmFjZXMsIGNvdW50KTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc4MS1cdFx0aWYgKCFpbnRlcmZhY2VzKSB7XG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzgzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmM6Nzg0Olx0XHRcdGRldmljZXMgPSBrbWFsbG9jX29ianMoKmRldmljZXMsIGNvdW50KTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc4NS1cdFx0XHRpZiAoIWRldmljZXMpIHtcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz0xODEwPXN0YXRpYyBpbnQgaW5pdF92cXMoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldilcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xODE5LVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMDpcdHZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3F1ZXVlcyk7XG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xODIxLVx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBucl9xdWV1ZXMpO1xuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMjpcdHBvcnRkZXYtXHUwMDNlaW5fdnFzID0ga21hbGxvY19vYmpzKHN0cnVjdCB2aXJ0cXVldWUgKiwgbnJfcG9ydHMpO1xuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMzpcdHBvcnRkZXYtXHUwMDNlb3V0X3ZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3BvcnRzKTtcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE4MjQtXHRpZiAoIXZxcyB8fCAhdnFzX2luZm8gfHwgIXBvcnRkZXYtXHUwMDNlaW5fdnFzIHx8ICFwb3J0ZGV2LVx1MDAzZW91dF92cXMpIHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jPTQ3PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIG9mX2Nsa19idWxrX2dldF9hbGwoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY2xrL2Nsay1idWxrLmMtNTgtXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jOjU5Olx0Y2xrX2J1bGsgPSBrbWFsbG9jX29ianMoKmNsa19idWxrLCBudW1fY2xrcyk7XG5kcml2ZXJzL2Nsay9jbGstYnVsay5jLTYwLVx0aWYgKCFjbGtfYnVsaylcbi0tXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jPTE4Mjg9c3RhdGljIHZvaWQgX19pbml0IHN0bTMyZjRfcmNjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTctXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jOjE4NTg6XHRjbGtzID0ga21hbGxvY19vYmpzKCpjbGtzLCBkYXRhLVx1MDAzZWdhdGVzX251bSAmIzQzOyBzdG0zMmZ4X2VuZF9wcmltYXJ5X2Nsayk7XG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTktXHRpZiAoIWNsa3MpXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYz03NDM9aW50IG9mX2RhdmluY2lfcGxsX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYy03ODQtXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BsbC5jOjc4NTpcdFx0Y2xrcyA9IGttYWxsb2Nfb2JqcygqY2xrcywgbl9jbGtzKTtcbmRyaXZlcnMvY2xrL2RhdmluY2kvcGxsLmMtNzg2LVx0XHRpZiAoIWNsa3MpIHtcbi0tXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BzYy5jPTM2ND1fX2RhdmluY2lfcHNjX3JlZ2lzdGVyX2Nsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wc2MuYy0zNzgtXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BzYy5jOjM3OTpcdGNsa3MgPSBrbWFsbG9jX29ianMoKmNsa3MsIG51bV9jbGtzKTtcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmMtMzgwLVx0aWYgKCFjbGtzKSB7XG4tLVxuZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjEwLmM9MzY5Nz1zdGF0aWMgdm9pZCB0ZWdyYTIxMF9tYmlzdF9jbGtfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDctXG5kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMTAuYzozNzA4Olx0XHRjbGtfZGF0YSA9IGttYWxsb2Nfb2JqcygqY2xrX2RhdGEsIG51bV9jbGtzKTtcbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDktXHRcdGlmIChXQVJOX09OKCFjbGtfZGF0YSkpXG4tLVxuZHJpdmVycy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmM9MTU1PXN0YXRpYyBpbnQgbmlfNjcweF9hdXRvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jLTIwMC1cbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jOjIwMTpcdFx0cmFuZ2VfdGFibGVfbGlzdCA9IGttYWxsb2Nfb2JqcygqcmFuZ2VfdGFibGVfbGlzdCwgMzIpO1xuZHJpdmVycy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMtMjAyLVx0XHRpZiAoIXJhbmdlX3RhYmxlX2xpc3QpXG4tLVxuZHJpdmVycy9jcHVmcmVxL2JtaXBzLWNwdWZyZXEuYz02Nj1ibWlwc19jcHVmcmVxX2dldF9mcmVxX3RhYmxlKGNvbnN0IHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KVxuLS1cbmRyaXZlcnMvY3B1ZnJlcS9ibWlwcy1jcHVmcmVxLmMtNzMtXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jOjc0Olx0dGFibGUgPSBrbWFsbG9jX29ianMoKnRhYmxlLCBwcml2LVx1MDAzZW1heF9mcmVxcyAmIzQzOyAxKTtcbmRyaXZlcnMvY3B1ZnJlcS9ibWlwcy1jcHVmcmVxLmMtNzUtXHRpZiAoIXRhYmxlKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz0xMzQ9c3B1X3NrY2lwaGVyX3J4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDMtXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6MTQ0Olx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDUtXHRpZiAoIW1zc2ctXHUwMDNlc3B1LmRzdClcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9MTk3PXNwdV9za2NpcGhlcl90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMjA2LVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjIwNzpcdG1zc2ctXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVx1MDAzZWdmcCk7XG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMjA4LVx0aWYgKHVubGlrZWx5KCFtc3NnLVx1MDAzZXNwdS5zcmMpKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz01MjQ9c3B1X2FoYXNoX3J4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01MzItXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6NTMzOlx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01MzQtXHRpZiAoIW1zc2ctXHUwMDNlc3B1LmRzdClcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9NTc1PXNwdV9haGFzaF90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg2LVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjU4NzpcdG1zc2ctXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVx1MDAzZWdmcCk7XG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg4LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5zcmMpXG4tLVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTEwMzg9c3RhdGljIGludCBzcHVfYWVhZF9yeF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTA3NS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMDc2Olx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMDc3LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5kc3QpXG4tLVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTExNTc9c3RhdGljIGludCBzcHVfYWVhZF90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTE3Ni1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMTc3Olx0bXNzZy1cdTAwM2VzcHUuc3JjID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgdHhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMTc4LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5zcmMpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM9MzA2PXN0YXRpYyBzdHJ1Y3Qgc2xhX2J1ZmZlcl9oZHIgKnNsYV9idWZmZXJfbWFwKHN0cnVjdCBzbGFfYWRkcl90IHNsYSlcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy0zMzItXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzozMzM6XHRcdHN0cnVjdCBwYWdlICoqcHAgPSBrbWFsbG9jX29ianMocHBbMF0sIG5wYWdlcyk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy0zMzQtXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RlbGVtZXRyeS5jPTU4PXN0YXRpYyBpbnQgYWRmX3RsX2FsbG9jX21lbShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NjkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGttYWxsb2Nfb2Jqc2AgYW5kIGBrdm1hbGxvY19vYmpzYCBNYWNyb3MqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhpcyBga21hbGxvY19vYmpzYCBtYWNybywgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGVpdGhlciBzb21ldGhpbmcgbmV3IGluIGEgcmVjZW50IHBhdGNoLCBvciBpdCYjMzk7cyBhIHN0YW5kYXJkIGtlcm5lbCBjb25zdHJ1Y3QgSSYjMzk7bSBqdXN0IG5vdCBpbW1lZGlhdGVseSBmYW1pbGlhciB3aXRoLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgc3dhcHBlZCBvdXQgZm9yIGBrdm1hbGxvY19vYmpzYC4gT2theSwgaG9sZCBvbiwgaXMgKnRoYXQqIGFsc28gYSBtYWNybz8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB3aGF0IHRoZXNlIGFyZSBkb2luZy4gVGltZSB0byBjaGVjayBvdXQgdGhlIGRlZmluaXRpb24gb2YgYGt2bWFsbG9jX29ianNgIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBga21hbGxvY19vYmpzYCBpcyBiZWluZyByZXBsYWNlZCwgYW5kIHdoYXQgc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBjaGFuZ2UgYXJlIGludGVuZGVkIHRvIGJyaW5nIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1hbGxvY19vYmpzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3ODUgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYz0zMzc9YXNtbGlua2FnZSBsb25nIHN5c19vYWJpX3NlbXRpbWVkb3AoaW50IHNlbWlkLFxuLS1cbmFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYy0zNTEtXHRcdHJldHVybiAtRUlOVkFMO1xuYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jOjM1MjpcdHNvcHMgPSBrdm1hbGxvY19vYmpzKCpzb3BzLCBuc29wcyk7XG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMzUzLVx0aWYgKCFzb3BzKVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jPTczND1pbml0aWFsaXplX3JlbG9jYXRpb25faGFzaHRhYmxlKHVuc2lnbmVkIGludCBudW1fcmVsb2NhdGlvbnMsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzU1LVx0LyogTnVtYmVyIG9mIHJlbG9jYXRpb25zIG1heSBiZSBsYXJnZSwgc28ga3ZtYWxsb2MgaXQgKi9cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjc1NjpcdCpyZWxvY2F0aW9uX2hhc2h0YWJsZSA9IGt2bWFsbG9jX29ianMoKipyZWxvY2F0aW9uX2hhc2h0YWJsZSxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTc1Ny1cdFx0XHRcdFx0ICAgICAgaGFzaHRhYmxlX3NpemUpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYz0yNDQ9c3RhdGljIGludCBwYWlfYWxsb2NfY3B1KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGNwdSlcbi0tXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmMtMjkwLVx0XHR9XG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM6MjkxOlx0XHRjcHVtcC1cdTAwM2VzYXZlID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFpX3VzZXJkYXRhLFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX3BhaS5jLTI5Mi1cdFx0XHRcdFx0ICAgIHBhaV9wbXVbaWR4XS5udW1fYXZhaWwgJiM0MzsgMSk7XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmM9NTg5PWludCBrdm1fdmNwdV9pb2N0bF9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jLTYwNC1cbmFyY2gveDg2L2t2bS9jcHVpZC5jOjYwNTpcdFx0ZTIgPSBrdm1hbGxvY19vYmpzKCplMiwgY3B1aWQtXHUwMDNlbmVudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTYwNi1cdFx0aWYgKCFlMikge1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODUxPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5MDQtXHR9XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzkwNTpcdGFkZHJzID0ga3ZtYWxsb2Nfb2JqcygqYWRkcnMsIHByb2ctXHUwMDNlbGVuICYjNDM7IDEpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5MDYtXHRpZiAoIWFkZHJzKVxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tcHJvZmlsZS5jPTc2PWludCBibGtfY3J5cHRvX3Byb2ZpbGVfaW5pdChzdHJ1Y3QgYmxrX2NyeXB0b19wcm9maWxlICpwcm9maWxlLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tcHJvZmlsZS5jLTEyNC1cdHByb2ZpbGUtXHUwMDNlc2xvdF9oYXNodGFibGUgPVxuYmxvY2svYmxrLWNyeXB0by1wcm9maWxlLmM6MTI1Olx0XHRrdm1hbGxvY19vYmpzKHByb2ZpbGUtXHUwMDNlc2xvdF9oYXNodGFibGVbMF0sIHNsb3RfaGFzaHRhYmxlX3NpemUpO1xuYmxvY2svYmxrLWNyeXB0by1wcm9maWxlLmMtMTI2LVx0aWYgKCFwcm9maWxlLVx1MDAzZXNsb3RfaGFzaHRhYmxlKVxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3VidWYuYz03OD1zdHJ1Y3QgZG1hX2J1ZiAqYW1keGRuYV9nZXRfdWJ1ZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3VidWYuYy0xMzYtXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV91YnVmLmM6MTM3Olx0dWJ1Zi1cdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoKnVidWYtXHUwMDNlcGFnZXMsIHVidWYtXHUwMDNlbnJfcGFnZXMpO1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfdWJ1Zi5jLTEzOC1cdGlmICghdWJ1Zi1cdTAwM2VwYWdlcykge1xuLS1cbmRyaXZlcnMvYWNjZWwvZXRob3N1L2V0aG9zdV9qb2IuYz00ODg9aW50IGV0aG9zdV9pb2N0bF9zdWJtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKVxuLS1cbmRyaXZlcnMvYWNjZWwvZXRob3N1L2V0aG9zdV9qb2IuYy00OTktXHRzdHJ1Y3QgZHJtX2V0aG9zdV9qb2IgX19mcmVlKGt2ZnJlZSkgKmpvYnMgPVxuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2pvYi5jOjUwMDpcdFx0a3ZtYWxsb2Nfb2Jqcygqam9icywgYXJncy1cdTAwM2Vqb2JfY291bnQpO1xuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2pvYi5jLTUwMS1cdGlmICgham9icylcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL21lbW9yeS5jPTIzMTU9c3RhdGljIGludCBnZXRfdXNlcl9tZW1vcnkoc3RydWN0IGhsX2RldmljZSAqaGRldiwgdTY0IGFkZHIsIHU2NCBzaXplLFxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vbWVtb3J5LmMtMjMyNS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vbWVtb3J5LmM6MjMyNjpcdHVzZXJwdHItXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5wYWdlcyk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL21lbW9yeS5jLTIzMjctXHRpZiAoIXVzZXJwdHItXHUwMDNlcGFnZXMpXG4tLVxuZHJpdmVycy9hY2NlbC9pdnB1L2l2cHVfZ2VtX3VzZXJwdHIuYz02NT1pdnB1X2NyZWF0ZV91c2VycHRyX2RtYWJ1ZihzdHJ1Y3QgaXZwdV9kZXZpY2UgKnZkZXYsIHZvaWQgX191c2VyICp1c2VyX3B0cixcbi0tXG5kcml2ZXJzL2FjY2VsL2l2cHUvaXZwdV9nZW1fdXNlcnB0ci5jLTc5LVxuZHJpdmVycy9hY2NlbC9pdnB1L2l2cHVfZ2VtX3VzZXJwdHIuYzo4MDpcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcGFnZXMsIG5yX3BhZ2VzKTtcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2dlbV91c2VycHRyLmMtODEtXHRpZiAoIXBhZ2VzKVxuLS1cbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYz01OT1yb2NrZXRfY29weV90YXNrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy03My1cbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYzo3NDpcdHJqb2ItXHUwMDNldGFza3MgPSBrdm1hbGxvY19vYmpzKCpyam9iLVx1MDAzZXRhc2tzLCBqb2ItXHUwMDNldGFza19jb3VudCk7XG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNzUtXHRpZiAoIXJqb2ItXHUwMDNldGFza3MpIHtcbi0tXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmM9NTkxPWludCByb2NrZXRfaW9jdGxfc3VibWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNjEwLVxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jOjYxMTpcdGpvYnMgPSBrdm1hbGxvY19vYmpzKCpqb2JzLCBhcmdzLVx1MDAzZWpvYl9jb3VudCk7XG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNjEyLVx0aWYgKCFqb2JzKSB7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTUxPWludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtOTMtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6OTQ6XHRkZXYtXHUwMDNlem9uZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBudWxsYl96b25lLCBkZXYtXHUwMDNlbnJfem9uZXMsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtOTUtXHRcdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tLVxuZHJpdmVycy9kbWEtYnVmL3N0LWRtYS1mZW5jZS1jaGFpbi5jPTEwOD1zdGF0aWMgaW50IGZlbmNlX2NoYWluc19pbml0KHN0cnVjdCBmZW5jZV9jaGFpbnMgKmZjLCB1bnNpZ25lZCBpbnQgY291bnQsXG4tLVxuZHJpdmVycy9kbWEtYnVmL3N0LWRtYS1mZW5jZS1jaGFpbi5jLTExMy1cbmRyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtY2hhaW4uYzoxMTQ6XHRmYy1cdTAwM2VjaGFpbnMgPSBrdm1hbGxvY19vYmpzKCpmYy1cdTAwM2VjaGFpbnMsIGNvdW50LCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG5kcml2ZXJzL2RtYS1idWYvc3QtZG1hLWZlbmNlLWNoYWluLmMtMTE1LVx0aWYgKCFmYy1cdTAwM2VjaGFpbnMpXG4tLVxuZHJpdmVycy9kbWEtYnVmL3N0LWRtYS1mZW5jZS1jaGFpbi5jLTExNy1cbmRyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtY2hhaW4uYzoxMTg6XHRmYy1cdTAwM2VmZW5jZXMgPSBrdm1hbGxvY19vYmpzKCpmYy1cdTAwM2VmZW5jZXMsIGNvdW50LCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG5kcml2ZXJzL2RtYS1idWYvc3QtZG1hLWZlbmNlLWNoYWluLmMtMTE5LVx0aWYgKCFmYy1cdTAwM2VmZW5jZXMpIHtcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTE5MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBpbml0X3VkbWFidWYoc3RydWN0IHVkbWFidWYgKnVidWYsIHBnb2ZmX3QgcGdjbnQpXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5Mi17XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjE5MzpcdHVidWYtXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKCp1YnVmLVx1MDAzZXBhZ2VzLCBwZ2NudCk7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5NC1cdGlmICghdWJ1Zi1cdTAwM2VwYWdlcylcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5Ni1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MTk3Olx0dWJ1Zi1cdTAwM2VwaW5uZWRfZm9saW9zID0ga3ZtYWxsb2Nfb2JqcygqdWJ1Zi1cdTAwM2VwaW5uZWRfZm9saW9zLCBwZ2NudCk7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5OC1cdGlmICghdWJ1Zi1cdTAwM2VwaW5uZWRfZm9saW9zKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jPTE2ND1zdGF0aWMgaW50IGFtZGdwdV9jc19wYXNzMShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYy0xODItXHRwLVx1MDAzZW5jaHVua3MgPSBjcy1cdTAwM2Vpbi5udW1fY2h1bmtzO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmM6MTgzOlx0cC1cdTAwM2VjaHVua3MgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBhbWRncHVfY3NfY2h1bmssIHAtXHUwMDNlbmNodW5rcyk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYy0xODQtXHRpZiAoIXAtXHUwMDNlY2h1bmtzKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYz0yNTYzPXN0YXRpYyBpbnQgY3JpdV9yZXN0b3JlX2JvcyhzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYy0yNTc5LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYzoyNTgwOlx0Ym9fYnVja2V0cyA9IGt2bWFsbG9jX29ianMoKmJvX2J1Y2tldHMsIGFyZ3MtXHUwMDNlbnVtX2Jvcyk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jLTI1ODEtXHRpZiAoIWJvX2J1Y2tldHMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYy0yNTk3LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYzoyNTk4Olx0Ym9fcHJpdnMgPSBrdm1hbGxvY19vYmpzKCpib19wcml2cywgYXJncy1cdTAwM2VudW1fYm9zKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmMtMjU5OS1cdGlmICghYm9fcHJpdnMpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jPTY2NT1zdHJ1Y3QgcGFnZSAqKmRybV9nZW1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtNjg2LVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYzo2ODc6XHRwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtNjg4LVx0aWYgKHBhZ2VzID09IE5VTEwpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYz04MzM9aW50IGRybV9nZW1fb2JqZWN0c19sb29rdXAoc3RydWN0IGRybV9maWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYm9faGFuZGxlcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jLTg0NC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmM6ODQ1Olx0b2JqcyA9IGt2bWFsbG9jX29ianMoKm9ianMsIGNvdW50KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtODQ2LVx0aWYgKCFvYmpzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTM5Mz1pbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0ODgtXHRcdHN2bV9wYWdlcy1cdTAwM2VkbWFfYWRkciA9XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0ODk6XHRcdFx0a3ZtYWxsb2Nfb2Jqcygqc3ZtX3BhZ2VzLVx1MDAzZWRtYV9hZGRyLCBucGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkwLVx0XHRpZiAoIXN2bV9wYWdlcy1cdTAwM2VkbWFfYWRkcikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmM9NjY2PXN0YXRpYyBpbnQgZXRuYXZpdl9nZW1fdXNlcnB0cl9nZXRfcGFnZXMoc3RydWN0IGV0bmF2aXZfZ2VtX29iamVjdCAqZXRuYXZpdl9vYmopXG4tLVxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYy02NzctXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jOjY3ODpcdHB2ZWMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5wYWdlcyk7XG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTY3OS1cdGlmICghcHZlYylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jPTExMj1zdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmV0bmF2aXZfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmMtMTI4LVx0ZXRuYXZpdl9vYmotXHUwMDNlc2d0ID0gc2d0O1xuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fcHJpbWUuYzoxMjk6XHRldG5hdml2X29iai1cdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmMtMTMwLVx0aWYgKCFldG5hdml2X29iai1cdTAwM2VwYWdlcykge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1Ym1pdC5jPTQxMD1pbnQgZXRuYXZpdl9pb2N0bF9nZW1fc3VibWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmMtNDY4LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9zdWJtaXQuYzo0Njk6XHRib3MgPSBrdm1hbGxvY19vYmpzKCpib3MsIGFyZ3MtXHUwMDNlbnJfYm9zKTtcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1Ym1pdC5jOjQ3MDpcdHJlbG9jcyA9IGt2bWFsbG9jX29ianMoKnJlbG9jcywgYXJncy1cdTAwM2Vucl9yZWxvY3MpO1xuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmM6NDcxOlx0cG1ycyA9IGt2bWFsbG9jX29ianMoKnBtcnMsIGFyZ3MtXHUwMDNlbnJfcG1ycyk7XG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9zdWJtaXQuYy00NzItXHRzdHJlYW0gPSBrdm1hbGxvY19hcnJheSgxLCBhcmdzLVx1MDAzZXN0cmVhbV9zaXplLCBHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM9NDE2PXN0YXRpYyBkbWFfYWRkcl90ICpnMmRfdXNlcnB0cl9nZXRfZG1hX2FkZHIoc3RydWN0IGcyZF9kYXRhICpnMmQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTQ3My1cdG5wYWdlcyA9IChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6NDc0Olx0ZzJkX3VzZXJwdHItXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKCpnMmRfdXNlcnB0ci1cdTAwM2VwYWdlcywgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy00NzUtXHRpZiAoIWcyZF91c2VycHRyLVx1MDAzZXBhZ2VzKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM9Mjc1PXN0YXRpYyB2b2lkICppOTE1X2dlbV9vYmplY3RfbWFwX3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0zMTYtXHRcdC8qIFRvbyBiaWcgZm9yIHN0YWNrIC0tIGFsbG9jYXRlIHRlbXBvcmFyeSBhcnJheSBpbnN0ZWFkICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYzozMTc6XHRcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcGFnZXMsIG5fcGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmMtMzE4LVx0XHRpZiAoIXBhZ2VzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmM9MjM0PWludCBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9zdWJtaXRfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMtMjYwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYzoyNjE6XHRwdmVjID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBudW1fcGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYy0yNjItXHRpZiAoIXB2ZWMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYz01MjQ9c3RhdGljIGludCBsaXZlX2h3c3BfZW5naW5lKHZvaWQgKmFyZylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jLTUzOC1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5lLmM6NTM5Olx0dGltZWxpbmVzID0ga3ZtYWxsb2Nfb2JqcygqdGltZWxpbmVzLCBOVU1fVElNRUxJTkVTICogSTkxNV9OVU1fRU5HSU5FUyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jLTU0MC1cdGlmICghdGltZWxpbmVzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5lLmM9NTk2PXN0YXRpYyBpbnQgbGl2ZV9od3NwX2FsdGVybmF0ZSh2b2lkICphcmcpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy02MTEtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jOjYxMjpcdHRpbWVsaW5lcyA9IGt2bWFsbG9jX29ianMoKnRpbWVsaW5lcywgTlVNX1RJTUVMSU5FUyAqIEk5MTVfTlVNX0VOR0lORVMpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy02MTMtXHRpZiAoIXRpbWVsaW5lcylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zaG1lbV91dGlscy5jPTU5PXZvaWQgKnNobWVtX3Bpbl9tYXAoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2htZW1fdXRpbHMuYy02NS1cdG5fcGFnZXMgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NobWVtX3V0aWxzLmM6NjY6XHRwYWdlcyA9IGt2bWFsbG9jX29ianMoKnBhZ2VzLCBuX3BhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NobWVtX3V0aWxzLmMtNjctXHRpZiAoIXBhZ2VzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pbWFnaW5hdGlvbi9wdnJfam9iLmM9NzA3PXB2cl9zdWJtaXRfam9icyhzdHJ1Y3QgcHZyX2RldmljZSAqcHZyX2Rldiwgc3RydWN0IHB2cl9maWxlICpwdnJfZmlsZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaW1hZ2luYXRpb24vcHZyX2pvYi5jLTcyMy1cbmRyaXZlcnMvZ3B1L2RybS9pbWFnaW5hdGlvbi9wdnJfam9iLmM6NzI0Olx0am9iX2RhdGEgPSBrdm1hbGxvY19vYmpzKCpqb2JfZGF0YSwgYXJncy1cdTAwM2Vqb2JzLmNvdW50LFxuZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9qb2IuYy03MjUtXHRcdFx0XHQgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmM9MjE9aW50IGxpbWFfaGVhcF9hbGxvYyhzdHJ1Y3QgbGltYV9ibyAqYm8sIHN0cnVjdCBsaW1hX3ZtICp2bSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jLTQxLVx0fSBlbHNlIHtcbmRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmM6NDI6XHRcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcGFnZXMsIGJvLVx1MDAzZWJhc2UuYmFzZS5zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYy00My1cdFx0XHRcdCAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYz0xMjg0PXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXNtX2dlbV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYy0xMzA1LVx0bXNtX29iai1cdTAwM2VzZ3QgPSBzZ3Q7XG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYzoxMzA2Olx0bXNtX29iai1cdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jLTEzMDctXHRpZiAoIW1zbV9vYmotXHUwMDNlcGFnZXMpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9pb21tdS5jPTMzMD1tc21faW9tbXVfcGFnZXRhYmxlX3ByZWFsbG9jX2FsbG9jYXRlKHN0cnVjdCBtc21fbW11ICptbXUsIHN0cnVjdCBtc21fbW11X3ByZWFsbG9jICpwKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmMtMzM4LVxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYzozMzk6XHRwLVx1MDAzZXBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcC1cdTAwM2VwYWdlcywgcC1cdTAwM2Vjb3VudCk7XG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9pb21tdS5jLTM0MC1cdGlmICghcC1cdTAwM2VwYWdlcylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9sdXQuYz0zMj1udjUwX2x1dF9sb2FkKHN0cnVjdCBudjUwX2x1dCAqbHV0LCBpbnQgYnVmZmVyLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IsXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvbHV0LmMtNDAtXHRpZiAoIWluKSB7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9sdXQuYzo0MTpcdFx0aW4gPSBrdm1hbGxvY19vYmpzKCppbiwgMTAyNCk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9sdXQuYy00Mi1cdFx0aWYgKCFXQVJOX09OKCFpbikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9tbXUvbWVtLmM9MTQ0PW52a21fbWVtX25ld19ob3N0KHN0cnVjdCBudmttX21tdSAqbW11LCBpbnQgdHlwZSwgdTggcGFnZSwgdTY0IHNpemUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvbW11L21lbS5jLTE5My1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L21tdS9tZW0uYzoxOTQ6XHRpZiAoIShtZW0tXHUwMDNlbWVtID0ga3ZtYWxsb2Nfb2JqcygqbWVtLVx1MDAzZW1lbSwgc2l6ZSkpKVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvbW11L21lbS5jLTE5NS1cdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9tbXUvbWVtLmM6MTk2Olx0aWYgKCEobWVtLVx1MDAzZWRtYSA9IGt2bWFsbG9jX29ianMoKm1lbS1cdTAwM2VkbWEsIHNpemUpKSlcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L21tdS9tZW0uYy0xOTctXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYz0xODk9cGFuZnJvc3RfbG9va3VwX2JvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYy0yMDktXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmM6MjEwOlx0am9iLVx1MDAzZW1hcHBpbmdzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFuZnJvc3RfZ2VtX21hcHBpbmcgKixcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYy0yMTEtXHRcdFx0XHQgICAgICBqb2ItXHUwMDNlYm9fY291bnQsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmM9NTg3PXN0YXRpYyBpbnQgcGFuZnJvc3RfaW9jdGxfc3luY19ibyhzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMtNjAxLVxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jOjYwMjpcdG9wcyA9IGt2bWFsbG9jX29ianMoKm9wcywgYXJncy1cdTAwM2VvcF9jb3VudCk7XG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMtNjAzLVx0aWYgKCFvcHMpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmM9NTg3PXN0YXRpYyBpbnQgcGFuZnJvc3RfbW11X21hcF9mYXVsdF9hZGRyKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2LCBpbnQgYXMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5jLTYyMi1cdGlmICghYm8tXHUwMDNlYmFzZS5wYWdlcykge1xuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5jOjYyMzpcdFx0Ym8tXHUwMDNlc2d0cyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHNnX3RhYmxlLFxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5jLTYyNC1cdFx0XHRcdFx0IGJvLVx1MDAzZWJhc2UuYmFzZS5zaXplIC8gU1pfMk0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5jLTYzMC1cbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9tbXUuYzo2MzE6XHRcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBucl9wYWdlcyxcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9tbXUuYy02MzItXHRcdFx0XHQgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz03MjY9c3RhdGljIGludCBwYW50aG9yX3N1Ym1pdF9jdHhfaW5pdChzdHJ1Y3QgcGFudGhvcl9zdWJtaXRfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy03Mjgte1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzo3Mjk6XHRjdHgtXHUwMDNlam9icyA9IGt2bWFsbG9jX29ianMoKmN0eC1cdTAwM2Vqb2JzLCBqb2JfY291bnQsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTczMC1cdFx0XHRcdCAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ZtLmM9MTI5PXN0cnVjdCByYWRlb25fYm9fbGlzdCAqcmFkZW9uX3ZtX2dldF9ib3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYy0xMzUtXG5kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl92bS5jOjEzNjpcdGxpc3QgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCByYWRlb25fYm9fbGlzdCwgdm0tXHUwMDNlbWF4X3BkZV91c2VkICYjNDM7IDIpO1xuZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYy0xMzctXHRpZiAoIWxpc3QpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM9MzYwPXYzZF9nZXRfbXVsdGlzeW5jX3Bvc3RfZGVwcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy0zNzItXHRzZS1cdTAwM2VvdXRfc3luY3MgPSAoc3RydWN0IHYzZF9zdWJtaXRfb3V0c3luYyAqKVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6MzczOlx0XHRcdGt2bWFsbG9jX29ianMoc3RydWN0IHYzZF9zdWJtaXRfb3V0c3luYywgY291bnQpO1xuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtMzc0LVx0aWYgKCFzZS1cdTAwM2VvdXRfc3luY3MpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM9NTA2PXYzZF9nZXRfY3B1X3RpbWVzdGFtcF9xdWVyeV9wYXJhbXMoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNTI2LVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6NTI3Olx0cXVlcnlfaW5mby1cdTAwM2VxdWVyaWVzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdjNkX3RpbWVzdGFtcF9xdWVyeSxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTUyOC1cdFx0XHRcdFx0ICAgIHRpbWVzdGFtcC5jb3VudCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM9NTY3PXYzZF9nZXRfY3B1X3Jlc2V0X3RpbWVzdGFtcF9wYXJhbXMoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNTg0LVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6NTg1Olx0cXVlcnlfaW5mby1cdTAwM2VxdWVyaWVzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdjNkX3RpbWVzdGFtcF9xdWVyeSxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTU4Ni1cdFx0XHRcdFx0ICAgIHJlc2V0LmNvdW50KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYz02MjA9djNkX2dldF9jcHVfY29weV9xdWVyeV9yZXN1bHRzX3BhcmFtcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy02NDAtXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYzo2NDE6XHRxdWVyeV9pbmZvLVx1MDAzZXF1ZXJpZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB2M2RfdGltZXN0YW1wX3F1ZXJ5LFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNjQyLVx0XHRcdFx0XHQgICAgY29weS5jb3VudCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM9NzUwPXYzZF9nZXRfY3B1X3Jlc2V0X3BlcmZvcm1hbmNlX3BhcmFtcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy03NjYtXHRxdWVyeV9pbmZvLVx1MDAzZXF1ZXJpZXMgPVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6NzY3Olx0XHRrdm1hbGxvY19vYmpzKHN0cnVjdCB2M2RfcGVyZm9ybWFuY2VfcXVlcnksIHJlc2V0LmNvdW50KTtcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTc2OC1cdGlmICghcXVlcnlfaW5mby1cdTAwM2VxdWVyaWVzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jPTc4Nz12M2RfZ2V0X2NwdV9jb3B5X3BlcmZvcm1hbmNlX3F1ZXJ5X3BhcmFtcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy04MDYtXHRxdWVyeV9pbmZvLVx1MDAzZXF1ZXJpZXMgPVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6ODA3Olx0XHRrdm1hbGxvY19vYmpzKHN0cnVjdCB2M2RfcGVyZm9ybWFuY2VfcXVlcnksIGNvcHkuY291bnQpO1xuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtODA4LVx0aWYgKCFxdWVyeV9pbmZvLVx1MDAzZXF1ZXJpZXMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X29iamVjdC5jPTE2MT1zdGF0aWMgaW50IHZpcnRpb19ncHVfb2JqZWN0X3NobWVtX2luaXQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2Rldixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfb2JqZWN0LmMtMTc5LVxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X29iamVjdC5jOjE4MDpcdCplbnRzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydGlvX2dwdV9tZW1fZW50cnksICpuZW50cyk7XG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfb2JqZWN0LmMtMTgxLVx0aWYgKCEoKmVudHMpKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ByaW1lLmM9MTQ2PWludCB2aXJ0Z3B1X2RtYV9idWZfaW1wb3J0X3NndChzdHJ1Y3QgdmlydGlvX2dwdV9tZW1fZW50cnkgKiplbnRzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9wcmltZS5jLTE2Ni1cbmRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9wcmltZS5jOjE2NzpcdCplbnRzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydGlvX2dwdV9tZW1fZW50cnksIHNndC1cdTAwM2VuZW50cyk7XG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfcHJpbWUuYy0xNjgtXHRpZiAoISgqZW50cykpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmM9NTQxPWludCB2bXdfYm9fY3B1X2JsaXQoc3RydWN0IHZtd19ibyAqdm13X2RzdCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmMtNTg4LVx0aWYgKCFzcmMtXHUwMDNldHRtLVx1MDAzZXBhZ2VzIFx1MDAyNlx1MDAyNiBzcmMtXHUwMDNldHRtLVx1MDAzZXNnKSB7XG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmM6NTg5Olx0XHRzcmNfcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHNyYy1cdTAwM2V0dG0tXHUwMDNlbnVtX3BhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYy01OTAtXHRcdGlmICghc3JjX3BhZ2VzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYy01OTctXHRpZiAoIWRzdC1cdTAwM2V0dG0tXHUwMDNlcGFnZXMgXHUwMDI2XHUwMDI2IGRzdC1cdTAwM2V0dG0tXHUwMDNlc2cpIHtcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYzo1OTg6XHRcdGRzdF9wYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgZHN0LVx1MDAzZXR0bS1cdTAwM2VudW1fcGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYmxpdC5jLTU5OS1cdFx0aWYgKCFkc3RfcGFnZXMpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYz0zNTkxPXN0YXRpYyBpbnQgdm1fYmluZF9pb2N0bF9jaGVja19hcmdzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdm0gKnZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTM2MTEtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYzozNjEyOlx0XHQqYmluZF9vcHMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBkcm1feGVfdm1fYmluZF9vcCxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTM2MTMtXHRcdFx0XHRcdCAgYXJncy1cdTAwM2VudW1fYmluZHMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jPTQ2PXN0YXRpYyBpbnQgZ2VtX2FsbG9jX3BhZ2VzX2FycmF5KHN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMtNDktXHR4ZW5fb2JqLVx1MDAzZW51bV9wYWdlcyA9IERJVl9ST1VORF9VUChidWZfc2l6ZSwgUEFHRV9TSVpFKTtcbmRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYzo1MDpcdHhlbl9vYmotXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHhlbl9vYmotXHUwMDNlbnVtX3BhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYy01MS1cdHJldHVybiAheGVuX29iai1cdTAwM2VwYWdlcyA/IC1FTk9NRU0gOiAwO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L3FwLmM9MTExNz1zdGF0aWMgaW50IF9jcmVhdGVfa2VybmVsX3FwKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L3FwLmMtMTIwNS1cdFx0XHRcdCAgICAgc2l6ZW9mKCpxcC1cdTAwM2VycS53cmlkKSwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9xcC5jOjEyMDY6XHRxcC1cdTAwM2VzcS53X2xpc3QgPSBrdm1hbGxvY19vYmpzKCpxcC1cdTAwM2VzcS53X2xpc3QsIHFwLVx1MDAzZXNxLndxZV9jbnQpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvcXAuYy0xMjA3LVx0cXAtXHUwMDNlc3Eud3FlX2hlYWQgPSBrdm1hbGxvY19hcnJheShxcC1cdTAwM2VzcS53cWVfY250LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9pYl9zcnB0LmM9NzgxPXN0YXRpYyBzdHJ1Y3Qgc3JwdF9pb2N0eCAqKnNycHRfYWxsb2NfaW9jdHhfcmluZyhzdHJ1Y3Qgc3JwdF9kZXZpY2UgKnNkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L2liX3NycHQuYy03OTItXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvaWJfc3JwdC5jOjc5MzpcdHJpbmcgPSBrdm1hbGxvY19vYmpzKHJpbmdbMF0sIHJpbmdfc2l6ZSk7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvaWJfc3JwdC5jLTc5NC1cdGlmICghcmluZylcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9NjczPXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX2FsaWFzX3RhYmxlKHN0cnVjdCBhbWRfaW9tbXVfcGNpX3NlZyAqcGNpX3NlZylcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtNjc2LVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjY3NzpcdHBjaV9zZWctXHUwMDNlYWxpYXNfdGFibGUgPSBrdm1hbGxvY19vYmpzKCpwY2lfc2VnLVx1MDAzZWFsaWFzX3RhYmxlLFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTY3OC1cdFx0XHRcdFx0ICAgICBwY2lfc2VnLVx1MDAzZWxhc3RfYmRmICYjNDM7IDEpO1xuLS1cbmRyaXZlcnMvbWQvZG0tY2xvbmUtdGFyZ2V0LmM9NTc2PXN0YXRpYyBpbnQgaGFzaF90YWJsZV9pbml0KHN0cnVjdCBjbG9uZSAqY2xvbmUpXG4tLVxuZHJpdmVycy9tZC9kbS1jbG9uZS10YXJnZXQuYy01ODItXG5kcml2ZXJzL21kL2RtLWNsb25lLXRhcmdldC5jOjU4MzpcdGNsb25lLVx1MDAzZWh0ID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgaGFzaF90YWJsZV9idWNrZXQsIHN6KTtcbmRyaXZlcnMvbWQvZG0tY2xvbmUtdGFyZ2V0LmMtNTg0LVx0aWYgKCFjbG9uZS1cdTAwM2VodClcbi0tXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jPTQyMzc9c3RhdGljIHN0cnVjdCBwYWdlX2xpc3QgKmRtX2ludGVncml0eV9hbGxvY19wYWdlX2xpc3QodW5zaWduZWQgaW50IG5fcGFnZXMpXG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00MjQxLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo0MjQyOlx0cGwgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlX2xpc3QsIG5fcGFnZXMgJiM0MzsgMSxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI0My1cdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYz00MjcxPXN0YXRpYyBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKipkbV9pbnRlZ3JpdHlfYWxsb2Nfam91cm5hbF9zY2F0dGVybGlzdChzdHJ1Y3QgZG1faW50ZWdyaXR5X2MgKmljLFxuLS1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI3Ni1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6NDI3NzpcdHNsID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaWMtXHUwMDNlam91cm5hbF9zZWN0aW9ucyxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI3OC1cdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00Mjk0LVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo0Mjk1Olx0XHRzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIG5fcGFnZXMpO1xuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00Mjk2LVx0XHRpZiAoIXMpIHtcbi0tXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jPTQ0MTI9c3RhdGljIGludCBjcmVhdGVfam91cm5hbChzdHJ1Y3QgZG1faW50ZWdyaXR5X2MgKmljLCBjaGFyICoqZXJyb3IpXG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00NDk3LVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo0NDk4Olx0XHRcdHNnID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTQ0OTktXHRcdFx0XHRcdCAgIGljLVx1MDAzZWpvdXJuYWxfcGFnZXMgJiM0MzsgMSk7XG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00NTY1LVx0XHRcdH1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6NDU2NjpcdFx0XHRpYy1cdTAwM2Vza19yZXF1ZXN0cyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKixcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDU2Ny1cdFx0XHRcdFx0XHRcdGljLVx1MDAzZWpvdXJuYWxfc2VjdGlvbnMsXG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYz00Njc0PXN0YXRpYyBpbnQgZG1faW50ZWdyaXR5X2N0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLS1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNTI2OC1cdFx0fVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo1MjY5Olx0XHRpYy1cdTAwM2ViYnMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBiaXRtYXBfYmxvY2tfc3RhdHVzLFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy01MjcwLVx0XHRcdFx0XHRpYy1cdTAwM2VuX2JpdG1hcF9ibG9ja3MpO1xuLS1cbmRyaXZlcnMvbWQvZG0tc25hcC5jPTY1OT1zdGF0aWMgaW50IGRtX2V4Y2VwdGlvbl90YWJsZV9pbml0KHN0cnVjdCBkbV9leGNlcHRpb25fdGFibGUgKmV0LFxuLS1cbmRyaXZlcnMvbWQvZG0tc25hcC5jLTY2NS1cdGV0LVx1MDAzZWhhc2hfbWFzayA9IHNpemUgLSAxO1xuZHJpdmVycy9tZC9kbS1zbmFwLmM6NjY2Olx0ZXQtXHUwMDNldGFibGUgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBkbV9obGlzdF9oZWFkLCBzaXplKTtcbmRyaXZlcnMvbWQvZG0tc25hcC5jLTY2Ny1cdGlmICghZXQtXHUwMDNldGFibGUpXG4tLVxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYz00MDk9aW50IHY0bDJfZ19leHRfY3RybHNfY29tbW9uKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLFxuLS1cbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmMtNDMzLVx0aWYgKGNzLVx1MDAzZWNvdW50IFx1MDAzZSBBUlJBWV9TSVpFKGhlbHBlcikpIHtcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmM6NDM0Olx0XHRoZWxwZXJzID0ga3ZtYWxsb2Nfb2JqcyhoZWxwZXJbMF0sIGNzLVx1MDAzZWNvdW50KTtcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmMtNDM1LVx0XHRpZiAoIWhlbHBlcnMpXG4tLVxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYz01ODY9aW50IHRyeV9zZXRfZXh0X2N0cmxzX2NvbW1vbihzdHJ1Y3QgdjRsMl9maCAqZmgsXG4tLVxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYy02MTgtXHRpZiAoY3MtXHUwMDNlY291bnQgXHUwMDNlIEFSUkFZX1NJWkUoaGVscGVyKSkge1xuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYzo2MTk6XHRcdGhlbHBlcnMgPSBrdm1hbGxvY19vYmpzKGhlbHBlclswXSwgY3MtXHUwMDNlY291bnQpO1xuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYy02MjAtXHRcdGlmICghaGVscGVycylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcnNzLmM9MTE4PWludCBtbHg1ZV9yc3NfcGFyYW1zX2luZGlyX2luaXQoc3RydWN0IG1seDVlX3Jzc19wYXJhbXNfaW5kaXIgKmluZGlyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yc3MuYy0xMjAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3Jzcy5jOjEyMTpcdGluZGlyLVx1MDAzZXRhYmxlID0ga3ZtYWxsb2Nfb2JqcygqaW5kaXItXHUwMDNldGFibGUsIG1heF90YWJsZV9zaXplKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yc3MuYy0xMjItXHRpZiAoIWluZGlyLVx1MDAzZXRhYmxlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz04MDI9aW50IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKm1wYywgaW50IG5ld19tdHUsIGludCBudW1fcXVldWVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy04MjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6ODI0Olx0bXBjLVx1MDAzZWRhc19wcmUgPSBrdm1hbGxvY19vYmpzKGRtYV9hZGRyX3QsIG51bV9yeGIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTgyNS1cdGlmICghbXBjLVx1MDAzZWRhc19wcmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvbWV0YWRhdGEuYz01MTE9aW50IG5mcF9mbG93ZXJfbWV0YWRhdGFfaW5pdChzdHJ1Y3QgbmZwX2FwcCAqYXBwLCB1NjQgaG9zdF9jdHhfY291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvbWV0YWRhdGEuYy01NzUtXHRcdCAgICAgRklFTERfUFJFUChORlBfRkxfU1RBVF9JRF9NVV9OVU0sIGhvc3RfbnVtX21lbXMgLSAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL21ldGFkYXRhLmM6NTc2Olx0cHJpdi1cdTAwM2VzdGF0cyA9IGt2bWFsbG9jX29ianMoc3RydWN0IG5mcF9mbF9zdGF0cywgc3RhdHNfc2l6ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9tZXRhZGF0YS5jLTU3Ny1cdGlmICghcHJpdi1cdTAwM2VzdGF0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM9MTU9c3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtNTAtXHRpID0gbWF4X3QoaW50LCB3eC1cdTAwM2VudW1fdHhfcXVldWVzLCB3eC1cdTAwM2VudW1fcnhfcXVldWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzo1MTpcdHRlbXBfcmluZyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHd4X3JpbmcsIGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jLTUyLVx0aWYgKCF0ZW1wX3JpbmcpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYz0zOT1zdGF0aWMgaW50IHR4Z2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy03NC1cdGkgPSBtYXhfdChpbnQsIHd4LVx1MDAzZW51bV90eF9xdWV1ZXMsIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6NzU6XHR0ZW1wX3JpbmcgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB3eF9yaW5nLCBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jLTc2LVx0aWYgKCF0ZW1wX3JpbmcpIHtcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jPTE0NzA9c3RhdGljIHZvaWQgbmV0dnNjX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYy0xNTI2LVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYzoxNTI3Olx0cGNwdV9zdW0gPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBuZXR2c2NfZXRodG9vbF9wY3B1X3N0YXRzLCBucl9jcHVfaWRzKTtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMTUyOC1cdGlmICghcGNwdV9zdW0pXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTMvaXB1My1kbWFtYXAuYz0zND1zdGF0aWMgc3RydWN0IHBhZ2UgKippbWd1X2RtYW1hcF9hbGxvY19idWZmZXIoc2l6ZV90IHNpemUsIGdmcF90IGdmcClcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaXB1My9pcHUzLWRtYW1hcC5jLTQxLVx0LyogQWxsb2NhdGUgbWVtIGZvciBhcnJheSBvZiBwYWdlIHB0cnMgKi9cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9pcHUzL2lwdTMtZG1hbWFwLmM6NDI6XHRwYWdlcyA9IGt2bWFsbG9jX29ianMoKnBhZ2VzLCBjb3VudCk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaXB1My9pcHUzLWRtYW1hcC5jLTQzLVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2ZzLmM9ODA3PXN0YXRpYyB2b2lkICpmZnNfYnVpbGRfc2dfbGlzdChzdHJ1Y3Qgc2dfdGFibGUgKnNndCwgc2l6ZV90IHN6KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2ZzLmMtODE4LVx0bl9wYWdlcyA9IFBBR0VfQUxJR04oc3opIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfZnMuYzo4MTk6XHRwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbl9wYWdlcyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9mcy5jLTgyMC1cdGlmICghcGFnZXMpIHtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L3hoY2ktc2lkZWJhbmQuYz0xOD14aGNpX3JpbmdfdG9fc2d0YWJsZShzdHJ1Y3QgeGhjaV9zaWRlYmFuZCAqc2IsIHN0cnVjdCB4aGNpX3JpbmcgKnJpbmcpXG4tLVxuZHJpdmVycy91c2IvaG9zdC94aGNpLXNpZGViYW5kLmMtMzAtXHRuX3BhZ2VzID0gUEFHRV9BTElHTihzeikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG5kcml2ZXJzL3VzYi9ob3N0L3hoY2ktc2lkZWJhbmQuYzozMTpcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBuX3BhZ2VzKTtcbmRyaXZlcnMvdXNiL2hvc3QveGhjaS1zaWRlYmFuZC5jLTMyLVx0aWYgKCFwYWdlcylcbi0tXG5kcml2ZXJzL3hlbi9ldnRjaG4uYz0zMTg9c3RhdGljIGludCBldnRjaG5fcmVzaXplX3Jpbmcoc3RydWN0IHBlcl91c2VyX2RhdGEgKnUpXG4tLVxuZHJpdmVycy94ZW4vZXZ0Y2huLmMtMzM0LVxuZHJpdmVycy94ZW4vZXZ0Y2huLmM6MzM1Olx0bmV3X3JpbmcgPSBrdm1hbGxvY19vYmpzKCpuZXdfcmluZywgbmV3X3NpemUpO1xuZHJpdmVycy94ZW4vZXZ0Y2huLmMtMzM2LVx0aWYgKCFuZXdfcmluZylcbi0tXG5kcml2ZXJzL3hlbi9nbnRkZXYuYz0xMzg9c3RydWN0IGdudGRldl9ncmFudF9tYXAgKmdudGRldl9hbGxvY19tYXAoc3RydWN0IGdudGRldl9wcml2ICpwcml2LCBpbnQgY291bnQsXG4tLVxuZHJpdmVycy94ZW4vZ250ZGV2LmMtMTQ3LVxuZHJpdmVycy94ZW4vZ250ZGV2LmM6MTQ4Olx0YWRkLVx1MDAzZWdyYW50cyAgICA9IGt2bWFsbG9jX29ianMoYWRkLVx1MDAzZWdyYW50c1swXSwgY291bnQpO1xuZHJpdmVycy94ZW4vZ250ZGV2LmM6MTQ5Olx0YWRkLVx1MDAzZW1hcF9vcHMgICA9IGt2bWFsbG9jX29ianMoYWRkLVx1MDAzZW1hcF9vcHNbMF0sIGNvdW50KTtcbmRyaXZlcnMveGVuL2dudGRldi5jOjE1MDpcdGFkZC1cdTAwM2V1bm1hcF9vcHMgPSBrdm1hbGxvY19vYmpzKGFkZC1cdTAwM2V1bm1hcF9vcHNbMF0sIGNvdW50KTtcbmRyaXZlcnMveGVuL2dudGRldi5jLTE1MS1cdGFkZC1cdTAwM2VwYWdlcyAgICAgPSBrdnphbGxvY19vYmpzKGFkZC1cdTAwM2VwYWdlc1swXSwgY291bnQpO1xuLS1cbmRyaXZlcnMveGVuL2dudGRldi5jLTE2MC1cdGlmICh4ZW5fcHZfZG9tYWluKCkpIHtcbmRyaXZlcnMveGVuL2dudGRldi5jOjE2MTpcdFx0YWRkLVx1MDAzZWttYXBfb3BzICAgPSBrdm1hbGxvY19vYmpzKGFkZC1cdTAwM2VrbWFwX29wc1swXSwgY291bnQpO1xuZHJpdmVycy94ZW4vZ250ZGV2LmM6MTYyOlx0XHRhZGQtXHUwMDNla3VubWFwX29wcyA9IGt2bWFsbG9jX29ianMoYWRkLVx1MDAzZWt1bm1hcF9vcHNbMF0sIGNvdW50KTtcbmRyaXZlcnMveGVuL2dudGRldi5jLTE2My1cdFx0aWYgKE5VTEwgPT0gYWRkLVx1MDAzZWttYXBfb3BzIHx8IE5VTEwgPT0gYWRkLVx1MDAzZWt1bm1hcF9vcHMpXG4tLVxuZnMvY2VwaC9maWxlLmM9MTQ2PXN0YXRpYyBzc2l6ZV90IGl0ZXJfZ2V0X2J2ZWNzX2FsbG9jKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc2l6ZV90IG1heHNpemUsXG4tLVxuZnMvY2VwaC9maWxlLmMtMTYxLVx0ICovXG5mcy9jZXBoL2ZpbGUuYzoxNjI6XHRidiA9IGt2bWFsbG9jX29ianMoKmJ2LCBucGFnZXMsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbmZzL2NlcGgvZmlsZS5jLTE2My1cdGlmICghYnYpXG4tLVxuZnMvY29yZWR1bXAuYz0xNzIwPXN0YXRpYyBib29sIGR1bXBfdm1hX3NuYXBzaG90KHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4tLVxuZnMvY29yZWR1bXAuYy0xNzM4LVxuZnMvY29yZWR1bXAuYzoxNzM5Olx0Y3BybS1cdTAwM2V2bWFfbWV0YSA9IGt2bWFsbG9jX29ianMoKmNwcm0tXHUwMDNldm1hX21ldGEsIGNwcm0tXHUwMDNldm1hX2NvdW50KTtcbmZzL2NvcmVkdW1wLmMtMTc0MC1cdGlmICghY3BybS1cdTAwM2V2bWFfbWV0YSkge1xuLS1cbmZzL2V4ZmF0L2JhbGxvYy5jPTczPXN0YXRpYyBpbnQgZXhmYXRfYWxsb2NhdGVfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXhmYXQvYmFsbG9jLmMtOTctXHRcdFx0KHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKSAmIzQzOyAxO1xuZnMvZXhmYXQvYmFsbG9jLmM6OTg6XHRzYmktXHUwMDNldm9sX2FtYXAgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzYmktXHUwMDNlbWFwX3NlY3RvcnMpO1xuZnMvZXhmYXQvYmFsbG9jLmMtOTktXHRpZiAoIXNiaS1cdTAwM2V2b2xfYW1hcClcbi0tXG5mcy9leHQyL3N1cGVyLmM9ODY0PXN0YXRpYyBpbnQgZXh0Ml9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9leHQyL3N1cGVyLmMtMTA5OC1cdFx0ICAgRVhUMl9ERVNDX1BFUl9CTE9DSyhzYik7XG5mcy9leHQyL3N1cGVyLmM6MTA5OTpcdHNiaS1cdTAwM2VzX2dyb3VwX2Rlc2MgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBkYl9jb3VudCk7XG5mcy9leHQyL3N1cGVyLmMtMTEwMC1cdGlmIChzYmktXHUwMDNlc19ncm91cF9kZXNjID09IE5VTEwpIHtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0ODcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgdXN1YWxseSBga3ZtYWxsb2NfYXJyYXlgLCB0aGF0JiMzOTtzIHRoZSBlc3RhYmxpc2hlZCBmdW5jdGlvbiBmb3IgdGhpcy4gQnV0IHRoZW4gSSBzYXcgYGt2bWFsbG9jX29ianNgIGFuZCBpdCBzcGFya2VkIGEgcXVlc3Rpb24uIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlIGZvciB0aGVzZSBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NsYWIuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgYGt2bWFsbG9jX2FycmF5YCBpcyBkZWZpbmVkLCBzbyB0aGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uLCBvciBhbnkgaGludHMsIGFib3V0IGBrdm1hbGxvY19vYmpzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgcmVsYXRpb25zaGlwLCBpZiBhbnksIGlzIGJldHdlZW4gdGhlIHR3by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtYWxsb2Nfb2JqcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTEwNTE9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNDItXHRfX2FsbG9jX29ianMoa3ZtYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE0MzojZGVmaW5lIGt2bWFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNDQtXHRfX2FsbG9jX29ianMoa3ZtYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4ODUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSBpbiBgbW0vZGFtb24vY29yZS5jYC4gVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiBpcyBhIHN3aXRjaCBmcm9tIGBrbWFsbG9jX29ianNgIHRvIGBrdm1hbGxvY19vYmpzYC4gSSBpbW1lZGlhdGVseSBjaGVjayB0aGUgYGluY2x1ZGUvbGludXgvc2xhYi5oYCBoZWFkZXIgZmlsZSB0byByZWZyZXNoIG15IG1lbW9yeSwgYW5kLCB5ZXMsIHRoYXQmIzM5O3MgY29ycmVjdC4gYGt2bWFsbG9jYCBjYW4gZmFsbCBiYWNrIHRvIHZtYWxsb2MsIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS4KClRoZSBmaXJzdCBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBzaWduaWZpY2FudCBlbm91Z2ggZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBwcm9tcHQmIzM5O3MgY3JpdGVyaWEsIEkgY29uc2lkZXIgdGhpcy4gSXQmIzM5O3Mgbm90IGEgZG9jdW1lbnRhdGlvbiB1cGRhdGUgb3IgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGt2bWFsbG9jYCBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIGZhbGxiYWNrIHRvIHZtYWxsb2Mgd2hlbiBga21hbGxvY2Agd291bGQgZmFpbCwgZm9yIGxhcmdlIGFsbG9jYXRpb25zLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgY2hhbmdlIGluIGV4ZWN1dGlvbiBmbG93LiBCdXQgaXMgaXQgKndvcnRoKiBmdXp6aW5nPyBUaGUgcHJvbXB0IHByb3ZpZGVzIHNvbWUgZ3VpZGFuY2UuCgpJbml0aWFsbHksIEkgdGhpbmsgdGhpcyBtaWdodCBub3QgaW50cm9kdWNlIGZ1bmRhbWVudGFsbHkgbmV3ICpsb2dpYyogdG8gZnV6eiwgYnV0IGl0IGRvZXMgYWx0ZXIgYmVoYXZpb3IuIEEgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uIHdoZXJlIGl0IG1pZ2h0IGhhdmUgZmFpbGVkIGJlZm9yZSAqaXMqIGEgcmVsZXZhbnQgY2hhbmdlIHRvIHRlc3QuIFNvLCBJIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBhcmVhIGlzIHJlYWNoYWJsZS4KCkkgYWxzbyBub3RlIHRoZSBhZGRpdGlvbiBvZiBgZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGVgLCB3aGljaCBpcyBhIGt1bml0IHRlc3QuIFdoaWxlIEkgZG9uJiMzOTt0IGRpc2NhcmQgdGhlIHBvc3NpYmlsaXR5IG9mIGl0IGJlaW5nIGhlbHBmdWwsIGt1bml0IHRlc3RzIGFyZSB1c3VhbGx5IG5vdCB0aGUgcHJpbWFyeSBmb2N1cyBvZiBmdXp6aW5nIGVmZm9ydHMsIHNvIEkgZG9uJiMzOTt0IGdpdmUgdGhpcyBzaWduaWZpY2FudCB3ZWlnaHQgaW5pdGlhbGx5LiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbXNlY3NfdG9famlmZmllc2AgdG8gYHNlY3NfdG9famlmZmllc2Agd2hpY2ggaXMgYSBtYWNybyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuIEkgc2tpcCBvdmVyIHRoYXQgYXMgaXQgaXMgbm90IHRoZSBtYWluIGlzc3VlLgoKVGhlbiBJIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIGlzc3VlOiB0aGUgc2luZ2xlIGNvZGUgY2hhbmdlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYDoKCmBgYGMKcmFuZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcmFuZ2VzLCBpLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKYGBgCkkgY2hlY2sgdGhlIGNvZGUgdGhhdCBzdXJyb3VuZHMgaXQgYW5kIG5vdGUgdGhlIHBhdGNoJiMzOTtzIGBrZnJlZWAgaXMgYWxzbyBga3ZmcmVlYCB3aGljaCBpcyB3aGF0IEkgd291bGQgZXhwZWN0LiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdhcnJhbnRzIGFkZGl0aW9uYWwgZnV6emluZyBlZmZvcnRzLgoKSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0LiBVc3VhbGx5LCBzd2l0Y2hpbmcgdG8gYGt2bWFsbG9jYCBpcyBhIGJ1ZyBmaXggb3IgaW1wcm92ZW1lbnQgZm9yIGxhcmdlIGFsbG9jYXRpb25zLiBJIGRvbiYjMzk7dCBzZWUgYW55ICYjMzQ7bmV3JiMzNDsgY29kZSB0aGF0IGlzIG5vdyByZWFjaGFibGUgYnkgdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uLCBidXQgYSBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlIGhhcyBiZWVuIGNvcnJlY3RlZC4KCkFjY29yZGluZyB0byB0aGUgcHJvbXB0LCBpZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gU28sIEkgbmVlZCB0byBjaGVjayBob3cgdG8gcmVhY2ggYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AuIEkgY2hlY2sgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgLSZndDsgYGRhbW9uX2NvbW1pdF9jdHhgIC0mZ3Q7IGBkYW1vbl9jb21taXRfdGFyZ2V0YCAtJmd0OyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCBhbmQgcmVhbGl6ZSB0aGF0IGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgc3lzZnMgd3JpdGVzIHRvIERBTU9OLgoKU2luY2UgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoIGFuIGV4ZWN1dGlvbiBmbG93IGFsdGVyYXRpb24gKHZtYWxsb2MgZmFsbGJhY2spLCBpdCYjMzk7cyBwcm9iYWJseSAqd29ydGgqIGZ1enppbmcuIFdlIGNhbiBwcm92aWRlIGEgbGFyZ2UgbnVtYmVyIG9mIHJlZ2lvbnMgdG8gc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSB2bWFsbG9jIGZhbGxiYWNrLiBXZSBjYW4gbm93IHRlc3Qgd2hldGhlciB0aGlzIGZhbGxiYWNrIGZ1bmN0aW9ucyBjb3JyZWN0bHksIGFuZCBpdCBjb3VsZCBpZGVudGlmeSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdm1hbGxvYyB1c2FnZSwgc3VjaCBhcyBlbnN1cmluZyB0aGF0IHRoZSBkb3duc3RyZWFtIGBkYW1vbl9zZXRfcmVnaW9uc2AgZnVuY3Rpb24gaGFuZGxlcyBwb3RlbnRpYWxseSBub24tY29udGlndW91cyBtZW1vcnksIG9yIHdoZXRoZXIgdGhlIGFsbG9jYXRpb24gZmFpbHVyZSBpcyBzaW1wbHkgbWFza2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAxMz1zdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDE0LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMTU6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAxNi1cdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzE5PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDAtLypcbm1tL2RhbW9uL2NvcmUuYzozNDE6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cbm1tL2RhbW9uL2NvcmUuYy0zNDItICogQHQ6XHRcdHRoZSBnaXZlbiB0YXJnZXQuXG4tLVxubW0vZGFtb24vY29yZS5jLTM1MS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozNTI6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtMzUzLVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTEzNDc9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzY0LVx0XHRyYW5nZXNbaSYjNDM7JiM0MztdID0gc3JjX3JlZ2lvbi1cdTAwM2Vhcjtcbm1tL2RhbW9uL2NvcmUuYzoxMzY1Olx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbm1tL2RhbW9uL2NvcmUuYy0xMzY2LVx0a3ZmcmVlKHJhbmdlcyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTM2OTY9aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzEwLVx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xubW0vZGFtb24vY29yZS5jOjM3MTE6XHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG5tbS9kYW1vbi9jb3JlLmMtMzcxMi19XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xOTU3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE5ODEtXHR9XG5tbS9kYW1vbi9zeXNmcy5jOjE5ODI6XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyh0LCByYW5nZXMsIHN5c2ZzX3JlZ2lvbnMtXHUwMDNlbnIsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vc3lzZnMuYy0xOTgzLW91dDpcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9Mzg5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDEwLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQxMTpcdGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQxMi1cbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTkwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwMy0vKlxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxMDQ6ICogVGVzdCAmIzM5O2RhbW9uX3NldF9yZWdpb25zKCkmIzM5O1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMDUtICpcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTExOC0gKiByZWdpb25zLiAgVGhlIHVwZGF0ZSBvZiBjdXJyZW50IHRhcmdldCByZWdpb25zIGlzIHRoZSByb2xlIG9mXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjExOTogKiAmIzM5O2RhbW9uX3NldF9yZWdpb25zKCkmIzM5Oy5cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTIwLSAqXG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0xMjU9c3RhdGljIHZvaWQgZGFtb25fZG9fdGVzdF9hcHBseV90aHJlZV9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0Ny1cdH1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTQ4Olx0aWYgKGRhbW9uX3NldF9yZWdpb25zKHQsIHJhbmdlcywgbnJfcmVnaW9ucyAvIDIsXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0OS1cdFx0XHRcdERBTU9OX01JTl9SRUdJT05fU1opKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTEtXHRcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTI6XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7ZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsXCYjMzQ7KTtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTUzLVx0fVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU1LVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTY6XHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgdGhyZWVfcmVnaW9ucywgMywgREFNT05fTUlOX1JFR0lPTl9TWikpIHtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU3LVx0XHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBOVUxMKTtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTU4Olx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3NlY29uZCBkYW1vbl9zZXRfcmVnaW9ucygpIGZhaWxcJiMzNDspO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTktXHR9XG4tLVxubW0vZGFtb24vdmFkZHIuYz0xOTE9c3RhdGljIHZvaWQgX19kYW1vbl92YV9pbml0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjA3LVxubW0vZGFtb24vdmFkZHIuYzoyMDg6XHRkYW1vbl9zZXRfcmVnaW9ucyh0LCByZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjA5LX1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTIyNj1zdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjMzLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vdmFkZHIuYzoyMzQ6XHRcdGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xubW0vZGFtb24vdmFkZHIuYy0yMzUtXHR9XG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTI1LVxuc2FtcGxlcy9kYW1vbi9tdGllci5jOjEyNjpcdHJldCA9IGRhbW9uX3NldF9yZWdpb25zKHRhcmdldCwgXHUwMDI2cmFuZ2UsIDEsIERBTU9OX01JTl9SRUdJT05fU1opO1xuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEyNy1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTI4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZSBpbiBEQU1PTi4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIGZyb20gYGttYWxsb2NgIHRvIGBrdm1hbGxvY2AgZm9yIGByYW5nZXNgIGFsbG9jYXRpb24uIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyYjMzQ7IFNpbmNlIEkgYW0gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIEkga25vdyB0aGlzIGlzIGltcG9ydGFudCwgSSBuZWVkIHRvIHNlZSBpZiBpdCBtZWV0cyB0aGUgY3JpdGVyaWEgZm9yIGZ1enppbmcuCgpJbml0aWFsbHksIGl0IHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCB0byBhdm9pZCBhbGxvY2F0aW9uIGZhaWx1cmUgd2hlbiBoYW5kbGluZyBhIHBvdGVudGlhbGx5IGxhcmdlIG51bWJlciBvZiByZWdpb25zIChgbnJfcmVnaW9uc2ApLiBGdXp6aW5nIHdvdWxkIG1vc3RseSBjb25maXJtIHRoYXQgaXQgZG9lc24mIzM5O3QgY3Jhc2ggYW55bW9yZS4gSG93ZXZlciwgYGt2bWFsbG9jYCAqY2FuKiByZXR1cm4gdm1hbGxvYyYjMzk7ZCBtZW1vcnksIHdoaWNoIGlzIGEga2V5IGRpZmZlcmVuY2UuIFRoYXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkkgYnJpZWZseSBjb25zaWRlcmVkIGlmIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGRvY3VtZW50YXRpb24gbmVlZCB0byBiZSBjb25zaWRlcmVkLiBJIHJldmlld2VkIGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAsIHJlbGV2YW50IGRvY3VtZW50YXRpb24gaW4gYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0YCwgYERvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdGAgYW5kIGBtbS9kYW1vbi9zdGF0LmNgIGZvciBkb2N1bWVudGF0aW9uIGFuZCBtYWNybyBjaGFuZ2VzLiBOb25lIG9mIHRob3NlIHNlZW0gdG8gaW5kaWNhdGUgYSBmdW5jdGlvbmFsIGNoYW5nZS4KClRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3k6CgpgYGBjCi0JcmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwomIzQzOwlyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwouLi4KLQlrZnJlZShyYW5nZXMpOwomIzQzOwlrdmZyZWUocmFuZ2VzKTsKYGBgCgpUaGlzIGNoYW5nZSAqZG9lcyogZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93IGJ5IGFsbG93aW5nIHRoZSBhbGxvY2F0aW9uIHRvIHN1Y2NlZWQgdmlhIHZtYWxsb2MgaW5zdGVhZCBvZiBmYWlsaW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi4KCk5vdywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIGl0IHdvcnRoIGZ1enppbmc/CgpJZiBJIHNheSB5ZXMsIEkgbmVlZCB0byBwcm92aWRlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2Agc2luY2UgaXQgZnVuY3Rpb25hbGx5IGNoYW5nZXMgZXhlY3V0aW9uIGZsb3cuCgpJIHdlbnQgYmFjayB0byBsb29rIGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGFnYWluLiBJdCBkZWFscyB3aXRoIGFsbG9jYXRpb24gb2YgYW4gYXJyYXkgb2YgYHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlYC4gVGhlIHNpemUgb2YgdGhlIGFycmF5IGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiByZWdpb25zLiBJZiB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgaXMgbGFyZ2UsIGBrbWFsbG9jYCBjYW4gZmFpbCwgYnV0IGBrdm1hbGxvY2Agd2lsbCBzdWNjZWVkLiBUaGlzIGlzIGEgYnVnIGZpeCwgYnV0IGEgY2hhbmdlIG9mIHRoaXMgbmF0dXJlIGNvdWxkIHVuY292ZXIgcHJvYmxlbXMgcmVsYXRlZCB0byBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmVnaW9uIGFycmF5LiBJdCB3b3VsZCBhbHNvIGxldCBtZSB0ZXN0IHdoYXQgaGFwcGVucyBpbiBhbiBlZGdlIGNhc2Ugd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgcmVnaW9ucy4KCkkgY29uc2lkZXJlZCB0aGF0IGBkYW1vbl9zZXRfcmVnaW9uc2Agb25seSBpdGVyYXRlcyBvdmVyIHJlZ2lvbnM7IGl0IGRvZXNuJiMzOTt0ICpyZXF1aXJlKiBjb250aWd1b3VzIG1lbW9yeSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY2hhbmdlIHRvIGBrdm1hbGxvY2AgaXMgc29tZXdoYXQgaXNvbGF0ZWQuCgpJZiBJIGRlY2lkZSB0aGlzIGlzIHdvcnRoIGZ1enppbmc6CiogICBgRm9jdXNTeW1ib2xzYDogYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AKKiAgIGBFbmFibGVDb25maWdzYDogYERBTU9OYCwgYERBTU9OX1NZU0ZTYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM4OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGBtbS9kYW1vbi9jb3JlLmNgIGlzIGJlaW5nIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfREFNT05gLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIERhdGEgQWNjZXNzIE1PTml0b3IsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIFRoZW4sIHRoZXJlJiMzOTtzIHRoaXMgbmV3IHRlc3QsIGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAgYWRkZWQgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuICBJdCBzZWVtcyB0byBiZSBhIHRlc3QgdmVyaWZ5aW5nIGEgcmFjZSBjb25kaXRpb24gZml4IHJlbGF0ZWQgdG8gdGhlIGBkYW1vc193YWxrYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBqdXN0IGEgdGVzdCBhZGRpdGlvbiwgbm90IHRvdWNoaW5nIHRoZSBhY3R1YWwgY29yZSBsb2dpYyBpdHNlbGYuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGluY2x1ZGVzIGRvY3VtZW50YXRpb24gdXBkYXRlcywgS2NvbmZpZyBtb2RpZmljYXRpb25zLCBjb21tZW50cywgbG9nZ2luZyBjaGFuZ2VzLCBkZWNvcmF0aXZlIG1vZGlmaWNhdGlvbnMgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gIEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgdGhpcyBhcHBsaWVzLgoKT2theSwgY2hlY2tpbmcgdGhlIGZpbGVzLCBubywgaXQgaW5jbHVkZXMgYSBjaGFuZ2UgZnJvbSBga21hbGxvY19vYmpzYCB0byBga3ZtYWxsb2Nfb2Jqc2AgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEhtbSwgYGttYWxsb2Nfb2Jqc2AgaXMgYSBtYWNybywgSSBzZWUuIFN3aXRjaGluZyB0aGF0IG1hY3JvIHRvIGBrdm1hbGxvY19vYmpzYCBtZWFucyB0aGF0IGl04oCZcyBjaGFuZ2luZyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvciwgdXNpbmcgYHZtYWxsb2NgIGlmIG5lZWRlZCBpbnN0ZWFkIG9mIGJlaW5nIGxpbWl0ZWQgdG8gYGttYWxsb2NgLiBEb2VzIHRoaXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93PyBZZXMsIGFic29sdXRlbHkuIEl0IGFsbG93cyBsYXJnZXIgYWxsb2NhdGlvbnMgdG8gc3VjY2VlZCwgd2hpY2ggY291bGQgcmV2ZWFsIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMuCgpCdXQgaXMgdGhpcyBjaGFuZ2UgcmVhbGx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlICpmdXp6ZWQqPyBJZiBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBzeXprYWxsZXIgd2lsbCBhdHRlbXB0IHRvIGZ1enogYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AsIGJlY2F1c2UgaXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGVudHJ5IHBvaW50IHRvIGdldCB0cmlnZ2VyZWQuIElzIGl0IGEgZ29vZCBpZGVhPyBZZXMsIGJlY2F1c2UgaXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGxvZ2ljLiAgQWxyaWdodCwgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGlzIHJlYWNoYWJsZS4gWWVwLCB2aWEgc3lzZnMgd3JpdGVzLiBUaGF0IHNob3VsZCBkbyBpdC4gIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgYW5kIHNlZSB3aGF0IHRoYXQgZXhwb3NlcywgYnV0IHRoaXMgaXMgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfY29tbWl0X2lucHV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MjA4Nj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfbmV3X3Rlc3RfY3R4KFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjEwMy0vKlxubW0vZGFtb24vc3lzZnMuYzoyMTA0OiAqIGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCgpIC0gQ29tbWl0IHVzZXIgaW5wdXRzIHRvIGEgcnVubmluZyBrZGFtb25kLlxubW0vZGFtb24vc3lzZnMuYy0yMTA1LSAqIEBrZGFtb25kOlx0VGhlIGtvYmplY3Qgd3JhcHBlciBmb3IgdGhlIGFzc29jaWF0ZWQga2RhbW9uZC5cbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDgtICovXG5tbS9kYW1vbi9zeXNmcy5jOjIxMDk6c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjExMC17XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzUxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzYzLVx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbm1tL2RhbW9uL3N5c2ZzLmM6MjM2NDpcdFx0XHRcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIzNjUtXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4OTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgdGhpcyByZWFjaGFibGU/IFllcywgdGhlIGNoYW5nZSBpcyByZWFjaGFibGUuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbiBsaWVzIGluIHRoZSBga3ZtYWxsb2Nfb2Jqc2AgY2hhbmdlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuIFNpbmNlIHRoZSBjaGFuZ2UgdG8gYGt2bWFsbG9jX29ianNgICpkb2VzKiBhbHRlciBleGVjdXRpb24gZmxvdywgc3BlY2lmaWNhbGx5IGJ5IGludHJvZHVjaW5nIGEgYHZtYWxsb2NgIGZhbGxiYWNrLCBpdCBmYWxscyBvdXRzaWRlIHRoZSBjYXRlZ29yeSBvZiAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlLiYjMzQ7IFRoZSBjaGFuZ2UgaXMgYWxzbyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzLiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgd2l0aCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCBhY2NvcmRpbmcgdG8gdGhlIHByb21wdCwgaWYgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLCBJIG5lZWQgdG8gaWRlbnRpZnkgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gTGV0JiMzOTtzIGdldCB0byBpdC4KClRoZSBwcmltYXJ5IGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGluIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgLiBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEdpdmVuIHRoZSBwcm9tcHQsIEkgbmVlZCB0byBsaXN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIERlc3BpdGUgYmVpbmcgYSBzdGF0aWMgZnVuY3Rpb24sIHN5emthbGxlciAqY2FuKiBmdXp6IGl0IGlmIHJlYWNoYWJsZS4gVGhpcyBmdW5jdGlvbiBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEkmIzM5O2xsIGFkZCBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byBgRm9jdXNTeW1ib2xzYC4gVGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbCBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBsaWtlIGBkYW1vbl9jb21taXRfdGFyZ2V0YCAsIGBkYW1vbl9jb21taXRfY3R4YCBhbmQgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgYnV0IEkmIzM5O2xsIGZvY3VzIG9uIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGZvciB0aGlzIGFuYWx5c2lzLgoKTmV4dCwgSSBtdXN0IGlkZW50aWZ5IHRoZSByZXF1aXJlZCBgQ09ORklHX2Agb3B0aW9ucy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gTG9va2luZyBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlIHdoaWNoIGluY2x1ZGVzIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgLCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX0RBTU9OYCBpcyByZXF1aXJlZC4gVGhlIHN5c2ZzIGludGVyZmFjZSwgYXMgdGhlIHByaW1hcnkgcGF0aCB0byB0aGUgY29kZSwgcmVxdWlyZXMgYENPTkZJR19EQU1PTl9TWVNGU2AsIHRob3VnaCBvdGhlciByZWxhdGVkIHNldHRpbmdzIGFyZSB1c2VkIGxpa2UgYERBTU9OX1JFQ0xBSU1gLiBTbywgSSYjMzk7bGwgbGlzdDoKYERBTU9OYApgREFNT05fU1lTRlNgCmFzIHRoZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZC4KClRoaXMgc2VlbXMgdG8gYWRkcmVzcyB0aGUgcHJvbXB0IHJlcXVpcmVtZW50cyBjb21wbGV0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZS0yLVxubW0vZGFtb24vTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG5tbS9kYW1vbi9NYWtlZmlsZS00LW9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjM3MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgREFNT04gTWFrZWZpbGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgb2JqLXkgOj0gY29yZS5vYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvYmplY3QgZmlsZSBmb3IgdGhlIERBTU9OIG1vZHVsZSwgY2xlYXJseS4gV2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGNvbnRleHQuIFRoaXMgZGlyZWN0b3J5LCBgbW0vZGFtb24vYCwgaXMgb25seSBjb21waWxlZCBhbmQgaW5jbHVkZWQgaWYgYENPTkZJR19EQU1PTmAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCYjMzk7cyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgYW5kIGRlcGVuZGVuY2llcyBoZXJlLiBJdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbi4gR29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgYW5kIHJlbWluZHMgbWUgdG8gYWx3YXlzIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMzQ9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYub1xubW0vTWFrZWZpbGU6MTM1Om9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL1xubW0vTWFrZWZpbGUtMTM2LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgJiM0Mzs9IHVzZXJjb3B5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NzUKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogNjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCBmb3IgREFNT04gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGVzc2VudGlhbDogYENPTkZJR19EQU1PTmAgaXMgZGVmaW5pdGVseSByZXF1aXJlZCDigJMgbm8gcXVlc3Rpb24gdGhlcmUuIE5vdywgdGhlIGBDT05GSUdfREFNT05fU1lTRlNgIHBhcnQuLi4gaXQmIzM5O3MgdGhlIHN0YW5kYXJkIHVzZXItc3BhY2UgaW50ZXJmYWNlLCByaWdodD8gQmVzdCBwcmFjdGljZSBpcyB0byBpbmNsdWRlIGl0IGZvciBmdWxsIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgZm9yIHRlc3RpbmcsIHNvIEkmIzM5O2xsIGVuYWJsZSB0aGF0IHRvby4gU28gZmFyLCB3ZSYjMzk7cmUgYXQgYERBTU9OYCBhbmQgYERBTU9OX1NZU0ZTYC4KClRoZW4sIEkgc2VlIGEgS1VuaXQgdGVzdCBtZW50aW9uZWQ6IGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAuIFRoYXQmIzM5O3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX0RBTU9OX0tVTklUX1RFU1RgLiBUaGUgcHJvbXB0IGRvZXMgYXNrIHRvIGlkZW50aWZ5IG5lY2Vzc2FyeSBjb25maWdzIGZvciB0ZXN0aW5nLiBLVW5pdCBpc24mIzM5O3QgKmRpcmVjdGx5KiBpbnRlZ3JhdGVkIGludG8gc3l6a2FsbGVyLCB3aGljaCBpcyB3aGF0IHdlJiMzOTtyZSBmb2N1c2VkIG9uIGZvciBmdXp6aW5nLCBzbyBpdCYjMzk7cyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBFbmFibGluZyBpdCB3b24mIzM5O3QgaHVydCwgYnV0IHRoZSBwcmltYXJ5IGZ1enppbmcgbWV0aG9kIGRvZXNuJiMzOTt0IHVzZSBpdCwgc28gSSYjMzk7bSBsZWF2aW5nIGBEQU1PTl9LVU5JVF9URVNUYCBvdXQuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcy4gQWgsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIGluIGBtbS9kYW1vbi9zdGF0LmNgOiBgbXNlY3NfdG9famlmZmllc2AgY2hhbmdlZCB0byBgc2Vjc190b19qaWZmaWVzYC4gVGhpcyBpcyB3aXRoaW4gYGRhbW9uX3N0YXRfZGFtb25fY2FsbF9mbmAsIHNvIGBDT05GSUdfREFNT05fU1RBVGAgaXMgcmVsZXZhbnQuIEkgd2lsbCBpbmNsdWRlIHRoaXMuCgpTbywgdGhlIGRlZmluaXRpdmUgbGlzdDogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9TVEFUYC4KClRoZSBwYXRjaCYjMzk7cyBrZXkgY2hhbmdlIGlzIHRoZSBhbGxvY2F0b3Igc3dpdGNoIGluIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2bWFsbG9jX29ianNgLCBlbmFibGluZyBsYXJnZXIgYWxsb2NhdGlvbnMgdGhyb3VnaCBhIHZtYWxsb2MgZmFsbGJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gY29yZSBrZXJuZWwgbG9naWMsIGFuZCBpdCBuZWVkcyB0byBiZSBmdXp6ZWQgdG8gdmVyaWZ5IHRoZSB2bWFsbG9jIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4gVGhlIHBhdGNoIGFsc28gaGFzIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdHlwbyBmaXhlcywgYSBtYWNybyBzaW1wbGlmaWNhdGlvbiBpbiBgZGFtb25fc3RhdC5jYCwgYW5kIGluY2x1ZGVzIHRoZSBLVW5pdCB0ZXN0LCB3aGljaCBpcyBub3QgZXNzZW50aWFsIHRvIGZ1enppbmcsIGFzIHN5emthbGxlciBkb2VzbiYjMzk7dCB1c2UgaXQuCgpUaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgaXMgdGhpczogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgdG8gdXNlIGBrdm1hbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgLCBhbGxvd2luZyBsYXJnZSBhbGxvY2F0aW9ucyB0byBmYWxsIGJhY2sgdG8gdm1hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBmYWxsYmFjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4gT3RoZXIgY2hhbmdlcyBpbmNsdWRlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdHlwbyBmaXhlcywgYSBtYWNybyBzaW1wbGlmaWNhdGlvbiBpbiBgZGFtb25fc3RhdC5jYCwgYW5kIGEgbmV3IEtVbml0IHRlc3QuJiMzNDsKCmBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgdGhlIHJpZ2h0IGNhbGwgaGVyZS4gV2UmIzM5O3ZlIGdvdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIGludm9sdmluZyBhIG1lbW9yeSBhbGxvY2F0b3IuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byB1c2UgYGt2bWFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AsIGFsbG93aW5nIGxhcmdlIGFsbG9jYXRpb25zIHRvIGZhbGwgYmFjayB0byB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiBPdGhlciBjaGFuZ2VzIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCB0eXBvIGZpeGVzLCBhIG1hY3JvIHNpbXBsaWZpY2F0aW9uIGluIGBkYW1vbl9zdGF0LmNgLCBhbmQgYSBuZXcgS1VuaXQgdGVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byB1c2UgYGt2bWFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AsIGFsbG93aW5nIGxhcmdlIGFsbG9jYXRpb25zIHRvIGZhbGwgYmFjayB0byB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiBPdGhlciBjaGFuZ2VzIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCB0eXBvIGZpeGVzLCBhIG1hY3JvIHNpbXBsaWZpY2F0aW9uIGluIGBkYW1vbl9zdGF0LmNgLCBhbmQgYSBuZXcgS1VuaXQgdGVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjUwOjE3LjAzMDc3MDYxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDcyMjk0NzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1NUQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byB1c2UgYGt2bWFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AsIGFsbG93aW5nIGxhcmdlIGFsbG9jYXRpb25zIHRvIGZhbGwgYmFjayB0byB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuIE90aGVyIGNoYW5nZXMgaW5jbHVkZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHR5cG8gZml4ZXMsIGEgbWFjcm8gc2ltcGxpZmljYXRpb24gaW4gYGRhbW9uX3N0YXQuY2AsIGFuZCBhIG5ldyBLVW5pdCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MDoxNy4wMzA3Nzc1MjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDM0OTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI0NWQ3ZmVmM2RmYjIwMDY0M2RiMmMxNDc4YThjNzIwOWE3NmQ2OGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTU6NTA6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbmluZGV4IDAxMTI5NmYxZTdjMjE5Li5iMjY0OWVhMDExZjkzMSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuQEAgLTI0Niw3ICsyNDYsNyBAQCB3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhlIGZpbGVzLlxcbiBVbmRlciBgYG5yX3JlZ2lvbnNgYCBkaXJlY3RvcnksIHR3byBmaWxlcyBmb3IgdGhlIGxvd2VyLWJvdW5kIGFuZCB1cHBlci1ib3VuZFxcbiBvZiBEQU1PTidzIG1vbml0b3JpbmcgcmVnaW9ucyAoYGBtaW5gYCBhbmQgYGBtYXhgYCwgcmVzcGVjdGl2ZWx5KSwgd2hpY2hcXG4gY29udHJvbHMgdGhlIG1vbml0b3Jpbmcgb3ZlcmhlYWQsIGV4aXN0LiAgWW91IGNhbiBzZXQgYW5kIGdldCB0aGUgdmFsdWVzIGJ5XFxuLXdyaXRpbmcgdG8gYW5kIHJhZGluZyBmcm9tIHRoZSBmaWxlcy5cXG4rd3JpdGluZyB0byBhbmQgcmVhZGluZyBmcm9tIHRoZSBmaWxlcy5cXG4gXFxuIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGludGVydmFscyBhbmQgbW9uaXRvcmluZyByZWdpb25zIHJhbmdlLCBwbGVhc2UgcmVmZXJcXG4gdG8gdGhlIERlc2lnbiBkb2N1bWVudCAoOmRvYzpgL21tL2RhbW9uL2Rlc2lnbmApLlxcbkBAIC0yNjQsNyArMjY0LDcgQEAgUGxlYXNlIHJlZmVyIHRvICB0aGUgOnJlZjpgZGVzaWduIGRvY3VtZW50IG9mIHRoZSBmZWF0dXJlXFxuIFxcdTAwM2NkYW1vbl9kZXNpZ25fbW9uaXRvcmluZ19pbnRlcnZhbHNfYXV0b3R1bmluZ1xcdTAwM2VgIGZvciB0aGUgaW50ZXJuYWwgb2YgdGhlIHR1bmluZ1xcbiBtZWNoYW5pc20uICBSZWFkaW5nIGFuZCB3cml0aW5nIHRoZSBmb3VyIGZpbGVzIHVuZGVyIGBgaW50ZXJ2YWxzX2dvYWxgYFxcbiBkaXJlY3Rvcnkgc2hvd3MgYW5kIHVwZGF0ZXMgdGhlIHR1bmluZyBwYXJhbWV0ZXJzIHRoYXQgZGVzY3JpYmVkIGluIHRoZVxcbi06cmVmOmRlc2lnbiBkb2MgXFx1MDAzY2RhbW9uX2Rlc2lnbl9tb25pdG9yaW5nX2ludGVydmFsc19hdXRvdHVuaW5nXFx1MDAzZWAgd2l0aCB0aGUgc2FtZVxcbis6cmVmOmBkZXNpZ24gZG9jIFxcdTAwM2NkYW1vbl9kZXNpZ25fbW9uaXRvcmluZ19pbnRlcnZhbHNfYXV0b3R1bmluZ1xcdTAwM2VgIHdpdGggdGhlIHNhbWVcXG4gbmFtZXMuICBUaGUgdHVuaW5nIHN0YXJ0cyB3aXRoIHRoZSB1c2VyLXNldCBgYHNhbXBsZV91c2BgIGFuZCBgYGFnZ3JfdXNgYC4gIFRoZVxcbiB0dW5pbmctYXBwbGllZCBjdXJyZW50IHZhbHVlcyBvZiB0aGUgdHdvIGludGVydmFscyBjYW4gYmUgcmVhZCBmcm9tIHRoZVxcbiBgYHNhbXBsZV91c2BgIGFuZCBgYGFnZ3JfdXNgYCBmaWxlcyBhZnRlciB3cml0aW5nIGBgdXBkYXRlX3R1bmVkX2ludGVydmFsc2BgIHRvXFxuQEAgLTM3Nyw3ICszNzcsNyBAQCBzY2hlbWVzL1xcdTAwM2NOXFx1MDAzZS9cXG4gSW4gZWFjaCBzY2hlbWUgZGlyZWN0b3J5LCBuaW5lIGRpcmVjdG9yaWVzIChgYGFjY2Vzc19wYXR0ZXJuYGAsIGBgcXVvdGFzYGAsXFxuIGBgd2F0ZXJtYXJrc2BgLCBgYGNvcmVfZmlsdGVyc2BgLCBgYG9wc19maWx0ZXJzYGAsIGBgZmlsdGVyc2BgLCBgYGRlc3RzYGAsXFxuIGBgc3RhdHNgYCwgYW5kIGBgdHJpZWRfcmVnaW9uc2BgKSBhbmQgdGhyZWUgZmlsZXMgKGBgYWN0aW9uYGAsIGBgdGFyZ2V0X25pZGBgXFxuLWFuZCBgYGFwcGx5X2ludGVydmFsYGApIGV4aXN0LlxcbithbmQgYGBhcHBseV9pbnRlcnZhbF91c2BgKSBleGlzdC5cXG4gXFxuIFRoZSBgYGFjdGlvbmBgIGZpbGUgaXMgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIHNjaGVtZSdzIDpyZWY6YGFjdGlvblxcbiBcXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zX2FjdGlvblxcdTAwM2VgLiAgVGhlIGtleXdvcmRzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gYW5kIHJlYWRcXG5AQCAtNzQzLDcgKzc0Myw3IEBAIGNvdW50ZXIpLiAgRmluYWxseSB0aGUgdGVudGggZmllbGQgKGBgWGBgKSBzaG93cyB0aGUgYGBhZ2VgYCBvZiB0aGUgcmVnaW9uXFxuIChyZWZlciB0byA6cmVmOmBkZXNpZ24gXFx1MDAzY2RhbW9uX2Rlc2lnbl9hZ2VfdHJhY2tpbmdcXHUwMDNlYCBmb3IgbW9yZSBkZXRhaWxzIG9mIHRoZVxcbiBjb3VudGVyKS5cXG4gXFxuLUlmIHRoZSBldmVudCB3YXMgYGBkYW1vbjpkYW1vc19iZW9mcmVfYXBwbHlgYCwgdGhlIGBgcGVyZiBzY3JpcHRgYCBvdXRwdXQgd291bGRcXG4rSWYgdGhlIGV2ZW50IHdhcyBgYGRhbW9uOmRhbW9zX2JlZm9yZV9hcHBseWBgLCB0aGUgYGBwZXJmIHNjcmlwdGBgIG91dHB1dCB3b3VsZFxcbiBiZSBzb21ld2hhdCBsaWtlIGJlbG93OjpcXG4gXFxuICAgICBrZGFtb25kLjAgNDcyOTMgWzAwMF0gODA4MDEuMDYwMjE0OiBkYW1vbjpkYW1vc19iZWZvcmVfYXBwbHk6IGN0eF9pZHg9MCBzY2hlbWVfaWR4PTAgdGFyZ2V0X2lkeD0wIG5yX3JlZ2lvbnM9MTEgMTIxOTMyNjA3NDg4LTEzNTEyODcxMTE2ODogMCAxMzZcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuaW5kZXggMmRhN2NhMGQzZDE3YTQuLmMxNmEzYmIyODhkMDc5IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxcbkBAIC04Niw3ICs4Niw3IEBAIFRvIGtub3cgaG93IHVzZXItc3BhY2UgY2FuIGRvIHRoZSBjb25maWd1cmF0aW9uIHZpYSA6cmVmOmBEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXG4gZG9jdW1lbnRhdGlvbi5cXG4gXFxuIFxcbi0gLi4gX2RhbW9uX2Rlc2lnbl92YWRkcl90YXJnZXRfcmVnaW9uc19jb25zdHJ1Y3Rpb246XFxuKy4uIF9kYW1vbl9kZXNpZ25fdmFkZHJfdGFyZ2V0X3JlZ2lvbnNfY29uc3RydWN0aW9uOlxcbiBcXG4gVk1BLWJhc2VkIFRhcmdldCBBZGRyZXNzIFJhbmdlIENvbnN0cnVjdGlvblxcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuQEAgLTkzMCwxMSArOTMwLDExIEBAIGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgdGhlIHVzYWdlIHdvdWxkIGFsc28gbmVlZCB0byBiZSBvcHRpbWl6ZWQgZm9yIHRoZVxcbiBwdXJwb3NlLlxcbiBcXG4gVG8gc3VwcG9ydCBzdWNoIGNhc2VzLCB5ZXQgbW9yZSBEQU1PTiBBUEkgdXNlciBrZXJuZWwgbW9kdWxlcyB0aGF0IHByb3ZpZGUgbW9yZVxcbi1zaW1wbGUgYW5kIG9wdGltaXplZCB1c2VyIHNwYWNlIGludGVyZmFjZXMgYXJlIGF2YWlsYWJsZS4gIEN1cnJlbnRseSwgdHdvXFxuLW1vZHVsZXMgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiBhbmQgTFJVIGxpc3RzIG1hbmlwdWxhdGlvbiBhcmUgcHJvdmlkZWQuICBGb3JcXG4tbW9yZSBkZXRhaWwsIHBsZWFzZSByZWFkIHRoZSB1c2FnZSBkb2N1bWVudHMgZm9yIHRob3NlXFxuLSg6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdGAsIDpkb2M6YC9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltYCBhbmRcXG4tOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuXFxuK3NpbXBsZSBhbmQgb3B0aW1pemVkIHVzZXIgc3BhY2UgaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlLiAgQ3VycmVudGx5LCB0aHJlZVxcbittb2R1bGVzIGZvciBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzLCBwcm9hY3RpdmUgcmVjbGFtYXRpb24sIGFuZCBMUlUgbGlzdHNcXG4rbWFuaXB1bGF0aW9uIGFyZSBwcm92aWRlZC4gIEZvciBtb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3JcXG4rdGhvc2UgKDpkb2M6YC9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0YCwgOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW1gXFxuK2FuZCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnRgKS5cXG4gXFxuIC4uIF9kYW1vbl9kZXNpZ25fc3BlY2lhbF9wdXJwb3NlX21vZHVsZXNfZXhjbHVzaXZpdHk6XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCAwMjcyNTBlNDNjNjZmMi4uNjU4ZTRlMzI5N2IwODYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTEzNTYsMTQgKzEzNTYsMTQgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxcbiBcXHRpZiAoIWkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbitcXHRyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRpZiAoIXJhbmdlcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGkgPSAwO1xcbiBcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24oc3JjX3JlZ2lvbiwgc3JjKVxcbiBcXHRcXHRyYW5nZXNbaSsrXSA9IHNyY19yZWdpb24tXFx1MDAzZWFyO1xcbiBcXHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyhkc3QsIHJhbmdlcywgaSwgc3JjX21pbl9yZWdpb25fc3opO1xcbi1cXHRrZnJlZShyYW5nZXMpO1xcbitcXHRrdmZyZWUocmFuZ2VzKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3RhdC5jIGIvbW0vZGFtb24vc3RhdC5jXFxuaW5kZXggMGUxNGY1YmI4Zjc1ZDkuLmIwNWI2OGY3M2UxMGRlIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N0YXQuY1xcbisrKyBiL21tL2RhbW9uL3N0YXQuY1xcbkBAIC0xMzgsNyArMTM4LDcgQEAgc3RhdGljIGludCBkYW1vbl9zdGF0X2RhbW9uX2NhbGxfZm4odm9pZCAqZGF0YSlcXG4gXFxuIFxcdC8qIGF2b2lkIHVubmVjZXNzYXJpbHkgZnJlcXVlbnQgc3RhdCB1cGRhdGUgKi9cXG4gXFx0aWYgKHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsIGRhbW9uX3N0YXRfbGFzdF9yZWZyZXNoX2ppZmZpZXMgK1xcbi1cXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKDUgKiBNU0VDX1BFUl9TRUMpKSlcXG4rXFx0XFx0XFx0XFx0c2Vjc190b19qaWZmaWVzKDUpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGRhbW9uX3N0YXRfbGFzdF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuaW5kZXggZmNmN2M3ZmFkYjVmZTUuLmM1ZjUxMjRjM2QxZjQ2IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbkBAIC0xNDU2LDYgKzE0NTYsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBWZXJpZnkgdGhhdCBkYW1vc193YWxrKCkgcmVqZWN0cyBuZXcgcmVxdWVzdHMgd2hlblxcbisgKiB3YWxrX2NvbnRyb2xfb2Jzb2xldGUgaXMgc2V0LlxcbisgKlxcbisgKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcXG4rICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXFxcIm1tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVxcXCIpXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIGNvbnRyb2wgPSB7fTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG4rXFx0aWYgKCFjdHgpXFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcIik7XFxuK1xcbitcXHQvKiBTaW11bGF0ZSBzaHV0ZG93biBwaGFzZSAqL1xcbitcXHRjdHgtXFx1MDAzZXdhbGtfY29udHJvbF9vYnNvbGV0ZSA9IHRydWU7XFxuK1xcbitcXHRyZXQgPSBkYW1vc193YWxrKGN0eCwgXFx1MDAyNmNvbnRyb2wpO1xcbitcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgLUVDQU5DRUxFRCk7XFxuK1xcbitcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdGFyZ2V0KSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3JlZ2lvbnMpLFxcbkBAIC0xNDg1LDYgKzE1MTIsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnMpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24pLFxcbitcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfd2Fsa19jb250cm9sX29ic29sZXRlKSxcXG4gXFx0e30sXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL0tjb25maWcgYi9zYW1wbGVzL2RhbW9uL0tjb25maWdcXG5pbmRleCBjYmY5NmZkOGE4YmY5Yy4uMDBiZTNlNmJkZDY1OTkgMTAwNjQ0XFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9LY29uZmlnXFxuKysrIGIvc2FtcGxlcy9kYW1vbi9LY29uZmlnXFxuQEAgLTMxLDcgKzMxLDcgQEAgY29uZmlnIFNBTVBMRV9EQU1PTl9NVElFUlxcbiBcXHRib29sIFxcXCJEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmluZ1xcXCJcXG4gXFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBEQU1PTl9QQUREUlxcbiBcXHRoZWxwXFxuLVxcdCAgVGhwcyBidWlsZHMgREFNT04gc2FtcGxlIG1vZHVsZSBmb3IgbWVtb3J5IHRpZXJpZ24uXFxuK1xcdCAgVGhpcyBidWlsZHMgREFNT04gc2FtcGxlIG1vZHVsZSBmb3IgbWVtb3J5IHRpZXJpbmcuXFxuIFxcbiBcXHQgIFRoZSBtb2R1bGUgYXNzdW1lcyB0aGUgc3lzdGVtIGlzIGNvbnN0cnVjdGVkIHdpdGggdHdvIE5VTUEgbm9kZXMsXFxuIFxcdCAgd2hpY2ggc2VlbXMgYXMgbG9jYWwgYW5kIHJlbW90ZSBub2RlcyB0byBhbGwgQ1BVcy4gIEZvciBleGFtcGxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MDoxNy41NjIyMzQ2NDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDE5MTQ3MDY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1NUQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byB1c2UgYGt2bWFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AsIGFsbG93aW5nIGxhcmdlIGFsbG9jYXRpb25zIHRvIGZhbGwgYmFjayB0byB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuIE90aGVyIGNoYW5nZXMgaW5jbHVkZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHR5cG8gZml4ZXMsIGEgbWFjcm8gc2ltcGxpZmljYXRpb24gaW4gYGRhbW9uX3N0YXQuY2AsIGFuZCBhIG5ldyBLVW5pdCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI0NWQ3ZmVmM2RmYjIwMDY0M2RiMmMxNDc4YThjNzIwOWE3NmQ2OGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNTo1MDoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbmluZGV4IDAxMTI5NmYxZTdjMjE5Li5iMjY0OWVhMDExZjkzMSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTI0Niw3ICsyNDYsNyBAQCB3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhlIGZpbGVzLlxuIFVuZGVyIGBgbnJfcmVnaW9uc2BgIGRpcmVjdG9yeSwgdHdvIGZpbGVzIGZvciB0aGUgbG93ZXItYm91bmQgYW5kIHVwcGVyLWJvdW5kXG4gb2YgREFNT04ncyBtb25pdG9yaW5nIHJlZ2lvbnMgKGBgbWluYGAgYW5kIGBgbWF4YGAsIHJlc3BlY3RpdmVseSksIHdoaWNoXG4gY29udHJvbHMgdGhlIG1vbml0b3Jpbmcgb3ZlcmhlYWQsIGV4aXN0LiAgWW91IGNhbiBzZXQgYW5kIGdldCB0aGUgdmFsdWVzIGJ5XG4td3JpdGluZyB0byBhbmQgcmFkaW5nIGZyb20gdGhlIGZpbGVzLlxuK3dyaXRpbmcgdG8gYW5kIHJlYWRpbmcgZnJvbSB0aGUgZmlsZXMuXG4gXG4gRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgaW50ZXJ2YWxzIGFuZCBtb25pdG9yaW5nIHJlZ2lvbnMgcmFuZ2UsIHBsZWFzZSByZWZlclxuIHRvIHRoZSBEZXNpZ24gZG9jdW1lbnQgKDpkb2M6YC9tbS9kYW1vbi9kZXNpZ25gKS5cbkBAIC0yNjQsNyArMjY0LDcgQEAgUGxlYXNlIHJlZmVyIHRvICB0aGUgOnJlZjpgZGVzaWduIGRvY3VtZW50IG9mIHRoZSBmZWF0dXJlXG4gXHUwMDNjZGFtb25fZGVzaWduX21vbml0b3JpbmdfaW50ZXJ2YWxzX2F1dG90dW5pbmdcdTAwM2VgIGZvciB0aGUgaW50ZXJuYWwgb2YgdGhlIHR1bmluZ1xuIG1lY2hhbmlzbS4gIFJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIGZvdXIgZmlsZXMgdW5kZXIgYGBpbnRlcnZhbHNfZ29hbGBgXG4gZGlyZWN0b3J5IHNob3dzIGFuZCB1cGRhdGVzIHRoZSB0dW5pbmcgcGFyYW1ldGVycyB0aGF0IGRlc2NyaWJlZCBpbiB0aGVcbi06cmVmOmRlc2lnbiBkb2MgXHUwMDNjZGFtb25fZGVzaWduX21vbml0b3JpbmdfaW50ZXJ2YWxzX2F1dG90dW5pbmdcdTAwM2VgIHdpdGggdGhlIHNhbWVcbis6cmVmOmBkZXNpZ24gZG9jIFx1MDAzY2RhbW9uX2Rlc2lnbl9tb25pdG9yaW5nX2ludGVydmFsc19hdXRvdHVuaW5nXHUwMDNlYCB3aXRoIHRoZSBzYW1lXG4gbmFtZXMuICBUaGUgdHVuaW5nIHN0YXJ0cyB3aXRoIHRoZSB1c2VyLXNldCBgYHNhbXBsZV91c2BgIGFuZCBgYGFnZ3JfdXNgYC4gIFRoZVxuIHR1bmluZy1hcHBsaWVkIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSB0d28gaW50ZXJ2YWxzIGNhbiBiZSByZWFkIGZyb20gdGhlXG4gYGBzYW1wbGVfdXNgYCBhbmQgYGBhZ2dyX3VzYGAgZmlsZXMgYWZ0ZXIgd3JpdGluZyBgYHVwZGF0ZV90dW5lZF9pbnRlcnZhbHNgYCB0b1xuQEAgLTM3Nyw3ICszNzcsNyBAQCBzY2hlbWVzL1x1MDAzY05cdTAwM2UvXG4gSW4gZWFjaCBzY2hlbWUgZGlyZWN0b3J5LCBuaW5lIGRpcmVjdG9yaWVzIChgYGFjY2Vzc19wYXR0ZXJuYGAsIGBgcXVvdGFzYGAsXG4gYGB3YXRlcm1hcmtzYGAsIGBgY29yZV9maWx0ZXJzYGAsIGBgb3BzX2ZpbHRlcnNgYCwgYGBmaWx0ZXJzYGAsIGBgZGVzdHNgYCxcbiBgYHN0YXRzYGAsIGFuZCBgYHRyaWVkX3JlZ2lvbnNgYCkgYW5kIHRocmVlIGZpbGVzIChgYGFjdGlvbmBgLCBgYHRhcmdldF9uaWRgYFxuLWFuZCBgYGFwcGx5X2ludGVydmFsYGApIGV4aXN0LlxuK2FuZCBgYGFwcGx5X2ludGVydmFsX3VzYGApIGV4aXN0LlxuIFxuIFRoZSBgYGFjdGlvbmBgIGZpbGUgaXMgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIHNjaGVtZSdzIDpyZWY6YGFjdGlvblxuIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc19hY3Rpb25cdTAwM2VgLiAgVGhlIGtleXdvcmRzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gYW5kIHJlYWRcbkBAIC03NDMsNyArNzQzLDcgQEAgY291bnRlcikuICBGaW5hbGx5IHRoZSB0ZW50aCBmaWVsZCAoYGBYYGApIHNob3dzIHRoZSBgYGFnZWBgIG9mIHRoZSByZWdpb25cbiAocmVmZXIgdG8gOnJlZjpgZGVzaWduIFx1MDAzY2RhbW9uX2Rlc2lnbl9hZ2VfdHJhY2tpbmdcdTAwM2VgIGZvciBtb3JlIGRldGFpbHMgb2YgdGhlXG4gY291bnRlcikuXG4gXG4tSWYgdGhlIGV2ZW50IHdhcyBgYGRhbW9uOmRhbW9zX2Jlb2ZyZV9hcHBseWBgLCB0aGUgYGBwZXJmIHNjcmlwdGBgIG91dHB1dCB3b3VsZFxuK0lmIHRoZSBldmVudCB3YXMgYGBkYW1vbjpkYW1vc19iZWZvcmVfYXBwbHlgYCwgdGhlIGBgcGVyZiBzY3JpcHRgYCBvdXRwdXQgd291bGRcbiBiZSBzb21ld2hhdCBsaWtlIGJlbG93OjpcbiBcbiAgICAga2RhbW9uZC4wIDQ3MjkzIFswMDBdIDgwODAxLjA2MDIxNDogZGFtb246ZGFtb3NfYmVmb3JlX2FwcGx5OiBjdHhfaWR4PTAgc2NoZW1lX2lkeD0wIHRhcmdldF9pZHg9MCBucl9yZWdpb25zPTExIDEyMTkzMjYwNzQ4OC0xMzUxMjg3MTExNjg6IDAgMTM2XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCAyZGE3Y2EwZDNkMTdhNC4uYzE2YTNiYjI4OGQwNzkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTg2LDcgKzg2LDcgQEAgVG8ga25vdyBob3cgdXNlci1zcGFjZSBjYW4gZG8gdGhlIGNvbmZpZ3VyYXRpb24gdmlhIDpyZWY6YERBTU9OIHN5c2ZzIGludGVyZmFjZVxuIGRvY3VtZW50YXRpb24uXG4gXG4gXG4tIC4uIF9kYW1vbl9kZXNpZ25fdmFkZHJfdGFyZ2V0X3JlZ2lvbnNfY29uc3RydWN0aW9uOlxuKy4uIF9kYW1vbl9kZXNpZ25fdmFkZHJfdGFyZ2V0X3JlZ2lvbnNfY29uc3RydWN0aW9uOlxuIFxuIFZNQS1iYXNlZCBUYXJnZXQgQWRkcmVzcyBSYW5nZSBDb25zdHJ1Y3Rpb25cbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtOTMwLDExICs5MzAsMTEgQEAgY29udHJvbCBwYXJhbWV0ZXJzIGZvciB0aGUgdXNhZ2Ugd291bGQgYWxzbyBuZWVkIHRvIGJlIG9wdGltaXplZCBmb3IgdGhlXG4gcHVycG9zZS5cbiBcbiBUbyBzdXBwb3J0IHN1Y2ggY2FzZXMsIHlldCBtb3JlIERBTU9OIEFQSSB1c2VyIGtlcm5lbCBtb2R1bGVzIHRoYXQgcHJvdmlkZSBtb3JlXG4tc2ltcGxlIGFuZCBvcHRpbWl6ZWQgdXNlciBzcGFjZSBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUuICBDdXJyZW50bHksIHR3b1xuLW1vZHVsZXMgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiBhbmQgTFJVIGxpc3RzIG1hbmlwdWxhdGlvbiBhcmUgcHJvdmlkZWQuICBGb3Jcbi1tb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3IgdGhvc2Vcbi0oOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXRgLCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbWAgYW5kXG4tOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuXG4rc2ltcGxlIGFuZCBvcHRpbWl6ZWQgdXNlciBzcGFjZSBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUuICBDdXJyZW50bHksIHRocmVlXG4rbW9kdWxlcyBmb3IgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcywgcHJvYWN0aXZlIHJlY2xhbWF0aW9uLCBhbmQgTFJVIGxpc3RzXG4rbWFuaXB1bGF0aW9uIGFyZSBwcm92aWRlZC4gIEZvciBtb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3Jcbit0aG9zZSAoOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXRgLCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbWBcbithbmQgOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuXG4gXG4gLi4gX2RhbW9uX2Rlc2lnbl9zcGVjaWFsX3B1cnBvc2VfbW9kdWxlc19leGNsdXNpdml0eTpcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDAyNzI1MGU0M2M2NmYyLi42NThlNGUzMjk3YjA4NiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTM1NiwxNCArMTM1NiwxNCBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsXG4gXHRpZiAoIWkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuK1x0cmFuZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcmFuZ2VzLCBpLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmICghcmFuZ2VzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGkgPSAwO1xuIFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHNyY19yZWdpb24sIHNyYylcbiBcdFx0cmFuZ2VzW2krK10gPSBzcmNfcmVnaW9uLVx1MDAzZWFyO1xuIFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbi1cdGtmcmVlKHJhbmdlcyk7XG4rXHRrdmZyZWUocmFuZ2VzKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N0YXQuYyBiL21tL2RhbW9uL3N0YXQuY1xuaW5kZXggMGUxNGY1YmI4Zjc1ZDkuLmIwNWI2OGY3M2UxMGRlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3RhdC5jXG4rKysgYi9tbS9kYW1vbi9zdGF0LmNcbkBAIC0xMzgsNyArMTM4LDcgQEAgc3RhdGljIGludCBkYW1vbl9zdGF0X2RhbW9uX2NhbGxfZm4odm9pZCAqZGF0YSlcbiBcbiBcdC8qIGF2b2lkIHVubmVjZXNzYXJpbHkgZnJlcXVlbnQgc3RhdCB1cGRhdGUgKi9cbiBcdGlmICh0aW1lX2JlZm9yZV9lcShqaWZmaWVzLCBkYW1vbl9zdGF0X2xhc3RfcmVmcmVzaF9qaWZmaWVzICtcbi1cdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoNSAqIE1TRUNfUEVSX1NFQykpKVxuK1x0XHRcdFx0c2Vjc190b19qaWZmaWVzKDUpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRkYW1vbl9zdGF0X2xhc3RfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcztcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5jNWY1MTI0YzNkMWY0NiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTQ1Niw2ICsxNDU2LDMzIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XG4gfVxuIFxuKy8qXG4rICogVmVyaWZ5IHRoYXQgZGFtb3Nfd2FsaygpIHJlamVjdHMgbmV3IHJlcXVlc3RzIHdoZW5cbisgKiB3YWxrX2NvbnRyb2xfb2Jzb2xldGUgaXMgc2V0LlxuKyAqXG4rICogVGhpcyB0ZXN0cyB0aGUgaW52YXJpYW50IGludHJvZHVjZWQgYnk6XG4rICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXCJtbS9kYW1vbi9jb3JlOiBmaXggZGFtb3Nfd2FsaygpIHZzIGtkYW1vbmRfZm4oKSBleGl0IHJhY2VcIilcbisgKi9cbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuK1x0c3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCBjb250cm9sID0ge307XG4rXHRpbnQgcmV0O1xuK1xuK1x0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuK1x0aWYgKCFjdHgpXG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJjdHggYWxsb2MgZmFpbFwiKTtcbitcbitcdC8qIFNpbXVsYXRlIHNodXRkb3duIHBoYXNlICovXG4rXHRjdHgtXHUwMDNld2Fsa19jb250cm9sX29ic29sZXRlID0gdHJ1ZTtcbitcbitcdHJldCA9IGRhbW9zX3dhbGsoY3R4LCBcdTAwMjZjb250cm9sKTtcbitcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByZXQsIC1FQ0FOQ0VMRUQpO1xuK1xuK1x0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF90YXJnZXQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3JlZ2lvbnMpLFxuQEAgLTE0ODUsNiArMTUxMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbiksXG4rXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfd2Fsa19jb250cm9sX29ic29sZXRlKSxcbiBcdHt9LFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9LY29uZmlnIGIvc2FtcGxlcy9kYW1vbi9LY29uZmlnXG5pbmRleCBjYmY5NmZkOGE4YmY5Yy4uMDBiZTNlNmJkZDY1OTkgMTAwNjQ0XG4tLS0gYS9zYW1wbGVzL2RhbW9uL0tjb25maWdcbisrKyBiL3NhbXBsZXMvZGFtb24vS2NvbmZpZ1xuQEAgLTMxLDcgKzMxLDcgQEAgY29uZmlnIFNBTVBMRV9EQU1PTl9NVElFUlxuIFx0Ym9vbCBcIkRBTU9OIHNhbXBsZSBtb2R1bGUgZm9yIG1lbW9yeSB0aWVyaW5nXCJcbiBcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IERBTU9OX1BBRERSXG4gXHRoZWxwXG4tXHQgIFRocHMgYnVpbGRzIERBTU9OIHNhbXBsZSBtb2R1bGUgZm9yIG1lbW9yeSB0aWVyaWduLlxuK1x0ICBUaGlzIGJ1aWxkcyBEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmluZy5cbiBcbiBcdCAgVGhlIG1vZHVsZSBhc3N1bWVzIHRoZSBzeXN0ZW0gaXMgY29uc3RydWN0ZWQgd2l0aCB0d28gTlVNQSBub2RlcyxcbiBcdCAgd2hpY2ggc2VlbXMgYXMgbG9jYWwgYW5kIHJlbW90ZSBub2RlcyB0byBhbGwgQ1BVcy4gIEZvciBleGFtcGxlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTA6MTcuNTYyMjM4NjM4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM0MDMxNTQ0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggUmV2aWV3OiBJbml0aWFsIFRob3VnaHRzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLiBTZWVtcyBsaWtlIGl0IHRvdWNoZXMgYSBmZXcgYXJlYXM6IGRvY3VtZW50YXRpb24sIGNvcmUgY29kZSwgc29tZSBzdGF0cywgYW5kIGEgdGVzdCBmaWxlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzLlxuXG5SaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSBjaGFuZ2UgaW4gYG1tL2RhbW9uL2NvcmUuY2AuICBUaGV5J3ZlIHN3YXBwZWQgYGttYWxsb2Nfb2Jqc2AgZm9yIGBrdm1hbGxvY19vYmpzYCBhbmQgY29ycmVzcG9uZGluZ2x5LCBga2ZyZWVgIHRvIGBrdmZyZWVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgYWxsb2NhdG9yIGNoYW5nZS5cIiAgQnV0IHdhaXQsIHdoYXQncyBga21hbGxvY19vYmpzYD8gSXMgaXQgZXZlbiBhIHJlYWwgZnVuY3Rpb24/ICBBaCwgaXQncyBub3QgYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24sIGl0IGlzIHByb2JhYmx5IGEgbWFjcm8uIFNvIGl0IGRvZXNuJ3QgbWF0dGVyLCBpdCBpcyBhbiBhbGxvY2F0b3IgY2hhbmdlLiBPaywgbm93IEknbSBjdXJpb3VzLCBga21hbGxvY19vYmpzYCBtdXN0IGJlIGEgd3JhcHBlciBmb3Igc29tZXRoaW5nIGVsc2UuIElzIGl0IGBrbWFsbG9jX2FycmF5YD8gTGV0IG1lIGNoZWNrIHRoZSBjb2RlLi4uIFllcCwgZG9lc24ndCBtYXR0ZXIsIGl0J3MgYW4gYWxsb2NhdG9yIGNoYW5nZS5cblxuTW92aW5nIG9uLCBgbW0vZGFtb24vc3RhdC5jYCBoYXMgYSBzaW1wbGUgY2hhbmdlOiBgbXNlY3NfdG9famlmZmllcyg1ICogTVNFQ19QRVJfU0VDKWAgYmVjb21lcyBgc2Vjc190b19qaWZmaWVzKDUpYC4gIENvbXBsZXRlbHkgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIGp1c3QgYSBkaWZmZXJlbnQgd2F5IG9mIGV4cHJlc3NpbmcgdGhlIHNhbWUgdGltZSBpbnRlcnZhbC4gIE5vIGJpZyBkZWFsIHRoZXJlLlxuXG5UaGVuLCB0aGVyZSdzIGEgbmV3IEtVbml0IHRlc3QgYWRkZWQgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEZpbmUsIG1vcmUgdGVzdHMgYXJlIGFsd2F5cyBnb29kLlxuXG5TbywgdGhlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhbGx5IGJvaWxzIGRvd24gdG8gc3dhcHBpbmcgdGhlIGFsbG9jYXRvciBpbiBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYC4gQnV0IHdhaXQsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCB3YXJyYW50cyBmdXp6aW5nPyBDaGFuZ2luZyBmcm9tIGBrbWFsbG9jYCB0byBga3ZtYWxsb2NgIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBjYW4gYWxsb3cgYWxsb2NhdGlvbiBmYWlsdXJlcyB0byBiZSBwcmV2ZW50ZWQgZm9yIGxhcmdlIGFycmF5cy4gQWNjb3JkaW5nIHRvIHRoZSBwcm9tcHQgaXQgc2F5cywgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCJcblRoaXMgYWxsb3dzIGxhcmdlciBhbGxvY2F0aW9ucyB0byBzdWNjZWVkIGJ5IGZhbGxpbmcgYmFjayB0byB2bWFsbG9jLiBZZXMsIGl0IGFmZmVjdHMgZXhlY3V0aW9uIGZsb3cuIFllcywgaXQgaXMgd29ydGggZnV6emluZy5cbk9rLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0IG9mIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIG9uZSBtb3JlIHRpbWUsIGp1c3QgdG8gYmUgc3VyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTA6MzAuOTY1Mzk4NTk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDc3NTg4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMzI4PXN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9udGhfdGFyZ2V0KGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM0Ni0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTM0NzpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsXFxubW0vZGFtb24vY29yZS5jLTEzNDgtXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqc3JjLCB1bnNpZ25lZCBsb25nIHNyY19taW5fcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEzNzA9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0KFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNzYtXFxubW0vZGFtb24vY29yZS5jOjEzNzc6XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKGRzdCwgc3JjLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTEzNzgtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTM3PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE1My1cXHR9XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExNTQ6XFx0ZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKGRzdF90YXJnZXQsIHNyY190YXJnZXQsIDEpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTU1LVxcdGkgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MDozMy45MTMxNjkwNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjM2ODY1MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyB0aGUgRnVuY3Rpb24gQ2FsbCBIaWVyYXJjaHkqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGlzIGFjdHVhbGx5ICpkb2luZyouIFRoZSBjb2RlJ3Mgb3JnYW5pemVkLCBzbyBJIGNhbiBzdGFydCBieSB0cmFjaW5nIGl0cyBjYWxsaW5nIGZ1bmN0aW9ucy4gSXQgYXBwZWFycyB0byBiZSBjYWxsZWQgYnkgYGRhbW9uX2NvbW1pdF90YXJnZXRgLiBBbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRgLCBpbiB0dXJuLCBpcyB0cmlnZ2VyZWQgYnkgYGRhbW9uX2NvbW1pdF9jdHhgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgbGlrZWx5IHJlcHJlc2VudHMgYSAqbG93ZXItbGV2ZWwsIG1vcmUgZ3JhbnVsYXIqIG9wZXJhdGlvbiB3aXRoaW4gYSBsYXJnZXIgcHJvY2Vzcywgc2luY2UgaXQncyBuZXN0ZWQgZGVlcCB3aXRoaW4gdGhlIGNhbGwgc3RhY2suIFRoZSBcInJlZ2lvbnNcIiBpbiB0aGUgbmFtZSBhcmUgdGhlIGtleS4gSXQgbG9va3MgbGlrZSBgZGFtb25fY29tbWl0X3RhcmdldGAgaGFuZGxlcyBzb21lIGxhcmdlci1zY29wZWQgY29tbWl0bWVudCB0YXNrLCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgaXMgd2hhdCdzIGRlYWxpbmcgd2l0aCB0aGUgYWN0dWFsIG1lbW9yeSByZWdpb25zLCB0aGUgc3BlY2lmaWNzLCB0aGUgbWludXRpYWUuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgbGVhZGluZyBtZSB0byB0aGlzIGNvbmNsdXNpb24uIExldCdzIGRlbHZlIGluIHRvIHVuZGVyc3RhbmQgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjUwOjQxLjU1MDAzNzE1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg2OTYxMTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2NvbW1pdF9jdHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTg1Mj1zdHJ1Y3QgZGFtb25fY3R4IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC04ODgtXFx0ICogaW5kaWNhdGUgaWYgdGhpcyBtYXkgYmUgY29ycnVwdGVkLiAgQ3VycmVudG9ubHkgdGhpcyBpcyBzZXQgb25seSBmb3JcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODg5OlxcdCAqIGRhbW9uX2NvbW1pdF9jdHgoKSBmYWlsdXJlLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaC04OTAtXFx0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA1Mj12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1My1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLCBzc2l6ZV90IG5yX3NjaGVtZXMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDU0OmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKm9sZF9jdHgsIHN0cnVjdCBkYW1vbl9jdHggKm5ld19jdHgpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDU1LWludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTUyNz1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU1OC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTU1OTogKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cXG5tbS9kYW1vbi9jb3JlLmMtMTU2MC0gKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTcwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxNTcxOmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNTcyLXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDAtXFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDE6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDItb3V0Olxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI2Ny1cXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjY4OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNjktb3V0Olxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDg2PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwOTQtXFx0XFx0cmV0dXJuIE5VTEw7XFxubW0vZGFtb24vc3lzZnMuYzoyMDk1OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHJ1bm5pbmdfY3R4KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIwOTYtXFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTA5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMjgtXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjEyOTpcXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBwYXJhbV9jdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjEzMC1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjEzMS1cXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9zeXNmcy5jOjIxMzI6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTMzLW91dDpcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTc5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE5Mi1cXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk2O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTkzOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExOTQtXFx0c3JjLVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTE5NTpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIC1FSU5WQUwpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTk2LVxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExOTctXFx0c3JjLVxcdTAwM2VwYXVzZSA9IHRydWU7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExOTg6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAwKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE5OS1cXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkc3QtXFx1MDAzZXBhdXNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTA6NDQuMjM3MDExNDk0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5MTY4NDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkaWZmIHJlbGF0ZWQgdG8gREFNT04uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGlzIHJlYWNoYWJsZSBmcm9tIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCB3aGljaCBpbiB0dXJuIGdldHMgdHJpZ2dlcmVkIGJ5IHN5c2ZzIHdyaXRlcy4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBpdCBnaXZlcyBhIHBvdGVudGlhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93LlxuXG5UaGVuIEkgbm90aWNlZCB0aGVyZSdzIGEgbmV3IHRlc3QgYWRkZWQsIGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAsIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIHRlc3QgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIGBkYW1vc193YWxrKClgLCBiZWNhdXNlIHRoZSBwYXRjaCBzZWVtcyB0byBoYXZlIGFkZGVkIHRoaXMgdGVzdCB3aGljaCB0ZXN0cyBgZGFtb3Nfd2FsaygpYC4gSSBzaG91bGQgcHJvYmFibHkgZXhhbWluZSB0aGF0IHRlc3QgaW4gbW9yZSBkZXRhaWwgbGF0ZXIuXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBoYXMgY2hhbmdlZD8gSSBuZWVkIHRvIGdvIGJhY2sgb3ZlciB0aGUgZGlmZiBtb3JlIGNhcmVmdWxseS4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpdCBsb29rcyBsaWtlIGBrbWFsbG9jX29ianNgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGt2bWFsbG9jX29ianNgIGFuZCBjb3JyZXNwb25kaW5nIGBrZnJlZWAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBga3ZmcmVlYCBpbiBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYC4gIGBrbWFsbG9jX29ianNgIGRvZXNuJ3Qgc2VlbSBmYW1pbGlhciwgSSdtIHRoaW5raW5nIGl0J3MgcHJvYmFibHkgYSBtYWNybyBvciBoZWxwZXIgZGVmaW5lZCB3aXRoaW4gREFNT04gaXRzZWxmLCBtYXliZSBpbiBgbW0vZGFtb24vY29yZS5jYCBvciBzb21ldGhpbmcgaW5jbHVkZWQgbGlrZSBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gIExldCBtZSB2ZXJpZnkgdGhpcy4uLndhaXQsIEkgdGhpbmsgYGttYWxsb2NfYXJyYXlgICppcyogYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24uIFNvIGBrbWFsbG9jX29ianNgIG11c3QgYmUgYSBEQU1PTi1zcGVjaWZpYyBhYnN0cmFjdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NzMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTA6NTEuNTI4Njk5MzI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NjI2ODc1MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21hbGxvY19vYmpzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMzY2NiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1OD1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYW4gYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2MS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NjI6XFx0cCA9IGttYWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDEtXFx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMjpcXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDMtXFx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG4tLVxcbmFyY2gvYXJtL21tL3BnZC5jLTE5LSNpZmRlZiBDT05GSUdfQVJNX0xQQUVcXG5hcmNoL2FybS9tbS9wZ2QuYzoyMDojZGVmaW5lIF9wZ2RfYWxsb2MobW0pXFx0XFx0a21hbGxvY19vYmpzKHBnZF90LCBQVFJTX1BFUl9QR0QsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKVxcbmFyY2gvYXJtL21tL3BnZC5jLTIxLSNkZWZpbmUgX3BnZF9mcmVlKG1tLCBwZ2QpXFx0a2ZyZWUocGdkKVxcbi0tXFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM9NzY0PXN0YXRpYyBpbnQgY292ZXJhZ2Vfc3RhcnQoY29uc3QgdW5pb24gZGVjb2RlX2l0ZW0gKnRhYmxlKVxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2NS17XFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM6NzY2OlxcdGNvdmVyYWdlLmJhc2UgPSBrbWFsbG9jX29ianMoc3RydWN0IGNvdmVyYWdlX2VudHJ5LFxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2Ny1cXHRcXHRcXHRcXHQgICAgIE1BWF9DT1ZFUkFHRV9FTlRSSUVTKTtcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTM5MT11MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpXFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTQtXFx0ICovXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6NDE1OlxcdGRlc2NfYmFzZSA9ICh1MzIpIGttYWxsb2Nfb2JqcyhhdTF4X2RkbWFfZGVzY190LCBlbnRyaWVzLFxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNi1cXHRcXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTUzMj1hZGRfc3lzdGVtX21hcF9hZGRyZXNzZXMoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldiwgaW50IG51bV9hZGRycywgXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTM4LVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzo1Mzk6XFx0ZGV2LVxcdTAwM2VhZGRyID0ga21hbGxvY19vYmpzKCpkZXYtXFx1MDAzZWFkZHIsIG51bV9hZGRycyk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTU0MC1cXHRpZighZGV2LVxcdTAwM2VhZGRyKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9NzMxPWludCBrdm1fdmNwdV9pb2N0bF9jb25maWdfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzQtXFx0XFx0ICAgIGNmZy1cXHUwMDNlYXJyYXkgLyBQQUdFX1NJWkU7XFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjc3NTpcXHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3Ni1cXHRpZiAoIXBhZ2VzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTg5OD1pbnQga3ZtcHBjX2U1MDBfdGxiX2luaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjkxNTpcXHR2Y3B1X2U1MDAtXFx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVxcdTAwM2VndGxiX2FyY2gsXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNi1cXHRcXHRcXHRcXHRcXHQgICAgS1ZNX0U1MDBfVExCMF9TSVpFICsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYz00NT1zdGF0aWMgaW50IGdyb3cocmhfaW5mb190ICogaW5mbywgaW50IG1heF9ibG9ja3MpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTYtXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jOjU3OlxcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01OC1cXHRpZiAoYmxvY2sgPT0gTlVMTClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz03NTU9c3RhdGljIGludCBjcmVhdGVfZXZlbnRzX2Zyb21fY2F0YWxvZyhzdHJ1Y3QgYXR0cmlidXRlICoqKmV2ZW50c18sXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MDk6XFx0ZXZlbnRzID0ga21hbGxvY19vYmpzKCpldmVudHMsIGF0dHJfbWF4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxMC1cXHRpZiAoIWV2ZW50cykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1OlxcdGV2ZW50X2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9kZXNjcywgZXZlbnRfaWR4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNi1cXHRpZiAoIWV2ZW50X2Rlc2NzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIwLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MjE6XFx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cXHRpZiAoIWV2ZW50X2xvbmdfZGVzY3MpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTUzLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0OlxcdHBwYzR4eF9oc3RhX21zaS5pcnFfbWFwID0ga21hbGxvY19vYmpzKGludCwgaXJxX2NvdW50KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1NS1cXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM9MTIwPXN0YXRpYyBpbnQgcHNlcmllc19wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3ZmcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDMtXFx0cGRuID0gcGNpX2dldF9wZG4ocGRldik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcXHRwZG4tXFx1MDAzZXBlX251bV9tYXAgPSBrbWFsbG9jX29ianMoKnBkbi1cXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0NS1cXHRpZiAoIXBkbi1cXHUwMDNlcGVfbnVtX21hcClcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jPTE1NDk9dm9pZCBfX2luaXQgbXBpY19pbml0KHN0cnVjdCBtcGljICptcGljKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0MS1cXHQvKiBhbGxvY2F0ZSBtZW1vcnkgdG8gc2F2ZSBtcGljIHN0YXRlICovXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcXHRtcGljLVxcdTAwM2VzYXZlX2RhdGEgPSBrbWFsbG9jX29ianMoKm1waWMtXFx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cXHUwMDNlbnVtX3NvdXJjZXMpO1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDMtXFx0QlVHX09OKG1waWMtXFx1MDAzZXNhdmVfZGF0YSA9PSBOVUxMKTtcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0zMD1zdGF0aWMgdm9pZCAqZGlhZzBjX3N0b3JlKHVuc2lnbmVkIGludCAqY291bnQpXFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMzctXFx0Y3B1X2NvdW50ID0gbnVtX29ubGluZV9jcHVzKCk7XFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jOjM4OlxcdGNwdV92ZWMgPSBrbWFsbG9jX29ianMoKmNwdV92ZWMsIG51bV9wb3NzaWJsZV9jcHVzKCkpO1xcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0zOS1cXHRpZiAoIWNwdV92ZWMpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaD0xOTA9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWRhbF9idWZmZXIgKippZGFsX2J1ZmZlcl9hcnJheV9hbGxvYyhzaXplX3Qgc2l6ZSwgaW50IHBhZ2Vfb3JkZXIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaC0xOTctXFx0Y291bnQgPSAoc2l6ZSArIENDV19NQVhfQllURV9DT1VOVCAtIDEpIC8gQ0NXX01BWF9CWVRFX0NPVU5UO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oOjE5ODpcXHRpYnMgPSBrbWFsbG9jX29ianMoKmlicywgY291bnQgKyAxKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaC0xOTktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYz0yNjY9c3RhdGljIGRlYnVnX2VudHJ5X3QgKioqZGVidWdfYXJlYXNfYWxsb2MoaW50IHBhZ2VzX3Blcl9hcmVhLCBpbnQgbnJfYXJlYXMpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjcwLVxcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzoyNzE6XFx0YXJlYXMgPSBrbWFsbG9jX29ianMoZGVidWdfZW50cnlfdCAqKiwgbnJfYXJlYXMpO1xcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy0yNzItXFx0aWYgKCFhcmVhcylcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy0yNzUtXFx0XFx0LyogR0ZQX05PV0FSTiB0byBhdm9pZCB1c2VyIHRyaWdnZXJhYmxlIFdBUk4sIHdlIGhhbmRsZSBmYWlscyAqL1xcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzoyNzY6XFx0XFx0YXJlYXNbaV0gPSBrbWFsbG9jX29ianMoZGVidWdfZW50cnlfdCAqLCBwYWdlc19wZXJfYXJlYSxcXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjc3LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM9OTY0PXN0YXRpYyBfX2luaXQgc3RydWN0IGF0dHJpYnV0ZSAqKm1lcmdlX2F0dHIoc3RydWN0IGF0dHJpYnV0ZSAqKmEsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfY3B1bV9jZl9ldmVudHMuYy05NzgtXFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM6OTc5OlxcdG5ldyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYXR0cmlidXRlICosIGopO1xcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9jcHVtX2NmX2V2ZW50cy5jLTk4MC1cXHRpZiAoIW5ldylcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYz0xMDk2PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICoqIF9faW5pdCBhdHRyX2V2ZW50X2luaXQoc3RydWN0IHBhaV9wbXUgKnApXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmMtMTEwMS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM6MTEwMjpcXHRhdHRycyA9IGttYWxsb2Nfb2JqcygqYXR0cnMsIG1pbl9hdHRyICsgMSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0xMTAzLVxcdGlmICghYXR0cnMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9MjAzPWludCBrdm1fczM5MF9pbXBvcnRfYnBfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjM0LVxcdGlmIChucl93cCBcXHUwMDNlIDApIHtcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MjM1OlxcdFxcdHdwX2luZm8gPSBrbWFsbG9jX29ianMoKndwX2luZm8sIG5yX3dwLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yMzYtXFx0XFx0aWYgKCF3cF9pbmZvKSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjQxLVxcdGlmIChucl9icCBcXHUwMDNlIDApIHtcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MjQyOlxcdFxcdGJwX2luZm8gPSBrbWFsbG9jX29ianMoKmJwX2luZm8sIG5yX2JwLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNDMtXFx0XFx0aWYgKCFicF9pbmZvKSB7XFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYz02MjU9U1lTQ0FMTF9ERUZJTkU1KHV0cmFwX2luc3RhbGwsIHV0cmFwX2VudHJ5X3QsIHR5cGUsXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYy02NTktXFx0XFx0XFx0Y3VycmVudF90aHJlYWRfaW5mbygpLVxcdTAwM2V1dHJhcHMgPVxcbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jOjY2MDpcXHRcXHRcXHRcXHRrbWFsbG9jX29ianMobG9uZywgVVRfVFJBUF9JTlNUUlVDVElPTl8zMSArIDEpO1xcbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jLTY2MS1cXHRcXHRcXHRpZiAoIWN1cnJlbnRfdGhyZWFkX2luZm8oKS1cXHUwMDNldXRyYXBzKSB7XFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHViZF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYy0xMDcxLVxcbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jOjEwNzI6XFx0aXJxX3JlcV9idWZmZXIgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvX3RocmVhZF9yZXEgKixcXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYy0xMDczLVxcdFxcdFxcdFxcdCAgICAgIFVCRF9SRVFfQlVGRkVSX1NJWkUpO1xcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3OS1cXHR9XFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmM6MTA4MDpcXHRpb19yZXFfYnVmZmVyID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb190aHJlYWRfcmVxICosXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA4MS1cXHRcXHRcXHRcXHQgICAgIFVCRF9SRVFfQlVGRkVSX1NJWkUpO1xcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM9NTA3PXN0YXRpYyBzdHJ1Y3QgdmVjdG9yX3F1ZXVlICpjcmVhdGVfcXVldWUoXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYy01NDYtXFx0XFx0aWYgKHZwLVxcdTAwM2VoZWFkZXJfc2l6ZSBcXHUwMDNlIDApXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM6NTQ3OlxcdFxcdFxcdGlvdiA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW92ZWMsIDMgKyBudW1fZXh0cmFfZnJhZ3MpO1xcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jLTU0OC1cXHRcXHRlbHNlXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM6NTQ5OlxcdFxcdFxcdGlvdiA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW92ZWMsIDIgKyBudW1fZXh0cmFfZnJhZ3MpO1xcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jLTU1MC1cXHRcXHRpZiAoaW92ID09IE5VTEwpXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdmZpb19rZXJuLmM9NDg0PXN0YXRpYyB2b2lkIHVtbF92ZmlvX29wZW5fZGV2aWNlKHN0cnVjdCB1bWxfdmZpb19kZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvdW0vZHJpdmVycy92ZmlvX2tlcm4uYy01MTYtXFxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jOjUxNzpcXHRkZXYtXFx1MDAzZWludHJfY3R4ID0ga21hbGxvY19vYmpzKHN0cnVjdCB1bWxfdmZpb19pbnRyX2N0eCxcXG5hcmNoL3VtL2RyaXZlcnMvdmZpb19rZXJuLmMtNTE4LVxcdFxcdFxcdFxcdCAgICAgZGV2LVxcdTAwM2V1ZGV2LmlycV9jb3VudCk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9Nzk3PXN0YXRpYyBib29sIF9faW5pdCBzZ3hfcGFnZV9jYWNoZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtODAzLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo4MDQ6XFx0c2d4X251bWFfbm9kZXMgPSBrbWFsbG9jX29ianMoKnNneF9udW1hX25vZGVzLCBudW1fcG9zc2libGVfbm9kZXMoKSk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgwNS1cXHRpZiAoIXNneF9udW1hX25vZGVzKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jPTMyNz1zdGF0aWMgaW50IF9faW5pdCBjcmVhdGVfc2V0dXBfZGF0YV9ub2RlcyhzdHJ1Y3Qga29iamVjdCAqcGFyZW50KVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jLTM0Ni1cXG5hcmNoL3g4Ni9rZXJuZWwva3N5c2ZzLmM6MzQ3OlxcdGtvYmpwID0ga21hbGxvY19vYmpzKCprb2JqcCwgbnIpO1xcbmFyY2gveDg2L2tlcm5lbC9rc3lzZnMuYy0zNDgtXFx0aWYgKCFrb2JqcCkge1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTE0NzE9c3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE1MTYtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE1MTc6XFx0XFx0cG9ydHMgPSBrbWFsbG9jX29ianMoKnBvcnRzLCBzY2hlZF9wb2xsLm5yX3BvcnRzKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTUxOC1cXHRcXHRpZiAoIXBvcnRzKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjIwMz1zdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjIxOC1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MjIxOTpcXHRhbGxfZXZ0Y2huZmRzID0ga21hbGxvY19vYmpzKHN0cnVjdCBldnRjaG5mZCAqLCBuKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjIyMC1cXHRpZiAoIWFsbF9ldnRjaG5mZHMpIHtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jPTI1MjE9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI1MzMtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MjUzNDpcXHRhZGRycyA9IGttYWxsb2Nfb2JqcygqYWRkcnMsIHByb2ctXFx1MDAzZWxlbik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjUzNS1cXHRpZiAoIWFkZHJzKVxcbi0tXFxuYXJjaC94ODYvcG93ZXIvY3B1LmM9Mzg4PXN0YXRpYyBpbnQgbXNyX2J1aWxkX2NvbnRleHQoY29uc3QgdTMyICptc3JfaWQsIGNvbnN0IGludCBudW0pXFxuLS1cXG5hcmNoL3g4Ni9wb3dlci9jcHUuYy0zOTYtXFxuYXJjaC94ODYvcG93ZXIvY3B1LmM6Mzk3OlxcdG1zcl9hcnJheSA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2F2ZWRfbXNyLCB0b3RhbF9udW0pO1xcbmFyY2gveDg2L3Bvd2VyL2NwdS5jLTM5OC1cXHRpZiAoIW1zcl9hcnJheSkge1xcbi0tXFxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmM9MTAyPXN0YXRpYyBpbnQgYXJjaF9nbnR0YWJfdmFsbG9jKHN0cnVjdCBnbnR0YWJfdm1fYXJlYSAqYXJlYSwgdW5zaWduZWQgbnJfZnJhbWVzKVxcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jLTEwMy17XFxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmM6MTA0OlxcdGFyZWEtXFx1MDAzZXB0ZXMgPSBrbWFsbG9jX29ianMoKmFyZWEtXFx1MDAzZXB0ZXMsIG5yX2ZyYW1lcyk7XFxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMtMTA1LVxcdGlmIChhcmVhLVxcdTAwM2VwdGVzID09IE5VTEwpXFxuLS1cXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYz0zMDg9c3RhdGljIGludCBfX2luaXQgc2ltZGlza19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYy0zMjItXFxuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmM6MzIzOlxcdHNkZGV2ID0ga21hbGxvY19vYmpzKCpzZGRldiwgc2ltZGlza19jb3VudCk7XFxuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmMtMzI0LVxcdGlmIChzZGRldiA9PSBOVUxMKVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz01Nzg9c3RhdGljIGJvb2wgYmZxcV9yZXF1ZXN0X292ZXJfbGltaXQoc3RydWN0IGJmcV9kYXRhICpiZnFkLFxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MDgtXFx0XFx0XFx0a2ZyZWUoZW50aXRpZXMpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjA5OlxcdFxcdGVudGl0aWVzID0ga21hbGxvY19vYmpzKCplbnRpdGllcywgZGVwdGgsIEdGUF9OT0lPKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxMC1cXHRcXHRpZiAoIWVudGl0aWVzKVxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYz0xMDA9YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTEwOS1cXG5ibG9jay9ibGstc3RhdC5jOjExMDpcXHRjYi1cXHUwMDNlc3RhdCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYmxrX3JxX3N0YXQsIGJ1Y2tldHMpO1xcbmJsb2NrL2Jsay1zdGF0LmMtMTExLVxcdGlmICghY2ItXFx1MDAzZXN0YXQpIHtcXG4tLVxcbmJsb2NrL2ZvcHMuYz01NT1zdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmJsb2NrL2ZvcHMuYy02Ny1cXHRlbHNlIHtcXG5ibG9jay9mb3BzLmM6Njg6XFx0XFx0dmVjcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYmlvX3ZlYywgbnJfcGFnZXMpO1xcbmJsb2NrL2ZvcHMuYy02OS1cXHRcXHRpZiAoIXZlY3MpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTM1MT1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdG9jYmxvY2tzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM2NC1cXHR0YlswXSA9IFxcdTAwMjZsZGItXFx1MDAzZXRvYztcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM2NTpcXHR0YlsxXSA9IGttYWxsb2Nfb2JqcygqdGJbMV0sIDMpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY2LVxcdGlmICghdGJbMV0pIHtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM9MTQwNz1zdGF0aWMgaW50IGhsX2NzX2NvcHlfY2h1bmtfYXJyYXkoc3RydWN0IGhsX2RldmljZSAqaGRldixcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmMtMTQyMi1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jOjE0MjM6XFx0KmNzX2NodW5rX2FycmF5ID0ga21hbGxvY19vYmpzKCoqY3NfY2h1bmtfYXJyYXksIG51bV9jaHVua3MsIEdGUF9BVE9NSUMpO1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmMtMTQyNC1cXHRpZiAoISpjc19jaHVua19hcnJheSlcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jOjE0MjU6XFx0XFx0KmNzX2NodW5rX2FycmF5ID0ga21hbGxvY19vYmpzKCoqY3NfY2h1bmtfYXJyYXksIG51bV9jaHVua3MpO1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmMtMTQyNi1cXHRpZiAoISpjc19jaHVua19hcnJheSkge1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYz0zMDA1PXN0YXRpYyBpbnQgaGxfbXVsdGlfY3Nfd2FpdF9pb2N0bChzdHJ1Y3QgaGxfZnByaXYgKmhwcml2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0zMDUzLVxcdC8qIGFsbG9jYXRlIGFycmF5IGZvciB0aGUgZmVuY2VzICovXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYzozMDU0OlxcdGZlbmNlX2FyciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxfZmVuY2UgKiwgc2VxX2Fycl9sZW4pO1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmMtMzA1NS1cXHRpZiAoIWZlbmNlX2Fycikge1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9kZWJ1Z2ZzLmM9MjA0OT1pbnQgaGxfZGVidWdmc19kZXZpY2VfaW5pdChzdHJ1Y3QgaGxfZGV2aWNlICpoZGV2KVxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9kZWJ1Z2ZzLmMtMjA1NC1cXHRkZXZfZW50cnktXFx1MDAzZWhkZXYgPSBoZGV2O1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vZGVidWdmcy5jOjIwNTU6XFx0ZGV2X2VudHJ5LVxcdTAwM2VlbnRyeV9hcnIgPSBrbWFsbG9jX29ianMoc3RydWN0IGhsX2RlYnVnZnNfZW50cnksIGNvdW50KTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYy0yMDU2LVxcdGlmICghZGV2X2VudHJ5LVxcdTAwM2VlbnRyeV9hcnIpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmM9ODI0PXN0YXRpYyBpbnQgZXh0X2FuZF9jcHVfcXVldWVfaW5pdChzdHJ1Y3QgaGxfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGxfaHdfcXVldWUgKnEsXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmMtODM5LVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaHdfcXVldWUuYzo4NDA6XFx0cS1cXHUwMDNlc2hhZG93X3F1ZXVlID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9jc19qb2IgKiwgSExfUVVFVUVfTEVOR1RIKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmMtODQxLVxcdGlmICghcS1cXHUwMDNlc2hhZG93X3F1ZXVlKSB7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jPTM5Mzg9c3RhdGljIGludCBnYXVkaTJfc3BlY2lhbF9ibG9ja3NfY29uZmlnKHN0cnVjdCBobF9kZXZpY2UgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NDUtXFx0cHJvcC1cXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzID0gQVJSQVlfU0laRShnYXVkaTJfc3BlY2lhbF9ibG9ja3MpO1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmM6Mzk0NjpcXHRwcm9wLVxcdTAwM2VzcGVjaWFsX2Jsb2NrcyA9IGttYWxsb2Nfb2JqcygqcHJvcC1cXHUwMDNlc3BlY2lhbF9ibG9ja3MsXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYy0zOTQ3LVxcdFxcdFxcdFxcdFxcdCAgICBwcm9wLVxcdTAwM2VudW1fb2Zfc3BlY2lhbF9ibG9ja3MpO1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYy0zOTYwLVxcdFxcdHByb3AtXFx1MDAzZXNraXBfc3BlY2lhbF9ibG9ja3NfY2ZnLmJsb2NrX3R5cGVzID1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jOjM5NjE6XFx0XFx0XFx0XFx0a21hbGxvY19vYmpzKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3R5cGVzWzBdLFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk2Mi1cXHRcXHRcXHRcXHRcXHQgICAgIEFSUkFZX1NJWkUoZ2F1ZGkyX2l0ZXJhdG9yX3NraXBfYmxvY2tfdHlwZXMpKTtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk3Ni1cXHRcXHRwcm9wLVxcdTAwM2Vza2lwX3NwZWNpYWxfYmxvY2tzX2NmZy5ibG9ja19yYW5nZXMgPVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmM6Mzk3NzpcXHRcXHRcXHRcXHRrbWFsbG9jX29ianMoZ2F1ZGkyX2l0ZXJhdG9yX3NraXBfYmxvY2tfcmFuZ2VzWzBdLFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk3OC1cXHRcXHRcXHRcXHRcXHQgICAgIEFSUkFZX1NJWkUoZ2F1ZGkyX2l0ZXJhdG9yX3NraXBfYmxvY2tfcmFuZ2VzKSk7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19jb250cm9sLmM9MzkzPXN0YXRpYyBpbnQgZmluZF9hbmRfbWFwX3VzZXJfcGFnZXMoc3RydWN0IHFhaWNfZGV2aWNlICpxZGV2LFxcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jLTQyNS1cXHR3aGlsZSAoMSkge1xcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2NvbnRyb2wuYzo0MjY6XFx0XFx0cGFnZV9saXN0ID0ga21hbGxvY19vYmpzKCpwYWdlX2xpc3QsIG5yX3BhZ2VzLFxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2NvbnRyb2wuYy00MjctXFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbi0tXFxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jPTQ5NT1pbnQgcm9ja2V0X2pvYl9vcGVuKHN0cnVjdCByb2NrZXRfZmlsZV9wcml2ICpyb2NrZXRfcHJpdilcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy00OTctXFx0c3RydWN0IHJvY2tldF9kZXZpY2UgKnJkZXYgPSByb2NrZXRfcHJpdi1cXHUwMDNlcmRldjtcXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmM6NDk4OlxcdHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqKnNjaGVkcyA9IGttYWxsb2Nfb2Jqcygqc2NoZWRzLFxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy00OTktXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHJkZXYtXFx1MDAzZW51bV9jb3Jlcyk7XFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmM9NTU9c3RhdGljIF9faW5pdCBpbnQgYWNwaV9wYXJzZV9tcnJtKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpXFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmMtODMtXFxuZHJpdmVycy9hY3BpL2FjcGlfbXJybS5jOjg0OlxcdG1ycm1fbWVtX3JhbmdlX2VudHJ5ID0ga21hbGxvY19vYmpzKCptcnJtX21lbV9yYW5nZV9lbnRyeSwgbXJlX2NvdW50LFxcbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYy04NS1cXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbi0tXFxuZHJpdmVycy9hY3BpL2FjcGlfdmlkZW8uYz03OTg9aW50IGFjcGlfdmlkZW9fZ2V0X2xldmVscyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMtODMxLVxcdCAqL1xcbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmM6ODMyOlxcdGJyLVxcdTAwM2VsZXZlbHMgPSBrbWFsbG9jX29ianMoKmJyLVxcdTAwM2VsZXZlbHMsXFxuZHJpdmVycy9hY3BpL2FjcGlfdmlkZW8uYy04MzMtXFx0XFx0XFx0XFx0ICBvYmotXFx1MDAzZXBhY2thZ2UuY291bnQgKyBBQ1BJX1ZJREVPX0ZJUlNUX0xFVkVMKTtcXG4tLVxcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jPTMxNT1zdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wZXJmb3JtYW5jZV9zdGF0ZXMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcilcXG4tLVxcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jLTM0My1cXHRwci1cXHUwMDNlcGVyZm9ybWFuY2UtXFx1MDAzZXN0YXRlcyA9XFxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmM6MzQ0OlxcdCAgICBrbWFsbG9jX29ianMoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3B4LCBwc3MtXFx1MDAzZXBhY2thZ2UuY291bnQpO1xcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jLTM0NS1cXHRpZiAoIXByLVxcdTAwM2VwZXJmb3JtYW5jZS1cXHUwMDNlc3RhdGVzKSB7XFxuLS1cXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYz00ODU9c3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfdGhyb3R0bGluZ19zdGF0ZXMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcilcXG4tLVxcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jLTUxNC1cXHRwci1cXHUwMDNldGhyb3R0bGluZy5zdGF0ZXNfdHNzID1cXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYzo1MTU6XFx0ICAgIGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfdHhfdHNzLCB0c3MtXFx1MDAzZXBhY2thZ2UuY291bnQpO1xcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jLTUxNi1cXHRpZiAoIXByLVxcdTAwM2V0aHJvdHRsaW5nLnN0YXRlc190c3MpIHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYz0zNTk9c3RhdGljIGludCBjb21wb25lbnRfbWF0Y2hfcmVhbGxvYyhzdHJ1Y3QgY29tcG9uZW50X21hdGNoICptYXRjaCwgc2l6ZV90IG51bSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYy0zNjUtXFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jOjM2NjpcXHRuZXcgPSBrbWFsbG9jX29ianMoKm5ldywgbnVtKTtcXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmMtMzY3LVxcdGlmICghbmV3KVxcbi0tXFxuZHJpdmVycy9iYXNlL21hcC5jPTMyPWludCBrb2JqX21hcChzdHJ1Y3Qga29ial9tYXAgKmRvbWFpbiwgZGV2X3QgZGV2LCB1bnNpZ25lZCBsb25nIHJhbmdlLFxcbi0tXFxuZHJpdmVycy9iYXNlL21hcC5jLTQzLVxcbmRyaXZlcnMvYmFzZS9tYXAuYzo0NDpcXHRwID0ga21hbGxvY19vYmpzKHN0cnVjdCBwcm9iZSwgbik7XFxuZHJpdmVycy9iYXNlL21hcC5jLTQ1LVxcdGlmIChwID09IE5VTEwpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmM9MTI0PWludCByZWdjYWNoZV9pbml0KHN0cnVjdCByZWdtYXAgKm1hcCwgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZylcXG4tLVxcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUuYy0xOTktXFx0XFx0bWFwLVxcdTAwM2VudW1fcmVnX2RlZmF1bHRzID0gY291bnQ7XFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jOjIwMDpcXHRcXHRtYXAtXFx1MDAzZXJlZ19kZWZhdWx0cyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcmVnX2RlZmF1bHQsIGNvdW50KTtcXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMtMjAxLVxcdFxcdGlmICghbWFwLVxcdTAwM2VyZWdfZGVmYXVsdHMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0zNDA9c3RhdGljIGludCBsb19yd19haW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zNTQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzU1OlxcdFxcdGNtZC1cXHUwMDNlYnZlYyA9IGttYWxsb2Nfb2JqcygqY21kLVxcdTAwM2VidmVjLCBucl9idmVjLCBHRlBfTk9JTyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMzU2LVxcdFxcdGlmICghY21kLVxcdTAwM2VidmVjKVxcbi0tXFxuZHJpdmVycy9ibG9jay9yYmQuYz0yNTMxPXN0YXRpYyBpbnQgcmJkX2ltZ19maWxsX3JlcXVlc3Qoc3RydWN0IHJiZF9pbWdfcmVxdWVzdCAqaW1nX3JlcSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svcmJkLmMtMjU2Ny1cXHRmb3JfZWFjaF9vYmpfcmVxdWVzdChpbWdfcmVxLCBvYmpfcmVxKSB7XFxuZHJpdmVycy9ibG9jay9yYmQuYzoyNTY4OlxcdFxcdG9ial9yZXEtXFx1MDAzZWJ2ZWNfcG9zLmJ2ZWNzID0ga21hbGxvY19vYmpzKCpvYmpfcmVxLVxcdTAwM2VidmVjX3Bvcy5idmVjcyxcXG5kcml2ZXJzL2Jsb2NrL3JiZC5jLTI1NjktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG9ial9yZXEtXFx1MDAzZWJ2ZWNfY291bnQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xNjA9c3RhdGljIGludCB2aXJ0YmxrX3NldHVwX2Rpc2NhcmRfd3JpdGVfemVyb2VzX2VyYXNlKHN0cnVjdCByZXF1ZXN0ICpyZXEsIGJvb2wgdW5tYXApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNzAtXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTcxOlxcdHJhbmdlID0ga21hbGxvY19vYmpzKCpyYW5nZSwgc2VnbWVudHMsIEdGUF9BVE9NSUMpO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE3Mi1cXHRpZiAoIXJhbmdlKVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9OTYwPXN0YXRpYyBpbnQgaW5pdF92cShzdHJ1Y3QgdmlydGlvX2JsayAqdmJsaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTk5NS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzo5OTY6XFx0dmJsay1cXHUwMDNldnFzID0ga21hbGxvY19vYmpzKCp2YmxrLVxcdTAwM2V2cXMsIG51bV92cXMpO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTk5Ny1cXHRpZiAoIXZibGstXFx1MDAzZXZxcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTEwMDAtXFx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBudW1fdnFzKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxMDAxOlxcdHZxcyA9IGttYWxsb2Nfb2JqcygqdnFzLCBudW1fdnFzKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAyLVxcdGlmICghdnFzX2luZm8gfHwgIXZxcykge1xcbi0tXFxuZHJpdmVycy9ibG9jay96MnJhbS5jPTE0Mz1zdGF0aWMgaW50IHoyX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svejJyYW0uYy0xODktXFx0XFx0XFx0ejJyYW1fbWFwID1cXG5kcml2ZXJzL2Jsb2NrL3oycmFtLmM6MTkwOlxcdFxcdFxcdCAgICBrbWFsbG9jX29ianMoejJyYW1fbWFwWzBdLCBzaXplIC8gWjJSQU1fQ0hVTktTSVpFKTtcXG5kcml2ZXJzL2Jsb2NrL3oycmFtLmMtMTkxLVxcdFxcdFxcdGlmICh6MnJhbV9tYXAgPT0gTlVMTCkge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTUxOD1zdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MzAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUzMTpcXHRcXHRjbWQtXFx1MDAzZWJ2ZWMgPSBrbWFsbG9jX29ianMoKmNtZC1cXHUwMDNlYnZlYywgbnJfYnZlYywgR0ZQX05PSU8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MzItXFx0XFx0aWYgKCFjbWQtXFx1MDAzZWJ2ZWMpXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYz0xODQyPXN0YXRpYyBpbnQgYnRpbnRlbF9wY2llX3NldHVwX3R4cV9idWZzKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTE4NDgtXFx0LyogQWxsb2NhdGUgdGhlIHNhbWUgbnVtYmVyIG9mIGJ1ZmZlcnMgYXMgdGhlIGRlc2NyaXB0b3IgKi9cXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYzoxODQ5OlxcdHR4cS1cXHUwMDNlYnVmcyA9IGttYWxsb2Nfb2JqcygqYnVmLCB0eHEtXFx1MDAzZWNvdW50KTtcXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xODUwLVxcdGlmICghdHhxLVxcdTAwM2VidWZzKVxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM9MTg4Nj1zdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9zZXR1cF9yeHFfYnVmcyhzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xODkyLVxcdC8qIEFsbG9jYXRlIHRoZSBzYW1lIG51bWJlciBvZiBidWZmZXJzIGFzIHRoZSBkZXNjcmlwdG9yICovXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM6MTg5MzpcXHRyeHEtXFx1MDAzZWJ1ZnMgPSBrbWFsbG9jX29ianMoKmJ1ZiwgcnhxLVxcdTAwM2Vjb3VudCk7XFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMTg5NC1cXHRpZiAoIXJ4cS1cXHUwMDNlYnVmcylcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9NjMyPXN0YXRpYyBpbnQgZnNsX21jX2RldmljZV9nZXRfbW1pb19yZWdpb25zKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19kZXYsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTY1NS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjY1NjpcXHRyZWdpb25zID0ga21hbGxvY19vYmpzKHJlZ2lvbnNbMF0sIG9ial9kZXNjLVxcdTAwM2VyZWdpb25fY291bnQpO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNjU3LVxcdGlmICghcmVnaW9ucylcXG4tLVxcbmRyaXZlcnMvY2hhci9hZ3AvaXNvY2guYz02ND1zdGF0aWMgaW50IGFncF8zXzVfaXNvY2hyb25vdXNfbm9kZV9lbmFibGUoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlLFxcbi0tXFxuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jLTk0LVxcdCAqL1xcbmRyaXZlcnMvY2hhci9hZ3AvaXNvY2guYzo5NTpcXHRtYXN0ZXIgPSBrbWFsbG9jX29ianMoKm1hc3RlciwgbmRldnMpO1xcbmRyaXZlcnMvY2hhci9hZ3AvaXNvY2guYy05Ni1cXHRpZiAobWFzdGVyID09IE5VTEwpIHtcXG4tLVxcbmRyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmM9MzY5PXN0YXRpYyBpbnQgdW5pbm9ydGhfY3JlYXRlX2dhdHRfdGFibGUoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlKVxcbi0tXFxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDYtXFxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYzo0MDc6XFx0dW5pbm9ydGhfcHJpdi5wYWdlc19hcnIgPSBrbWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgMSBcXHUwMDNjXFx1MDAzYyBwYWdlX29yZGVyKTtcXG5kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jLTQwOC1cXHRpZiAodW5pbm9ydGhfcHJpdi5wYWdlc19hcnIgPT0gTlVMTClcXG4tLVxcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jPTc1MD1pbnQgaXBtaV9zbWlfd2F0Y2hlcl9yZWdpc3RlcihzdHJ1Y3QgaXBtaV9zbWlfd2F0Y2hlciAqd2F0Y2hlcilcXG4tLVxcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc3OS1cXHRpZiAoY291bnQgXFx1MDAzZSAwKSB7XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmM6NzgwOlxcdFxcdGludGVyZmFjZXMgPSBrbWFsbG9jX29ianMoKmludGVyZmFjZXMsIGNvdW50KTtcXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYy03ODEtXFx0XFx0aWYgKCFpbnRlcmZhY2VzKSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYy03ODMtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYzo3ODQ6XFx0XFx0XFx0ZGV2aWNlcyA9IGttYWxsb2Nfb2JqcygqZGV2aWNlcywgY291bnQpO1xcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc4NS1cXHRcXHRcXHRpZiAoIWRldmljZXMpIHtcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jPTE4MTA9c3RhdGljIGludCBpbml0X3ZxcyhzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2KVxcbi0tXFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMTgxOS1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYzoxODIwOlxcdHZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3F1ZXVlcyk7XFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMTgyMS1cXHR2cXNfaW5mbyA9IGt6YWxsb2Nfb2JqcygqdnFzX2luZm8sIG5yX3F1ZXVlcyk7XFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMjpcXHRwb3J0ZGV2LVxcdTAwM2Vpbl92cXMgPSBrbWFsbG9jX29ianMoc3RydWN0IHZpcnRxdWV1ZSAqLCBucl9wb3J0cyk7XFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMzpcXHRwb3J0ZGV2LVxcdTAwM2VvdXRfdnFzID0ga21hbGxvY19vYmpzKHN0cnVjdCB2aXJ0cXVldWUgKiwgbnJfcG9ydHMpO1xcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE4MjQtXFx0aWYgKCF2cXMgfHwgIXZxc19pbmZvIHx8ICFwb3J0ZGV2LVxcdTAwM2Vpbl92cXMgfHwgIXBvcnRkZXYtXFx1MDAzZW91dF92cXMpIHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1idWxrLmM9NDc9c3RhdGljIGludCBfX211c3RfY2hlY2sgb2ZfY2xrX2J1bGtfZ2V0X2FsbChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jLTU4LVxcbmRyaXZlcnMvY2xrL2Nsay1idWxrLmM6NTk6XFx0Y2xrX2J1bGsgPSBrbWFsbG9jX29ianMoKmNsa19idWxrLCBudW1fY2xrcyk7XFxuZHJpdmVycy9jbGsvY2xrLWJ1bGsuYy02MC1cXHRpZiAoIWNsa19idWxrKVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXN0bTMyZjQuYz0xODI4PXN0YXRpYyB2b2lkIF9faW5pdCBzdG0zMmY0X3JjY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTctXFxuZHJpdmVycy9jbGsvY2xrLXN0bTMyZjQuYzoxODU4OlxcdGNsa3MgPSBrbWFsbG9jX29ianMoKmNsa3MsIGRhdGEtXFx1MDAzZWdhdGVzX251bSArIHN0bTMyZnhfZW5kX3ByaW1hcnlfY2xrKTtcXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTktXFx0aWYgKCFjbGtzKVxcbi0tXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYz03NDM9aW50IG9mX2RhdmluY2lfcGxsX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuLS1cXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BsbC5jLTc4NC1cXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BsbC5jOjc4NTpcXHRcXHRjbGtzID0ga21hbGxvY19vYmpzKCpjbGtzLCBuX2Nsa3MpO1xcbmRyaXZlcnMvY2xrL2RhdmluY2kvcGxsLmMtNzg2LVxcdFxcdGlmICghY2xrcykge1xcbi0tXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wc2MuYz0zNjQ9X19kYXZpbmNpX3BzY19yZWdpc3Rlcl9jbG9ja3Moc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wc2MuYy0zNzgtXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wc2MuYzozNzk6XFx0Y2xrcyA9IGttYWxsb2Nfb2JqcygqY2xrcywgbnVtX2Nsa3MpO1xcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmMtMzgwLVxcdGlmICghY2xrcykge1xcbi0tXFxuZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjEwLmM9MzY5Nz1zdGF0aWMgdm9pZCB0ZWdyYTIxMF9tYmlzdF9jbGtfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjEwLmMtMzcwNy1cXG5kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMTAuYzozNzA4OlxcdFxcdGNsa19kYXRhID0ga21hbGxvY19vYmpzKCpjbGtfZGF0YSwgbnVtX2Nsa3MpO1xcbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDktXFx0XFx0aWYgKFdBUk5fT04oIWNsa19kYXRhKSlcXG4tLVxcbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jPTE1NT1zdGF0aWMgaW50IG5pXzY3MHhfYXV0b19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jLTIwMC1cXG5kcml2ZXJzL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYzoyMDE6XFx0XFx0cmFuZ2VfdGFibGVfbGlzdCA9IGttYWxsb2Nfb2JqcygqcmFuZ2VfdGFibGVfbGlzdCwgMzIpO1xcbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jLTIwMi1cXHRcXHRpZiAoIXJhbmdlX3RhYmxlX2xpc3QpXFxuLS1cXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jPTY2PWJtaXBzX2NwdWZyZXFfZ2V0X2ZyZXFfdGFibGUoY29uc3Qgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpXFxuLS1cXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jLTczLVxcbmRyaXZlcnMvY3B1ZnJlcS9ibWlwcy1jcHVmcmVxLmM6NzQ6XFx0dGFibGUgPSBrbWFsbG9jX29ianMoKnRhYmxlLCBwcml2LVxcdTAwM2VtYXhfZnJlcXMgKyAxKTtcXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jLTc1LVxcdGlmICghdGFibGUpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9MTM0PXNwdV9za2NpcGhlcl9yeF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDMtXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjE0NDpcXHRtc3NnLVxcdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXFx1MDAzZWdmcCk7XFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTE0NS1cXHRpZiAoIW1zc2ctXFx1MDAzZXNwdS5kc3QpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9MTk3PXNwdV9za2NpcGhlcl90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0yMDYtXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjIwNzpcXHRtc3NnLVxcdTAwM2VzcHUuc3JjID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgdHhfZnJhZ19udW0sIHJjdHgtXFx1MDAzZWdmcCk7XFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTIwOC1cXHRpZiAodW5saWtlbHkoIW1zc2ctXFx1MDAzZXNwdS5zcmMpKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTUyND1zcHVfYWhhc2hfcnhfc2dfY3JlYXRlKHN0cnVjdCBicmNtX21lc3NhZ2UgKm1zc2csXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTMyLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzo1MzM6XFx0bXNzZy1cXHUwMDNlc3B1LmRzdCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHJ4X2ZyYWdfbnVtLCByY3R4LVxcdTAwM2VnZnApO1xcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01MzQtXFx0aWYgKCFtc3NnLVxcdTAwM2VzcHUuZHN0KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTU3NT1zcHVfYWhhc2hfdHhfc2dfY3JlYXRlKHN0cnVjdCBicmNtX21lc3NhZ2UgKm1zc2csXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg2LVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzo1ODc6XFx0bXNzZy1cXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVxcdTAwM2VnZnApO1xcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01ODgtXFx0aWYgKCFtc3NnLVxcdTAwM2VzcHUuc3JjKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTEwMzg9c3RhdGljIGludCBzcHVfYWVhZF9yeF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMDc1LVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMDc2OlxcdG1zc2ctXFx1MDAzZXNwdS5kc3QgPSBrbWFsbG9jX29ianMoc3RydWN0IHNjYXR0ZXJsaXN0LCByeF9mcmFnX251bSwgcmN0eC1cXHUwMDNlZ2ZwKTtcXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTA3Ny1cXHRpZiAoIW1zc2ctXFx1MDAzZXNwdS5kc3QpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9MTE1Nz1zdGF0aWMgaW50IHNwdV9hZWFkX3R4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTExNzYtXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjExNzc6XFx0bXNzZy1cXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVxcdTAwM2VnZnApO1xcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMTc4LVxcdGlmICghbXNzZy1cXHUwMDNlc3B1LnNyYylcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jPTMwNj1zdGF0aWMgc3RydWN0IHNsYV9idWZmZXJfaGRyICpzbGFfYnVmZmVyX21hcChzdHJ1Y3Qgc2xhX2FkZHJfdCBzbGEpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy0zMzItXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM6MzMzOlxcdFxcdHN0cnVjdCBwYWdlICoqcHAgPSBrbWFsbG9jX29ianMocHBbMF0sIG5wYWdlcyk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtMzM0LVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RlbGVtZXRyeS5jPTU4PXN0YXRpYyBpbnQgYWRmX3RsX2FsbG9jX21lbShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MDo1NC4yOTEzOTY0OThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njg5OTIxMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBrbWFsbG9jX29ianNgIGFuZCBga3ZtYWxsb2Nfb2Jqc2AgTWFjcm9zKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGlzIGBrbWFsbG9jX29ianNgIG1hY3JvLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBlaXRoZXIgc29tZXRoaW5nIG5ldyBpbiBhIHJlY2VudCBwYXRjaCwgb3IgaXQncyBhIHN0YW5kYXJkIGtlcm5lbCBjb25zdHJ1Y3QgSSdtIGp1c3Qgbm90IGltbWVkaWF0ZWx5IGZhbWlsaWFyIHdpdGguIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIGl0J3MgYmVpbmcgc3dhcHBlZCBvdXQgZm9yIGBrdm1hbGxvY19vYmpzYC4gT2theSwgaG9sZCBvbiwgaXMgKnRoYXQqIGFsc28gYSBtYWNybz8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB3aGF0IHRoZXNlIGFyZSBkb2luZy4gVGltZSB0byBjaGVjayBvdXQgdGhlIGRlZmluaXRpb24gb2YgYGt2bWFsbG9jX29ianNgIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBga21hbGxvY19vYmpzYCBpcyBiZWluZyByZXBsYWNlZCwgYW5kIHdoYXQgc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBjaGFuZ2UgYXJlIGludGVuZGVkIHRvIGJyaW5nIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg2OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MDo1OC45ODEzMjE2OThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjUxNzMxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtYWxsb2Nfb2Jqc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc4NSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jPTMzNz1hc21saW5rYWdlIGxvbmcgc3lzX29hYmlfc2VtdGltZWRvcChpbnQgc2VtaWQsXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMzUxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYzozNTI6XFx0c29wcyA9IGt2bWFsbG9jX29ianMoKnNvcHMsIG5zb3BzKTtcXG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMzUzLVxcdGlmICghc29wcylcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jPTczND1pbml0aWFsaXplX3JlbG9jYXRpb25faGFzaHRhYmxlKHVuc2lnbmVkIGludCBudW1fcmVsb2NhdGlvbnMsXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03NTUtXFx0LyogTnVtYmVyIG9mIHJlbG9jYXRpb25zIG1heSBiZSBsYXJnZSwgc28ga3ZtYWxsb2MgaXQgKi9cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3NTY6XFx0KnJlbG9jYXRpb25faGFzaHRhYmxlID0ga3ZtYWxsb2Nfb2JqcygqKnJlbG9jYXRpb25faGFzaHRhYmxlLFxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTc1Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBoYXNodGFibGVfc2l6ZSk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM9MjQ0PXN0YXRpYyBpbnQgcGFpX2FsbG9jX2NwdShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBjcHUpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmMtMjkwLVxcdFxcdH1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM6MjkxOlxcdFxcdGNwdW1wLVxcdTAwM2VzYXZlID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFpX3VzZXJkYXRhLFxcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0yOTItXFx0XFx0XFx0XFx0XFx0ICAgIHBhaV9wbXVbaWR4XS5udW1fYXZhaWwgKyAxKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jPTU4OT1pbnQga3ZtX3ZjcHVfaW9jdGxfc2V0X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTYwNC1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzo2MDU6XFx0XFx0ZTIgPSBrdm1hbGxvY19vYmpzKCplMiwgY3B1aWQtXFx1MDAzZW5lbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtNjA2LVxcdFxcdGlmICghZTIpIHtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODUxPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzkwNC1cXHR9XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM5MDU6XFx0YWRkcnMgPSBrdm1hbGxvY19vYmpzKCphZGRycywgcHJvZy1cXHUwMDNlbGVuICsgMSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5MDYtXFx0aWYgKCFhZGRycylcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tcHJvZmlsZS5jPTc2PWludCBibGtfY3J5cHRvX3Byb2ZpbGVfaW5pdChzdHJ1Y3QgYmxrX2NyeXB0b19wcm9maWxlICpwcm9maWxlLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1wcm9maWxlLmMtMTI0LVxcdHByb2ZpbGUtXFx1MDAzZXNsb3RfaGFzaHRhYmxlID1cXG5ibG9jay9ibGstY3J5cHRvLXByb2ZpbGUuYzoxMjU6XFx0XFx0a3ZtYWxsb2Nfb2Jqcyhwcm9maWxlLVxcdTAwM2VzbG90X2hhc2h0YWJsZVswXSwgc2xvdF9oYXNodGFibGVfc2l6ZSk7XFxuYmxvY2svYmxrLWNyeXB0by1wcm9maWxlLmMtMTI2LVxcdGlmICghcHJvZmlsZS1cXHUwMDNlc2xvdF9oYXNodGFibGUpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV91YnVmLmM9Nzg9c3RydWN0IGRtYV9idWYgKmFtZHhkbmFfZ2V0X3VidWYoc3RydWN0IGRybV9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3VidWYuYy0xMzYtXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfdWJ1Zi5jOjEzNzpcXHR1YnVmLVxcdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoKnVidWYtXFx1MDAzZXBhZ2VzLCB1YnVmLVxcdTAwM2Vucl9wYWdlcyk7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfdWJ1Zi5jLTEzOC1cXHRpZiAoIXVidWYtXFx1MDAzZXBhZ2VzKSB7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2V0aG9zdS9ldGhvc3Vfam9iLmM9NDg4PWludCBldGhvc3VfaW9jdGxfc3VibWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvYWNjZWwvZXRob3N1L2V0aG9zdV9qb2IuYy00OTktXFx0c3RydWN0IGRybV9ldGhvc3Vfam9iIF9fZnJlZShrdmZyZWUpICpqb2JzID1cXG5kcml2ZXJzL2FjY2VsL2V0aG9zdS9ldGhvc3Vfam9iLmM6NTAwOlxcdFxcdGt2bWFsbG9jX29ianMoKmpvYnMsIGFyZ3MtXFx1MDAzZWpvYl9jb3VudCk7XFxuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2pvYi5jLTUwMS1cXHRpZiAoIWpvYnMpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL21lbW9yeS5jPTIzMTU9c3RhdGljIGludCBnZXRfdXNlcl9tZW1vcnkoc3RydWN0IGhsX2RldmljZSAqaGRldiwgdTY0IGFkZHIsIHU2NCBzaXplLFxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9tZW1vcnkuYy0yMzI1LVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vbWVtb3J5LmM6MjMyNjpcXHR1c2VycHRyLVxcdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnBhZ2VzKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL21lbW9yeS5jLTIzMjctXFx0aWYgKCF1c2VycHRyLVxcdTAwM2VwYWdlcylcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2dlbV91c2VycHRyLmM9NjU9aXZwdV9jcmVhdGVfdXNlcnB0cl9kbWFidWYoc3RydWN0IGl2cHVfZGV2aWNlICp2ZGV2LCB2b2lkIF9fdXNlciAqdXNlcl9wdHIsXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2l2cHUvaXZwdV9nZW1fdXNlcnB0ci5jLTc5LVxcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2dlbV91c2VycHRyLmM6ODA6XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKCpwYWdlcywgbnJfcGFnZXMpO1xcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2dlbV91c2VycHRyLmMtODEtXFx0aWYgKCFwYWdlcylcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYz01OT1yb2NrZXRfY29weV90YXNrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jLTczLVxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYzo3NDpcXHRyam9iLVxcdTAwM2V0YXNrcyA9IGt2bWFsbG9jX29ianMoKnJqb2ItXFx1MDAzZXRhc2tzLCBqb2ItXFx1MDAzZXRhc2tfY291bnQpO1xcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy03NS1cXHRpZiAoIXJqb2ItXFx1MDAzZXRhc2tzKSB7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmM9NTkxPWludCByb2NrZXRfaW9jdGxfc3VibWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy02MTAtXFxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jOjYxMTpcXHRqb2JzID0ga3ZtYWxsb2Nfb2Jqcygqam9icywgYXJncy1cXHUwMDNlam9iX2NvdW50KTtcXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNjEyLVxcdGlmICgham9icykge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTUxPWludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy05My1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6OTQ6XFx0ZGV2LVxcdTAwM2V6b25lcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IG51bGxiX3pvbmUsIGRldi1cXHUwMDNlbnJfem9uZXMsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTk1LVxcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtY2hhaW4uYz0xMDg9c3RhdGljIGludCBmZW5jZV9jaGFpbnNfaW5pdChzdHJ1Y3QgZmVuY2VfY2hhaW5zICpmYywgdW5zaWduZWQgaW50IGNvdW50LFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3N0LWRtYS1mZW5jZS1jaGFpbi5jLTExMy1cXG5kcml2ZXJzL2RtYS1idWYvc3QtZG1hLWZlbmNlLWNoYWluLmM6MTE0OlxcdGZjLVxcdTAwM2VjaGFpbnMgPSBrdm1hbGxvY19vYmpzKCpmYy1cXHUwMDNlY2hhaW5zLCBjb3VudCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbmRyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtY2hhaW4uYy0xMTUtXFx0aWYgKCFmYy1cXHUwMDNlY2hhaW5zKVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3N0LWRtYS1mZW5jZS1jaGFpbi5jLTExNy1cXG5kcml2ZXJzL2RtYS1idWYvc3QtZG1hLWZlbmNlLWNoYWluLmM6MTE4OlxcdGZjLVxcdTAwM2VmZW5jZXMgPSBrdm1hbGxvY19vYmpzKCpmYy1cXHUwMDNlZmVuY2VzLCBjb3VudCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbmRyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtY2hhaW4uYy0xMTktXFx0aWYgKCFmYy1cXHUwMDNlZmVuY2VzKSB7XFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTE5MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBpbml0X3VkbWFidWYoc3RydWN0IHVkbWFidWYgKnVidWYsIHBnb2ZmX3QgcGdjbnQpXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xOTIte1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MTkzOlxcdHVidWYtXFx1MDAzZXBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqdWJ1Zi1cXHUwMDNlcGFnZXMsIHBnY250KTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5NC1cXHRpZiAoIXVidWYtXFx1MDAzZXBhZ2VzKVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xOTYtXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzoxOTc6XFx0dWJ1Zi1cXHUwMDNlcGlubmVkX2ZvbGlvcyA9IGt2bWFsbG9jX29ianMoKnVidWYtXFx1MDAzZXBpbm5lZF9mb2xpb3MsIHBnY250KTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5OC1cXHRpZiAoIXVidWYtXFx1MDAzZXBpbm5lZF9mb2xpb3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYz0xNjQ9c3RhdGljIGludCBhbWRncHVfY3NfcGFzczEoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYy0xODItXFx0cC1cXHUwMDNlbmNodW5rcyA9IGNzLVxcdTAwM2Vpbi5udW1fY2h1bmtzO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jOjE4MzpcXHRwLVxcdTAwM2VjaHVua3MgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBhbWRncHVfY3NfY2h1bmssIHAtXFx1MDAzZW5jaHVua3MpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jLTE4NC1cXHRpZiAoIXAtXFx1MDAzZWNodW5rcykge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYz0yNTYzPXN0YXRpYyBpbnQgY3JpdV9yZXN0b3JlX2JvcyhzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jLTI1NzktXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYzoyNTgwOlxcdGJvX2J1Y2tldHMgPSBrdm1hbGxvY19vYmpzKCpib19idWNrZXRzLCBhcmdzLVxcdTAwM2VudW1fYm9zKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jLTI1ODEtXFx0aWYgKCFib19idWNrZXRzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYy0yNTk3LVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmM6MjU5ODpcXHRib19wcml2cyA9IGt2bWFsbG9jX29ianMoKmJvX3ByaXZzLCBhcmdzLVxcdTAwM2VudW1fYm9zKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jLTI1OTktXFx0aWYgKCFib19wcml2cykge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYz02NjU9c3RydWN0IHBhZ2UgKipkcm1fZ2VtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iailcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtNjg2LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmM6Njg3OlxcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtNjg4LVxcdGlmIChwYWdlcyA9PSBOVUxMKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYz04MzM9aW50IGRybV9nZW1fb2JqZWN0c19sb29rdXAoc3RydWN0IGRybV9maWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYm9faGFuZGxlcyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtODQ0LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmM6ODQ1OlxcdG9ianMgPSBrdm1hbGxvY19vYmpzKCpvYmpzLCBjb3VudCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYy04NDYtXFx0aWYgKCFvYmpzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0xMzkzPWludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDg4LVxcdFxcdHN2bV9wYWdlcy1cXHUwMDNlZG1hX2FkZHIgPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ4OTpcXHRcXHRcXHRrdm1hbGxvY19vYmpzKCpzdm1fcGFnZXMtXFx1MDAzZWRtYV9hZGRyLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ5MC1cXHRcXHRpZiAoIXN2bV9wYWdlcy1cXHUwMDNlZG1hX2FkZHIpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmM9NjY2PXN0YXRpYyBpbnQgZXRuYXZpdl9nZW1fdXNlcnB0cl9nZXRfcGFnZXMoc3RydWN0IGV0bmF2aXZfZ2VtX29iamVjdCAqZXRuYXZpdl9vYmopXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTY3Ny1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jOjY3ODpcXHRwdmVjID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMtNjc5LVxcdGlmICghcHZlYylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmM9MTEyPXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZXRuYXZpdl9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jLTEyOC1cXHRldG5hdml2X29iai1cXHUwMDNlc2d0ID0gc2d0O1xcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmM6MTI5OlxcdGV0bmF2aXZfb2JqLVxcdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnBhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jLTEzMC1cXHRpZiAoIWV0bmF2aXZfb2JqLVxcdTAwM2VwYWdlcykge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmM9NDEwPWludCBldG5hdml2X2lvY3RsX2dlbV9zdWJtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1Ym1pdC5jLTQ2OC1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9zdWJtaXQuYzo0Njk6XFx0Ym9zID0ga3ZtYWxsb2Nfb2JqcygqYm9zLCBhcmdzLVxcdTAwM2Vucl9ib3MpO1xcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1Ym1pdC5jOjQ3MDpcXHRyZWxvY3MgPSBrdm1hbGxvY19vYmpzKCpyZWxvY3MsIGFyZ3MtXFx1MDAzZW5yX3JlbG9jcyk7XFxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmM6NDcxOlxcdHBtcnMgPSBrdm1hbGxvY19vYmpzKCpwbXJzLCBhcmdzLVxcdTAwM2Vucl9wbXJzKTtcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9zdWJtaXQuYy00NzItXFx0c3RyZWFtID0ga3ZtYWxsb2NfYXJyYXkoMSwgYXJncy1cXHUwMDNlc3RyZWFtX3NpemUsIEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jPTQxNj1zdGF0aWMgZG1hX2FkZHJfdCAqZzJkX3VzZXJwdHJfZ2V0X2RtYV9hZGRyKHN0cnVjdCBnMmRfZGF0YSAqZzJkLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTQ3My1cXHRucGFnZXMgPSAoZW5kIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjQ3NDpcXHRnMmRfdXNlcnB0ci1cXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKCpnMmRfdXNlcnB0ci1cXHUwMDNlcGFnZXMsIG5wYWdlcyk7XFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTQ3NS1cXHRpZiAoIWcyZF91c2VycHRyLVxcdTAwM2VwYWdlcykge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM9Mjc1PXN0YXRpYyB2b2lkICppOTE1X2dlbV9vYmplY3RfbWFwX3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTMxNi1cXHRcXHQvKiBUb28gYmlnIGZvciBzdGFjayAtLSBhbGxvY2F0ZSB0ZW1wb3JhcnkgYXJyYXkgaW5zdGVhZCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jOjMxNzpcXHRcXHRwYWdlcyA9IGt2bWFsbG9jX29ianMoKnBhZ2VzLCBuX3BhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0zMTgtXFx0XFx0aWYgKCFwYWdlcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmM9MjM0PWludCBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9zdWJtaXRfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYy0yNjAtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYzoyNjE6XFx0cHZlYyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnVtX3BhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jLTI2Mi1cXHRpZiAoIXB2ZWMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jPTUyND1zdGF0aWMgaW50IGxpdmVfaHdzcF9lbmdpbmUodm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy01MzgtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYzo1Mzk6XFx0dGltZWxpbmVzID0ga3ZtYWxsb2Nfb2JqcygqdGltZWxpbmVzLCBOVU1fVElNRUxJTkVTICogSTkxNV9OVU1fRU5HSU5FUyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy01NDAtXFx0aWYgKCF0aW1lbGluZXMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jPTU5Nj1zdGF0aWMgaW50IGxpdmVfaHdzcF9hbHRlcm5hdGUodm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy02MTEtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYzo2MTI6XFx0dGltZWxpbmVzID0ga3ZtYWxsb2Nfb2JqcygqdGltZWxpbmVzLCBOVU1fVElNRUxJTkVTICogSTkxNV9OVU1fRU5HSU5FUyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy02MTMtXFx0aWYgKCF0aW1lbGluZXMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zaG1lbV91dGlscy5jPTU5PXZvaWQgKnNobWVtX3Bpbl9tYXAoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zaG1lbV91dGlscy5jLTY1LVxcdG5fcGFnZXMgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3QtXFx1MDAzZWlfc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NobWVtX3V0aWxzLmM6NjY6XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKCpwYWdlcywgbl9wYWdlcyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2htZW1fdXRpbHMuYy02Ny1cXHRpZiAoIXBhZ2VzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9qb2IuYz03MDc9cHZyX3N1Ym1pdF9qb2JzKHN0cnVjdCBwdnJfZGV2aWNlICpwdnJfZGV2LCBzdHJ1Y3QgcHZyX2ZpbGUgKnB2cl9maWxlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9qb2IuYy03MjMtXFxuZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9qb2IuYzo3MjQ6XFx0am9iX2RhdGEgPSBrdm1hbGxvY19vYmpzKCpqb2JfZGF0YSwgYXJncy1cXHUwMDNlam9icy5jb3VudCxcXG5kcml2ZXJzL2dwdS9kcm0vaW1hZ2luYXRpb24vcHZyX2pvYi5jLTcyNS1cXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYz0yMT1pbnQgbGltYV9oZWFwX2FsbG9jKHN0cnVjdCBsaW1hX2JvICpibywgc3RydWN0IGxpbWFfdm0gKnZtKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYy00MS1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmM6NDI6XFx0XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKCpwYWdlcywgYm8tXFx1MDAzZWJhc2UuYmFzZS5zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYy00My1cXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYz0xMjg0PXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXNtX2dlbV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jLTEzMDUtXFx0bXNtX29iai1cXHUwMDNlc2d0ID0gc2d0O1xcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jOjEzMDY6XFx0bXNtX29iai1cXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5wYWdlcyk7XFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMtMTMwNy1cXHRpZiAoIW1zbV9vYmotXFx1MDAzZXBhZ2VzKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9pb21tdS5jPTMzMD1tc21faW9tbXVfcGFnZXRhYmxlX3ByZWFsbG9jX2FsbG9jYXRlKHN0cnVjdCBtc21fbW11ICptbXUsIHN0cnVjdCBtc21fbW11X3ByZWFsbG9jICpwKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYy0zMzgtXFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYzozMzk6XFx0cC1cXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKCpwLVxcdTAwM2VwYWdlcywgcC1cXHUwMDNlY291bnQpO1xcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmMtMzQwLVxcdGlmICghcC1cXHUwMDNlcGFnZXMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9sdXQuYz0zMj1udjUwX2x1dF9sb2FkKHN0cnVjdCBudjUwX2x1dCAqbHV0LCBpbnQgYnVmZmVyLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9sdXQuYy00MC1cXHRpZiAoIWluKSB7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvbHV0LmM6NDE6XFx0XFx0aW4gPSBrdm1hbGxvY19vYmpzKCppbiwgMTAyNCk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvbHV0LmMtNDItXFx0XFx0aWYgKCFXQVJOX09OKCFpbikpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L21tdS9tZW0uYz0xNDQ9bnZrbV9tZW1fbmV3X2hvc3Qoc3RydWN0IG52a21fbW11ICptbXUsIGludCB0eXBlLCB1OCBwYWdlLCB1NjQgc2l6ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L21tdS9tZW0uYy0xOTMtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvbW11L21lbS5jOjE5NDpcXHRpZiAoIShtZW0tXFx1MDAzZW1lbSA9IGt2bWFsbG9jX29ianMoKm1lbS1cXHUwMDNlbWVtLCBzaXplKSkpXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvbW11L21lbS5jLTE5NS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9tbXUvbWVtLmM6MTk2OlxcdGlmICghKG1lbS1cXHUwMDNlZG1hID0ga3ZtYWxsb2Nfb2JqcygqbWVtLVxcdTAwM2VkbWEsIHNpemUpKSlcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9tbXUvbWVtLmMtMTk3LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jPTE4OT1wYW5mcm9zdF9sb29rdXBfYm9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMtMjA5LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYzoyMTA6XFx0am9iLVxcdTAwM2VtYXBwaW5ncyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhbmZyb3N0X2dlbV9tYXBwaW5nICosXFxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jLTIxMS1cXHRcXHRcXHRcXHQgICAgICBqb2ItXFx1MDAzZWJvX2NvdW50LCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmM9NTg3PXN0YXRpYyBpbnQgcGFuZnJvc3RfaW9jdGxfc3luY19ibyhzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYy02MDEtXFxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jOjYwMjpcXHRvcHMgPSBrdm1hbGxvY19vYmpzKCpvcHMsIGFyZ3MtXFx1MDAzZW9wX2NvdW50KTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMtNjAzLVxcdGlmICghb3BzKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmM9NTg3PXN0YXRpYyBpbnQgcGFuZnJvc3RfbW11X21hcF9mYXVsdF9hZGRyKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2LCBpbnQgYXMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmMtNjIyLVxcdGlmICghYm8tXFx1MDAzZWJhc2UucGFnZXMpIHtcXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmM6NjIzOlxcdFxcdGJvLVxcdTAwM2VzZ3RzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2dfdGFibGUsXFxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5jLTYyNC1cXHRcXHRcXHRcXHRcXHQgYm8tXFx1MDAzZWJhc2UuYmFzZS5zaXplIC8gU1pfMk0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmMtNjMwLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9tbXUuYzo2MzE6XFx0XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5yX3BhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9tbXUuYy02MzItXFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz03MjY9c3RhdGljIGludCBwYW50aG9yX3N1Ym1pdF9jdHhfaW5pdChzdHJ1Y3QgcGFudGhvcl9zdWJtaXRfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTcyOC17XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzo3Mjk6XFx0Y3R4LVxcdTAwM2Vqb2JzID0ga3ZtYWxsb2Nfb2JqcygqY3R4LVxcdTAwM2Vqb2JzLCBqb2JfY291bnQsXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy03MzAtXFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl92bS5jPTEyOT1zdHJ1Y3QgcmFkZW9uX2JvX2xpc3QgKnJhZGVvbl92bV9nZXRfYm9zKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYy0xMzUtXFxuZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYzoxMzY6XFx0bGlzdCA9IGt2bWFsbG9jX29ianMoc3RydWN0IHJhZGVvbl9ib19saXN0LCB2bS1cXHUwMDNlbWF4X3BkZV91c2VkICsgMik7XFxuZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYy0xMzctXFx0aWYgKCFsaXN0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM9MzYwPXYzZF9nZXRfbXVsdGlzeW5jX3Bvc3RfZGVwcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTM3Mi1cXHRzZS1cXHUwMDNlb3V0X3N5bmNzID0gKHN0cnVjdCB2M2Rfc3VibWl0X291dHN5bmMgKilcXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYzozNzM6XFx0XFx0XFx0a3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdjNkX3N1Ym1pdF9vdXRzeW5jLCBjb3VudCk7XFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtMzc0LVxcdGlmICghc2UtXFx1MDAzZW91dF9zeW5jcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jPTUwNj12M2RfZ2V0X2NwdV90aW1lc3RhbXBfcXVlcnlfcGFyYW1zKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNTI2LVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jOjUyNzpcXHRxdWVyeV9pbmZvLVxcdTAwM2VxdWVyaWVzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdjNkX3RpbWVzdGFtcF9xdWVyeSxcXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy01MjgtXFx0XFx0XFx0XFx0XFx0ICAgIHRpbWVzdGFtcC5jb3VudCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYz01Njc9djNkX2dldF9jcHVfcmVzZXRfdGltZXN0YW1wX3BhcmFtcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTU4NC1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYzo1ODU6XFx0cXVlcnlfaW5mby1cXHUwMDNlcXVlcmllcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHYzZF90aW1lc3RhbXBfcXVlcnksXFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNTg2LVxcdFxcdFxcdFxcdFxcdCAgICByZXNldC5jb3VudCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYz02MjA9djNkX2dldF9jcHVfY29weV9xdWVyeV9yZXN1bHRzX3BhcmFtcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTY0MC1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYzo2NDE6XFx0cXVlcnlfaW5mby1cXHUwMDNlcXVlcmllcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHYzZF90aW1lc3RhbXBfcXVlcnksXFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNjQyLVxcdFxcdFxcdFxcdFxcdCAgICBjb3B5LmNvdW50KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jPTc1MD12M2RfZ2V0X2NwdV9yZXNldF9wZXJmb3JtYW5jZV9wYXJhbXMoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy03NjYtXFx0cXVlcnlfaW5mby1cXHUwMDNlcXVlcmllcyA9XFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6NzY3OlxcdFxcdGt2bWFsbG9jX29ianMoc3RydWN0IHYzZF9wZXJmb3JtYW5jZV9xdWVyeSwgcmVzZXQuY291bnQpO1xcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTc2OC1cXHRpZiAoIXF1ZXJ5X2luZm8tXFx1MDAzZXF1ZXJpZXMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYz03ODc9djNkX2dldF9jcHVfY29weV9wZXJmb3JtYW5jZV9xdWVyeV9wYXJhbXMoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy04MDYtXFx0cXVlcnlfaW5mby1cXHUwMDNlcXVlcmllcyA9XFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6ODA3OlxcdFxcdGt2bWFsbG9jX29ianMoc3RydWN0IHYzZF9wZXJmb3JtYW5jZV9xdWVyeSwgY29weS5jb3VudCk7XFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtODA4LVxcdGlmICghcXVlcnlfaW5mby1cXHUwMDNlcXVlcmllcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9vYmplY3QuYz0xNjE9c3RhdGljIGludCB2aXJ0aW9fZ3B1X29iamVjdF9zaG1lbV9pbml0KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfb2JqZWN0LmMtMTc5LVxcbmRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9vYmplY3QuYzoxODA6XFx0KmVudHMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB2aXJ0aW9fZ3B1X21lbV9lbnRyeSwgKm5lbnRzKTtcXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfb2JqZWN0LmMtMTgxLVxcdGlmICghKCplbnRzKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ByaW1lLmM9MTQ2PWludCB2aXJ0Z3B1X2RtYV9idWZfaW1wb3J0X3NndChzdHJ1Y3QgdmlydGlvX2dwdV9tZW1fZW50cnkgKiplbnRzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ByaW1lLmMtMTY2LVxcbmRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9wcmltZS5jOjE2NzpcXHQqZW50cyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHZpcnRpb19ncHVfbWVtX2VudHJ5LCBzZ3QtXFx1MDAzZW5lbnRzKTtcXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfcHJpbWUuYy0xNjgtXFx0aWYgKCEoKmVudHMpKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmM9NTQxPWludCB2bXdfYm9fY3B1X2JsaXQoc3RydWN0IHZtd19ibyAqdm13X2RzdCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYy01ODgtXFx0aWYgKCFzcmMtXFx1MDAzZXR0bS1cXHUwMDNlcGFnZXMgXFx1MDAyNlxcdTAwMjYgc3JjLVxcdTAwM2V0dG0tXFx1MDAzZXNnKSB7XFxuZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYmxpdC5jOjU4OTpcXHRcXHRzcmNfcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHNyYy1cXHUwMDNldHRtLVxcdTAwM2VudW1fcGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYy01OTAtXFx0XFx0aWYgKCFzcmNfcGFnZXMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmMtNTk3LVxcdGlmICghZHN0LVxcdTAwM2V0dG0tXFx1MDAzZXBhZ2VzIFxcdTAwMjZcXHUwMDI2IGRzdC1cXHUwMDNldHRtLVxcdTAwM2VzZykge1xcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYzo1OTg6XFx0XFx0ZHN0X3BhZ2VzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBkc3QtXFx1MDAzZXR0bS1cXHUwMDNlbnVtX3BhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmMtNTk5LVxcdFxcdGlmICghZHN0X3BhZ2VzKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYz0zNTkxPXN0YXRpYyBpbnQgdm1fYmluZF9pb2N0bF9jaGVja19hcmdzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdm0gKnZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtMzYxMS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYzozNjEyOlxcdFxcdCpiaW5kX29wcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IGRybV94ZV92bV9iaW5kX29wLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTM2MTMtXFx0XFx0XFx0XFx0XFx0ICBhcmdzLVxcdTAwM2VudW1fYmluZHMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmM9NDY9c3RhdGljIGludCBnZW1fYWxsb2NfcGFnZXNfYXJyYXkoc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jLTQ5LVxcdHhlbl9vYmotXFx1MDAzZW51bV9wYWdlcyA9IERJVl9ST1VORF9VUChidWZfc2l6ZSwgUEFHRV9TSVpFKTtcXG5kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmM6NTA6XFx0eGVuX29iai1cXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHhlbl9vYmotXFx1MDAzZW51bV9wYWdlcyk7XFxuZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jLTUxLVxcdHJldHVybiAheGVuX29iai1cXHUwMDNlcGFnZXMgPyAtRU5PTUVNIDogMDtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L3FwLmM9MTExNz1zdGF0aWMgaW50IF9jcmVhdGVfa2VybmVsX3FwKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvcXAuYy0xMjA1LVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpxcC1cXHUwMDNlcnEud3JpZCksIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L3FwLmM6MTIwNjpcXHRxcC1cXHUwMDNlc3Eud19saXN0ID0ga3ZtYWxsb2Nfb2JqcygqcXAtXFx1MDAzZXNxLndfbGlzdCwgcXAtXFx1MDAzZXNxLndxZV9jbnQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L3FwLmMtMTIwNy1cXHRxcC1cXHUwMDNlc3Eud3FlX2hlYWQgPSBrdm1hbGxvY19hcnJheShxcC1cXHUwMDNlc3Eud3FlX2NudCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9pYl9zcnB0LmM9NzgxPXN0YXRpYyBzdHJ1Y3Qgc3JwdF9pb2N0eCAqKnNycHRfYWxsb2NfaW9jdHhfcmluZyhzdHJ1Y3Qgc3JwdF9kZXZpY2UgKnNkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvaWJfc3JwdC5jLTc5Mi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvaWJfc3JwdC5jOjc5MzpcXHRyaW5nID0ga3ZtYWxsb2Nfb2JqcyhyaW5nWzBdLCByaW5nX3NpemUpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9pYl9zcnB0LmMtNzk0LVxcdGlmICghcmluZylcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz02NzM9c3RhdGljIGludCBfX2luaXQgYWxsb2NfYWxpYXNfdGFibGUoc3RydWN0IGFtZF9pb21tdV9wY2lfc2VnICpwY2lfc2VnKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTY3Ni1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6Njc3OlxcdHBjaV9zZWctXFx1MDAzZWFsaWFzX3RhYmxlID0ga3ZtYWxsb2Nfb2JqcygqcGNpX3NlZy1cXHUwMDNlYWxpYXNfdGFibGUsXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTY3OC1cXHRcXHRcXHRcXHRcXHQgICAgIHBjaV9zZWctXFx1MDAzZWxhc3RfYmRmICsgMSk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWNsb25lLXRhcmdldC5jPTU3Nj1zdGF0aWMgaW50IGhhc2hfdGFibGVfaW5pdChzdHJ1Y3QgY2xvbmUgKmNsb25lKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1jbG9uZS10YXJnZXQuYy01ODItXFxuZHJpdmVycy9tZC9kbS1jbG9uZS10YXJnZXQuYzo1ODM6XFx0Y2xvbmUtXFx1MDAzZWh0ID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgaGFzaF90YWJsZV9idWNrZXQsIHN6KTtcXG5kcml2ZXJzL21kL2RtLWNsb25lLXRhcmdldC5jLTU4NC1cXHRpZiAoIWNsb25lLVxcdTAwM2VodClcXG4tLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM9NDIzNz1zdGF0aWMgc3RydWN0IHBhZ2VfbGlzdCAqZG1faW50ZWdyaXR5X2FsbG9jX3BhZ2VfbGlzdCh1bnNpZ25lZCBpbnQgbl9wYWdlcylcXG4tLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI0MS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jOjQyNDI6XFx0cGwgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlX2xpc3QsIG5fcGFnZXMgKyAxLFxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI0My1cXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jPTQyNzE9c3RhdGljIHN0cnVjdCBzY2F0dGVybGlzdCAqKmRtX2ludGVncml0eV9hbGxvY19qb3VybmFsX3NjYXR0ZXJsaXN0KHN0cnVjdCBkbV9pbnRlZ3JpdHlfYyAqaWMsXFxuLS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTQyNzYtXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo0Mjc3OlxcdHNsID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaWMtXFx1MDAzZWpvdXJuYWxfc2VjdGlvbnMsXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00Mjc4LVxcdFxcdFxcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI5NC1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jOjQyOTU6XFx0XFx0cyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHNjYXR0ZXJsaXN0LCBuX3BhZ2VzKTtcXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTQyOTYtXFx0XFx0aWYgKCFzKSB7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jPTQ0MTI9c3RhdGljIGludCBjcmVhdGVfam91cm5hbChzdHJ1Y3QgZG1faW50ZWdyaXR5X2MgKmljLCBjaGFyICoqZXJyb3IpXFxuLS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTQ0OTctXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo0NDk4OlxcdFxcdFxcdHNnID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00NDk5LVxcdFxcdFxcdFxcdFxcdCAgIGljLVxcdTAwM2Vqb3VybmFsX3BhZ2VzICsgMSk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTQ1NjUtXFx0XFx0XFx0fVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6NDU2NjpcXHRcXHRcXHRpYy1cXHUwMDNlc2tfcmVxdWVzdHMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICosXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00NTY3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGljLVxcdTAwM2Vqb3VybmFsX3NlY3Rpb25zLFxcbi0tXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYz00Njc0PXN0YXRpYyBpbnQgZG1faW50ZWdyaXR5X2N0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbi0tXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy01MjY4LVxcdFxcdH1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jOjUyNjk6XFx0XFx0aWMtXFx1MDAzZWJicyA9IGt2bWFsbG9jX29ianMoc3RydWN0IGJpdG1hcF9ibG9ja19zdGF0dXMsXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy01MjcwLVxcdFxcdFxcdFxcdFxcdGljLVxcdTAwM2VuX2JpdG1hcF9ibG9ja3MpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1zbmFwLmM9NjU5PXN0YXRpYyBpbnQgZG1fZXhjZXB0aW9uX3RhYmxlX2luaXQoc3RydWN0IGRtX2V4Y2VwdGlvbl90YWJsZSAqZXQsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXNuYXAuYy02NjUtXFx0ZXQtXFx1MDAzZWhhc2hfbWFzayA9IHNpemUgLSAxO1xcbmRyaXZlcnMvbWQvZG0tc25hcC5jOjY2NjpcXHRldC1cXHUwMDNldGFibGUgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBkbV9obGlzdF9oZWFkLCBzaXplKTtcXG5kcml2ZXJzL21kL2RtLXNuYXAuYy02NjctXFx0aWYgKCFldC1cXHUwMDNldGFibGUpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWN0cmxzLWFwaS5jPTQwOT1pbnQgdjRsMl9nX2V4dF9jdHJsc19jb21tb24oc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsXFxuLS1cXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWN0cmxzLWFwaS5jLTQzMy1cXHRpZiAoY3MtXFx1MDAzZWNvdW50IFxcdTAwM2UgQVJSQVlfU0laRShoZWxwZXIpKSB7XFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYzo0MzQ6XFx0XFx0aGVscGVycyA9IGt2bWFsbG9jX29ianMoaGVscGVyWzBdLCBjcy1cXHUwMDNlY291bnQpO1xcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmMtNDM1LVxcdFxcdGlmICghaGVscGVycylcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmM9NTg2PWludCB0cnlfc2V0X2V4dF9jdHJsc19jb21tb24oc3RydWN0IHY0bDJfZmggKmZoLFxcbi0tXFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYy02MTgtXFx0aWYgKGNzLVxcdTAwM2Vjb3VudCBcXHUwMDNlIEFSUkFZX1NJWkUoaGVscGVyKSkge1xcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmM6NjE5OlxcdFxcdGhlbHBlcnMgPSBrdm1hbGxvY19vYmpzKGhlbHBlclswXSwgY3MtXFx1MDAzZWNvdW50KTtcXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWN0cmxzLWFwaS5jLTYyMC1cXHRcXHRpZiAoIWhlbHBlcnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcnNzLmM9MTE4PWludCBtbHg1ZV9yc3NfcGFyYW1zX2luZGlyX2luaXQoc3RydWN0IG1seDVlX3Jzc19wYXJhbXNfaW5kaXIgKmluZGlyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3Jzcy5jLTEyMC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3Jzcy5jOjEyMTpcXHRpbmRpci1cXHUwMDNldGFibGUgPSBrdm1hbGxvY19vYmpzKCppbmRpci1cXHUwMDNldGFibGUsIG1heF90YWJsZV9zaXplKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcnNzLmMtMTIyLVxcdGlmICghaW5kaXItXFx1MDAzZXRhYmxlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTgwMj1pbnQgbWFuYV9wcmVfYWxsb2NfcnhidWZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqbXBjLCBpbnQgbmV3X210dSwgaW50IG51bV9xdWV1ZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtODIzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzo4MjQ6XFx0bXBjLVxcdTAwM2VkYXNfcHJlID0ga3ZtYWxsb2Nfb2JqcyhkbWFfYWRkcl90LCBudW1fcnhiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtODI1LVxcdGlmICghbXBjLVxcdTAwM2VkYXNfcHJlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvbWV0YWRhdGEuYz01MTE9aW50IG5mcF9mbG93ZXJfbWV0YWRhdGFfaW5pdChzdHJ1Y3QgbmZwX2FwcCAqYXBwLCB1NjQgaG9zdF9jdHhfY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9tZXRhZGF0YS5jLTU3NS1cXHRcXHQgICAgIEZJRUxEX1BSRVAoTkZQX0ZMX1NUQVRfSURfTVVfTlVNLCBob3N0X251bV9tZW1zIC0gMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvbWV0YWRhdGEuYzo1NzY6XFx0cHJpdi1cXHUwMDNlc3RhdHMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBuZnBfZmxfc3RhdHMsIHN0YXRzX3NpemUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL21ldGFkYXRhLmMtNTc3LVxcdGlmICghcHJpdi1cXHUwMDNlc3RhdHMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM9MTU9c3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy01MC1cXHRpID0gbWF4X3QoaW50LCB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlcywgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzo1MTpcXHR0ZW1wX3JpbmcgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB3eF9yaW5nLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtNTItXFx0aWYgKCF0ZW1wX3JpbmcpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jPTM5PXN0YXRpYyBpbnQgdHhnYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNzQtXFx0aSA9IG1heF90KGludCwgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXMsIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYzo3NTpcXHR0ZW1wX3JpbmcgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB3eF9yaW5nLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy03Ni1cXHRpZiAoIXRlbXBfcmluZykge1xcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYz0xNDcwPXN0YXRpYyB2b2lkIG5ldHZzY19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYy0xNTI2LVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM6MTUyNzpcXHRwY3B1X3N1bSA9IGt2bWFsbG9jX29ianMoc3RydWN0IG5ldHZzY19ldGh0b29sX3BjcHVfc3RhdHMsIG5yX2NwdV9pZHMpO1xcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMTUyOC1cXHRpZiAoIXBjcHVfc3VtKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTMvaXB1My1kbWFtYXAuYz0zND1zdGF0aWMgc3RydWN0IHBhZ2UgKippbWd1X2RtYW1hcF9hbGxvY19idWZmZXIoc2l6ZV90IHNpemUsIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9pcHUzL2lwdTMtZG1hbWFwLmMtNDEtXFx0LyogQWxsb2NhdGUgbWVtIGZvciBhcnJheSBvZiBwYWdlIHB0cnMgKi9cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaXB1My9pcHUzLWRtYW1hcC5jOjQyOlxcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcGFnZXMsIGNvdW50KTtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaXB1My9pcHUzLWRtYW1hcC5jLTQzLVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfZnMuYz04MDc9c3RhdGljIHZvaWQgKmZmc19idWlsZF9zZ19saXN0KHN0cnVjdCBzZ190YWJsZSAqc2d0LCBzaXplX3Qgc3opXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9mcy5jLTgxOC1cXHRuX3BhZ2VzID0gUEFHRV9BTElHTihzeikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9mcy5jOjgxOTpcXHRwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbl9wYWdlcyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfZnMuYy04MjAtXFx0aWYgKCFwYWdlcykge1xcbi0tXFxuZHJpdmVycy91c2IvaG9zdC94aGNpLXNpZGViYW5kLmM9MTg9eGhjaV9yaW5nX3RvX3NndGFibGUoc3RydWN0IHhoY2lfc2lkZWJhbmQgKnNiLCBzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nKVxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC94aGNpLXNpZGViYW5kLmMtMzAtXFx0bl9wYWdlcyA9IFBBR0VfQUxJR04oc3opIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuZHJpdmVycy91c2IvaG9zdC94aGNpLXNpZGViYW5kLmM6MzE6XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5fcGFnZXMpO1xcbmRyaXZlcnMvdXNiL2hvc3QveGhjaS1zaWRlYmFuZC5jLTMyLVxcdGlmICghcGFnZXMpXFxuLS1cXG5kcml2ZXJzL3hlbi9ldnRjaG4uYz0zMTg9c3RhdGljIGludCBldnRjaG5fcmVzaXplX3Jpbmcoc3RydWN0IHBlcl91c2VyX2RhdGEgKnUpXFxuLS1cXG5kcml2ZXJzL3hlbi9ldnRjaG4uYy0zMzQtXFxuZHJpdmVycy94ZW4vZXZ0Y2huLmM6MzM1OlxcdG5ld19yaW5nID0ga3ZtYWxsb2Nfb2JqcygqbmV3X3JpbmcsIG5ld19zaXplKTtcXG5kcml2ZXJzL3hlbi9ldnRjaG4uYy0zMzYtXFx0aWYgKCFuZXdfcmluZylcXG4tLVxcbmRyaXZlcnMveGVuL2dudGRldi5jPTEzOD1zdHJ1Y3QgZ250ZGV2X2dyYW50X21hcCAqZ250ZGV2X2FsbG9jX21hcChzdHJ1Y3QgZ250ZGV2X3ByaXYgKnByaXYsIGludCBjb3VudCxcXG4tLVxcbmRyaXZlcnMveGVuL2dudGRldi5jLTE0Ny1cXG5kcml2ZXJzL3hlbi9nbnRkZXYuYzoxNDg6XFx0YWRkLVxcdTAwM2VncmFudHMgICAgPSBrdm1hbGxvY19vYmpzKGFkZC1cXHUwMDNlZ3JhbnRzWzBdLCBjb3VudCk7XFxuZHJpdmVycy94ZW4vZ250ZGV2LmM6MTQ5OlxcdGFkZC1cXHUwMDNlbWFwX29wcyAgID0ga3ZtYWxsb2Nfb2JqcyhhZGQtXFx1MDAzZW1hcF9vcHNbMF0sIGNvdW50KTtcXG5kcml2ZXJzL3hlbi9nbnRkZXYuYzoxNTA6XFx0YWRkLVxcdTAwM2V1bm1hcF9vcHMgPSBrdm1hbGxvY19vYmpzKGFkZC1cXHUwMDNldW5tYXBfb3BzWzBdLCBjb3VudCk7XFxuZHJpdmVycy94ZW4vZ250ZGV2LmMtMTUxLVxcdGFkZC1cXHUwMDNlcGFnZXMgICAgID0ga3Z6YWxsb2Nfb2JqcyhhZGQtXFx1MDAzZXBhZ2VzWzBdLCBjb3VudCk7XFxuLS1cXG5kcml2ZXJzL3hlbi9nbnRkZXYuYy0xNjAtXFx0aWYgKHhlbl9wdl9kb21haW4oKSkge1xcbmRyaXZlcnMveGVuL2dudGRldi5jOjE2MTpcXHRcXHRhZGQtXFx1MDAzZWttYXBfb3BzICAgPSBrdm1hbGxvY19vYmpzKGFkZC1cXHUwMDNla21hcF9vcHNbMF0sIGNvdW50KTtcXG5kcml2ZXJzL3hlbi9nbnRkZXYuYzoxNjI6XFx0XFx0YWRkLVxcdTAwM2VrdW5tYXBfb3BzID0ga3ZtYWxsb2Nfb2JqcyhhZGQtXFx1MDAzZWt1bm1hcF9vcHNbMF0sIGNvdW50KTtcXG5kcml2ZXJzL3hlbi9nbnRkZXYuYy0xNjMtXFx0XFx0aWYgKE5VTEwgPT0gYWRkLVxcdTAwM2VrbWFwX29wcyB8fCBOVUxMID09IGFkZC1cXHUwMDNla3VubWFwX29wcylcXG4tLVxcbmZzL2NlcGgvZmlsZS5jPTE0Nj1zdGF0aWMgc3NpemVfdCBpdGVyX2dldF9idmVjc19hbGxvYyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBtYXhzaXplLFxcbi0tXFxuZnMvY2VwaC9maWxlLmMtMTYxLVxcdCAqL1xcbmZzL2NlcGgvZmlsZS5jOjE2MjpcXHRidiA9IGt2bWFsbG9jX29ianMoKmJ2LCBucGFnZXMsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG5mcy9jZXBoL2ZpbGUuYy0xNjMtXFx0aWYgKCFidilcXG4tLVxcbmZzL2NvcmVkdW1wLmM9MTcyMD1zdGF0aWMgYm9vbCBkdW1wX3ZtYV9zbmFwc2hvdChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi0tXFxuZnMvY29yZWR1bXAuYy0xNzM4LVxcbmZzL2NvcmVkdW1wLmM6MTczOTpcXHRjcHJtLVxcdTAwM2V2bWFfbWV0YSA9IGt2bWFsbG9jX29ianMoKmNwcm0tXFx1MDAzZXZtYV9tZXRhLCBjcHJtLVxcdTAwM2V2bWFfY291bnQpO1xcbmZzL2NvcmVkdW1wLmMtMTc0MC1cXHRpZiAoIWNwcm0tXFx1MDAzZXZtYV9tZXRhKSB7XFxuLS1cXG5mcy9leGZhdC9iYWxsb2MuYz03Mz1zdGF0aWMgaW50IGV4ZmF0X2FsbG9jYXRlX2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXhmYXQvYmFsbG9jLmMtOTctXFx0XFx0XFx0KHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKSkgKyAxO1xcbmZzL2V4ZmF0L2JhbGxvYy5jOjk4OlxcdHNiaS1cXHUwMDNldm9sX2FtYXAgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzYmktXFx1MDAzZW1hcF9zZWN0b3JzKTtcXG5mcy9leGZhdC9iYWxsb2MuYy05OS1cXHRpZiAoIXNiaS1cXHUwMDNldm9sX2FtYXApXFxuLS1cXG5mcy9leHQyL3N1cGVyLmM9ODY0PXN0YXRpYyBpbnQgZXh0Ml9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2V4dDIvc3VwZXIuYy0xMDk4LVxcdFxcdCAgIEVYVDJfREVTQ19QRVJfQkxPQ0soc2IpO1xcbmZzL2V4dDIvc3VwZXIuYzoxMDk5OlxcdHNiaS1cXHUwMDNlc19ncm91cF9kZXNjID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgZGJfY291bnQpO1xcbmZzL2V4dDIvc3VwZXIuYy0xMTAwLVxcdGlmIChzYmktXFx1MDAzZXNfZ3JvdXBfZGVzYyA9PSBOVUxMKSB7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6MDEuNTQ2NTA0NjIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMjYzNDQyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1lbW9yeSBBbGxvY2F0aW9uIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB1c3VhbGx5IGBrdm1hbGxvY19hcnJheWAsIHRoYXQncyB0aGUgZXN0YWJsaXNoZWQgZnVuY3Rpb24gZm9yIHRoaXMuIEJ1dCB0aGVuIEkgc2F3IGBrdm1hbGxvY19vYmpzYCBhbmQgaXQgc3BhcmtlZCBhIHF1ZXN0aW9uLiBXaGVyZSBpcyB0aGF0IGRlZmluZWQ/IEl0J3MgdGltZSB0byBjaGVjayB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlIGZvciB0aGVzZSBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NsYWIuaGAuIFRoYXQncyB3aGVyZSBga3ZtYWxsb2NfYXJyYXlgIGlzIGRlZmluZWQsIHNvIHRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbiwgb3IgYW55IGhpbnRzLCBhYm91dCBga3ZtYWxsb2Nfb2Jqc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIHJlbGF0aW9uc2hpcCwgaWYgYW55LCBpcyBiZXR3ZWVuIHRoZSB0d28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDg3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6MDguODcyODU1Njc3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk0MzAwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtYWxsb2Nfb2Jqc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDUxPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNDItXFx0X19hbGxvY19vYmpzKGt2bWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTQzOiNkZWZpbmUga3ZtYWxsb2Nfb2JqcyhQLCBDT1VOVCwgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE0NC1cXHRfX2FsbG9jX29ianMoa3ZtYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6MDguOTkyMjk0MzU2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTc3ODMyNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYSBzd2l0Y2ggZnJvbSBga21hbGxvY19vYmpzYCB0byBga3ZtYWxsb2Nfb2Jqc2AuIEkgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBpbmNsdWRlL2xpbnV4L3NsYWIuaGAgaGVhZGVyIGZpbGUgdG8gcmVmcmVzaCBteSBtZW1vcnksIGFuZCwgeWVzLCB0aGF0J3MgY29ycmVjdC4gYGt2bWFsbG9jYCBjYW4gZmFsbCBiYWNrIHRvIHZtYWxsb2MsIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS5cblxuVGhlIGZpcnN0IHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHNpZ25pZmljYW50IGVub3VnaCBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIHByb21wdCdzIGNyaXRlcmlhLCBJIGNvbnNpZGVyIHRoaXMuIEl0J3Mgbm90IGEgZG9jdW1lbnRhdGlvbiB1cGRhdGUgb3IgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGt2bWFsbG9jYCBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIGZhbGxiYWNrIHRvIHZtYWxsb2Mgd2hlbiBga21hbGxvY2Agd291bGQgZmFpbCwgZm9yIGxhcmdlIGFsbG9jYXRpb25zLiBUaGF0J3MgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gZXhlY3V0aW9uIGZsb3cuIEJ1dCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IFRoZSBwcm9tcHQgcHJvdmlkZXMgc29tZSBndWlkYW5jZS5cblxuSW5pdGlhbGx5LCBJIHRoaW5rIHRoaXMgbWlnaHQgbm90IGludHJvZHVjZSBmdW5kYW1lbnRhbGx5IG5ldyAqbG9naWMqIHRvIGZ1enosIGJ1dCBpdCBkb2VzIGFsdGVyIGJlaGF2aW9yLiBBIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiB3aGVyZSBpdCBtaWdodCBoYXZlIGZhaWxlZCBiZWZvcmUgKmlzKiBhIHJlbGV2YW50IGNoYW5nZSB0byB0ZXN0LiBTbywgSSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGUgYXJlYSBpcyByZWFjaGFibGUuXG5cbkkgYWxzbyBub3RlIHRoZSBhZGRpdGlvbiBvZiBgZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGVgLCB3aGljaCBpcyBhIGt1bml0IHRlc3QuIFdoaWxlIEkgZG9uJ3QgZGlzY2FyZCB0aGUgcG9zc2liaWxpdHkgb2YgaXQgYmVpbmcgaGVscGZ1bCwga3VuaXQgdGVzdHMgYXJlIHVzdWFsbHkgbm90IHRoZSBwcmltYXJ5IGZvY3VzIG9mIGZ1enppbmcgZWZmb3J0cywgc28gSSBkb24ndCBnaXZlIHRoaXMgc2lnbmlmaWNhbnQgd2VpZ2h0IGluaXRpYWxseS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYG1zZWNzX3RvX2ppZmZpZXNgIHRvIGBzZWNzX3RvX2ppZmZpZXNgIHdoaWNoIGlzIGEgbWFjcm8gY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiBJIHNraXAgb3ZlciB0aGF0IGFzIGl0IGlzIG5vdCB0aGUgbWFpbiBpc3N1ZS5cblxuVGhlbiBJIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIGlzc3VlOiB0aGUgc2luZ2xlIGNvZGUgY2hhbmdlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYDpcblxuYGBgY1xucmFuZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcmFuZ2VzLCBpLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbmBgYFxuSSBjaGVjayB0aGUgY29kZSB0aGF0IHN1cnJvdW5kcyBpdCBhbmQgbm90ZSB0aGUgcGF0Y2gncyBga2ZyZWVgIGlzIGFsc28gYGt2ZnJlZWAgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBjaGFuZ2luZyB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbiB3YXJyYW50cyBhZGRpdGlvbmFsIGZ1enppbmcgZWZmb3J0cy5cblxuSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0LiBVc3VhbGx5LCBzd2l0Y2hpbmcgdG8gYGt2bWFsbG9jYCBpcyBhIGJ1ZyBmaXggb3IgaW1wcm92ZW1lbnQgZm9yIGxhcmdlIGFsbG9jYXRpb25zLiBJIGRvbid0IHNlZSBhbnkgXCJuZXdcIiBjb2RlIHRoYXQgaXMgbm93IHJlYWNoYWJsZSBieSB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24sIGJ1dCBhIHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmUgaGFzIGJlZW4gY29ycmVjdGVkLlxuXG5BY2NvcmRpbmcgdG8gdGhlIHByb21wdCwgaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRvIHJlYWNoIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgLiBJIGNoZWNrIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIC1cdTAwM2UgYGRhbW9uX2NvbW1pdF9jdHhgIC1cdTAwM2UgYGRhbW9uX2NvbW1pdF90YXJnZXRgIC1cdTAwM2UgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgYW5kIHJlYWxpemUgdGhhdCBpdCdzIHJlYWNoYWJsZSB2aWEgc3lzZnMgd3JpdGVzIHRvIERBTU9OLlxuXG5TaW5jZSBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aCBhbiBleGVjdXRpb24gZmxvdyBhbHRlcmF0aW9uICh2bWFsbG9jIGZhbGxiYWNrKSwgaXQncyBwcm9iYWJseSAqd29ydGgqIGZ1enppbmcuIFdlIGNhbiBwcm92aWRlIGEgbGFyZ2UgbnVtYmVyIG9mIHJlZ2lvbnMgdG8gc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSB2bWFsbG9jIGZhbGxiYWNrLiBXZSBjYW4gbm93IHRlc3Qgd2hldGhlciB0aGlzIGZhbGxiYWNrIGZ1bmN0aW9ucyBjb3JyZWN0bHksIGFuZCBpdCBjb3VsZCBpZGVudGlmeSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdm1hbGxvYyB1c2FnZSwgc3VjaCBhcyBlbnN1cmluZyB0aGF0IHRoZSBkb3duc3RyZWFtIGBkYW1vbl9zZXRfcmVnaW9uc2AgZnVuY3Rpb24gaGFuZGxlcyBwb3RlbnRpYWxseSBub24tY29udGlndW91cyBtZW1vcnksIG9yIHdoZXRoZXIgdGhlIGFsbG9jYXRpb24gZmFpbHVyZSBpcyBzaW1wbHkgbWFza2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjg4NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6MjMuOTcwMTMwODU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTYxNDMxMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF9yZWdpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMDEzPXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDE0LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDE1OmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDE2LVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeik7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzE5PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MC0vKlxcbm1tL2RhbW9uL2NvcmUuYzozNDE6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cXG5tbS9kYW1vbi9jb3JlLmMtMzQyLSAqIEB0OlxcdFxcdHRoZSBnaXZlbiB0YXJnZXQuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzUxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNTI6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxubW0vZGFtb24vY29yZS5jLTM1My1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTM0Nz1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM2NC1cXHRcXHRyYW5nZXNbaSsrXSA9IHNyY19yZWdpb24tXFx1MDAzZWFyO1xcbm1tL2RhbW9uL2NvcmUuYzoxMzY1OlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKGRzdCwgcmFuZ2VzLCBpLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTEzNjYtXFx0a3ZmcmVlKHJhbmdlcyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzY5Nj1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzcxMC1cXHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XFxubW0vZGFtb24vY29yZS5jOjM3MTE6XFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFxcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzcxMi19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE5NTc9c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xOTgxLVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjE5ODI6XFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBzeXNmc19yZWdpb25zLVxcdTAwM2VuciwgbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vc3lzZnMuYy0xOTgzLW91dDpcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0zODk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQxMC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NDExOlxcdGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MTItXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTkwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTAzLS8qXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxMDQ6ICogVGVzdCAnZGFtb25fc2V0X3JlZ2lvbnMoKSdcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwNS0gKlxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMTgtICogcmVnaW9ucy4gIFRoZSB1cGRhdGUgb2YgY3VycmVudCB0YXJnZXQgcmVnaW9ucyBpcyB0aGUgcm9sZSBvZlxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTE5OiAqICdkYW1vbl9zZXRfcmVnaW9ucygpJy5cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEyMC0gKlxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0xMjU9c3RhdGljIHZvaWQgZGFtb25fZG9fdGVzdF9hcHBseV90aHJlZV9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTQ3LVxcdH1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE0ODpcXHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBucl9yZWdpb25zIC8gMixcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0OS1cXHRcXHRcXHRcXHREQU1PTl9NSU5fUkVHSU9OX1NaKSkge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTEtXFx0XFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgTlVMTCk7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTI6XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsXFxcIik7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTMtXFx0fVxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTUtXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTY6XFx0aWYgKGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opKSB7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTctXFx0XFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgTlVMTCk7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTg6XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic2Vjb25kIGRhbW9uX3NldF9yZWdpb25zKCkgZmFpbFxcXCIpO1xcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU5LVxcdH1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MTkxPXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfaW5pdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjA3LVxcbm1tL2RhbW9uL3ZhZGRyLmM6MjA4OlxcdGRhbW9uX3NldF9yZWdpb25zKHQsIHJlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjA5LX1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjI2PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3VwZGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIzMy1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi92YWRkci5jOjIzNDpcXHRcXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCB0aHJlZV9yZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG5tbS9kYW1vbi92YWRkci5jLTIzNS1cXHR9XFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEyNS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTI2OlxcdHJldCA9IGRhbW9uX3NldF9yZWdpb25zKHRhcmdldCwgXFx1MDAyNnJhbmdlLCAxLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTI3LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjUxOjI2LjkzMTU3MTg3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzU1ODc3NjM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmUgaW4gREFNT04uIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZSBmcm9tIGBrbWFsbG9jYCB0byBga3ZtYWxsb2NgIGZvciBgcmFuZ2VzYCBhbGxvY2F0aW9uLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBmdXp6YWJsZT9cIiBTaW5jZSBJIGFtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBJIGtub3cgdGhpcyBpcyBpbXBvcnRhbnQsIEkgbmVlZCB0byBzZWUgaWYgaXQgbWVldHMgdGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nLlxuXG5Jbml0aWFsbHksIGl0IHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCB0byBhdm9pZCBhbGxvY2F0aW9uIGZhaWx1cmUgd2hlbiBoYW5kbGluZyBhIHBvdGVudGlhbGx5IGxhcmdlIG51bWJlciBvZiByZWdpb25zIChgbnJfcmVnaW9uc2ApLiBGdXp6aW5nIHdvdWxkIG1vc3RseSBjb25maXJtIHRoYXQgaXQgZG9lc24ndCBjcmFzaCBhbnltb3JlLiBIb3dldmVyLCBga3ZtYWxsb2NgICpjYW4qIHJldHVybiB2bWFsbG9jJ2QgbWVtb3J5LCB3aGljaCBpcyBhIGtleSBkaWZmZXJlbmNlLiBUaGF0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkkgYnJpZWZseSBjb25zaWRlcmVkIGlmIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGRvY3VtZW50YXRpb24gbmVlZCB0byBiZSBjb25zaWRlcmVkLiBJIHJldmlld2VkIGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAsIHJlbGV2YW50IGRvY3VtZW50YXRpb24gaW4gYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0YCwgYERvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdGAgYW5kIGBtbS9kYW1vbi9zdGF0LmNgIGZvciBkb2N1bWVudGF0aW9uIGFuZCBtYWNybyBjaGFuZ2VzLiBOb25lIG9mIHRob3NlIHNlZW0gdG8gaW5kaWNhdGUgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneTpcblxuYGBgY1xuLVx0cmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuK1x0cmFuZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcmFuZ2VzLCBpLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbi4uLlxuLVx0a2ZyZWUocmFuZ2VzKTtcbitcdGt2ZnJlZShyYW5nZXMpO1xuYGBgXG5cblRoaXMgY2hhbmdlICpkb2VzKiBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cgYnkgYWxsb3dpbmcgdGhlIGFsbG9jYXRpb24gdG8gc3VjY2VlZCB2aWEgdm1hbGxvYyBpbnN0ZWFkIG9mIGZhaWxpbmcuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBpcyBpdCB3b3J0aCBmdXp6aW5nP1xuXG5JZiBJIHNheSB5ZXMsIEkgbmVlZCB0byBwcm92aWRlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2Agc2luY2UgaXQgZnVuY3Rpb25hbGx5IGNoYW5nZXMgZXhlY3V0aW9uIGZsb3cuXG5cbkkgd2VudCBiYWNrIHRvIGxvb2sgYXQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgYWdhaW4uIEl0IGRlYWxzIHdpdGggYWxsb2NhdGlvbiBvZiBhbiBhcnJheSBvZiBgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VgLiBUaGUgc2l6ZSBvZiB0aGUgYXJyYXkgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMuIElmIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBpcyBsYXJnZSwgYGttYWxsb2NgIGNhbiBmYWlsLCBidXQgYGt2bWFsbG9jYCB3aWxsIHN1Y2NlZWQuIFRoaXMgaXMgYSBidWcgZml4LCBidXQgYSBjaGFuZ2Ugb2YgdGhpcyBuYXR1cmUgY291bGQgdW5jb3ZlciBwcm9ibGVtcyByZWxhdGVkIHRvIGFzc3VtcHRpb25zIGFib3V0IHRoZSByZWdpb24gYXJyYXkuIEl0IHdvdWxkIGFsc28gbGV0IG1lIHRlc3Qgd2hhdCBoYXBwZW5zIGluIGFuIGVkZ2UgY2FzZSB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiByZWdpb25zLlxuXG5JIGNvbnNpZGVyZWQgdGhhdCBgZGFtb25fc2V0X3JlZ2lvbnNgIG9ubHkgaXRlcmF0ZXMgb3ZlciByZWdpb25zOyBpdCBkb2Vzbid0ICpyZXF1aXJlKiBjb250aWd1b3VzIG1lbW9yeSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY2hhbmdlIHRvIGBrdm1hbGxvY2AgaXMgc29tZXdoYXQgaXNvbGF0ZWQuXG5cbklmIEkgZGVjaWRlIHRoaXMgaXMgd29ydGggZnV6emluZzpcbiogICBgRm9jdXNTeW1ib2xzYDogYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2BcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2BcblxuXG4iLCJJbnB1dFRva2VucyI6MzY1MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjUxOjQ0LjQ5MDM1MjEyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4MzczNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6NDQuNzQ4NzMzNzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg2MTQwMjQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBgbW0vZGFtb24vY29yZS5jYCBpcyBiZWluZyBjb21waWxlZCB1bmRlciBgQ09ORklHX0RBTU9OYC5cIiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIERhdGEgQWNjZXNzIE1PTml0b3IsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlbiwgdGhlcmUncyB0aGlzIG5ldyB0ZXN0LCBgZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGVgIGFkZGVkIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiAgSXQgc2VlbXMgdG8gYmUgYSB0ZXN0IHZlcmlmeWluZyBhIHJhY2UgY29uZGl0aW9uIGZpeCByZWxhdGVkIHRvIHRoZSBgZGFtb3Nfd2Fsa2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBqdXN0IGEgdGVzdCBhZGRpdGlvbiwgbm90IHRvdWNoaW5nIHRoZSBhY3R1YWwgY29yZSBsb2dpYyBpdHNlbGYuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBLY29uZmlnIG1vZGlmaWNhdGlvbnMsIGNvbW1lbnRzLCBsb2dnaW5nIGNoYW5nZXMsIGRlY29yYXRpdmUgbW9kaWZpY2F0aW9ucyBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiAgSSBoYXZlIHRvIGRldGVybWluZSBpZiB0aGlzIGFwcGxpZXMuXG5cbk9rYXksIGNoZWNraW5nIHRoZSBmaWxlcywgbm8sIGl0IGluY2x1ZGVzIGEgY2hhbmdlIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2bWFsbG9jX29ianNgIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBIbW0sIGBrbWFsbG9jX29ianNgIGlzIGEgbWFjcm8sIEkgc2VlLiBTd2l0Y2hpbmcgdGhhdCBtYWNybyB0byBga3ZtYWxsb2Nfb2Jqc2AgbWVhbnMgdGhhdCBpdOKAmXMgY2hhbmdpbmcgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3IsIHVzaW5nIGB2bWFsbG9jYCBpZiBuZWVkZWQgaW5zdGVhZCBvZiBiZWluZyBsaW1pdGVkIHRvIGBrbWFsbG9jYC4gRG9lcyB0aGlzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdz8gWWVzLCBhYnNvbHV0ZWx5LiBJdCBhbGxvd3MgbGFyZ2VyIGFsbG9jYXRpb25zIHRvIHN1Y2NlZWQsIHdoaWNoIGNvdWxkIHJldmVhbCBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLlxuXG5CdXQgaXMgdGhpcyBjaGFuZ2UgcmVhbGx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlICpmdXp6ZWQqPyBJZiBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBzeXprYWxsZXIgd2lsbCBhdHRlbXB0IHRvIGZ1enogYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AsIGJlY2F1c2UgaXQncyB0aGUgbW9zdCBsaWtlbHkgZW50cnkgcG9pbnQgdG8gZ2V0IHRyaWdnZXJlZC4gSXMgaXQgYSBnb29kIGlkZWE/IFllcywgYmVjYXVzZSBpdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgbG9naWMuICBBbHJpZ2h0LCBsZXQgbWUgbWFrZSBzdXJlIHRoYXQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgaXMgcmVhY2hhYmxlLiBZZXAsIHZpYSBzeXNmcyB3cml0ZXMuIFRoYXQgc2hvdWxkIGRvIGl0LiAgSSdsbCB3YW50IHRvIGNoZWNrIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIGFuZCBzZWUgd2hhdCB0aGF0IGV4cG9zZXMsIGJ1dCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5Mzg5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjUxOjU0LjYxMDE0MDYwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwMDA3MDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19jb21taXRfaW5wdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMDg2PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDMtLypcXG5tbS9kYW1vbi9zeXNmcy5jOjIxMDQ6ICogZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KCkgLSBDb21taXQgdXNlciBpbnB1dHMgdG8gYSBydW5uaW5nIGtkYW1vbmQuXFxubW0vZGFtb24vc3lzZnMuYy0yMTA1LSAqIEBrZGFtb25kOlxcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDgtICovXFxubW0vZGFtb24vc3lzZnMuYzoyMTA5OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxubW0vZGFtb24vc3lzZnMuYy0yMTEwLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjM1MT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzYzLVxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjM2NDpcXHRcXHRcXHRcXHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjM2NS1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6NTcuNDEwMjIyMzMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTA0ODA2MDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZSBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgdGhpcyByZWFjaGFibGU/IFllcywgdGhlIGNoYW5nZSBpcyByZWFjaGFibGUuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbiBsaWVzIGluIHRoZSBga3ZtYWxsb2Nfb2Jqc2AgY2hhbmdlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuIFNpbmNlIHRoZSBjaGFuZ2UgdG8gYGt2bWFsbG9jX29ianNgICpkb2VzKiBhbHRlciBleGVjdXRpb24gZmxvdywgc3BlY2lmaWNhbGx5IGJ5IGludHJvZHVjaW5nIGEgYHZtYWxsb2NgIGZhbGxiYWNrLCBpdCBmYWxscyBvdXRzaWRlIHRoZSBjYXRlZ29yeSBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlLlwiIFRoZSBjaGFuZ2UgaXMgYWxzbyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzLiBUaGVyZWZvcmUsIEknbSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgYWNjb3JkaW5nIHRvIHRoZSBwcm9tcHQsIGlmIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYCwgSSBuZWVkIHRvIGlkZW50aWZ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIExldCdzIGdldCB0byBpdC5cblxuVGhlIHByaW1hcnkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgaW4gYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AuIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gR2l2ZW4gdGhlIHByb21wdCwgSSBuZWVkIHRvIGxpc3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gRGVzcGl0ZSBiZWluZyBhIHN0YXRpYyBmdW5jdGlvbiwgc3l6a2FsbGVyICpjYW4qIGZ1enogaXQgaWYgcmVhY2hhYmxlLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4gSSdsbCBhZGQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgdG8gYEZvY3VzU3ltYm9sc2AuIFRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSwgbGlrZSBgZGFtb25fY29tbWl0X3RhcmdldGAgLCBgZGFtb25fY29tbWl0X2N0eGAgYW5kIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIGJ1dCBJJ2xsIGZvY3VzIG9uIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5OZXh0LCBJIG11c3QgaWRlbnRpZnkgdGhlIHJlcXVpcmVkIGBDT05GSUdfYCBvcHRpb25zLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLiBMb29raW5nIGF0IHRoZSBjb2RlLCBwYXJ0aWN1bGFybHkgdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUgd2hpY2ggaW5jbHVkZXMgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBDT05GSUdfREFNT05gIGlzIHJlcXVpcmVkLiBUaGUgc3lzZnMgaW50ZXJmYWNlLCBhcyB0aGUgcHJpbWFyeSBwYXRoIHRvIHRoZSBjb2RlLCByZXF1aXJlcyBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgdGhvdWdoIG90aGVyIHJlbGF0ZWQgc2V0dGluZ3MgYXJlIHVzZWQgbGlrZSBgREFNT05fUkVDTEFJTWAuIFNvLCBJJ2xsIGxpc3Q6XG5gREFNT05gXG5gREFNT05fU1lTRlNgXG5hcyB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQuXG5cblRoaXMgc2VlbXMgdG8gYWRkcmVzcyB0aGUgcHJvbXB0IHJlcXVpcmVtZW50cyBjb21wbGV0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg5NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MjowOS4zMTUwMzQwMzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDAzOTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3JlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vTWFrZWZpbGUtMi1cXG5tbS9kYW1vbi9NYWtlZmlsZTozOm9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxubW0vZGFtb24vTWFrZWZpbGUtNC1vYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTI6MDkuNDM1MDg0NDM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTAwMzExODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgREFNT04gTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYG9iai15IDo9IGNvcmUub2AuIFRoYXQncyB0aGUgY29yZSBvYmplY3QgZmlsZSBmb3IgdGhlIERBTU9OIG1vZHVsZSwgY2xlYXJseS4gV2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGNvbnRleHQuIFRoaXMgZGlyZWN0b3J5LCBgbW0vZGFtb24vYCwgaXMgb25seSBjb21waWxlZCBhbmQgaW5jbHVkZWQgaWYgYENPTkZJR19EQU1PTmAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCdzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgZGVwZW5kZW5jaWVzIGhlcmUuIEl0J3MgYSBjb25kaXRpb25hbCBpbmNsdXNpb24uIEdvb2QsIHRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGFuZCByZW1pbmRzIG1lIHRvIGFsd2F5cyBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzcxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTI6MTUuMDg1MTE5MTk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc0NTc5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTM0PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgKz0gZGVidWdfcGFnZV9yZWYub1xcbm1tL01ha2VmaWxlOjEzNTpvYmotJChDT05GSUdfREFNT04pICs9IGRhbW9uL1xcbm1tL01ha2VmaWxlLTEzNi1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICs9IHVzZXJjb3B5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTI6MTUuMjMyNTg0OTgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzc3MzUxNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCBmb3IgREFNT04gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBlc3NlbnRpYWw6IGBDT05GSUdfREFNT05gIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQg4oCTIG5vIHF1ZXN0aW9uIHRoZXJlLiBOb3csIHRoZSBgQ09ORklHX0RBTU9OX1NZU0ZTYCBwYXJ0Li4uIGl0J3MgdGhlIHN0YW5kYXJkIHVzZXItc3BhY2UgaW50ZXJmYWNlLCByaWdodD8gQmVzdCBwcmFjdGljZSBpcyB0byBpbmNsdWRlIGl0IGZvciBmdWxsIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgZm9yIHRlc3RpbmcsIHNvIEknbGwgZW5hYmxlIHRoYXQgdG9vLiBTbyBmYXIsIHdlJ3JlIGF0IGBEQU1PTmAgYW5kIGBEQU1PTl9TWVNGU2AuXG5cblRoZW4sIEkgc2VlIGEgS1VuaXQgdGVzdCBtZW50aW9uZWQ6IGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAuIFRoYXQncyBjb21waWxlZCB3aXRoIGBDT05GSUdfREFNT05fS1VOSVRfVEVTVGAuIFRoZSBwcm9tcHQgZG9lcyBhc2sgdG8gaWRlbnRpZnkgbmVjZXNzYXJ5IGNvbmZpZ3MgZm9yIHRlc3RpbmcuIEtVbml0IGlzbid0ICpkaXJlY3RseSogaW50ZWdyYXRlZCBpbnRvIHN5emthbGxlciwgd2hpY2ggaXMgd2hhdCB3ZSdyZSBmb2N1c2VkIG9uIGZvciBmdXp6aW5nLCBzbyBpdCdzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuIEVuYWJsaW5nIGl0IHdvbid0IGh1cnQsIGJ1dCB0aGUgcHJpbWFyeSBmdXp6aW5nIG1ldGhvZCBkb2Vzbid0IHVzZSBpdCwgc28gSSdtIGxlYXZpbmcgYERBTU9OX0tVTklUX1RFU1RgIG91dC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBmdW5jdGlvbmFsIGNoYW5nZXMuIEFoLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIGluIGBtbS9kYW1vbi9zdGF0LmNgOiBgbXNlY3NfdG9famlmZmllc2AgY2hhbmdlZCB0byBgc2Vjc190b19qaWZmaWVzYC4gVGhpcyBpcyB3aXRoaW4gYGRhbW9uX3N0YXRfZGFtb25fY2FsbF9mbmAsIHNvIGBDT05GSUdfREFNT05fU1RBVGAgaXMgcmVsZXZhbnQuIEkgd2lsbCBpbmNsdWRlIHRoaXMuXG5cblNvLCB0aGUgZGVmaW5pdGl2ZSBsaXN0OiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX1NUQVRgLlxuXG5UaGUgcGF0Y2gncyBrZXkgY2hhbmdlIGlzIHRoZSBhbGxvY2F0b3Igc3dpdGNoIGluIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2bWFsbG9jX29ianNgLCBlbmFibGluZyBsYXJnZXIgYWxsb2NhdGlvbnMgdGhyb3VnaCBhIHZtYWxsb2MgZmFsbGJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gY29yZSBrZXJuZWwgbG9naWMsIGFuZCBpdCBuZWVkcyB0byBiZSBmdXp6ZWQgdG8gdmVyaWZ5IHRoZSB2bWFsbG9jIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLiBUaGUgcGF0Y2ggYWxzbyBoYXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCB0eXBvIGZpeGVzLCBhIG1hY3JvIHNpbXBsaWZpY2F0aW9uIGluIGBkYW1vbl9zdGF0LmNgLCBhbmQgaW5jbHVkZXMgdGhlIEtVbml0IHRlc3QsIHdoaWNoIGlzIG5vdCBlc3NlbnRpYWwgdG8gZnV6emluZywgYXMgc3l6a2FsbGVyIGRvZXNuJ3QgdXNlIGl0LlxuXG5UaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgaXMgdGhpczogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgdG8gdXNlIGBrdm1hbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgLCBhbGxvd2luZyBsYXJnZSBhbGxvY2F0aW9ucyB0byBmYWxsIGJhY2sgdG8gdm1hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBmYWxsYmFjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiBPdGhlciBjaGFuZ2VzIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCB0eXBvIGZpeGVzLCBhIG1hY3JvIHNpbXBsaWZpY2F0aW9uIGluIGBkYW1vbl9zdGF0LmNgLCBhbmQgYSBuZXcgS1VuaXQgdGVzdC5cIlxuXG5gV29ydGhGdXp6aW5nPXRydWVgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuIFdlJ3ZlIGdvdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIGludm9sdmluZyBhIG1lbW9yeSBhbGxvY2F0b3IuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY3NSwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTI6MjcuNjA5OTQwOTkxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzU5MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1NUQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byB1c2UgYGt2bWFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AsIGFsbG93aW5nIGxhcmdlIGFsbG9jYXRpb25zIHRvIGZhbGwgYmFjayB0byB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuIE90aGVyIGNoYW5nZXMgaW5jbHVkZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHR5cG8gZml4ZXMsIGEgbWFjcm8gc2ltcGxpZmljYXRpb24gaW4gYGRhbW9uX3N0YXQuY2AsIGFuZCBhIG5ldyBLVW5pdCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fU1RBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIHRvIHVzZSBga3ZtYWxsb2Nfb2Jqc2AgaW5zdGVhZCBvZiBga21hbGxvY19vYmpzYCwgYWxsb3dpbmcgbGFyZ2UgYWxsb2NhdGlvbnMgdG8gZmFsbCBiYWNrIHRvIHZtYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZmFsbGJhY2sgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy4gT3RoZXIgY2hhbmdlcyBpbmNsdWRlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdHlwbyBmaXhlcywgYSBtYWNybyBzaW1wbGlmaWNhdGlvbiBpbiBgZGFtb25fc3RhdC5jYCwgYW5kIGEgbmV3IEtVbml0IHRlc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh2xl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 15:43:51 +0000 UTC FinishedAt: 2026-06-29 15:52:29 +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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_STAT" ], "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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_STAT" ], "series_id": "79cb40d2-9da8-4197-a181-6c07fa657fe7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_commit_target_regions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgdG8gdXNlIGBrdm1hbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgLCBhbGxvd2luZyBsYXJnZSBhbGxvY2F0aW9ucyB0byBmYWxsIGJhY2sgdG8gdm1hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBmYWxsYmFjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4gT3RoZXIgY2hhbmdlcyBpbmNsdWRlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdHlwbyBmaXhlcywgYSBtYWNybyBzaW1wbGlmaWNhdGlvbiBpbiBgZGFtb25fc3RhdC5jYCwgYW5kIGEgbmV3IEtVbml0IHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNDVkN2ZlZjNkZmIyMDA2NDNkYjJjMTQ3OGE4YzcyMDlhNzZkNjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTU6NTA6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggMDExMjk2ZjFlN2MyMTkuLmIyNjQ5ZWEwMTFmOTMxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5AQCAtMjQ2LDcgJiM0MzsyNDYsNyBAQCB3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhlIGZpbGVzLlxuIFVuZGVyIGBgbnJfcmVnaW9uc2BgIGRpcmVjdG9yeSwgdHdvIGZpbGVzIGZvciB0aGUgbG93ZXItYm91bmQgYW5kIHVwcGVyLWJvdW5kXG4gb2YgREFNT04mIzM5O3MgbW9uaXRvcmluZyByZWdpb25zIChgYG1pbmBgIGFuZCBgYG1heGBgLCByZXNwZWN0aXZlbHkpLCB3aGljaFxuIGNvbnRyb2xzIHRoZSBtb25pdG9yaW5nIG92ZXJoZWFkLCBleGlzdC4gIFlvdSBjYW4gc2V0IGFuZCBnZXQgdGhlIHZhbHVlcyBieVxuLXdyaXRpbmcgdG8gYW5kIHJhZGluZyBmcm9tIHRoZSBmaWxlcy5cbiYjNDM7d3JpdGluZyB0byBhbmQgcmVhZGluZyBmcm9tIHRoZSBmaWxlcy5cbiBcbiBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBpbnRlcnZhbHMgYW5kIG1vbml0b3JpbmcgcmVnaW9ucyByYW5nZSwgcGxlYXNlIHJlZmVyXG4gdG8gdGhlIERlc2lnbiBkb2N1bWVudCAoOmRvYzpgL21tL2RhbW9uL2Rlc2lnbmApLlxuQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgUGxlYXNlIHJlZmVyIHRvICB0aGUgOnJlZjpgZGVzaWduIGRvY3VtZW50IG9mIHRoZSBmZWF0dXJlXG4gXHUwMDNjZGFtb25fZGVzaWduX21vbml0b3JpbmdfaW50ZXJ2YWxzX2F1dG90dW5pbmdcdTAwM2VgIGZvciB0aGUgaW50ZXJuYWwgb2YgdGhlIHR1bmluZ1xuIG1lY2hhbmlzbS4gIFJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIGZvdXIgZmlsZXMgdW5kZXIgYGBpbnRlcnZhbHNfZ29hbGBgXG4gZGlyZWN0b3J5IHNob3dzIGFuZCB1cGRhdGVzIHRoZSB0dW5pbmcgcGFyYW1ldGVycyB0aGF0IGRlc2NyaWJlZCBpbiB0aGVcbi06cmVmOmRlc2lnbiBkb2MgXHUwMDNjZGFtb25fZGVzaWduX21vbml0b3JpbmdfaW50ZXJ2YWxzX2F1dG90dW5pbmdcdTAwM2VgIHdpdGggdGhlIHNhbWVcbiYjNDM7OnJlZjpgZGVzaWduIGRvYyBcdTAwM2NkYW1vbl9kZXNpZ25fbW9uaXRvcmluZ19pbnRlcnZhbHNfYXV0b3R1bmluZ1x1MDAzZWAgd2l0aCB0aGUgc2FtZVxuIG5hbWVzLiAgVGhlIHR1bmluZyBzdGFydHMgd2l0aCB0aGUgdXNlci1zZXQgYGBzYW1wbGVfdXNgYCBhbmQgYGBhZ2dyX3VzYGAuICBUaGVcbiB0dW5pbmctYXBwbGllZCBjdXJyZW50IHZhbHVlcyBvZiB0aGUgdHdvIGludGVydmFscyBjYW4gYmUgcmVhZCBmcm9tIHRoZVxuIGBgc2FtcGxlX3VzYGAgYW5kIGBgYWdncl91c2BgIGZpbGVzIGFmdGVyIHdyaXRpbmcgYGB1cGRhdGVfdHVuZWRfaW50ZXJ2YWxzYGAgdG9cbkBAIC0zNzcsNyAmIzQzOzM3Nyw3IEBAIHNjaGVtZXMvXHUwMDNjTlx1MDAzZS9cbiBJbiBlYWNoIHNjaGVtZSBkaXJlY3RvcnksIG5pbmUgZGlyZWN0b3JpZXMgKGBgYWNjZXNzX3BhdHRlcm5gYCwgYGBxdW90YXNgYCxcbiBgYHdhdGVybWFya3NgYCwgYGBjb3JlX2ZpbHRlcnNgYCwgYGBvcHNfZmlsdGVyc2BgLCBgYGZpbHRlcnNgYCwgYGBkZXN0c2BgLFxuIGBgc3RhdHNgYCwgYW5kIGBgdHJpZWRfcmVnaW9uc2BgKSBhbmQgdGhyZWUgZmlsZXMgKGBgYWN0aW9uYGAsIGBgdGFyZ2V0X25pZGBgXG4tYW5kIGBgYXBwbHlfaW50ZXJ2YWxgYCkgZXhpc3QuXG4mIzQzO2FuZCBgYGFwcGx5X2ludGVydmFsX3VzYGApIGV4aXN0LlxuIFxuIFRoZSBgYGFjdGlvbmBgIGZpbGUgaXMgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIHNjaGVtZSYjMzk7cyA6cmVmOmBhY3Rpb25cbiBcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfYWN0aW9uXHUwMDNlYC4gIFRoZSBrZXl3b3JkcyB0aGF0IGNhbiBiZSB3cml0dGVuIHRvIGFuZCByZWFkXG5AQCAtNzQzLDcgJiM0Mzs3NDMsNyBAQCBjb3VudGVyKS4gIEZpbmFsbHkgdGhlIHRlbnRoIGZpZWxkIChgYFhgYCkgc2hvd3MgdGhlIGBgYWdlYGAgb2YgdGhlIHJlZ2lvblxuIChyZWZlciB0byA6cmVmOmBkZXNpZ24gXHUwMDNjZGFtb25fZGVzaWduX2FnZV90cmFja2luZ1x1MDAzZWAgZm9yIG1vcmUgZGV0YWlscyBvZiB0aGVcbiBjb3VudGVyKS5cbiBcbi1JZiB0aGUgZXZlbnQgd2FzIGBgZGFtb246ZGFtb3NfYmVvZnJlX2FwcGx5YGAsIHRoZSBgYHBlcmYgc2NyaXB0YGAgb3V0cHV0IHdvdWxkXG4mIzQzO0lmIHRoZSBldmVudCB3YXMgYGBkYW1vbjpkYW1vc19iZWZvcmVfYXBwbHlgYCwgdGhlIGBgcGVyZiBzY3JpcHRgYCBvdXRwdXQgd291bGRcbiBiZSBzb21ld2hhdCBsaWtlIGJlbG93OjpcbiBcbiAgICAga2RhbW9uZC4wIDQ3MjkzIFswMDBdIDgwODAxLjA2MDIxNDogZGFtb246ZGFtb3NfYmVmb3JlX2FwcGx5OiBjdHhfaWR4PTAgc2NoZW1lX2lkeD0wIHRhcmdldF9pZHg9MCBucl9yZWdpb25zPTExIDEyMTkzMjYwNzQ4OC0xMzUxMjg3MTExNjg6IDAgMTM2XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCAyZGE3Y2EwZDNkMTdhNC4uYzE2YTNiYjI4OGQwNzkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTg2LDcgJiM0Mzs4Niw3IEBAIFRvIGtub3cgaG93IHVzZXItc3BhY2UgY2FuIGRvIHRoZSBjb25maWd1cmF0aW9uIHZpYSA6cmVmOmBEQU1PTiBzeXNmcyBpbnRlcmZhY2VcbiBkb2N1bWVudGF0aW9uLlxuIFxuIFxuLSAuLiBfZGFtb25fZGVzaWduX3ZhZGRyX3RhcmdldF9yZWdpb25zX2NvbnN0cnVjdGlvbjpcbiYjNDM7Li4gX2RhbW9uX2Rlc2lnbl92YWRkcl90YXJnZXRfcmVnaW9uc19jb25zdHJ1Y3Rpb246XG4gXG4gVk1BLWJhc2VkIFRhcmdldCBBZGRyZXNzIFJhbmdlIENvbnN0cnVjdGlvblxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC05MzAsMTEgJiM0Mzs5MzAsMTEgQEAgY29udHJvbCBwYXJhbWV0ZXJzIGZvciB0aGUgdXNhZ2Ugd291bGQgYWxzbyBuZWVkIHRvIGJlIG9wdGltaXplZCBmb3IgdGhlXG4gcHVycG9zZS5cbiBcbiBUbyBzdXBwb3J0IHN1Y2ggY2FzZXMsIHlldCBtb3JlIERBTU9OIEFQSSB1c2VyIGtlcm5lbCBtb2R1bGVzIHRoYXQgcHJvdmlkZSBtb3JlXG4tc2ltcGxlIGFuZCBvcHRpbWl6ZWQgdXNlciBzcGFjZSBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUuICBDdXJyZW50bHksIHR3b1xuLW1vZHVsZXMgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiBhbmQgTFJVIGxpc3RzIG1hbmlwdWxhdGlvbiBhcmUgcHJvdmlkZWQuICBGb3Jcbi1tb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3IgdGhvc2Vcbi0oOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXRgLCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbWAgYW5kXG4tOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuXG4mIzQzO3NpbXBsZSBhbmQgb3B0aW1pemVkIHVzZXIgc3BhY2UgaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlLiAgQ3VycmVudGx5LCB0aHJlZVxuJiM0Mzttb2R1bGVzIGZvciBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzLCBwcm9hY3RpdmUgcmVjbGFtYXRpb24sIGFuZCBMUlUgbGlzdHNcbiYjNDM7bWFuaXB1bGF0aW9uIGFyZSBwcm92aWRlZC4gIEZvciBtb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3JcbiYjNDM7dGhvc2UgKDpkb2M6YC9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0YCwgOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW1gXG4mIzQzO2FuZCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnRgKS5cbiBcbiAuLiBfZGFtb25fZGVzaWduX3NwZWNpYWxfcHVycG9zZV9tb2R1bGVzX2V4Y2x1c2l2aXR5OlxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMDI3MjUwZTQzYzY2ZjIuLjY1OGU0ZTMyOTdiMDg2IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0xMzU2LDE0ICYjNDM7MTM1NiwxNCBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsXG4gXHRpZiAoIWkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuJiM0MztcdHJhbmdlcyA9IGt2bWFsbG9jX29ianMoKnJhbmdlcywgaSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4gXHRpZiAoIXJhbmdlcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRpID0gMDtcbiBcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihzcmNfcmVnaW9uLCBzcmMpXG4gXHRcdHJhbmdlc1tpJiM0MzsmIzQzO10gPSBzcmNfcmVnaW9uLVx1MDAzZWFyO1xuIFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbi1cdGtmcmVlKHJhbmdlcyk7XG4mIzQzO1x0a3ZmcmVlKHJhbmdlcyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zdGF0LmMgYi9tbS9kYW1vbi9zdGF0LmNcbmluZGV4IDBlMTRmNWJiOGY3NWQ5Li5iMDViNjhmNzNlMTBkZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N0YXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3RhdC5jXG5AQCAtMTM4LDcgJiM0MzsxMzgsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N0YXRfZGFtb25fY2FsbF9mbih2b2lkICpkYXRhKVxuIFxuIFx0LyogYXZvaWQgdW5uZWNlc3NhcmlseSBmcmVxdWVudCBzdGF0IHVwZGF0ZSAqL1xuIFx0aWYgKHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsIGRhbW9uX3N0YXRfbGFzdF9yZWZyZXNoX2ppZmZpZXMgJiM0Mztcbi1cdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoNSAqIE1TRUNfUEVSX1NFQykpKVxuJiM0MztcdFx0XHRcdHNlY3NfdG9famlmZmllcyg1KSkpXG4gXHRcdHJldHVybiAwO1xuIFx0ZGFtb25fc3RhdF9sYXN0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXM7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBmY2Y3YzdmYWRiNWZlNS4uYzVmNTEyNGMzZDFmNDYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTE0NTYsNiAmIzQzOzE0NTYsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFZlcmlmeSB0aGF0IGRhbW9zX3dhbGsoKSByZWplY3RzIG5ldyByZXF1ZXN0cyB3aGVuXG4mIzQzOyAqIHdhbGtfY29udHJvbF9vYnNvbGV0ZSBpcyBzZXQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OlxuJiM0MzsgKiBjb21taXQgMzNjM2Y2YzJiNDhjIChcJiMzNDttbS9kYW1vbi9jb3JlOiBmaXggZGFtb3Nfd2FsaygpIHZzIGtkYW1vbmRfZm4oKSBleGl0IHJhY2VcJiMzNDspXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCBjb250cm9sID0ge307XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtjdHggYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFNpbXVsYXRlIHNodXRkb3duIHBoYXNlICovXG4mIzQzO1x0Y3R4LVx1MDAzZXdhbGtfY29udHJvbF9vYnNvbGV0ZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRhbW9zX3dhbGsoY3R4LCBcdTAwMjZjb250cm9sKTtcbiYjNDM7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgLUVDQU5DRUxFRCk7XG4mIzQzO1xuJiM0MztcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF90YXJnZXQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3JlZ2lvbnMpLFxuQEAgLTE0ODUsNiAmIzQzOzE1MTIsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9ucyksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24pLFxuJiM0MztcdEtVTklUX0NBU0UoZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGUpLFxuIFx0e30sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL0tjb25maWcgYi9zYW1wbGVzL2RhbW9uL0tjb25maWdcbmluZGV4IGNiZjk2ZmQ4YThiZjljLi4wMGJlM2U2YmRkNjU5OSAxMDA2NDRcbi0tLSBhL3NhbXBsZXMvZGFtb24vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvc2FtcGxlcy9kYW1vbi9LY29uZmlnXG5AQCAtMzEsNyAmIzQzOzMxLDcgQEAgY29uZmlnIFNBTVBMRV9EQU1PTl9NVElFUlxuIFx0Ym9vbCBcJiMzNDtEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmluZ1wmIzM0O1xuIFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgREFNT05fUEFERFJcbiBcdGhlbHBcbi1cdCAgVGhwcyBidWlsZHMgREFNT04gc2FtcGxlIG1vZHVsZSBmb3IgbWVtb3J5IHRpZXJpZ24uXG4mIzQzO1x0ICBUaGlzIGJ1aWxkcyBEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmluZy5cbiBcbiBcdCAgVGhlIG1vZHVsZSBhc3N1bWVzIHRoZSBzeXN0ZW0gaXMgY29uc3RydWN0ZWQgd2l0aCB0d28gTlVNQSBub2RlcyxcbiBcdCAgd2hpY2ggc2VlbXMgYXMgbG9jYWwgYW5kIHJlbW90ZSBub2RlcyB0byBhbGwgQ1BVcy4gIEZvciBleGFtcGxlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgdG8gdXNlIGBrdm1hbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgLCBhbGxvd2luZyBsYXJnZSBhbGxvY2F0aW9ucyB0byBmYWxsIGJhY2sgdG8gdm1hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBmYWxsYmFjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4gT3RoZXIgY2hhbmdlcyBpbmNsdWRlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdHlwbyBmaXhlcywgYSBtYWNybyBzaW1wbGlmaWNhdGlvbiBpbiBgZGFtb25fc3RhdC5jYCwgYW5kIGEgbmV3IEtVbml0IHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0NWQ3ZmVmM2RmYjIwMDY0M2RiMmMxNDc4YThjNzIwOWE3NmQ2OGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxNTo1MDoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggMDExMjk2ZjFlN2MyMTkuLmIyNjQ5ZWEwMTFmOTMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdApAQCAtMjQ2LDcgJiM0MzsyNDYsNyBAQCB3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhlIGZpbGVzLgogVW5kZXIgYGBucl9yZWdpb25zYGAgZGlyZWN0b3J5LCB0d28gZmlsZXMgZm9yIHRoZSBsb3dlci1ib3VuZCBhbmQgdXBwZXItYm91bmQKIG9mIERBTU9OJiMzOTtzIG1vbml0b3JpbmcgcmVnaW9ucyAoYGBtaW5gYCBhbmQgYGBtYXhgYCwgcmVzcGVjdGl2ZWx5KSwgd2hpY2gKIGNvbnRyb2xzIHRoZSBtb25pdG9yaW5nIG92ZXJoZWFkLCBleGlzdC4gIFlvdSBjYW4gc2V0IGFuZCBnZXQgdGhlIHZhbHVlcyBieQotd3JpdGluZyB0byBhbmQgcmFkaW5nIGZyb20gdGhlIGZpbGVzLgomIzQzO3dyaXRpbmcgdG8gYW5kIHJlYWRpbmcgZnJvbSB0aGUgZmlsZXMuCiAKIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGludGVydmFscyBhbmQgbW9uaXRvcmluZyByZWdpb25zIHJhbmdlLCBwbGVhc2UgcmVmZXIKIHRvIHRoZSBEZXNpZ24gZG9jdW1lbnQgKDpkb2M6YC9tbS9kYW1vbi9kZXNpZ25gKS4KQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgUGxlYXNlIHJlZmVyIHRvICB0aGUgOnJlZjpgZGVzaWduIGRvY3VtZW50IG9mIHRoZSBmZWF0dXJlCiAmbHQ7ZGFtb25fZGVzaWduX21vbml0b3JpbmdfaW50ZXJ2YWxzX2F1dG90dW5pbmcmZ3Q7YCBmb3IgdGhlIGludGVybmFsIG9mIHRoZSB0dW5pbmcKIG1lY2hhbmlzbS4gIFJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIGZvdXIgZmlsZXMgdW5kZXIgYGBpbnRlcnZhbHNfZ29hbGBgCiBkaXJlY3Rvcnkgc2hvd3MgYW5kIHVwZGF0ZXMgdGhlIHR1bmluZyBwYXJhbWV0ZXJzIHRoYXQgZGVzY3JpYmVkIGluIHRoZQotOnJlZjpkZXNpZ24gZG9jICZsdDtkYW1vbl9kZXNpZ25fbW9uaXRvcmluZ19pbnRlcnZhbHNfYXV0b3R1bmluZyZndDtgIHdpdGggdGhlIHNhbWUKJiM0Mzs6cmVmOmBkZXNpZ24gZG9jICZsdDtkYW1vbl9kZXNpZ25fbW9uaXRvcmluZ19pbnRlcnZhbHNfYXV0b3R1bmluZyZndDtgIHdpdGggdGhlIHNhbWUKIG5hbWVzLiAgVGhlIHR1bmluZyBzdGFydHMgd2l0aCB0aGUgdXNlci1zZXQgYGBzYW1wbGVfdXNgYCBhbmQgYGBhZ2dyX3VzYGAuICBUaGUKIHR1bmluZy1hcHBsaWVkIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSB0d28gaW50ZXJ2YWxzIGNhbiBiZSByZWFkIGZyb20gdGhlCiBgYHNhbXBsZV91c2BgIGFuZCBgYGFnZ3JfdXNgYCBmaWxlcyBhZnRlciB3cml0aW5nIGBgdXBkYXRlX3R1bmVkX2ludGVydmFsc2BgIHRvCkBAIC0zNzcsNyAmIzQzOzM3Nyw3IEBAIHNjaGVtZXMvJmx0O04mZ3Q7LwogSW4gZWFjaCBzY2hlbWUgZGlyZWN0b3J5LCBuaW5lIGRpcmVjdG9yaWVzIChgYGFjY2Vzc19wYXR0ZXJuYGAsIGBgcXVvdGFzYGAsCiBgYHdhdGVybWFya3NgYCwgYGBjb3JlX2ZpbHRlcnNgYCwgYGBvcHNfZmlsdGVyc2BgLCBgYGZpbHRlcnNgYCwgYGBkZXN0c2BgLAogYGBzdGF0c2BgLCBhbmQgYGB0cmllZF9yZWdpb25zYGApIGFuZCB0aHJlZSBmaWxlcyAoYGBhY3Rpb25gYCwgYGB0YXJnZXRfbmlkYGAKLWFuZCBgYGFwcGx5X2ludGVydmFsYGApIGV4aXN0LgomIzQzO2FuZCBgYGFwcGx5X2ludGVydmFsX3VzYGApIGV4aXN0LgogCiBUaGUgYGBhY3Rpb25gYCBmaWxlIGlzIGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoZSBzY2hlbWUmIzM5O3MgOnJlZjpgYWN0aW9uCiAmbHQ7ZGFtb25fZGVzaWduX2RhbW9zX2FjdGlvbiZndDtgLiAgVGhlIGtleXdvcmRzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gYW5kIHJlYWQKQEAgLTc0Myw3ICYjNDM7NzQzLDcgQEAgY291bnRlcikuICBGaW5hbGx5IHRoZSB0ZW50aCBmaWVsZCAoYGBYYGApIHNob3dzIHRoZSBgYGFnZWBgIG9mIHRoZSByZWdpb24KIChyZWZlciB0byA6cmVmOmBkZXNpZ24gJmx0O2RhbW9uX2Rlc2lnbl9hZ2VfdHJhY2tpbmcmZ3Q7YCBmb3IgbW9yZSBkZXRhaWxzIG9mIHRoZQogY291bnRlcikuCiAKLUlmIHRoZSBldmVudCB3YXMgYGBkYW1vbjpkYW1vc19iZW9mcmVfYXBwbHlgYCwgdGhlIGBgcGVyZiBzY3JpcHRgYCBvdXRwdXQgd291bGQKJiM0MztJZiB0aGUgZXZlbnQgd2FzIGBgZGFtb246ZGFtb3NfYmVmb3JlX2FwcGx5YGAsIHRoZSBgYHBlcmYgc2NyaXB0YGAgb3V0cHV0IHdvdWxkCiBiZSBzb21ld2hhdCBsaWtlIGJlbG93OjoKIAogICAgIGtkYW1vbmQuMCA0NzI5MyBbMDAwXSA4MDgwMS4wNjAyMTQ6IGRhbW9uOmRhbW9zX2JlZm9yZV9hcHBseTogY3R4X2lkeD0wIHNjaGVtZV9pZHg9MCB0YXJnZXRfaWR4PTAgbnJfcmVnaW9ucz0xMSAxMjE5MzI2MDc0ODgtMTM1MTI4NzExMTY4OiAwIDEzNgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CmluZGV4IDJkYTdjYTBkM2QxN2E0Li5jMTZhM2JiMjg4ZDA3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdApAQCAtODYsNyAmIzQzOzg2LDcgQEAgVG8ga25vdyBob3cgdXNlci1zcGFjZSBjYW4gZG8gdGhlIGNvbmZpZ3VyYXRpb24gdmlhIDpyZWY6YERBTU9OIHN5c2ZzIGludGVyZmFjZQogZG9jdW1lbnRhdGlvbi4KIAogCi0gLi4gX2RhbW9uX2Rlc2lnbl92YWRkcl90YXJnZXRfcmVnaW9uc19jb25zdHJ1Y3Rpb246CiYjNDM7Li4gX2RhbW9uX2Rlc2lnbl92YWRkcl90YXJnZXRfcmVnaW9uc19jb25zdHJ1Y3Rpb246CiAKIFZNQS1iYXNlZCBUYXJnZXQgQWRkcmVzcyBSYW5nZSBDb25zdHJ1Y3Rpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkzMCwxMSAmIzQzOzkzMCwxMSBAQCBjb250cm9sIHBhcmFtZXRlcnMgZm9yIHRoZSB1c2FnZSB3b3VsZCBhbHNvIG5lZWQgdG8gYmUgb3B0aW1pemVkIGZvciB0aGUKIHB1cnBvc2UuCiAKIFRvIHN1cHBvcnQgc3VjaCBjYXNlcywgeWV0IG1vcmUgREFNT04gQVBJIHVzZXIga2VybmVsIG1vZHVsZXMgdGhhdCBwcm92aWRlIG1vcmUKLXNpbXBsZSBhbmQgb3B0aW1pemVkIHVzZXIgc3BhY2UgaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlLiAgQ3VycmVudGx5LCB0d28KLW1vZHVsZXMgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiBhbmQgTFJVIGxpc3RzIG1hbmlwdWxhdGlvbiBhcmUgcHJvdmlkZWQuICBGb3IKLW1vcmUgZGV0YWlsLCBwbGVhc2UgcmVhZCB0aGUgdXNhZ2UgZG9jdW1lbnRzIGZvciB0aG9zZQotKDpkb2M6YC9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0YCwgOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW1gIGFuZAotOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuCiYjNDM7c2ltcGxlIGFuZCBvcHRpbWl6ZWQgdXNlciBzcGFjZSBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUuICBDdXJyZW50bHksIHRocmVlCiYjNDM7bW9kdWxlcyBmb3IgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcywgcHJvYWN0aXZlIHJlY2xhbWF0aW9uLCBhbmQgTFJVIGxpc3RzCiYjNDM7bWFuaXB1bGF0aW9uIGFyZSBwcm92aWRlZC4gIEZvciBtb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3IKJiM0Mzt0aG9zZSAoOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXRgLCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbWAKJiM0MzthbmQgOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuCiAKIC4uIF9kYW1vbl9kZXNpZ25fc3BlY2lhbF9wdXJwb3NlX21vZHVsZXNfZXhjbHVzaXZpdHk6CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAwMjcyNTBlNDNjNjZmMi4uNjU4ZTRlMzI5N2IwODYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTEzNTYsMTQgJiM0MzsxMzU2LDE0IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKmRzdCwKIAlpZiAoIWkpCiAJCXJldHVybiAwOwogCi0JcmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwomIzQzOwlyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwogCWlmICghcmFuZ2VzKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpID0gMDsKIAlkYW1vbl9mb3JfZWFjaF9yZWdpb24oc3JjX3JlZ2lvbiwgc3JjKQogCQlyYW5nZXNbaSYjNDM7JiM0MztdID0gc3JjX3JlZ2lvbi0mZ3Q7YXI7CiAJZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTsKLQlrZnJlZShyYW5nZXMpOwomIzQzOwlrdmZyZWUocmFuZ2VzKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zdGF0LmMgYi9tbS9kYW1vbi9zdGF0LmMKaW5kZXggMGUxNGY1YmI4Zjc1ZDkuLmIwNWI2OGY3M2UxMGRlIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zdGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3RhdC5jCkBAIC0xMzgsNyAmIzQzOzEzOCw3IEBAIHN0YXRpYyBpbnQgZGFtb25fc3RhdF9kYW1vbl9jYWxsX2ZuKHZvaWQgKmRhdGEpCiAKIAkvKiBhdm9pZCB1bm5lY2Vzc2FyaWx5IGZyZXF1ZW50IHN0YXQgdXBkYXRlICovCiAJaWYgKHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsIGRhbW9uX3N0YXRfbGFzdF9yZWZyZXNoX2ppZmZpZXMgJiM0MzsKLQkJCQltc2Vjc190b19qaWZmaWVzKDUgKiBNU0VDX1BFUl9TRUMpKSkKJiM0MzsJCQkJc2Vjc190b19qaWZmaWVzKDUpKSkKIAkJcmV0dXJuIDA7CiAJZGFtb25fc3RhdF9sYXN0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXM7CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAppbmRleCBmY2Y3YzdmYWRiNWZlNS4uYzVmNTEyNGMzZDFmNDYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKQEAgLTE0NTYsNiAmIzQzOzE0NTYsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJZGFtb25fZnJlZV90YXJnZXQodCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFZlcmlmeSB0aGF0IGRhbW9zX3dhbGsoKSByZWplY3RzIG5ldyByZXF1ZXN0cyB3aGVuCiYjNDM7ICogd2Fsa19jb250cm9sX29ic29sZXRlIGlzIHNldC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OgomIzQzOyAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKCYjMzQ7bW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlJiMzNDspCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGUoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIGNvbnRyb2wgPSB7fTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJY3R4ID0gZGFtb25fbmV3X2N0eCgpOwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtjdHggYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogU2ltdWxhdGUgc2h1dGRvd24gcGhhc2UgKi8KJiM0MzsJY3R4LSZndDt3YWxrX2NvbnRyb2xfb2Jzb2xldGUgPSB0cnVlOwomIzQzOwomIzQzOwlyZXQgPSBkYW1vc193YWxrKGN0eCwgJmFtcDtjb250cm9sKTsKJiM0MzsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgLUVDQU5DRUxFRCk7CiYjNDM7CiYjNDM7CWRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdGFyZ2V0KSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfcmVnaW9ucyksCkBAIC0xNDg1LDYgJiM0MzsxNTEyLDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QpLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9ucyksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X2lzX2xhc3RfcmVnaW9uKSwKJiM0MzsJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZSksCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL0tjb25maWcgYi9zYW1wbGVzL2RhbW9uL0tjb25maWcKaW5kZXggY2JmOTZmZDhhOGJmOWMuLjAwYmUzZTZiZGQ2NTk5IDEwMDY0NAotLS0gYS9zYW1wbGVzL2RhbW9uL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvc2FtcGxlcy9kYW1vbi9LY29uZmlnCkBAIC0zMSw3ICYjNDM7MzEsNyBAQCBjb25maWcgU0FNUExFX0RBTU9OX01USUVSCiAJYm9vbCAmIzM0O0RBTU9OIHNhbXBsZSBtb2R1bGUgZm9yIG1lbW9yeSB0aWVyaW5nJiMzNDsKIAlkZXBlbmRzIG9uIERBTU9OICZhbXA7JmFtcDsgREFNT05fUEFERFIKIAloZWxwCi0JICBUaHBzIGJ1aWxkcyBEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmlnbi4KJiM0MzsJICBUaGlzIGJ1aWxkcyBEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmluZy4KIAogCSAgVGhlIG1vZHVsZSBhc3N1bWVzIHRoZSBzeXN0ZW0gaXMgY29uc3RydWN0ZWQgd2l0aCB0d28gTlVNQSBub2RlcywKIAkgIHdoaWNoIHNlZW1zIGFzIGxvY2FsIGFuZCByZW1vdGUgbm9kZXMgdG8gYWxsIENQVXMuICBGb3IgZXhhbXBsZSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDg1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBQYXRjaCBSZXZpZXc6IEluaXRpYWwgVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZS4gU2VlbXMgbGlrZSBpdCB0b3VjaGVzIGEgZmV3IGFyZWFzOiBkb2N1bWVudGF0aW9uLCBjb3JlIGNvZGUsIHNvbWUgc3RhdHMsIGFuZCBhIHRlc3QgZmlsZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMuCgpSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSBjaGFuZ2UgaW4gYG1tL2RhbW9uL2NvcmUuY2AuICBUaGV5JiMzOTt2ZSBzd2FwcGVkIGBrbWFsbG9jX29ianNgIGZvciBga3ZtYWxsb2Nfb2Jqc2AgYW5kIGNvcnJlc3BvbmRpbmdseSwgYGtmcmVlYCB0byBga3ZmcmVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWgsIGFsbG9jYXRvciBjaGFuZ2UuJiMzNDsgIEJ1dCB3YWl0LCB3aGF0JiMzOTtzIGBrbWFsbG9jX29ianNgPyBJcyBpdCBldmVuIGEgcmVhbCBmdW5jdGlvbj8gIEFoLCBpdCYjMzk7cyBub3QgYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24sIGl0IGlzIHByb2JhYmx5IGEgbWFjcm8uIFNvIGl0IGRvZXNuJiMzOTt0IG1hdHRlciwgaXQgaXMgYW4gYWxsb2NhdG9yIGNoYW5nZS4gT2ssIG5vdyBJJiMzOTttIGN1cmlvdXMsIGBrbWFsbG9jX29ianNgIG11c3QgYmUgYSB3cmFwcGVyIGZvciBzb21ldGhpbmcgZWxzZS4gSXMgaXQgYGttYWxsb2NfYXJyYXlgPyBMZXQgbWUgY2hlY2sgdGhlIGNvZGUuLi4gWWVwLCBkb2VzbiYjMzk7dCBtYXR0ZXIsIGl0JiMzOTtzIGFuIGFsbG9jYXRvciBjaGFuZ2UuCgpNb3Zpbmcgb24sIGBtbS9kYW1vbi9zdGF0LmNgIGhhcyBhIHNpbXBsZSBjaGFuZ2U6IGBtc2Vjc190b19qaWZmaWVzKDUgKiBNU0VDX1BFUl9TRUMpYCBiZWNvbWVzIGBzZWNzX3RvX2ppZmZpZXMoNSlgLiAgQ29tcGxldGVseSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwganVzdCBhIGRpZmZlcmVudCB3YXkgb2YgZXhwcmVzc2luZyB0aGUgc2FtZSB0aW1lIGludGVydmFsLiAgTm8gYmlnIGRlYWwgdGhlcmUuCgpUaGVuLCB0aGVyZSYjMzk7cyBhIG5ldyBLVW5pdCB0ZXN0IGFkZGVkIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBGaW5lLCBtb3JlIHRlc3RzIGFyZSBhbHdheXMgZ29vZC4KClNvLCB0aGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSByZWFsbHkgYm9pbHMgZG93biB0byBzd2FwcGluZyB0aGUgYWxsb2NhdG9yIGluIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgLiBCdXQgd2FpdCwgZG9lcyB0aGlzIGNvbnN0aXR1dGUgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IENoYW5naW5nIGZyb20gYGttYWxsb2NgIHRvIGBrdm1hbGxvY2AgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGNhbiBhbGxvdyBhbGxvY2F0aW9uIGZhaWx1cmVzIHRvIGJlIHByZXZlbnRlZCBmb3IgbGFyZ2UgYXJyYXlzLiBBY2NvcmRpbmcgdG8gdGhlIHByb21wdCBpdCBzYXlzLCAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuJiMzNDsKVGhpcyBhbGxvd3MgbGFyZ2VyIGFsbG9jYXRpb25zIHRvIHN1Y2NlZWQgYnkgZmFsbGluZyBiYWNrIHRvIHZtYWxsb2MuIFllcywgaXQgYWZmZWN0cyBleGVjdXRpb24gZmxvdy4gWWVzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLgpPaywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgcGFydCBvZiBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTEzMjg9c3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX250aF90YXJnZXQoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM0Ni0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMzQ3OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKmRzdCxcbm1tL2RhbW9uL2NvcmUuYy0xMzQ4LVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzcmMsIHVuc2lnbmVkIGxvbmcgc3JjX21pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTEzNzA9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0KFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzc2LVxubW0vZGFtb24vY29yZS5jOjEzNzc6XHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0LCBzcmMsIHNyY19taW5fcmVnaW9uX3N6KTtcbm1tL2RhbW9uL2NvcmUuYy0xMzc4LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTEzNz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTUzLVx0fVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExNTQ6XHRkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE1NS1cdGkgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyB0aGUgRnVuY3Rpb24gQ2FsbCBIaWVyYXJjaHkqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCBpcyBhY3R1YWxseSAqZG9pbmcqLiBUaGUgY29kZSYjMzk7cyBvcmdhbml6ZWQsIHNvIEkgY2FuIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxpbmcgZnVuY3Rpb25zLiBJdCBhcHBlYXJzIHRvIGJlIGNhbGxlZCBieSBgZGFtb25fY29tbWl0X3RhcmdldGAuIEFuZCBgZGFtb25fY29tbWl0X3RhcmdldGAsIGluIHR1cm4sIGlzIHRyaWdnZXJlZCBieSBgZGFtb25fY29tbWl0X2N0eGAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCBsaWtlbHkgcmVwcmVzZW50cyBhICpsb3dlci1sZXZlbCwgbW9yZSBncmFudWxhciogb3BlcmF0aW9uIHdpdGhpbiBhIGxhcmdlciBwcm9jZXNzLCBzaW5jZSBpdCYjMzk7cyBuZXN0ZWQgZGVlcCB3aXRoaW4gdGhlIGNhbGwgc3RhY2suIFRoZSAmIzM0O3JlZ2lvbnMmIzM0OyBpbiB0aGUgbmFtZSBhcmUgdGhlIGtleS4gSXQgbG9va3MgbGlrZSBgZGFtb25fY29tbWl0X3RhcmdldGAgaGFuZGxlcyBzb21lIGxhcmdlci1zY29wZWQgY29tbWl0bWVudCB0YXNrLCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgaXMgd2hhdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIGFjdHVhbCBtZW1vcnkgcmVnaW9ucywgdGhlIHNwZWNpZmljcywgdGhlIG1pbnV0aWFlLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGxlYWRpbmcgbWUgdG8gdGhpcyBjb25jbHVzaW9uLiBMZXQmIzM5O3MgZGVsdmUgaW4gdG8gdW5kZXJzdGFuZCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTg1Mj1zdHJ1Y3QgZGFtb25fY3R4IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODg4LVx0ICogaW5kaWNhdGUgaWYgdGhpcyBtYXkgYmUgY29ycnVwdGVkLiAgQ3VycmVudG9ubHkgdGhpcyBpcyBzZXQgb25seSBmb3JcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4ODk6XHQgKiBkYW1vbl9jb21taXRfY3R4KCkgZmFpbHVyZS5cbmluY2x1ZGUvbGludXgvZGFtb24uaC04OTAtXHQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA1Mj12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDUzLVx0XHRcdHN0cnVjdCBkYW1vcyAqKnNjaGVtZXMsIHNzaXplX3QgbnJfc2NoZW1lcyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA1NDppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpvbGRfY3R4LCBzdHJ1Y3QgZGFtb25fY3R4ICpuZXdfY3R4KTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDU1LWludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZCk7XG4tLVxubW0vZGFtb24vY29yZS5jPTE1Mjc9c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTU4LS8qKlxubW0vZGFtb24vY29yZS5jOjE1NTk6ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG5tbS9kYW1vbi9jb3JlLmMtMTU2MC0gKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTcwLSAqL1xubW0vZGFtb24vY29yZS5jOjE1NzE6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTU3Mi17XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDAtXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNDE6XHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQyLW91dDpcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI2Ny1cdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjY4Olx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjY5LW91dDpcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwODY9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwOTQtXHRcdHJldHVybiBOVUxMO1xubW0vZGFtb24vc3lzZnMuYzoyMDk1Olx0ZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcnVubmluZ19jdHgpO1xubW0vZGFtb24vc3lzZnMuYy0yMDk2LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjEwOT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCh2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjEyOC1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjEyOTpcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIxMzAtXHRpZiAoZXJyKVxubW0vZGFtb24vc3lzZnMuYy0yMTMxLVx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3N5c2ZzLmM6MjEzMjpcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgsIHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIxMzMtb3V0OlxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTc5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExOTItXHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTE5MzpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE5NC1cdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTk1Olx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTk2LVx0c3JjLVx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk2O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExOTctXHRzcmMtXHUwMDNlcGF1c2UgPSB0cnVlO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExOTg6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExOTktXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkc3QtXHUwMDNlcGF1c2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkaWZmIHJlbGF0ZWQgdG8gREFNT04uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGlzIHJlYWNoYWJsZSBmcm9tIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCB3aGljaCBpbiB0dXJuIGdldHMgdHJpZ2dlcmVkIGJ5IHN5c2ZzIHdyaXRlcy4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZCwgaXQgZ2l2ZXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdy4KClRoZW4gSSBub3RpY2VkIHRoZXJlJiMzOTtzIGEgbmV3IHRlc3QgYWRkZWQsIGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAsIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIHRlc3QgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIGBkYW1vc193YWxrKClgLCBiZWNhdXNlIHRoZSBwYXRjaCBzZWVtcyB0byBoYXZlIGFkZGVkIHRoaXMgdGVzdCB3aGljaCB0ZXN0cyBgZGFtb3Nfd2FsaygpYC4gSSBzaG91bGQgcHJvYmFibHkgZXhhbWluZSB0aGF0IHRlc3QgaW4gbW9yZSBkZXRhaWwgbGF0ZXIuCgpBbHJpZ2h0LCB3aGF0IGVsc2UgaGFzIGNoYW5nZWQ/IEkgbmVlZCB0byBnbyBiYWNrIG92ZXIgdGhlIGRpZmYgbW9yZSBjYXJlZnVsbHkuIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQgbG9va3MgbGlrZSBga21hbGxvY19vYmpzYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBrdm1hbGxvY19vYmpzYCBhbmQgY29ycmVzcG9uZGluZyBga2ZyZWVgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGt2ZnJlZWAgaW4gYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AuICBga21hbGxvY19vYmpzYCBkb2VzbiYjMzk7dCBzZWVtIGZhbWlsaWFyLCBJJiMzOTttIHRoaW5raW5nIGl0JiMzOTtzIHByb2JhYmx5IGEgbWFjcm8gb3IgaGVscGVyIGRlZmluZWQgd2l0aGluIERBTU9OIGl0c2VsZiwgbWF5YmUgaW4gYG1tL2RhbW9uL2NvcmUuY2Agb3Igc29tZXRoaW5nIGluY2x1ZGVkIGxpa2UgYGluY2x1ZGUvbGludXgvZGFtb24uaGAuICBMZXQgbWUgdmVyaWZ5IHRoaXMuLi53YWl0LCBJIHRoaW5rIGBrbWFsbG9jX2FycmF5YCAqaXMqIGEgc3RhbmRhcmQga2VybmVsIGZ1bmN0aW9uLiBTbyBga21hbGxvY19vYmpzYCBtdXN0IGJlIGEgREFNT04tc3BlY2lmaWMgYWJzdHJhY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jX29ianMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM2NjYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1OD1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYW4gYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjEtXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NjI6XHRwID0ga21hbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYzLVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDEtXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDI6XHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMy1cdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuYXJjaC9hcm0vbW0vcGdkLmMtMTktI2lmZGVmIENPTkZJR19BUk1fTFBBRVxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVx0XHRrbWFsbG9jX29ianMocGdkX3QsIFBUUlNfUEVSX1BHRCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVx0a2ZyZWUocGdkKVxuLS1cbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2NS17XG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYzo3NjY6XHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2Ny1cdFx0XHRcdCAgICAgTUFYX0NPVkVSQUdFX0VOVFJJRVMpO1xuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTM5MT11MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE0LVx0ICovXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzo0MTU6XHRkZXNjX2Jhc2UgPSAodTMyKSBrbWFsbG9jX29ianMoYXUxeF9kZG1hX2Rlc2NfdCwgZW50cmllcyxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNi1cdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTUzMj1hZGRfc3lzdGVtX21hcF9hZGRyZXNzZXMoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldiwgaW50IG51bV9hZGRycywgXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTUzOC1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzo1Mzk6XHRkZXYtXHUwMDNlYWRkciA9IGttYWxsb2Nfb2JqcygqZGV2LVx1MDAzZWFkZHIsIG51bV9hZGRycyk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTQwLVx0aWYoIWRldi1cdTAwM2VhZGRyKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cdFx0ICAgIGNmZy1cdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVx0aWYgKCFwYWdlcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1Olx0dmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXHRcdFx0XHRcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgJiM0MzsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVx0aWYgKGJsb2NrID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXHRpZiAoIWV2ZW50cykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1Olx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVx0aWYgKCFldmVudF9kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0Olx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jPTEyMD1zdGF0aWMgaW50IHBzZXJpZXNfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0My1cdHBkbiA9IHBjaV9nZXRfcGRuKHBkZXYpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcdHBkbi1cdTAwM2VwZV9udW1fbWFwID0ga21hbGxvY19vYmpzKCpwZG4tXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQ1LVx0aWYgKCFwZG4tXHUwMDNlcGVfbnVtX21hcClcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYz0xNTQ5PXZvaWQgX19pbml0IG1waWNfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYylcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQxLVx0LyogYWxsb2NhdGUgbWVtb3J5IHRvIHNhdmUgbXBpYyBzdGF0ZSAqL1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcdG1waWMtXHUwMDNlc2F2ZV9kYXRhID0ga21hbGxvY19vYmpzKCptcGljLVx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cdTAwM2VudW1fc291cmNlcyk7XG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQzLVx0QlVHX09OKG1waWMtXHUwMDNlc2F2ZV9kYXRhID09IE5VTEwpO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0zMD1zdGF0aWMgdm9pZCAqZGlhZzBjX3N0b3JlKHVuc2lnbmVkIGludCAqY291bnQpXG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTM3LVx0Y3B1X2NvdW50ID0gbnVtX29ubGluZV9jcHVzKCk7XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6Mzg6XHRjcHVfdmVjID0ga21hbGxvY19vYmpzKCpjcHVfdmVjLCBudW1fcG9zc2libGVfY3B1cygpKTtcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0zOS1cdGlmICghY3B1X3ZlYylcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaD0xOTA9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWRhbF9idWZmZXIgKippZGFsX2J1ZmZlcl9hcnJheV9hbGxvYyhzaXplX3Qgc2l6ZSwgaW50IHBhZ2Vfb3JkZXIpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgtMTk3LVx0Y291bnQgPSAoc2l6ZSAmIzQzOyBDQ1dfTUFYX0JZVEVfQ09VTlQgLSAxKSAvIENDV19NQVhfQllURV9DT1VOVDtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oOjE5ODpcdGlicyA9IGttYWxsb2Nfb2JqcygqaWJzLCBjb3VudCAmIzQzOyAxKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oLTE5OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYz0yNjY9c3RhdGljIGRlYnVnX2VudHJ5X3QgKioqZGVidWdfYXJlYXNfYWxsb2MoaW50IHBhZ2VzX3Blcl9hcmVhLCBpbnQgbnJfYXJlYXMpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3MC1cbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzoyNzE6XHRhcmVhcyA9IGttYWxsb2Nfb2JqcyhkZWJ1Z19lbnRyeV90ICoqLCBucl9hcmVhcyk7XG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjcyLVx0aWYgKCFhcmVhcylcbi0tXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjc1LVx0XHQvKiBHRlBfTk9XQVJOIHRvIGF2b2lkIHVzZXIgdHJpZ2dlcmFibGUgV0FSTiwgd2UgaGFuZGxlIGZhaWxzICovXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM6Mjc2Olx0XHRhcmVhc1tpXSA9IGttYWxsb2Nfb2JqcyhkZWJ1Z19lbnRyeV90ICosIHBhZ2VzX3Blcl9hcmVhLFxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3Ny1cdFx0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM9OTY0PXN0YXRpYyBfX2luaXQgc3RydWN0IGF0dHJpYnV0ZSAqKm1lcmdlX2F0dHIoc3RydWN0IGF0dHJpYnV0ZSAqKmEsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmMtOTc4LVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM6OTc5Olx0bmV3ID0ga21hbGxvY19vYmpzKHN0cnVjdCBhdHRyaWJ1dGUgKiwgaik7XG5hcmNoL3MzOTAva2VybmVsL3BlcmZfY3B1bV9jZl9ldmVudHMuYy05ODAtXHRpZiAoIW5ldylcbi0tXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM9MTA5Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqKiBfX2luaXQgYXR0cl9ldmVudF9pbml0KHN0cnVjdCBwYWlfcG11ICpwKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0xMTAxLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX3BhaS5jOjExMDI6XHRhdHRycyA9IGttYWxsb2Nfb2JqcygqYXR0cnMsIG1pbl9hdHRyICYjNDM7IDEsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0xMTAzLVx0aWYgKCFhdHRycylcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9MjAzPWludCBrdm1fczM5MF9pbXBvcnRfYnBfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTIzNC1cdGlmIChucl93cCBcdTAwM2UgMCkge1xuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjIzNTpcdFx0d3BfaW5mbyA9IGttYWxsb2Nfb2Jqcygqd3BfaW5mbywgbnJfd3AsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjM2LVx0XHRpZiAoIXdwX2luZm8pIHtcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjQxLVx0aWYgKG5yX2JwIFx1MDAzZSAwKSB7XG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MjQyOlx0XHRicF9pbmZvID0ga21hbGxvY19vYmpzKCpicF9pbmZvLCBucl9icCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNDMtXHRcdGlmICghYnBfaW5mbykge1xuLS1cbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jPTYyNT1TWVNDQUxMX0RFRklORTUodXRyYXBfaW5zdGFsbCwgdXRyYXBfZW50cnlfdCwgdHlwZSxcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYy02NTktXHRcdFx0Y3VycmVudF90aHJlYWRfaW5mbygpLVx1MDAzZXV0cmFwcyA9XG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYzo2NjA6XHRcdFx0XHRrbWFsbG9jX29ianMobG9uZywgVVRfVFJBUF9JTlNUUlVDVElPTl8zMSAmIzQzOyAxKTtcbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jLTY2MS1cdFx0XHRpZiAoIWN1cnJlbnRfdGhyZWFkX2luZm8oKS1cdTAwM2V1dHJhcHMpIHtcbi0tXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHViZF9pbml0KHZvaWQpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3MS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jOjEwNzI6XHRpcnFfcmVxX2J1ZmZlciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqLFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3My1cdFx0XHRcdCAgICAgIFVCRF9SRVFfQlVGRkVSX1NJWkUpO1xuLS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEwNzktXHR9XG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYzoxMDgwOlx0aW9fcmVxX2J1ZmZlciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqLFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA4MS1cdFx0XHRcdCAgICAgVUJEX1JFUV9CVUZGRVJfU0laRSk7XG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM9NTA3PXN0YXRpYyBzdHJ1Y3QgdmVjdG9yX3F1ZXVlICpjcmVhdGVfcXVldWUoXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTQ2LVx0XHRpZiAodnAtXHUwMDNlaGVhZGVyX3NpemUgXHUwMDNlIDApXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYzo1NDc6XHRcdFx0aW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgMyAmIzQzOyBudW1fZXh0cmFfZnJhZ3MpO1xuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTQ4LVx0XHRlbHNlXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYzo1NDk6XHRcdFx0aW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgMiAmIzQzOyBudW1fZXh0cmFfZnJhZ3MpO1xuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTUwLVx0XHRpZiAoaW92ID09IE5VTEwpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jPTQ4ND1zdGF0aWMgdm9pZCB1bWxfdmZpb19vcGVuX2RldmljZShzdHJ1Y3QgdW1sX3ZmaW9fZGV2aWNlICpkZXYpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jLTUxNi1cbmFyY2gvdW0vZHJpdmVycy92ZmlvX2tlcm4uYzo1MTc6XHRkZXYtXHUwMDNlaW50cl9jdHggPSBrbWFsbG9jX29ianMoc3RydWN0IHVtbF92ZmlvX2ludHJfY3R4LFxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jLTUxOC1cdFx0XHRcdCAgICAgZGV2LVx1MDAzZXVkZXYuaXJxX2NvdW50KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9Nzk3PXN0YXRpYyBib29sIF9faW5pdCBzZ3hfcGFnZV9jYWNoZV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgwMy1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo4MDQ6XHRzZ3hfbnVtYV9ub2RlcyA9IGttYWxsb2Nfb2Jqcygqc2d4X251bWFfbm9kZXMsIG51bV9wb3NzaWJsZV9ub2RlcygpKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04MDUtXHRpZiAoIXNneF9udW1hX25vZGVzKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rc3lzZnMuYz0zMjc9c3RhdGljIGludCBfX2luaXQgY3JlYXRlX3NldHVwX2RhdGFfbm9kZXMoc3RydWN0IGtvYmplY3QgKnBhcmVudClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3N5c2ZzLmMtMzQ2LVxuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jOjM0NzpcdGtvYmpwID0ga21hbGxvY19vYmpzKCprb2JqcCwgbnIpO1xuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jLTM0OC1cdGlmICgha29ianApIHtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTQ3MT1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE1MTYtXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTUxNzpcdFx0cG9ydHMgPSBrbWFsbG9jX29ianMoKnBvcnRzLCBzY2hlZF9wb2xsLm5yX3BvcnRzKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xNTE4LVx0XHRpZiAoIXBvcnRzKSB7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTIyMDM9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMjE4LVxuYXJjaC94ODYva3ZtL3hlbi5jOjIyMTk6XHRhbGxfZXZ0Y2huZmRzID0ga21hbGxvY19vYmpzKHN0cnVjdCBldnRjaG5mZCAqLCBuKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0yMjIwLVx0aWYgKCFhbGxfZXZ0Y2huZmRzKSB7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MjUyMT1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI1MzMtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoyNTM0Olx0YWRkcnMgPSBrbWFsbG9jX29ianMoKmFkZHJzLCBwcm9nLVx1MDAzZWxlbik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTM1LVx0aWYgKCFhZGRycylcbi0tXG5hcmNoL3g4Ni9wb3dlci9jcHUuYz0zODg9c3RhdGljIGludCBtc3JfYnVpbGRfY29udGV4dChjb25zdCB1MzIgKm1zcl9pZCwgY29uc3QgaW50IG51bSlcbi0tXG5hcmNoL3g4Ni9wb3dlci9jcHUuYy0zOTYtXG5hcmNoL3g4Ni9wb3dlci9jcHUuYzozOTc6XHRtc3JfYXJyYXkgPSBrbWFsbG9jX29ianMoc3RydWN0IHNhdmVkX21zciwgdG90YWxfbnVtKTtcbmFyY2gveDg2L3Bvd2VyL2NwdS5jLTM5OC1cdGlmICghbXNyX2FycmF5KSB7XG4tLVxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmM9MTAyPXN0YXRpYyBpbnQgYXJjaF9nbnR0YWJfdmFsbG9jKHN0cnVjdCBnbnR0YWJfdm1fYXJlYSAqYXJlYSwgdW5zaWduZWQgbnJfZnJhbWVzKVxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMtMTAzLXtcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jOjEwNDpcdGFyZWEtXHUwMDNlcHRlcyA9IGttYWxsb2Nfb2JqcygqYXJlYS1cdTAwM2VwdGVzLCBucl9mcmFtZXMpO1xuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMtMTA1LVx0aWYgKGFyZWEtXHUwMDNlcHRlcyA9PSBOVUxMKVxuLS1cbmFyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3Mvc2ltZGlzay5jPTMwOD1zdGF0aWMgaW50IF9faW5pdCBzaW1kaXNrX2luaXQodm9pZClcbi0tXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYy0zMjItXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYzozMjM6XHRzZGRldiA9IGttYWxsb2Nfb2Jqcygqc2RkZXYsIHNpbWRpc2tfY291bnQpO1xuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmMtMzI0LVx0aWYgKHNkZGV2ID09IE5VTEwpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz01Nzg9c3RhdGljIGJvb2wgYmZxcV9yZXF1ZXN0X292ZXJfbGltaXQoc3RydWN0IGJmcV9kYXRhICpiZnFkLFxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjA4LVx0XHRcdGtmcmVlKGVudGl0aWVzKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjA5Olx0XHRlbnRpdGllcyA9IGttYWxsb2Nfb2JqcygqZW50aXRpZXMsIGRlcHRoLCBHRlBfTk9JTyk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxMC1cdFx0aWYgKCFlbnRpdGllcylcbi0tXG5ibG9jay9ibGstc3RhdC5jPTEwMD1ibGtfc3RhdF9hbGxvY19jYWxsYmFjayh2b2lkICgqdGltZXJfZm4pKHN0cnVjdCBibGtfc3RhdF9jYWxsYmFjayAqKSxcbi0tXG5ibG9jay9ibGstc3RhdC5jLTEwOS1cbmJsb2NrL2Jsay1zdGF0LmM6MTEwOlx0Y2ItXHUwMDNlc3RhdCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYmxrX3JxX3N0YXQsIGJ1Y2tldHMpO1xuYmxvY2svYmxrLXN0YXQuYy0xMTEtXHRpZiAoIWNiLVx1MDAzZXN0YXQpIHtcbi0tXG5ibG9jay9mb3BzLmM9NTU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuYmxvY2svZm9wcy5jLTY3LVx0ZWxzZSB7XG5ibG9jay9mb3BzLmM6Njg6XHRcdHZlY3MgPSBrbWFsbG9jX29ianMoc3RydWN0IGJpb192ZWMsIG5yX3BhZ2VzKTtcbmJsb2NrL2ZvcHMuYy02OS1cdFx0aWYgKCF2ZWNzKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9MzUxPXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV90b2NibG9ja3Moc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSxcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM2NC1cdHRiWzBdID0gXHUwMDI2bGRiLVx1MDAzZXRvYztcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzY1Olx0dGJbMV0gPSBrbWFsbG9jX29ianMoKnRiWzFdLCAzKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY2LVx0aWYgKCF0YlsxXSkge1xuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM9MTQwNz1zdGF0aWMgaW50IGhsX2NzX2NvcHlfY2h1bmtfYXJyYXkoc3RydWN0IGhsX2RldmljZSAqaGRldixcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjItXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jOjE0MjM6XHQqY3NfY2h1bmtfYXJyYXkgPSBrbWFsbG9jX29ianMoKipjc19jaHVua19hcnJheSwgbnVtX2NodW5rcywgR0ZQX0FUT01JQyk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjQtXHRpZiAoISpjc19jaHVua19hcnJheSlcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM6MTQyNTpcdFx0KmNzX2NodW5rX2FycmF5ID0ga21hbGxvY19vYmpzKCoqY3NfY2h1bmtfYXJyYXksIG51bV9jaHVua3MpO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0xNDI2LVx0aWYgKCEqY3NfY2h1bmtfYXJyYXkpIHtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jPTMwMDU9c3RhdGljIGludCBobF9tdWx0aV9jc193YWl0X2lvY3RsKHN0cnVjdCBobF9mcHJpdiAqaHByaXYsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0zMDUzLVx0LyogYWxsb2NhdGUgYXJyYXkgZm9yIHRoZSBmZW5jZXMgKi9cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM6MzA1NDpcdGZlbmNlX2FyciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxfZmVuY2UgKiwgc2VxX2Fycl9sZW4pO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0zMDU1LVx0aWYgKCFmZW5jZV9hcnIpIHtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYz0yMDQ5PWludCBobF9kZWJ1Z2ZzX2RldmljZV9pbml0KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYpXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9kZWJ1Z2ZzLmMtMjA1NC1cdGRldl9lbnRyeS1cdTAwM2VoZGV2ID0gaGRldjtcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vZGVidWdmcy5jOjIwNTU6XHRkZXZfZW50cnktXHUwMDNlZW50cnlfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9kZWJ1Z2ZzX2VudHJ5LCBjb3VudCk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYy0yMDU2LVx0aWYgKCFkZXZfZW50cnktXHUwMDNlZW50cnlfYXJyKVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaHdfcXVldWUuYz04MjQ9c3RhdGljIGludCBleHRfYW5kX2NwdV9xdWV1ZV9pbml0KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBobF9od19xdWV1ZSAqcSxcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmMtODM5LVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9od19xdWV1ZS5jOjg0MDpcdHEtXHUwMDNlc2hhZG93X3F1ZXVlID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9jc19qb2IgKiwgSExfUVVFVUVfTEVOR1RIKTtcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaHdfcXVldWUuYy04NDEtXHRpZiAoIXEtXHUwMDNlc2hhZG93X3F1ZXVlKSB7XG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYz0zOTM4PXN0YXRpYyBpbnQgZ2F1ZGkyX3NwZWNpYWxfYmxvY2tzX2NvbmZpZyhzdHJ1Y3QgaGxfZGV2aWNlICpoZGV2KVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk0NS1cdHByb3AtXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzID0gQVJSQVlfU0laRShnYXVkaTJfc3BlY2lhbF9ibG9ja3MpO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYzozOTQ2Olx0cHJvcC1cdTAwM2VzcGVjaWFsX2Jsb2NrcyA9IGttYWxsb2Nfb2JqcygqcHJvcC1cdTAwM2VzcGVjaWFsX2Jsb2NrcyxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk0Ny1cdFx0XHRcdFx0ICAgIHByb3AtXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzKTtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NjAtXHRcdHByb3AtXHUwMDNlc2tpcF9zcGVjaWFsX2Jsb2Nrc19jZmcuYmxvY2tfdHlwZXMgPVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYzozOTYxOlx0XHRcdFx0a21hbGxvY19vYmpzKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3R5cGVzWzBdLFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYy0zOTYyLVx0XHRcdFx0XHQgICAgIEFSUkFZX1NJWkUoZ2F1ZGkyX2l0ZXJhdG9yX3NraXBfYmxvY2tfdHlwZXMpKTtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzYtXHRcdHByb3AtXHUwMDNlc2tpcF9zcGVjaWFsX2Jsb2Nrc19jZmcuYmxvY2tfcmFuZ2VzID1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmM6Mzk3NzpcdFx0XHRcdGttYWxsb2Nfb2JqcyhnYXVkaTJfaXRlcmF0b3Jfc2tpcF9ibG9ja19yYW5nZXNbMF0sXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzgtXHRcdFx0XHRcdCAgICAgQVJSQVlfU0laRShnYXVkaTJfaXRlcmF0b3Jfc2tpcF9ibG9ja19yYW5nZXMpKTtcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19jb250cm9sLmM9MzkzPXN0YXRpYyBpbnQgZmluZF9hbmRfbWFwX3VzZXJfcGFnZXMoc3RydWN0IHFhaWNfZGV2aWNlICpxZGV2LFxuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2NvbnRyb2wuYy00MjUtXHR3aGlsZSAoMSkge1xuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jOjQyNjpcdFx0cGFnZV9saXN0ID0ga21hbGxvY19vYmpzKCpwYWdlX2xpc3QsIG5yX3BhZ2VzLFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jLTQyNy1cdFx0XHRcdFx0IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYz00OTU9aW50IHJvY2tldF9qb2Jfb3BlbihzdHJ1Y3Qgcm9ja2V0X2ZpbGVfcHJpdiAqcm9ja2V0X3ByaXYpXG4tLVxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jLTQ5Ny1cdHN0cnVjdCByb2NrZXRfZGV2aWNlICpyZGV2ID0gcm9ja2V0X3ByaXYtXHUwMDNlcmRldjtcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYzo0OTg6XHRzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKipzY2hlZHMgPSBrbWFsbG9jX29ianMoKnNjaGVkcyxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy00OTktXHRcdFx0XHRcdFx0XHQgcmRldi1cdTAwM2VudW1fY29yZXMpO1xuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYz01NT1zdGF0aWMgX19pbml0IGludCBhY3BpX3BhcnNlX21ycm0oc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSlcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmMtODMtXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmM6ODQ6XHRtcnJtX21lbV9yYW5nZV9lbnRyeSA9IGttYWxsb2Nfb2JqcygqbXJybV9tZW1fcmFuZ2VfZW50cnksIG1yZV9jb3VudCxcbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYy04NS1cdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jPTc5OD1pbnQgYWNwaV92aWRlb19nZXRfbGV2ZWxzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMtODMxLVx0ICovXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jOjgzMjpcdGJyLVx1MDAzZWxldmVscyA9IGttYWxsb2Nfb2JqcygqYnItXHUwMDNlbGV2ZWxzLFxuZHJpdmVycy9hY3BpL2FjcGlfdmlkZW8uYy04MzMtXHRcdFx0XHQgIG9iai1cdTAwM2VwYWNrYWdlLmNvdW50ICYjNDM7IEFDUElfVklERU9fRklSU1RfTEVWRUwpO1xuLS1cbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jPTMxNT1zdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wZXJmb3JtYW5jZV9zdGF0ZXMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcilcbi0tXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYy0zNDMtXHRwci1cdTAwM2VwZXJmb3JtYW5jZS1cdTAwM2VzdGF0ZXMgPVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmM6MzQ0Olx0ICAgIGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcHgsIHBzcy1cdTAwM2VwYWNrYWdlLmNvdW50KTtcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jLTM0NS1cdGlmICghcHItXHUwMDNlcGVyZm9ybWFuY2UtXHUwMDNlc3RhdGVzKSB7XG4tLVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmM9NDg1PXN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfc3RhdGVzKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpXG4tLVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMtNTE0LVx0cHItXHUwMDNldGhyb3R0bGluZy5zdGF0ZXNfdHNzID1cbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jOjUxNTpcdCAgICBrbWFsbG9jX29ianMoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3R4X3RzcywgdHNzLVx1MDAzZXBhY2thZ2UuY291bnQpO1xuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMtNTE2LVx0aWYgKCFwci1cdTAwM2V0aHJvdHRsaW5nLnN0YXRlc190c3MpIHtcbi0tXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM9MzU5PXN0YXRpYyBpbnQgY29tcG9uZW50X21hdGNoX3JlYWxsb2Moc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2gsIHNpemVfdCBudW0pXG4tLVxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTM2NS1cbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYzozNjY6XHRuZXcgPSBrbWFsbG9jX29ianMoKm5ldywgbnVtKTtcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYy0zNjctXHRpZiAoIW5ldylcbi0tXG5kcml2ZXJzL2Jhc2UvbWFwLmM9MzI9aW50IGtvYmpfbWFwKHN0cnVjdCBrb2JqX21hcCAqZG9tYWluLCBkZXZfdCBkZXYsIHVuc2lnbmVkIGxvbmcgcmFuZ2UsXG4tLVxuZHJpdmVycy9iYXNlL21hcC5jLTQzLVxuZHJpdmVycy9iYXNlL21hcC5jOjQ0Olx0cCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcHJvYmUsIG4pO1xuZHJpdmVycy9iYXNlL21hcC5jLTQ1LVx0aWYgKHAgPT0gTlVMTClcbi0tXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmM9MTI0PWludCByZWdjYWNoZV9pbml0KHN0cnVjdCByZWdtYXAgKm1hcCwgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMtMTk5LVx0XHRtYXAtXHUwMDNlbnVtX3JlZ19kZWZhdWx0cyA9IGNvdW50O1xuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jOjIwMDpcdFx0bWFwLVx1MDAzZXJlZ19kZWZhdWx0cyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcmVnX2RlZmF1bHQsIGNvdW50KTtcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUuYy0yMDEtXHRcdGlmICghbWFwLVx1MDAzZXJlZ19kZWZhdWx0cylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0zNDA9c3RhdGljIGludCBsb19yd19haW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMzU0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MzU1Olx0XHRjbWQtXHUwMDNlYnZlYyA9IGttYWxsb2Nfb2JqcygqY21kLVx1MDAzZWJ2ZWMsIG5yX2J2ZWMsIEdGUF9OT0lPKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM1Ni1cdFx0aWYgKCFjbWQtXHUwMDNlYnZlYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3JiZC5jPTI1MzE9c3RhdGljIGludCByYmRfaW1nX2ZpbGxfcmVxdWVzdChzdHJ1Y3QgcmJkX2ltZ19yZXF1ZXN0ICppbWdfcmVxLFxuLS1cbmRyaXZlcnMvYmxvY2svcmJkLmMtMjU2Ny1cdGZvcl9lYWNoX29ial9yZXF1ZXN0KGltZ19yZXEsIG9ial9yZXEpIHtcbmRyaXZlcnMvYmxvY2svcmJkLmM6MjU2ODpcdFx0b2JqX3JlcS1cdTAwM2VidmVjX3Bvcy5idmVjcyA9IGttYWxsb2Nfb2Jqcygqb2JqX3JlcS1cdTAwM2VidmVjX3Bvcy5idmVjcyxcbmRyaXZlcnMvYmxvY2svcmJkLmMtMjU2OS1cdFx0XHRcdFx0XHQgICAgICAgb2JqX3JlcS1cdTAwM2VidmVjX2NvdW50LFxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE2MD1zdGF0aWMgaW50IHZpcnRibGtfc2V0dXBfZGlzY2FyZF93cml0ZV96ZXJvZXNfZXJhc2Uoc3RydWN0IHJlcXVlc3QgKnJlcSwgYm9vbCB1bm1hcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNzAtXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNzE6XHRyYW5nZSA9IGttYWxsb2Nfb2JqcygqcmFuZ2UsIHNlZ21lbnRzLCBHRlBfQVRPTUlDKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE3Mi1cdGlmICghcmFuZ2UpXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9OTYwPXN0YXRpYyBpbnQgaW5pdF92cShzdHJ1Y3QgdmlydGlvX2JsayAqdmJsaylcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy05OTUtXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzo5OTY6XHR2YmxrLVx1MDAzZXZxcyA9IGttYWxsb2Nfb2JqcygqdmJsay1cdTAwM2V2cXMsIG51bV92cXMpO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtOTk3LVx0aWYgKCF2YmxrLVx1MDAzZXZxcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAwLVx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBudW1fdnFzKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjEwMDE6XHR2cXMgPSBrbWFsbG9jX29ianMoKnZxcywgbnVtX3Zxcyk7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAyLVx0aWYgKCF2cXNfaW5mbyB8fCAhdnFzKSB7XG4tLVxuZHJpdmVycy9ibG9jay96MnJhbS5jPTE0Mz1zdGF0aWMgaW50IHoyX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3oycmFtLmMtMTg5LVx0XHRcdHoycmFtX21hcCA9XG5kcml2ZXJzL2Jsb2NrL3oycmFtLmM6MTkwOlx0XHRcdCAgICBrbWFsbG9jX29ianMoejJyYW1fbWFwWzBdLCBzaXplIC8gWjJSQU1fQ0hVTktTSVpFKTtcbmRyaXZlcnMvYmxvY2svejJyYW0uYy0xOTEtXHRcdFx0aWYgKHoycmFtX21hcCA9PSBOVUxMKSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTUxOD1zdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUzMTpcdFx0Y21kLVx1MDAzZWJ2ZWMgPSBrbWFsbG9jX29ianMoKmNtZC1cdTAwM2VidmVjLCBucl9idmVjLCBHRlBfTk9JTyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMyLVx0XHRpZiAoIWNtZC1cdTAwM2VidmVjKVxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jPTE4NDI9c3RhdGljIGludCBidGludGVsX3BjaWVfc2V0dXBfdHhxX2J1ZnMoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhLFxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTE4NDgtXHQvKiBBbGxvY2F0ZSB0aGUgc2FtZSBudW1iZXIgb2YgYnVmZmVycyBhcyB0aGUgZGVzY3JpcHRvciAqL1xuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM6MTg0OTpcdHR4cS1cdTAwM2VidWZzID0ga21hbGxvY19vYmpzKCpidWYsIHR4cS1cdTAwM2Vjb3VudCk7XG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xODUwLVx0aWYgKCF0eHEtXHUwMDNlYnVmcylcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYz0xODg2PXN0YXRpYyBpbnQgYnRpbnRlbF9wY2llX3NldHVwX3J4cV9idWZzKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSxcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xODkyLVx0LyogQWxsb2NhdGUgdGhlIHNhbWUgbnVtYmVyIG9mIGJ1ZmZlcnMgYXMgdGhlIGRlc2NyaXB0b3IgKi9cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jOjE4OTM6XHRyeHEtXHUwMDNlYnVmcyA9IGttYWxsb2Nfb2JqcygqYnVmLCByeHEtXHUwMDNlY291bnQpO1xuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMTg5NC1cdGlmICghcnhxLVx1MDAzZWJ1ZnMpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz02MzI9c3RhdGljIGludCBmc2xfbWNfZGV2aWNlX2dldF9tbWlvX3JlZ2lvbnMoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTY1NS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NjU2Olx0cmVnaW9ucyA9IGttYWxsb2Nfb2JqcyhyZWdpb25zWzBdLCBvYmpfZGVzYy1cdTAwM2VyZWdpb25fY291bnQpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy02NTctXHRpZiAoIXJlZ2lvbnMpXG4tLVxuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jPTY0PXN0YXRpYyBpbnQgYWdwXzNfNV9pc29jaHJvbm91c19ub2RlX2VuYWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsXG4tLVxuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jLTk0LVx0ICovXG5kcml2ZXJzL2NoYXIvYWdwL2lzb2NoLmM6OTU6XHRtYXN0ZXIgPSBrbWFsbG9jX29ianMoKm1hc3RlciwgbmRldnMpO1xuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jLTk2LVx0aWYgKG1hc3RlciA9PSBOVUxMKSB7XG4tLVxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYz0zNjk9c3RhdGljIGludCB1bmlub3J0aF9jcmVhdGVfZ2F0dF90YWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpXG4tLVxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDYtXG5kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jOjQwNzpcdHVuaW5vcnRoX3ByaXYucGFnZXNfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIDEgXHUwMDNjXHUwMDNjIHBhZ2Vfb3JkZXIpO1xuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDgtXHRpZiAodW5pbm9ydGhfcHJpdi5wYWdlc19hcnIgPT0gTlVMTClcbi0tXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYz03NTA9aW50IGlwbWlfc21pX3dhdGNoZXJfcmVnaXN0ZXIoc3RydWN0IGlwbWlfc21pX3dhdGNoZXIgKndhdGNoZXIpXG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzc5LVx0aWYgKGNvdW50IFx1MDAzZSAwKSB7XG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYzo3ODA6XHRcdGludGVyZmFjZXMgPSBrbWFsbG9jX29ianMoKmludGVyZmFjZXMsIGNvdW50KTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc4MS1cdFx0aWYgKCFpbnRlcmZhY2VzKSB7XG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzgzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmM6Nzg0Olx0XHRcdGRldmljZXMgPSBrbWFsbG9jX29ianMoKmRldmljZXMsIGNvdW50KTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc4NS1cdFx0XHRpZiAoIWRldmljZXMpIHtcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz0xODEwPXN0YXRpYyBpbnQgaW5pdF92cXMoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldilcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xODE5LVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMDpcdHZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3F1ZXVlcyk7XG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xODIxLVx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBucl9xdWV1ZXMpO1xuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMjpcdHBvcnRkZXYtXHUwMDNlaW5fdnFzID0ga21hbGxvY19vYmpzKHN0cnVjdCB2aXJ0cXVldWUgKiwgbnJfcG9ydHMpO1xuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMzpcdHBvcnRkZXYtXHUwMDNlb3V0X3ZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3BvcnRzKTtcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE4MjQtXHRpZiAoIXZxcyB8fCAhdnFzX2luZm8gfHwgIXBvcnRkZXYtXHUwMDNlaW5fdnFzIHx8ICFwb3J0ZGV2LVx1MDAzZW91dF92cXMpIHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jPTQ3PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIG9mX2Nsa19idWxrX2dldF9hbGwoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY2xrL2Nsay1idWxrLmMtNTgtXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jOjU5Olx0Y2xrX2J1bGsgPSBrbWFsbG9jX29ianMoKmNsa19idWxrLCBudW1fY2xrcyk7XG5kcml2ZXJzL2Nsay9jbGstYnVsay5jLTYwLVx0aWYgKCFjbGtfYnVsaylcbi0tXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jPTE4Mjg9c3RhdGljIHZvaWQgX19pbml0IHN0bTMyZjRfcmNjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTctXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jOjE4NTg6XHRjbGtzID0ga21hbGxvY19vYmpzKCpjbGtzLCBkYXRhLVx1MDAzZWdhdGVzX251bSAmIzQzOyBzdG0zMmZ4X2VuZF9wcmltYXJ5X2Nsayk7XG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTktXHRpZiAoIWNsa3MpXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYz03NDM9aW50IG9mX2RhdmluY2lfcGxsX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYy03ODQtXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BsbC5jOjc4NTpcdFx0Y2xrcyA9IGttYWxsb2Nfb2JqcygqY2xrcywgbl9jbGtzKTtcbmRyaXZlcnMvY2xrL2RhdmluY2kvcGxsLmMtNzg2LVx0XHRpZiAoIWNsa3MpIHtcbi0tXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BzYy5jPTM2ND1fX2RhdmluY2lfcHNjX3JlZ2lzdGVyX2Nsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wc2MuYy0zNzgtXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BzYy5jOjM3OTpcdGNsa3MgPSBrbWFsbG9jX29ianMoKmNsa3MsIG51bV9jbGtzKTtcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmMtMzgwLVx0aWYgKCFjbGtzKSB7XG4tLVxuZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjEwLmM9MzY5Nz1zdGF0aWMgdm9pZCB0ZWdyYTIxMF9tYmlzdF9jbGtfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDctXG5kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMTAuYzozNzA4Olx0XHRjbGtfZGF0YSA9IGttYWxsb2Nfb2JqcygqY2xrX2RhdGEsIG51bV9jbGtzKTtcbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDktXHRcdGlmIChXQVJOX09OKCFjbGtfZGF0YSkpXG4tLVxuZHJpdmVycy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmM9MTU1PXN0YXRpYyBpbnQgbmlfNjcweF9hdXRvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jLTIwMC1cbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jOjIwMTpcdFx0cmFuZ2VfdGFibGVfbGlzdCA9IGttYWxsb2Nfb2JqcygqcmFuZ2VfdGFibGVfbGlzdCwgMzIpO1xuZHJpdmVycy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMtMjAyLVx0XHRpZiAoIXJhbmdlX3RhYmxlX2xpc3QpXG4tLVxuZHJpdmVycy9jcHVmcmVxL2JtaXBzLWNwdWZyZXEuYz02Nj1ibWlwc19jcHVmcmVxX2dldF9mcmVxX3RhYmxlKGNvbnN0IHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KVxuLS1cbmRyaXZlcnMvY3B1ZnJlcS9ibWlwcy1jcHVmcmVxLmMtNzMtXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jOjc0Olx0dGFibGUgPSBrbWFsbG9jX29ianMoKnRhYmxlLCBwcml2LVx1MDAzZW1heF9mcmVxcyAmIzQzOyAxKTtcbmRyaXZlcnMvY3B1ZnJlcS9ibWlwcy1jcHVmcmVxLmMtNzUtXHRpZiAoIXRhYmxlKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz0xMzQ9c3B1X3NrY2lwaGVyX3J4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDMtXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6MTQ0Olx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDUtXHRpZiAoIW1zc2ctXHUwMDNlc3B1LmRzdClcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9MTk3PXNwdV9za2NpcGhlcl90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMjA2LVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjIwNzpcdG1zc2ctXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVx1MDAzZWdmcCk7XG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMjA4LVx0aWYgKHVubGlrZWx5KCFtc3NnLVx1MDAzZXNwdS5zcmMpKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz01MjQ9c3B1X2FoYXNoX3J4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01MzItXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6NTMzOlx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01MzQtXHRpZiAoIW1zc2ctXHUwMDNlc3B1LmRzdClcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9NTc1PXNwdV9haGFzaF90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg2LVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjU4NzpcdG1zc2ctXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVx1MDAzZWdmcCk7XG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg4LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5zcmMpXG4tLVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTEwMzg9c3RhdGljIGludCBzcHVfYWVhZF9yeF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTA3NS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMDc2Olx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMDc3LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5kc3QpXG4tLVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTExNTc9c3RhdGljIGludCBzcHVfYWVhZF90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTE3Ni1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMTc3Olx0bXNzZy1cdTAwM2VzcHUuc3JjID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgdHhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMTc4LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5zcmMpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM9MzA2PXN0YXRpYyBzdHJ1Y3Qgc2xhX2J1ZmZlcl9oZHIgKnNsYV9idWZmZXJfbWFwKHN0cnVjdCBzbGFfYWRkcl90IHNsYSlcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy0zMzItXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzozMzM6XHRcdHN0cnVjdCBwYWdlICoqcHAgPSBrbWFsbG9jX29ianMocHBbMF0sIG5wYWdlcyk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy0zMzQtXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RlbGVtZXRyeS5jPTU4PXN0YXRpYyBpbnQgYWRmX3RsX2FsbG9jX21lbShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NjkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGttYWxsb2Nfb2Jqc2AgYW5kIGBrdm1hbGxvY19vYmpzYCBNYWNyb3MqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhpcyBga21hbGxvY19vYmpzYCBtYWNybywgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGVpdGhlciBzb21ldGhpbmcgbmV3IGluIGEgcmVjZW50IHBhdGNoLCBvciBpdCYjMzk7cyBhIHN0YW5kYXJkIGtlcm5lbCBjb25zdHJ1Y3QgSSYjMzk7bSBqdXN0IG5vdCBpbW1lZGlhdGVseSBmYW1pbGlhciB3aXRoLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgc3dhcHBlZCBvdXQgZm9yIGBrdm1hbGxvY19vYmpzYC4gT2theSwgaG9sZCBvbiwgaXMgKnRoYXQqIGFsc28gYSBtYWNybz8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB3aGF0IHRoZXNlIGFyZSBkb2luZy4gVGltZSB0byBjaGVjayBvdXQgdGhlIGRlZmluaXRpb24gb2YgYGt2bWFsbG9jX29ianNgIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBga21hbGxvY19vYmpzYCBpcyBiZWluZyByZXBsYWNlZCwgYW5kIHdoYXQgc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBjaGFuZ2UgYXJlIGludGVuZGVkIHRvIGJyaW5nIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1hbGxvY19vYmpzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3ODUgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYz0zMzc9YXNtbGlua2FnZSBsb25nIHN5c19vYWJpX3NlbXRpbWVkb3AoaW50IHNlbWlkLFxuLS1cbmFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYy0zNTEtXHRcdHJldHVybiAtRUlOVkFMO1xuYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jOjM1MjpcdHNvcHMgPSBrdm1hbGxvY19vYmpzKCpzb3BzLCBuc29wcyk7XG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMzUzLVx0aWYgKCFzb3BzKVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jPTczND1pbml0aWFsaXplX3JlbG9jYXRpb25faGFzaHRhYmxlKHVuc2lnbmVkIGludCBudW1fcmVsb2NhdGlvbnMsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzU1LVx0LyogTnVtYmVyIG9mIHJlbG9jYXRpb25zIG1heSBiZSBsYXJnZSwgc28ga3ZtYWxsb2MgaXQgKi9cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjc1NjpcdCpyZWxvY2F0aW9uX2hhc2h0YWJsZSA9IGt2bWFsbG9jX29ianMoKipyZWxvY2F0aW9uX2hhc2h0YWJsZSxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTc1Ny1cdFx0XHRcdFx0ICAgICAgaGFzaHRhYmxlX3NpemUpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYz0yNDQ9c3RhdGljIGludCBwYWlfYWxsb2NfY3B1KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGNwdSlcbi0tXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmMtMjkwLVx0XHR9XG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM6MjkxOlx0XHRjcHVtcC1cdTAwM2VzYXZlID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFpX3VzZXJkYXRhLFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX3BhaS5jLTI5Mi1cdFx0XHRcdFx0ICAgIHBhaV9wbXVbaWR4XS5udW1fYXZhaWwgJiM0MzsgMSk7XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmM9NTg5PWludCBrdm1fdmNwdV9pb2N0bF9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jLTYwNC1cbmFyY2gveDg2L2t2bS9jcHVpZC5jOjYwNTpcdFx0ZTIgPSBrdm1hbGxvY19vYmpzKCplMiwgY3B1aWQtXHUwMDNlbmVudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTYwNi1cdFx0aWYgKCFlMikge1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODUxPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5MDQtXHR9XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzkwNTpcdGFkZHJzID0ga3ZtYWxsb2Nfb2JqcygqYWRkcnMsIHByb2ctXHUwMDNlbGVuICYjNDM7IDEpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5MDYtXHRpZiAoIWFkZHJzKVxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tcHJvZmlsZS5jPTc2PWludCBibGtfY3J5cHRvX3Byb2ZpbGVfaW5pdChzdHJ1Y3QgYmxrX2NyeXB0b19wcm9maWxlICpwcm9maWxlLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tcHJvZmlsZS5jLTEyNC1cdHByb2ZpbGUtXHUwMDNlc2xvdF9oYXNodGFibGUgPVxuYmxvY2svYmxrLWNyeXB0by1wcm9maWxlLmM6MTI1Olx0XHRrdm1hbGxvY19vYmpzKHByb2ZpbGUtXHUwMDNlc2xvdF9oYXNodGFibGVbMF0sIHNsb3RfaGFzaHRhYmxlX3NpemUpO1xuYmxvY2svYmxrLWNyeXB0by1wcm9maWxlLmMtMTI2LVx0aWYgKCFwcm9maWxlLVx1MDAzZXNsb3RfaGFzaHRhYmxlKVxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3VidWYuYz03OD1zdHJ1Y3QgZG1hX2J1ZiAqYW1keGRuYV9nZXRfdWJ1ZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3VidWYuYy0xMzYtXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV91YnVmLmM6MTM3Olx0dWJ1Zi1cdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoKnVidWYtXHUwMDNlcGFnZXMsIHVidWYtXHUwMDNlbnJfcGFnZXMpO1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfdWJ1Zi5jLTEzOC1cdGlmICghdWJ1Zi1cdTAwM2VwYWdlcykge1xuLS1cbmRyaXZlcnMvYWNjZWwvZXRob3N1L2V0aG9zdV9qb2IuYz00ODg9aW50IGV0aG9zdV9pb2N0bF9zdWJtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKVxuLS1cbmRyaXZlcnMvYWNjZWwvZXRob3N1L2V0aG9zdV9qb2IuYy00OTktXHRzdHJ1Y3QgZHJtX2V0aG9zdV9qb2IgX19mcmVlKGt2ZnJlZSkgKmpvYnMgPVxuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2pvYi5jOjUwMDpcdFx0a3ZtYWxsb2Nfb2Jqcygqam9icywgYXJncy1cdTAwM2Vqb2JfY291bnQpO1xuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2pvYi5jLTUwMS1cdGlmICgham9icylcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL21lbW9yeS5jPTIzMTU9c3RhdGljIGludCBnZXRfdXNlcl9tZW1vcnkoc3RydWN0IGhsX2RldmljZSAqaGRldiwgdTY0IGFkZHIsIHU2NCBzaXplLFxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vbWVtb3J5LmMtMjMyNS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vbWVtb3J5LmM6MjMyNjpcdHVzZXJwdHItXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5wYWdlcyk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL21lbW9yeS5jLTIzMjctXHRpZiAoIXVzZXJwdHItXHUwMDNlcGFnZXMpXG4tLVxuZHJpdmVycy9hY2NlbC9pdnB1L2l2cHVfZ2VtX3VzZXJwdHIuYz02NT1pdnB1X2NyZWF0ZV91c2VycHRyX2RtYWJ1ZihzdHJ1Y3QgaXZwdV9kZXZpY2UgKnZkZXYsIHZvaWQgX191c2VyICp1c2VyX3B0cixcbi0tXG5kcml2ZXJzL2FjY2VsL2l2cHUvaXZwdV9nZW1fdXNlcnB0ci5jLTc5LVxuZHJpdmVycy9hY2NlbC9pdnB1L2l2cHVfZ2VtX3VzZXJwdHIuYzo4MDpcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcGFnZXMsIG5yX3BhZ2VzKTtcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2dlbV91c2VycHRyLmMtODEtXHRpZiAoIXBhZ2VzKVxuLS1cbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYz01OT1yb2NrZXRfY29weV90YXNrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy03My1cbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYzo3NDpcdHJqb2ItXHUwMDNldGFza3MgPSBrdm1hbGxvY19vYmpzKCpyam9iLVx1MDAzZXRhc2tzLCBqb2ItXHUwMDNldGFza19jb3VudCk7XG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNzUtXHRpZiAoIXJqb2ItXHUwMDNldGFza3MpIHtcbi0tXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmM9NTkxPWludCByb2NrZXRfaW9jdGxfc3VibWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNjEwLVxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jOjYxMTpcdGpvYnMgPSBrdm1hbGxvY19vYmpzKCpqb2JzLCBhcmdzLVx1MDAzZWpvYl9jb3VudCk7XG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNjEyLVx0aWYgKCFqb2JzKSB7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTUxPWludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtOTMtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6OTQ6XHRkZXYtXHUwMDNlem9uZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBudWxsYl96b25lLCBkZXYtXHUwMDNlbnJfem9uZXMsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtOTUtXHRcdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tLVxuZHJpdmVycy9kbWEtYnVmL3N0LWRtYS1mZW5jZS1jaGFpbi5jPTEwOD1zdGF0aWMgaW50IGZlbmNlX2NoYWluc19pbml0KHN0cnVjdCBmZW5jZV9jaGFpbnMgKmZjLCB1bnNpZ25lZCBpbnQgY291bnQsXG4tLVxuZHJpdmVycy9kbWEtYnVmL3N0LWRtYS1mZW5jZS1jaGFpbi5jLTExMy1cbmRyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtY2hhaW4uYzoxMTQ6XHRmYy1cdTAwM2VjaGFpbnMgPSBrdm1hbGxvY19vYmpzKCpmYy1cdTAwM2VjaGFpbnMsIGNvdW50LCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG5kcml2ZXJzL2RtYS1idWYvc3QtZG1hLWZlbmNlLWNoYWluLmMtMTE1LVx0aWYgKCFmYy1cdTAwM2VjaGFpbnMpXG4tLVxuZHJpdmVycy9kbWEtYnVmL3N0LWRtYS1mZW5jZS1jaGFpbi5jLTExNy1cbmRyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtY2hhaW4uYzoxMTg6XHRmYy1cdTAwM2VmZW5jZXMgPSBrdm1hbGxvY19vYmpzKCpmYy1cdTAwM2VmZW5jZXMsIGNvdW50LCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG5kcml2ZXJzL2RtYS1idWYvc3QtZG1hLWZlbmNlLWNoYWluLmMtMTE5LVx0aWYgKCFmYy1cdTAwM2VmZW5jZXMpIHtcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTE5MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBpbml0X3VkbWFidWYoc3RydWN0IHVkbWFidWYgKnVidWYsIHBnb2ZmX3QgcGdjbnQpXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5Mi17XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjE5MzpcdHVidWYtXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKCp1YnVmLVx1MDAzZXBhZ2VzLCBwZ2NudCk7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5NC1cdGlmICghdWJ1Zi1cdTAwM2VwYWdlcylcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5Ni1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MTk3Olx0dWJ1Zi1cdTAwM2VwaW5uZWRfZm9saW9zID0ga3ZtYWxsb2Nfb2JqcygqdWJ1Zi1cdTAwM2VwaW5uZWRfZm9saW9zLCBwZ2NudCk7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5OC1cdGlmICghdWJ1Zi1cdTAwM2VwaW5uZWRfZm9saW9zKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jPTE2ND1zdGF0aWMgaW50IGFtZGdwdV9jc19wYXNzMShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYy0xODItXHRwLVx1MDAzZW5jaHVua3MgPSBjcy1cdTAwM2Vpbi5udW1fY2h1bmtzO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmM6MTgzOlx0cC1cdTAwM2VjaHVua3MgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBhbWRncHVfY3NfY2h1bmssIHAtXHUwMDNlbmNodW5rcyk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYy0xODQtXHRpZiAoIXAtXHUwMDNlY2h1bmtzKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYz0yNTYzPXN0YXRpYyBpbnQgY3JpdV9yZXN0b3JlX2JvcyhzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYy0yNTc5LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYzoyNTgwOlx0Ym9fYnVja2V0cyA9IGt2bWFsbG9jX29ianMoKmJvX2J1Y2tldHMsIGFyZ3MtXHUwMDNlbnVtX2Jvcyk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jLTI1ODEtXHRpZiAoIWJvX2J1Y2tldHMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYy0yNTk3LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYzoyNTk4Olx0Ym9fcHJpdnMgPSBrdm1hbGxvY19vYmpzKCpib19wcml2cywgYXJncy1cdTAwM2VudW1fYm9zKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmMtMjU5OS1cdGlmICghYm9fcHJpdnMpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jPTY2NT1zdHJ1Y3QgcGFnZSAqKmRybV9nZW1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtNjg2LVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYzo2ODc6XHRwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtNjg4LVx0aWYgKHBhZ2VzID09IE5VTEwpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYz04MzM9aW50IGRybV9nZW1fb2JqZWN0c19sb29rdXAoc3RydWN0IGRybV9maWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYm9faGFuZGxlcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jLTg0NC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmM6ODQ1Olx0b2JqcyA9IGt2bWFsbG9jX29ianMoKm9ianMsIGNvdW50KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtODQ2LVx0aWYgKCFvYmpzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTM5Mz1pbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0ODgtXHRcdHN2bV9wYWdlcy1cdTAwM2VkbWFfYWRkciA9XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0ODk6XHRcdFx0a3ZtYWxsb2Nfb2Jqcygqc3ZtX3BhZ2VzLVx1MDAzZWRtYV9hZGRyLCBucGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkwLVx0XHRpZiAoIXN2bV9wYWdlcy1cdTAwM2VkbWFfYWRkcikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmM9NjY2PXN0YXRpYyBpbnQgZXRuYXZpdl9nZW1fdXNlcnB0cl9nZXRfcGFnZXMoc3RydWN0IGV0bmF2aXZfZ2VtX29iamVjdCAqZXRuYXZpdl9vYmopXG4tLVxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYy02NzctXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jOjY3ODpcdHB2ZWMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5wYWdlcyk7XG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTY3OS1cdGlmICghcHZlYylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jPTExMj1zdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmV0bmF2aXZfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmMtMTI4LVx0ZXRuYXZpdl9vYmotXHUwMDNlc2d0ID0gc2d0O1xuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fcHJpbWUuYzoxMjk6XHRldG5hdml2X29iai1cdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmMtMTMwLVx0aWYgKCFldG5hdml2X29iai1cdTAwM2VwYWdlcykge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1Ym1pdC5jPTQxMD1pbnQgZXRuYXZpdl9pb2N0bF9nZW1fc3VibWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmMtNDY4LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9zdWJtaXQuYzo0Njk6XHRib3MgPSBrdm1hbGxvY19vYmpzKCpib3MsIGFyZ3MtXHUwMDNlbnJfYm9zKTtcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1Ym1pdC5jOjQ3MDpcdHJlbG9jcyA9IGt2bWFsbG9jX29ianMoKnJlbG9jcywgYXJncy1cdTAwM2Vucl9yZWxvY3MpO1xuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmM6NDcxOlx0cG1ycyA9IGt2bWFsbG9jX29ianMoKnBtcnMsIGFyZ3MtXHUwMDNlbnJfcG1ycyk7XG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9zdWJtaXQuYy00NzItXHRzdHJlYW0gPSBrdm1hbGxvY19hcnJheSgxLCBhcmdzLVx1MDAzZXN0cmVhbV9zaXplLCBHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM9NDE2PXN0YXRpYyBkbWFfYWRkcl90ICpnMmRfdXNlcnB0cl9nZXRfZG1hX2FkZHIoc3RydWN0IGcyZF9kYXRhICpnMmQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTQ3My1cdG5wYWdlcyA9IChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6NDc0Olx0ZzJkX3VzZXJwdHItXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKCpnMmRfdXNlcnB0ci1cdTAwM2VwYWdlcywgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy00NzUtXHRpZiAoIWcyZF91c2VycHRyLVx1MDAzZXBhZ2VzKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM9Mjc1PXN0YXRpYyB2b2lkICppOTE1X2dlbV9vYmplY3RfbWFwX3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0zMTYtXHRcdC8qIFRvbyBiaWcgZm9yIHN0YWNrIC0tIGFsbG9jYXRlIHRlbXBvcmFyeSBhcnJheSBpbnN0ZWFkICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYzozMTc6XHRcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcGFnZXMsIG5fcGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmMtMzE4LVx0XHRpZiAoIXBhZ2VzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmM9MjM0PWludCBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9zdWJtaXRfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMtMjYwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYzoyNjE6XHRwdmVjID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBudW1fcGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYy0yNjItXHRpZiAoIXB2ZWMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYz01MjQ9c3RhdGljIGludCBsaXZlX2h3c3BfZW5naW5lKHZvaWQgKmFyZylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jLTUzOC1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5lLmM6NTM5Olx0dGltZWxpbmVzID0ga3ZtYWxsb2Nfb2JqcygqdGltZWxpbmVzLCBOVU1fVElNRUxJTkVTICogSTkxNV9OVU1fRU5HSU5FUyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jLTU0MC1cdGlmICghdGltZWxpbmVzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5lLmM9NTk2PXN0YXRpYyBpbnQgbGl2ZV9od3NwX2FsdGVybmF0ZSh2b2lkICphcmcpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy02MTEtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jOjYxMjpcdHRpbWVsaW5lcyA9IGt2bWFsbG9jX29ianMoKnRpbWVsaW5lcywgTlVNX1RJTUVMSU5FUyAqIEk5MTVfTlVNX0VOR0lORVMpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy02MTMtXHRpZiAoIXRpbWVsaW5lcylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zaG1lbV91dGlscy5jPTU5PXZvaWQgKnNobWVtX3Bpbl9tYXAoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2htZW1fdXRpbHMuYy02NS1cdG5fcGFnZXMgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NobWVtX3V0aWxzLmM6NjY6XHRwYWdlcyA9IGt2bWFsbG9jX29ianMoKnBhZ2VzLCBuX3BhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NobWVtX3V0aWxzLmMtNjctXHRpZiAoIXBhZ2VzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pbWFnaW5hdGlvbi9wdnJfam9iLmM9NzA3PXB2cl9zdWJtaXRfam9icyhzdHJ1Y3QgcHZyX2RldmljZSAqcHZyX2Rldiwgc3RydWN0IHB2cl9maWxlICpwdnJfZmlsZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaW1hZ2luYXRpb24vcHZyX2pvYi5jLTcyMy1cbmRyaXZlcnMvZ3B1L2RybS9pbWFnaW5hdGlvbi9wdnJfam9iLmM6NzI0Olx0am9iX2RhdGEgPSBrdm1hbGxvY19vYmpzKCpqb2JfZGF0YSwgYXJncy1cdTAwM2Vqb2JzLmNvdW50LFxuZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9qb2IuYy03MjUtXHRcdFx0XHQgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmM9MjE9aW50IGxpbWFfaGVhcF9hbGxvYyhzdHJ1Y3QgbGltYV9ibyAqYm8sIHN0cnVjdCBsaW1hX3ZtICp2bSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jLTQxLVx0fSBlbHNlIHtcbmRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmM6NDI6XHRcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcGFnZXMsIGJvLVx1MDAzZWJhc2UuYmFzZS5zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYy00My1cdFx0XHRcdCAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYz0xMjg0PXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXNtX2dlbV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYy0xMzA1LVx0bXNtX29iai1cdTAwM2VzZ3QgPSBzZ3Q7XG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYzoxMzA2Olx0bXNtX29iai1cdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jLTEzMDctXHRpZiAoIW1zbV9vYmotXHUwMDNlcGFnZXMpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9pb21tdS5jPTMzMD1tc21faW9tbXVfcGFnZXRhYmxlX3ByZWFsbG9jX2FsbG9jYXRlKHN0cnVjdCBtc21fbW11ICptbXUsIHN0cnVjdCBtc21fbW11X3ByZWFsbG9jICpwKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmMtMzM4LVxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYzozMzk6XHRwLVx1MDAzZXBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcC1cdTAwM2VwYWdlcywgcC1cdTAwM2Vjb3VudCk7XG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9pb21tdS5jLTM0MC1cdGlmICghcC1cdTAwM2VwYWdlcylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9sdXQuYz0zMj1udjUwX2x1dF9sb2FkKHN0cnVjdCBudjUwX2x1dCAqbHV0LCBpbnQgYnVmZmVyLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IsXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvbHV0LmMtNDAtXHRpZiAoIWluKSB7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9sdXQuYzo0MTpcdFx0aW4gPSBrdm1hbGxvY19vYmpzKCppbiwgMTAyNCk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9sdXQuYy00Mi1cdFx0aWYgKCFXQVJOX09OKCFpbikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9tbXUvbWVtLmM9MTQ0PW52a21fbWVtX25ld19ob3N0KHN0cnVjdCBudmttX21tdSAqbW11LCBpbnQgdHlwZSwgdTggcGFnZSwgdTY0IHNpemUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvbW11L21lbS5jLTE5My1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L21tdS9tZW0uYzoxOTQ6XHRpZiAoIShtZW0tXHUwMDNlbWVtID0ga3ZtYWxsb2Nfb2JqcygqbWVtLVx1MDAzZW1lbSwgc2l6ZSkpKVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvbW11L21lbS5jLTE5NS1cdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9tbXUvbWVtLmM6MTk2Olx0aWYgKCEobWVtLVx1MDAzZWRtYSA9IGt2bWFsbG9jX29ianMoKm1lbS1cdTAwM2VkbWEsIHNpemUpKSlcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L21tdS9tZW0uYy0xOTctXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYz0xODk9cGFuZnJvc3RfbG9va3VwX2JvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYy0yMDktXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmM6MjEwOlx0am9iLVx1MDAzZW1hcHBpbmdzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFuZnJvc3RfZ2VtX21hcHBpbmcgKixcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYy0yMTEtXHRcdFx0XHQgICAgICBqb2ItXHUwMDNlYm9fY291bnQsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmM9NTg3PXN0YXRpYyBpbnQgcGFuZnJvc3RfaW9jdGxfc3luY19ibyhzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMtNjAxLVxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jOjYwMjpcdG9wcyA9IGt2bWFsbG9jX29ianMoKm9wcywgYXJncy1cdTAwM2VvcF9jb3VudCk7XG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMtNjAzLVx0aWYgKCFvcHMpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmM9NTg3PXN0YXRpYyBpbnQgcGFuZnJvc3RfbW11X21hcF9mYXVsdF9hZGRyKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2LCBpbnQgYXMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5jLTYyMi1cdGlmICghYm8tXHUwMDNlYmFzZS5wYWdlcykge1xuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5jOjYyMzpcdFx0Ym8tXHUwMDNlc2d0cyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHNnX3RhYmxlLFxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5jLTYyNC1cdFx0XHRcdFx0IGJvLVx1MDAzZWJhc2UuYmFzZS5zaXplIC8gU1pfMk0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5jLTYzMC1cbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9tbXUuYzo2MzE6XHRcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBucl9wYWdlcyxcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9tbXUuYy02MzItXHRcdFx0XHQgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz03MjY9c3RhdGljIGludCBwYW50aG9yX3N1Ym1pdF9jdHhfaW5pdChzdHJ1Y3QgcGFudGhvcl9zdWJtaXRfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy03Mjgte1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzo3Mjk6XHRjdHgtXHUwMDNlam9icyA9IGt2bWFsbG9jX29ianMoKmN0eC1cdTAwM2Vqb2JzLCBqb2JfY291bnQsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTczMC1cdFx0XHRcdCAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ZtLmM9MTI5PXN0cnVjdCByYWRlb25fYm9fbGlzdCAqcmFkZW9uX3ZtX2dldF9ib3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYy0xMzUtXG5kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl92bS5jOjEzNjpcdGxpc3QgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCByYWRlb25fYm9fbGlzdCwgdm0tXHUwMDNlbWF4X3BkZV91c2VkICYjNDM7IDIpO1xuZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYy0xMzctXHRpZiAoIWxpc3QpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM9MzYwPXYzZF9nZXRfbXVsdGlzeW5jX3Bvc3RfZGVwcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy0zNzItXHRzZS1cdTAwM2VvdXRfc3luY3MgPSAoc3RydWN0IHYzZF9zdWJtaXRfb3V0c3luYyAqKVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6MzczOlx0XHRcdGt2bWFsbG9jX29ianMoc3RydWN0IHYzZF9zdWJtaXRfb3V0c3luYywgY291bnQpO1xuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtMzc0LVx0aWYgKCFzZS1cdTAwM2VvdXRfc3luY3MpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM9NTA2PXYzZF9nZXRfY3B1X3RpbWVzdGFtcF9xdWVyeV9wYXJhbXMoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNTI2LVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6NTI3Olx0cXVlcnlfaW5mby1cdTAwM2VxdWVyaWVzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdjNkX3RpbWVzdGFtcF9xdWVyeSxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTUyOC1cdFx0XHRcdFx0ICAgIHRpbWVzdGFtcC5jb3VudCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM9NTY3PXYzZF9nZXRfY3B1X3Jlc2V0X3RpbWVzdGFtcF9wYXJhbXMoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNTg0LVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6NTg1Olx0cXVlcnlfaW5mby1cdTAwM2VxdWVyaWVzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdjNkX3RpbWVzdGFtcF9xdWVyeSxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTU4Ni1cdFx0XHRcdFx0ICAgIHJlc2V0LmNvdW50KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYz02MjA9djNkX2dldF9jcHVfY29weV9xdWVyeV9yZXN1bHRzX3BhcmFtcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy02NDAtXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYzo2NDE6XHRxdWVyeV9pbmZvLVx1MDAzZXF1ZXJpZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB2M2RfdGltZXN0YW1wX3F1ZXJ5LFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNjQyLVx0XHRcdFx0XHQgICAgY29weS5jb3VudCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM9NzUwPXYzZF9nZXRfY3B1X3Jlc2V0X3BlcmZvcm1hbmNlX3BhcmFtcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy03NjYtXHRxdWVyeV9pbmZvLVx1MDAzZXF1ZXJpZXMgPVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6NzY3Olx0XHRrdm1hbGxvY19vYmpzKHN0cnVjdCB2M2RfcGVyZm9ybWFuY2VfcXVlcnksIHJlc2V0LmNvdW50KTtcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTc2OC1cdGlmICghcXVlcnlfaW5mby1cdTAwM2VxdWVyaWVzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jPTc4Nz12M2RfZ2V0X2NwdV9jb3B5X3BlcmZvcm1hbmNlX3F1ZXJ5X3BhcmFtcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy04MDYtXHRxdWVyeV9pbmZvLVx1MDAzZXF1ZXJpZXMgPVxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6ODA3Olx0XHRrdm1hbGxvY19vYmpzKHN0cnVjdCB2M2RfcGVyZm9ybWFuY2VfcXVlcnksIGNvcHkuY291bnQpO1xuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtODA4LVx0aWYgKCFxdWVyeV9pbmZvLVx1MDAzZXF1ZXJpZXMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X29iamVjdC5jPTE2MT1zdGF0aWMgaW50IHZpcnRpb19ncHVfb2JqZWN0X3NobWVtX2luaXQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2Rldixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfb2JqZWN0LmMtMTc5LVxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X29iamVjdC5jOjE4MDpcdCplbnRzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydGlvX2dwdV9tZW1fZW50cnksICpuZW50cyk7XG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfb2JqZWN0LmMtMTgxLVx0aWYgKCEoKmVudHMpKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ByaW1lLmM9MTQ2PWludCB2aXJ0Z3B1X2RtYV9idWZfaW1wb3J0X3NndChzdHJ1Y3QgdmlydGlvX2dwdV9tZW1fZW50cnkgKiplbnRzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9wcmltZS5jLTE2Ni1cbmRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9wcmltZS5jOjE2NzpcdCplbnRzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydGlvX2dwdV9tZW1fZW50cnksIHNndC1cdTAwM2VuZW50cyk7XG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfcHJpbWUuYy0xNjgtXHRpZiAoISgqZW50cykpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmM9NTQxPWludCB2bXdfYm9fY3B1X2JsaXQoc3RydWN0IHZtd19ibyAqdm13X2RzdCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmMtNTg4LVx0aWYgKCFzcmMtXHUwMDNldHRtLVx1MDAzZXBhZ2VzIFx1MDAyNlx1MDAyNiBzcmMtXHUwMDNldHRtLVx1MDAzZXNnKSB7XG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmM6NTg5Olx0XHRzcmNfcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHNyYy1cdTAwM2V0dG0tXHUwMDNlbnVtX3BhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYy01OTAtXHRcdGlmICghc3JjX3BhZ2VzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYy01OTctXHRpZiAoIWRzdC1cdTAwM2V0dG0tXHUwMDNlcGFnZXMgXHUwMDI2XHUwMDI2IGRzdC1cdTAwM2V0dG0tXHUwMDNlc2cpIHtcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYzo1OTg6XHRcdGRzdF9wYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgZHN0LVx1MDAzZXR0bS1cdTAwM2VudW1fcGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYmxpdC5jLTU5OS1cdFx0aWYgKCFkc3RfcGFnZXMpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYz0zNTkxPXN0YXRpYyBpbnQgdm1fYmluZF9pb2N0bF9jaGVja19hcmdzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdm0gKnZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTM2MTEtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYzozNjEyOlx0XHQqYmluZF9vcHMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBkcm1feGVfdm1fYmluZF9vcCxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTM2MTMtXHRcdFx0XHRcdCAgYXJncy1cdTAwM2VudW1fYmluZHMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jPTQ2PXN0YXRpYyBpbnQgZ2VtX2FsbG9jX3BhZ2VzX2FycmF5KHN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMtNDktXHR4ZW5fb2JqLVx1MDAzZW51bV9wYWdlcyA9IERJVl9ST1VORF9VUChidWZfc2l6ZSwgUEFHRV9TSVpFKTtcbmRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYzo1MDpcdHhlbl9vYmotXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHhlbl9vYmotXHUwMDNlbnVtX3BhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYy01MS1cdHJldHVybiAheGVuX29iai1cdTAwM2VwYWdlcyA/IC1FTk9NRU0gOiAwO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L3FwLmM9MTExNz1zdGF0aWMgaW50IF9jcmVhdGVfa2VybmVsX3FwKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L3FwLmMtMTIwNS1cdFx0XHRcdCAgICAgc2l6ZW9mKCpxcC1cdTAwM2VycS53cmlkKSwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9xcC5jOjEyMDY6XHRxcC1cdTAwM2VzcS53X2xpc3QgPSBrdm1hbGxvY19vYmpzKCpxcC1cdTAwM2VzcS53X2xpc3QsIHFwLVx1MDAzZXNxLndxZV9jbnQpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvcXAuYy0xMjA3LVx0cXAtXHUwMDNlc3Eud3FlX2hlYWQgPSBrdm1hbGxvY19hcnJheShxcC1cdTAwM2VzcS53cWVfY250LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9pYl9zcnB0LmM9NzgxPXN0YXRpYyBzdHJ1Y3Qgc3JwdF9pb2N0eCAqKnNycHRfYWxsb2NfaW9jdHhfcmluZyhzdHJ1Y3Qgc3JwdF9kZXZpY2UgKnNkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L2liX3NycHQuYy03OTItXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvaWJfc3JwdC5jOjc5MzpcdHJpbmcgPSBrdm1hbGxvY19vYmpzKHJpbmdbMF0sIHJpbmdfc2l6ZSk7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvaWJfc3JwdC5jLTc5NC1cdGlmICghcmluZylcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9NjczPXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX2FsaWFzX3RhYmxlKHN0cnVjdCBhbWRfaW9tbXVfcGNpX3NlZyAqcGNpX3NlZylcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtNjc2LVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjY3NzpcdHBjaV9zZWctXHUwMDNlYWxpYXNfdGFibGUgPSBrdm1hbGxvY19vYmpzKCpwY2lfc2VnLVx1MDAzZWFsaWFzX3RhYmxlLFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTY3OC1cdFx0XHRcdFx0ICAgICBwY2lfc2VnLVx1MDAzZWxhc3RfYmRmICYjNDM7IDEpO1xuLS1cbmRyaXZlcnMvbWQvZG0tY2xvbmUtdGFyZ2V0LmM9NTc2PXN0YXRpYyBpbnQgaGFzaF90YWJsZV9pbml0KHN0cnVjdCBjbG9uZSAqY2xvbmUpXG4tLVxuZHJpdmVycy9tZC9kbS1jbG9uZS10YXJnZXQuYy01ODItXG5kcml2ZXJzL21kL2RtLWNsb25lLXRhcmdldC5jOjU4MzpcdGNsb25lLVx1MDAzZWh0ID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgaGFzaF90YWJsZV9idWNrZXQsIHN6KTtcbmRyaXZlcnMvbWQvZG0tY2xvbmUtdGFyZ2V0LmMtNTg0LVx0aWYgKCFjbG9uZS1cdTAwM2VodClcbi0tXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jPTQyMzc9c3RhdGljIHN0cnVjdCBwYWdlX2xpc3QgKmRtX2ludGVncml0eV9hbGxvY19wYWdlX2xpc3QodW5zaWduZWQgaW50IG5fcGFnZXMpXG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00MjQxLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo0MjQyOlx0cGwgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlX2xpc3QsIG5fcGFnZXMgJiM0MzsgMSxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI0My1cdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYz00MjcxPXN0YXRpYyBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKipkbV9pbnRlZ3JpdHlfYWxsb2Nfam91cm5hbF9zY2F0dGVybGlzdChzdHJ1Y3QgZG1faW50ZWdyaXR5X2MgKmljLFxuLS1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI3Ni1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6NDI3NzpcdHNsID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaWMtXHUwMDNlam91cm5hbF9zZWN0aW9ucyxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI3OC1cdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00Mjk0LVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo0Mjk1Olx0XHRzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIG5fcGFnZXMpO1xuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00Mjk2LVx0XHRpZiAoIXMpIHtcbi0tXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jPTQ0MTI9c3RhdGljIGludCBjcmVhdGVfam91cm5hbChzdHJ1Y3QgZG1faW50ZWdyaXR5X2MgKmljLCBjaGFyICoqZXJyb3IpXG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00NDk3LVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo0NDk4Olx0XHRcdHNnID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTQ0OTktXHRcdFx0XHRcdCAgIGljLVx1MDAzZWpvdXJuYWxfcGFnZXMgJiM0MzsgMSk7XG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00NTY1LVx0XHRcdH1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6NDU2NjpcdFx0XHRpYy1cdTAwM2Vza19yZXF1ZXN0cyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKixcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDU2Ny1cdFx0XHRcdFx0XHRcdGljLVx1MDAzZWpvdXJuYWxfc2VjdGlvbnMsXG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYz00Njc0PXN0YXRpYyBpbnQgZG1faW50ZWdyaXR5X2N0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLS1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNTI2OC1cdFx0fVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo1MjY5Olx0XHRpYy1cdTAwM2ViYnMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBiaXRtYXBfYmxvY2tfc3RhdHVzLFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy01MjcwLVx0XHRcdFx0XHRpYy1cdTAwM2VuX2JpdG1hcF9ibG9ja3MpO1xuLS1cbmRyaXZlcnMvbWQvZG0tc25hcC5jPTY1OT1zdGF0aWMgaW50IGRtX2V4Y2VwdGlvbl90YWJsZV9pbml0KHN0cnVjdCBkbV9leGNlcHRpb25fdGFibGUgKmV0LFxuLS1cbmRyaXZlcnMvbWQvZG0tc25hcC5jLTY2NS1cdGV0LVx1MDAzZWhhc2hfbWFzayA9IHNpemUgLSAxO1xuZHJpdmVycy9tZC9kbS1zbmFwLmM6NjY2Olx0ZXQtXHUwMDNldGFibGUgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBkbV9obGlzdF9oZWFkLCBzaXplKTtcbmRyaXZlcnMvbWQvZG0tc25hcC5jLTY2Ny1cdGlmICghZXQtXHUwMDNldGFibGUpXG4tLVxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYz00MDk9aW50IHY0bDJfZ19leHRfY3RybHNfY29tbW9uKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLFxuLS1cbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmMtNDMzLVx0aWYgKGNzLVx1MDAzZWNvdW50IFx1MDAzZSBBUlJBWV9TSVpFKGhlbHBlcikpIHtcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmM6NDM0Olx0XHRoZWxwZXJzID0ga3ZtYWxsb2Nfb2JqcyhoZWxwZXJbMF0sIGNzLVx1MDAzZWNvdW50KTtcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmMtNDM1LVx0XHRpZiAoIWhlbHBlcnMpXG4tLVxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYz01ODY9aW50IHRyeV9zZXRfZXh0X2N0cmxzX2NvbW1vbihzdHJ1Y3QgdjRsMl9maCAqZmgsXG4tLVxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYy02MTgtXHRpZiAoY3MtXHUwMDNlY291bnQgXHUwMDNlIEFSUkFZX1NJWkUoaGVscGVyKSkge1xuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYzo2MTk6XHRcdGhlbHBlcnMgPSBrdm1hbGxvY19vYmpzKGhlbHBlclswXSwgY3MtXHUwMDNlY291bnQpO1xuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYy02MjAtXHRcdGlmICghaGVscGVycylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcnNzLmM9MTE4PWludCBtbHg1ZV9yc3NfcGFyYW1zX2luZGlyX2luaXQoc3RydWN0IG1seDVlX3Jzc19wYXJhbXNfaW5kaXIgKmluZGlyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yc3MuYy0xMjAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3Jzcy5jOjEyMTpcdGluZGlyLVx1MDAzZXRhYmxlID0ga3ZtYWxsb2Nfb2JqcygqaW5kaXItXHUwMDNldGFibGUsIG1heF90YWJsZV9zaXplKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yc3MuYy0xMjItXHRpZiAoIWluZGlyLVx1MDAzZXRhYmxlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz04MDI9aW50IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKm1wYywgaW50IG5ld19tdHUsIGludCBudW1fcXVldWVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy04MjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6ODI0Olx0bXBjLVx1MDAzZWRhc19wcmUgPSBrdm1hbGxvY19vYmpzKGRtYV9hZGRyX3QsIG51bV9yeGIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTgyNS1cdGlmICghbXBjLVx1MDAzZWRhc19wcmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvbWV0YWRhdGEuYz01MTE9aW50IG5mcF9mbG93ZXJfbWV0YWRhdGFfaW5pdChzdHJ1Y3QgbmZwX2FwcCAqYXBwLCB1NjQgaG9zdF9jdHhfY291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvbWV0YWRhdGEuYy01NzUtXHRcdCAgICAgRklFTERfUFJFUChORlBfRkxfU1RBVF9JRF9NVV9OVU0sIGhvc3RfbnVtX21lbXMgLSAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL21ldGFkYXRhLmM6NTc2Olx0cHJpdi1cdTAwM2VzdGF0cyA9IGt2bWFsbG9jX29ianMoc3RydWN0IG5mcF9mbF9zdGF0cywgc3RhdHNfc2l6ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9tZXRhZGF0YS5jLTU3Ny1cdGlmICghcHJpdi1cdTAwM2VzdGF0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM9MTU9c3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtNTAtXHRpID0gbWF4X3QoaW50LCB3eC1cdTAwM2VudW1fdHhfcXVldWVzLCB3eC1cdTAwM2VudW1fcnhfcXVldWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzo1MTpcdHRlbXBfcmluZyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHd4X3JpbmcsIGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jLTUyLVx0aWYgKCF0ZW1wX3JpbmcpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYz0zOT1zdGF0aWMgaW50IHR4Z2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy03NC1cdGkgPSBtYXhfdChpbnQsIHd4LVx1MDAzZW51bV90eF9xdWV1ZXMsIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6NzU6XHR0ZW1wX3JpbmcgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB3eF9yaW5nLCBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jLTc2LVx0aWYgKCF0ZW1wX3JpbmcpIHtcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jPTE0NzA9c3RhdGljIHZvaWQgbmV0dnNjX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYy0xNTI2LVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYzoxNTI3Olx0cGNwdV9zdW0gPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBuZXR2c2NfZXRodG9vbF9wY3B1X3N0YXRzLCBucl9jcHVfaWRzKTtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMTUyOC1cdGlmICghcGNwdV9zdW0pXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTMvaXB1My1kbWFtYXAuYz0zND1zdGF0aWMgc3RydWN0IHBhZ2UgKippbWd1X2RtYW1hcF9hbGxvY19idWZmZXIoc2l6ZV90IHNpemUsIGdmcF90IGdmcClcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaXB1My9pcHUzLWRtYW1hcC5jLTQxLVx0LyogQWxsb2NhdGUgbWVtIGZvciBhcnJheSBvZiBwYWdlIHB0cnMgKi9cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9pcHUzL2lwdTMtZG1hbWFwLmM6NDI6XHRwYWdlcyA9IGt2bWFsbG9jX29ianMoKnBhZ2VzLCBjb3VudCk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaXB1My9pcHUzLWRtYW1hcC5jLTQzLVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2ZzLmM9ODA3PXN0YXRpYyB2b2lkICpmZnNfYnVpbGRfc2dfbGlzdChzdHJ1Y3Qgc2dfdGFibGUgKnNndCwgc2l6ZV90IHN6KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2ZzLmMtODE4LVx0bl9wYWdlcyA9IFBBR0VfQUxJR04oc3opIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfZnMuYzo4MTk6XHRwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbl9wYWdlcyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9mcy5jLTgyMC1cdGlmICghcGFnZXMpIHtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L3hoY2ktc2lkZWJhbmQuYz0xOD14aGNpX3JpbmdfdG9fc2d0YWJsZShzdHJ1Y3QgeGhjaV9zaWRlYmFuZCAqc2IsIHN0cnVjdCB4aGNpX3JpbmcgKnJpbmcpXG4tLVxuZHJpdmVycy91c2IvaG9zdC94aGNpLXNpZGViYW5kLmMtMzAtXHRuX3BhZ2VzID0gUEFHRV9BTElHTihzeikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG5kcml2ZXJzL3VzYi9ob3N0L3hoY2ktc2lkZWJhbmQuYzozMTpcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBuX3BhZ2VzKTtcbmRyaXZlcnMvdXNiL2hvc3QveGhjaS1zaWRlYmFuZC5jLTMyLVx0aWYgKCFwYWdlcylcbi0tXG5kcml2ZXJzL3hlbi9ldnRjaG4uYz0zMTg9c3RhdGljIGludCBldnRjaG5fcmVzaXplX3Jpbmcoc3RydWN0IHBlcl91c2VyX2RhdGEgKnUpXG4tLVxuZHJpdmVycy94ZW4vZXZ0Y2huLmMtMzM0LVxuZHJpdmVycy94ZW4vZXZ0Y2huLmM6MzM1Olx0bmV3X3JpbmcgPSBrdm1hbGxvY19vYmpzKCpuZXdfcmluZywgbmV3X3NpemUpO1xuZHJpdmVycy94ZW4vZXZ0Y2huLmMtMzM2LVx0aWYgKCFuZXdfcmluZylcbi0tXG5kcml2ZXJzL3hlbi9nbnRkZXYuYz0xMzg9c3RydWN0IGdudGRldl9ncmFudF9tYXAgKmdudGRldl9hbGxvY19tYXAoc3RydWN0IGdudGRldl9wcml2ICpwcml2LCBpbnQgY291bnQsXG4tLVxuZHJpdmVycy94ZW4vZ250ZGV2LmMtMTQ3LVxuZHJpdmVycy94ZW4vZ250ZGV2LmM6MTQ4Olx0YWRkLVx1MDAzZWdyYW50cyAgICA9IGt2bWFsbG9jX29ianMoYWRkLVx1MDAzZWdyYW50c1swXSwgY291bnQpO1xuZHJpdmVycy94ZW4vZ250ZGV2LmM6MTQ5Olx0YWRkLVx1MDAzZW1hcF9vcHMgICA9IGt2bWFsbG9jX29ianMoYWRkLVx1MDAzZW1hcF9vcHNbMF0sIGNvdW50KTtcbmRyaXZlcnMveGVuL2dudGRldi5jOjE1MDpcdGFkZC1cdTAwM2V1bm1hcF9vcHMgPSBrdm1hbGxvY19vYmpzKGFkZC1cdTAwM2V1bm1hcF9vcHNbMF0sIGNvdW50KTtcbmRyaXZlcnMveGVuL2dudGRldi5jLTE1MS1cdGFkZC1cdTAwM2VwYWdlcyAgICAgPSBrdnphbGxvY19vYmpzKGFkZC1cdTAwM2VwYWdlc1swXSwgY291bnQpO1xuLS1cbmRyaXZlcnMveGVuL2dudGRldi5jLTE2MC1cdGlmICh4ZW5fcHZfZG9tYWluKCkpIHtcbmRyaXZlcnMveGVuL2dudGRldi5jOjE2MTpcdFx0YWRkLVx1MDAzZWttYXBfb3BzICAgPSBrdm1hbGxvY19vYmpzKGFkZC1cdTAwM2VrbWFwX29wc1swXSwgY291bnQpO1xuZHJpdmVycy94ZW4vZ250ZGV2LmM6MTYyOlx0XHRhZGQtXHUwMDNla3VubWFwX29wcyA9IGt2bWFsbG9jX29ianMoYWRkLVx1MDAzZWt1bm1hcF9vcHNbMF0sIGNvdW50KTtcbmRyaXZlcnMveGVuL2dudGRldi5jLTE2My1cdFx0aWYgKE5VTEwgPT0gYWRkLVx1MDAzZWttYXBfb3BzIHx8IE5VTEwgPT0gYWRkLVx1MDAzZWt1bm1hcF9vcHMpXG4tLVxuZnMvY2VwaC9maWxlLmM9MTQ2PXN0YXRpYyBzc2l6ZV90IGl0ZXJfZ2V0X2J2ZWNzX2FsbG9jKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc2l6ZV90IG1heHNpemUsXG4tLVxuZnMvY2VwaC9maWxlLmMtMTYxLVx0ICovXG5mcy9jZXBoL2ZpbGUuYzoxNjI6XHRidiA9IGt2bWFsbG9jX29ianMoKmJ2LCBucGFnZXMsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbmZzL2NlcGgvZmlsZS5jLTE2My1cdGlmICghYnYpXG4tLVxuZnMvY29yZWR1bXAuYz0xNzIwPXN0YXRpYyBib29sIGR1bXBfdm1hX3NuYXBzaG90KHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4tLVxuZnMvY29yZWR1bXAuYy0xNzM4LVxuZnMvY29yZWR1bXAuYzoxNzM5Olx0Y3BybS1cdTAwM2V2bWFfbWV0YSA9IGt2bWFsbG9jX29ianMoKmNwcm0tXHUwMDNldm1hX21ldGEsIGNwcm0tXHUwMDNldm1hX2NvdW50KTtcbmZzL2NvcmVkdW1wLmMtMTc0MC1cdGlmICghY3BybS1cdTAwM2V2bWFfbWV0YSkge1xuLS1cbmZzL2V4ZmF0L2JhbGxvYy5jPTczPXN0YXRpYyBpbnQgZXhmYXRfYWxsb2NhdGVfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXhmYXQvYmFsbG9jLmMtOTctXHRcdFx0KHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKSAmIzQzOyAxO1xuZnMvZXhmYXQvYmFsbG9jLmM6OTg6XHRzYmktXHUwMDNldm9sX2FtYXAgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzYmktXHUwMDNlbWFwX3NlY3RvcnMpO1xuZnMvZXhmYXQvYmFsbG9jLmMtOTktXHRpZiAoIXNiaS1cdTAwM2V2b2xfYW1hcClcbi0tXG5mcy9leHQyL3N1cGVyLmM9ODY0PXN0YXRpYyBpbnQgZXh0Ml9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9leHQyL3N1cGVyLmMtMTA5OC1cdFx0ICAgRVhUMl9ERVNDX1BFUl9CTE9DSyhzYik7XG5mcy9leHQyL3N1cGVyLmM6MTA5OTpcdHNiaS1cdTAwM2VzX2dyb3VwX2Rlc2MgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBkYl9jb3VudCk7XG5mcy9leHQyL3N1cGVyLmMtMTEwMC1cdGlmIChzYmktXHUwMDNlc19ncm91cF9kZXNjID09IE5VTEwpIHtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0ODcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgdXN1YWxseSBga3ZtYWxsb2NfYXJyYXlgLCB0aGF0JiMzOTtzIHRoZSBlc3RhYmxpc2hlZCBmdW5jdGlvbiBmb3IgdGhpcy4gQnV0IHRoZW4gSSBzYXcgYGt2bWFsbG9jX29ianNgIGFuZCBpdCBzcGFya2VkIGEgcXVlc3Rpb24uIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlIGZvciB0aGVzZSBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NsYWIuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgYGt2bWFsbG9jX2FycmF5YCBpcyBkZWZpbmVkLCBzbyB0aGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uLCBvciBhbnkgaGludHMsIGFib3V0IGBrdm1hbGxvY19vYmpzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgcmVsYXRpb25zaGlwLCBpZiBhbnksIGlzIGJldHdlZW4gdGhlIHR3by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtYWxsb2Nfb2JqcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTEwNTE9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNDItXHRfX2FsbG9jX29ianMoa3ZtYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE0MzojZGVmaW5lIGt2bWFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNDQtXHRfX2FsbG9jX29ianMoa3ZtYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4ODUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSBpbiBgbW0vZGFtb24vY29yZS5jYC4gVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiBpcyBhIHN3aXRjaCBmcm9tIGBrbWFsbG9jX29ianNgIHRvIGBrdm1hbGxvY19vYmpzYC4gSSBpbW1lZGlhdGVseSBjaGVjayB0aGUgYGluY2x1ZGUvbGludXgvc2xhYi5oYCBoZWFkZXIgZmlsZSB0byByZWZyZXNoIG15IG1lbW9yeSwgYW5kLCB5ZXMsIHRoYXQmIzM5O3MgY29ycmVjdC4gYGt2bWFsbG9jYCBjYW4gZmFsbCBiYWNrIHRvIHZtYWxsb2MsIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS4KClRoZSBmaXJzdCBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBzaWduaWZpY2FudCBlbm91Z2ggZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBwcm9tcHQmIzM5O3MgY3JpdGVyaWEsIEkgY29uc2lkZXIgdGhpcy4gSXQmIzM5O3Mgbm90IGEgZG9jdW1lbnRhdGlvbiB1cGRhdGUgb3IgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGt2bWFsbG9jYCBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIGZhbGxiYWNrIHRvIHZtYWxsb2Mgd2hlbiBga21hbGxvY2Agd291bGQgZmFpbCwgZm9yIGxhcmdlIGFsbG9jYXRpb25zLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgY2hhbmdlIGluIGV4ZWN1dGlvbiBmbG93LiBCdXQgaXMgaXQgKndvcnRoKiBmdXp6aW5nPyBUaGUgcHJvbXB0IHByb3ZpZGVzIHNvbWUgZ3VpZGFuY2UuCgpJbml0aWFsbHksIEkgdGhpbmsgdGhpcyBtaWdodCBub3QgaW50cm9kdWNlIGZ1bmRhbWVudGFsbHkgbmV3ICpsb2dpYyogdG8gZnV6eiwgYnV0IGl0IGRvZXMgYWx0ZXIgYmVoYXZpb3IuIEEgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uIHdoZXJlIGl0IG1pZ2h0IGhhdmUgZmFpbGVkIGJlZm9yZSAqaXMqIGEgcmVsZXZhbnQgY2hhbmdlIHRvIHRlc3QuIFNvLCBJIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBhcmVhIGlzIHJlYWNoYWJsZS4KCkkgYWxzbyBub3RlIHRoZSBhZGRpdGlvbiBvZiBgZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGVgLCB3aGljaCBpcyBhIGt1bml0IHRlc3QuIFdoaWxlIEkgZG9uJiMzOTt0IGRpc2NhcmQgdGhlIHBvc3NpYmlsaXR5IG9mIGl0IGJlaW5nIGhlbHBmdWwsIGt1bml0IHRlc3RzIGFyZSB1c3VhbGx5IG5vdCB0aGUgcHJpbWFyeSBmb2N1cyBvZiBmdXp6aW5nIGVmZm9ydHMsIHNvIEkgZG9uJiMzOTt0IGdpdmUgdGhpcyBzaWduaWZpY2FudCB3ZWlnaHQgaW5pdGlhbGx5LiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbXNlY3NfdG9famlmZmllc2AgdG8gYHNlY3NfdG9famlmZmllc2Agd2hpY2ggaXMgYSBtYWNybyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuIEkgc2tpcCBvdmVyIHRoYXQgYXMgaXQgaXMgbm90IHRoZSBtYWluIGlzc3VlLgoKVGhlbiBJIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIGlzc3VlOiB0aGUgc2luZ2xlIGNvZGUgY2hhbmdlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYDoKCmBgYGMKcmFuZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcmFuZ2VzLCBpLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKYGBgCkkgY2hlY2sgdGhlIGNvZGUgdGhhdCBzdXJyb3VuZHMgaXQgYW5kIG5vdGUgdGhlIHBhdGNoJiMzOTtzIGBrZnJlZWAgaXMgYWxzbyBga3ZmcmVlYCB3aGljaCBpcyB3aGF0IEkgd291bGQgZXhwZWN0LiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdhcnJhbnRzIGFkZGl0aW9uYWwgZnV6emluZyBlZmZvcnRzLgoKSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0LiBVc3VhbGx5LCBzd2l0Y2hpbmcgdG8gYGt2bWFsbG9jYCBpcyBhIGJ1ZyBmaXggb3IgaW1wcm92ZW1lbnQgZm9yIGxhcmdlIGFsbG9jYXRpb25zLiBJIGRvbiYjMzk7dCBzZWUgYW55ICYjMzQ7bmV3JiMzNDsgY29kZSB0aGF0IGlzIG5vdyByZWFjaGFibGUgYnkgdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uLCBidXQgYSBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlIGhhcyBiZWVuIGNvcnJlY3RlZC4KCkFjY29yZGluZyB0byB0aGUgcHJvbXB0LCBpZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gU28sIEkgbmVlZCB0byBjaGVjayBob3cgdG8gcmVhY2ggYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AuIEkgY2hlY2sgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgLSZndDsgYGRhbW9uX2NvbW1pdF9jdHhgIC0mZ3Q7IGBkYW1vbl9jb21taXRfdGFyZ2V0YCAtJmd0OyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCBhbmQgcmVhbGl6ZSB0aGF0IGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgc3lzZnMgd3JpdGVzIHRvIERBTU9OLgoKU2luY2UgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoIGFuIGV4ZWN1dGlvbiBmbG93IGFsdGVyYXRpb24gKHZtYWxsb2MgZmFsbGJhY2spLCBpdCYjMzk7cyBwcm9iYWJseSAqd29ydGgqIGZ1enppbmcuIFdlIGNhbiBwcm92aWRlIGEgbGFyZ2UgbnVtYmVyIG9mIHJlZ2lvbnMgdG8gc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSB2bWFsbG9jIGZhbGxiYWNrLiBXZSBjYW4gbm93IHRlc3Qgd2hldGhlciB0aGlzIGZhbGxiYWNrIGZ1bmN0aW9ucyBjb3JyZWN0bHksIGFuZCBpdCBjb3VsZCBpZGVudGlmeSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdm1hbGxvYyB1c2FnZSwgc3VjaCBhcyBlbnN1cmluZyB0aGF0IHRoZSBkb3duc3RyZWFtIGBkYW1vbl9zZXRfcmVnaW9uc2AgZnVuY3Rpb24gaGFuZGxlcyBwb3RlbnRpYWxseSBub24tY29udGlndW91cyBtZW1vcnksIG9yIHdoZXRoZXIgdGhlIGFsbG9jYXRpb24gZmFpbHVyZSBpcyBzaW1wbHkgbWFza2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAxMz1zdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDE0LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMTU6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAxNi1cdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzE5PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDAtLypcbm1tL2RhbW9uL2NvcmUuYzozNDE6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cbm1tL2RhbW9uL2NvcmUuYy0zNDItICogQHQ6XHRcdHRoZSBnaXZlbiB0YXJnZXQuXG4tLVxubW0vZGFtb24vY29yZS5jLTM1MS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozNTI6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtMzUzLVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTEzNDc9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzY0LVx0XHRyYW5nZXNbaSYjNDM7JiM0MztdID0gc3JjX3JlZ2lvbi1cdTAwM2Vhcjtcbm1tL2RhbW9uL2NvcmUuYzoxMzY1Olx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbm1tL2RhbW9uL2NvcmUuYy0xMzY2LVx0a3ZmcmVlKHJhbmdlcyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTM2OTY9aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzEwLVx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xubW0vZGFtb24vY29yZS5jOjM3MTE6XHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG5tbS9kYW1vbi9jb3JlLmMtMzcxMi19XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xOTU3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE5ODEtXHR9XG5tbS9kYW1vbi9zeXNmcy5jOjE5ODI6XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyh0LCByYW5nZXMsIHN5c2ZzX3JlZ2lvbnMtXHUwMDNlbnIsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vc3lzZnMuYy0xOTgzLW91dDpcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9Mzg5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDEwLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQxMTpcdGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQxMi1cbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTkwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwMy0vKlxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxMDQ6ICogVGVzdCAmIzM5O2RhbW9uX3NldF9yZWdpb25zKCkmIzM5O1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMDUtICpcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTExOC0gKiByZWdpb25zLiAgVGhlIHVwZGF0ZSBvZiBjdXJyZW50IHRhcmdldCByZWdpb25zIGlzIHRoZSByb2xlIG9mXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjExOTogKiAmIzM5O2RhbW9uX3NldF9yZWdpb25zKCkmIzM5Oy5cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTIwLSAqXG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0xMjU9c3RhdGljIHZvaWQgZGFtb25fZG9fdGVzdF9hcHBseV90aHJlZV9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0Ny1cdH1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTQ4Olx0aWYgKGRhbW9uX3NldF9yZWdpb25zKHQsIHJhbmdlcywgbnJfcmVnaW9ucyAvIDIsXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0OS1cdFx0XHRcdERBTU9OX01JTl9SRUdJT05fU1opKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTEtXHRcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTI6XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7ZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsXCYjMzQ7KTtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTUzLVx0fVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU1LVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTY6XHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgdGhyZWVfcmVnaW9ucywgMywgREFNT05fTUlOX1JFR0lPTl9TWikpIHtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU3LVx0XHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBOVUxMKTtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTU4Olx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3NlY29uZCBkYW1vbl9zZXRfcmVnaW9ucygpIGZhaWxcJiMzNDspO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTktXHR9XG4tLVxubW0vZGFtb24vdmFkZHIuYz0xOTE9c3RhdGljIHZvaWQgX19kYW1vbl92YV9pbml0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjA3LVxubW0vZGFtb24vdmFkZHIuYzoyMDg6XHRkYW1vbl9zZXRfcmVnaW9ucyh0LCByZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjA5LX1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTIyNj1zdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjMzLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vdmFkZHIuYzoyMzQ6XHRcdGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xubW0vZGFtb24vdmFkZHIuYy0yMzUtXHR9XG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTI1LVxuc2FtcGxlcy9kYW1vbi9tdGllci5jOjEyNjpcdHJldCA9IGRhbW9uX3NldF9yZWdpb25zKHRhcmdldCwgXHUwMDI2cmFuZ2UsIDEsIERBTU9OX01JTl9SRUdJT05fU1opO1xuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEyNy1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTI4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZSBpbiBEQU1PTi4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIGZyb20gYGttYWxsb2NgIHRvIGBrdm1hbGxvY2AgZm9yIGByYW5nZXNgIGFsbG9jYXRpb24uIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyYjMzQ7IFNpbmNlIEkgYW0gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIEkga25vdyB0aGlzIGlzIGltcG9ydGFudCwgSSBuZWVkIHRvIHNlZSBpZiBpdCBtZWV0cyB0aGUgY3JpdGVyaWEgZm9yIGZ1enppbmcuCgpJbml0aWFsbHksIGl0IHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCB0byBhdm9pZCBhbGxvY2F0aW9uIGZhaWx1cmUgd2hlbiBoYW5kbGluZyBhIHBvdGVudGlhbGx5IGxhcmdlIG51bWJlciBvZiByZWdpb25zIChgbnJfcmVnaW9uc2ApLiBGdXp6aW5nIHdvdWxkIG1vc3RseSBjb25maXJtIHRoYXQgaXQgZG9lc24mIzM5O3QgY3Jhc2ggYW55bW9yZS4gSG93ZXZlciwgYGt2bWFsbG9jYCAqY2FuKiByZXR1cm4gdm1hbGxvYyYjMzk7ZCBtZW1vcnksIHdoaWNoIGlzIGEga2V5IGRpZmZlcmVuY2UuIFRoYXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkkgYnJpZWZseSBjb25zaWRlcmVkIGlmIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGRvY3VtZW50YXRpb24gbmVlZCB0byBiZSBjb25zaWRlcmVkLiBJIHJldmlld2VkIGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAsIHJlbGV2YW50IGRvY3VtZW50YXRpb24gaW4gYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0YCwgYERvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdGAgYW5kIGBtbS9kYW1vbi9zdGF0LmNgIGZvciBkb2N1bWVudGF0aW9uIGFuZCBtYWNybyBjaGFuZ2VzLiBOb25lIG9mIHRob3NlIHNlZW0gdG8gaW5kaWNhdGUgYSBmdW5jdGlvbmFsIGNoYW5nZS4KClRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3k6CgpgYGBjCi0JcmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwomIzQzOwlyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwouLi4KLQlrZnJlZShyYW5nZXMpOwomIzQzOwlrdmZyZWUocmFuZ2VzKTsKYGBgCgpUaGlzIGNoYW5nZSAqZG9lcyogZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93IGJ5IGFsbG93aW5nIHRoZSBhbGxvY2F0aW9uIHRvIHN1Y2NlZWQgdmlhIHZtYWxsb2MgaW5zdGVhZCBvZiBmYWlsaW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi4KCk5vdywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIGl0IHdvcnRoIGZ1enppbmc/CgpJZiBJIHNheSB5ZXMsIEkgbmVlZCB0byBwcm92aWRlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2Agc2luY2UgaXQgZnVuY3Rpb25hbGx5IGNoYW5nZXMgZXhlY3V0aW9uIGZsb3cuCgpJIHdlbnQgYmFjayB0byBsb29rIGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGFnYWluLiBJdCBkZWFscyB3aXRoIGFsbG9jYXRpb24gb2YgYW4gYXJyYXkgb2YgYHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlYC4gVGhlIHNpemUgb2YgdGhlIGFycmF5IGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiByZWdpb25zLiBJZiB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgaXMgbGFyZ2UsIGBrbWFsbG9jYCBjYW4gZmFpbCwgYnV0IGBrdm1hbGxvY2Agd2lsbCBzdWNjZWVkLiBUaGlzIGlzIGEgYnVnIGZpeCwgYnV0IGEgY2hhbmdlIG9mIHRoaXMgbmF0dXJlIGNvdWxkIHVuY292ZXIgcHJvYmxlbXMgcmVsYXRlZCB0byBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmVnaW9uIGFycmF5LiBJdCB3b3VsZCBhbHNvIGxldCBtZSB0ZXN0IHdoYXQgaGFwcGVucyBpbiBhbiBlZGdlIGNhc2Ugd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgcmVnaW9ucy4KCkkgY29uc2lkZXJlZCB0aGF0IGBkYW1vbl9zZXRfcmVnaW9uc2Agb25seSBpdGVyYXRlcyBvdmVyIHJlZ2lvbnM7IGl0IGRvZXNuJiMzOTt0ICpyZXF1aXJlKiBjb250aWd1b3VzIG1lbW9yeSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY2hhbmdlIHRvIGBrdm1hbGxvY2AgaXMgc29tZXdoYXQgaXNvbGF0ZWQuCgpJZiBJIGRlY2lkZSB0aGlzIGlzIHdvcnRoIGZ1enppbmc6CiogICBgRm9jdXNTeW1ib2xzYDogYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AKKiAgIGBFbmFibGVDb25maWdzYDogYERBTU9OYCwgYERBTU9OX1NZU0ZTYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM4OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGBtbS9kYW1vbi9jb3JlLmNgIGlzIGJlaW5nIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfREFNT05gLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIERhdGEgQWNjZXNzIE1PTml0b3IsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIFRoZW4sIHRoZXJlJiMzOTtzIHRoaXMgbmV3IHRlc3QsIGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAgYWRkZWQgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuICBJdCBzZWVtcyB0byBiZSBhIHRlc3QgdmVyaWZ5aW5nIGEgcmFjZSBjb25kaXRpb24gZml4IHJlbGF0ZWQgdG8gdGhlIGBkYW1vc193YWxrYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBqdXN0IGEgdGVzdCBhZGRpdGlvbiwgbm90IHRvdWNoaW5nIHRoZSBhY3R1YWwgY29yZSBsb2dpYyBpdHNlbGYuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGluY2x1ZGVzIGRvY3VtZW50YXRpb24gdXBkYXRlcywgS2NvbmZpZyBtb2RpZmljYXRpb25zLCBjb21tZW50cywgbG9nZ2luZyBjaGFuZ2VzLCBkZWNvcmF0aXZlIG1vZGlmaWNhdGlvbnMgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gIEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgdGhpcyBhcHBsaWVzLgoKT2theSwgY2hlY2tpbmcgdGhlIGZpbGVzLCBubywgaXQgaW5jbHVkZXMgYSBjaGFuZ2UgZnJvbSBga21hbGxvY19vYmpzYCB0byBga3ZtYWxsb2Nfb2Jqc2AgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEhtbSwgYGttYWxsb2Nfb2Jqc2AgaXMgYSBtYWNybywgSSBzZWUuIFN3aXRjaGluZyB0aGF0IG1hY3JvIHRvIGBrdm1hbGxvY19vYmpzYCBtZWFucyB0aGF0IGl04oCZcyBjaGFuZ2luZyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvciwgdXNpbmcgYHZtYWxsb2NgIGlmIG5lZWRlZCBpbnN0ZWFkIG9mIGJlaW5nIGxpbWl0ZWQgdG8gYGttYWxsb2NgLiBEb2VzIHRoaXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93PyBZZXMsIGFic29sdXRlbHkuIEl0IGFsbG93cyBsYXJnZXIgYWxsb2NhdGlvbnMgdG8gc3VjY2VlZCwgd2hpY2ggY291bGQgcmV2ZWFsIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMuCgpCdXQgaXMgdGhpcyBjaGFuZ2UgcmVhbGx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlICpmdXp6ZWQqPyBJZiBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBzeXprYWxsZXIgd2lsbCBhdHRlbXB0IHRvIGZ1enogYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AsIGJlY2F1c2UgaXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGVudHJ5IHBvaW50IHRvIGdldCB0cmlnZ2VyZWQuIElzIGl0IGEgZ29vZCBpZGVhPyBZZXMsIGJlY2F1c2UgaXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIGxvZ2ljLiAgQWxyaWdodCwgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGlzIHJlYWNoYWJsZS4gWWVwLCB2aWEgc3lzZnMgd3JpdGVzLiBUaGF0IHNob3VsZCBkbyBpdC4gIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgYW5kIHNlZSB3aGF0IHRoYXQgZXhwb3NlcywgYnV0IHRoaXMgaXMgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfY29tbWl0X2lucHV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MjA4Nj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfbmV3X3Rlc3RfY3R4KFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjEwMy0vKlxubW0vZGFtb24vc3lzZnMuYzoyMTA0OiAqIGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCgpIC0gQ29tbWl0IHVzZXIgaW5wdXRzIHRvIGEgcnVubmluZyBrZGFtb25kLlxubW0vZGFtb24vc3lzZnMuYy0yMTA1LSAqIEBrZGFtb25kOlx0VGhlIGtvYmplY3Qgd3JhcHBlciBmb3IgdGhlIGFzc29jaWF0ZWQga2RhbW9uZC5cbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDgtICovXG5tbS9kYW1vbi9zeXNmcy5jOjIxMDk6c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjExMC17XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzUxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzYzLVx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbm1tL2RhbW9uL3N5c2ZzLmM6MjM2NDpcdFx0XHRcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIzNjUtXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4OTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgdGhpcyByZWFjaGFibGU/IFllcywgdGhlIGNoYW5nZSBpcyByZWFjaGFibGUuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbiBsaWVzIGluIHRoZSBga3ZtYWxsb2Nfb2Jqc2AgY2hhbmdlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuIFNpbmNlIHRoZSBjaGFuZ2UgdG8gYGt2bWFsbG9jX29ianNgICpkb2VzKiBhbHRlciBleGVjdXRpb24gZmxvdywgc3BlY2lmaWNhbGx5IGJ5IGludHJvZHVjaW5nIGEgYHZtYWxsb2NgIGZhbGxiYWNrLCBpdCBmYWxscyBvdXRzaWRlIHRoZSBjYXRlZ29yeSBvZiAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlLiYjMzQ7IFRoZSBjaGFuZ2UgaXMgYWxzbyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzLiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgd2l0aCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCBhY2NvcmRpbmcgdG8gdGhlIHByb21wdCwgaWYgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLCBJIG5lZWQgdG8gaWRlbnRpZnkgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gTGV0JiMzOTtzIGdldCB0byBpdC4KClRoZSBwcmltYXJ5IGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGluIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgLiBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEdpdmVuIHRoZSBwcm9tcHQsIEkgbmVlZCB0byBsaXN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIERlc3BpdGUgYmVpbmcgYSBzdGF0aWMgZnVuY3Rpb24sIHN5emthbGxlciAqY2FuKiBmdXp6IGl0IGlmIHJlYWNoYWJsZS4gVGhpcyBmdW5jdGlvbiBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEkmIzM5O2xsIGFkZCBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byBgRm9jdXNTeW1ib2xzYC4gVGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbCBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBsaWtlIGBkYW1vbl9jb21taXRfdGFyZ2V0YCAsIGBkYW1vbl9jb21taXRfY3R4YCBhbmQgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgYnV0IEkmIzM5O2xsIGZvY3VzIG9uIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGZvciB0aGlzIGFuYWx5c2lzLgoKTmV4dCwgSSBtdXN0IGlkZW50aWZ5IHRoZSByZXF1aXJlZCBgQ09ORklHX2Agb3B0aW9ucy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gTG9va2luZyBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlIHdoaWNoIGluY2x1ZGVzIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgLCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX0RBTU9OYCBpcyByZXF1aXJlZC4gVGhlIHN5c2ZzIGludGVyZmFjZSwgYXMgdGhlIHByaW1hcnkgcGF0aCB0byB0aGUgY29kZSwgcmVxdWlyZXMgYENPTkZJR19EQU1PTl9TWVNGU2AsIHRob3VnaCBvdGhlciByZWxhdGVkIHNldHRpbmdzIGFyZSB1c2VkIGxpa2UgYERBTU9OX1JFQ0xBSU1gLiBTbywgSSYjMzk7bGwgbGlzdDoKYERBTU9OYApgREFNT05fU1lTRlNgCmFzIHRoZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZC4KClRoaXMgc2VlbXMgdG8gYWRkcmVzcyB0aGUgcHJvbXB0IHJlcXVpcmVtZW50cyBjb21wbGV0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZS0yLVxubW0vZGFtb24vTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG5tbS9kYW1vbi9NYWtlZmlsZS00LW9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjM3MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgREFNT04gTWFrZWZpbGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgb2JqLXkgOj0gY29yZS5vYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvYmplY3QgZmlsZSBmb3IgdGhlIERBTU9OIG1vZHVsZSwgY2xlYXJseS4gV2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGNvbnRleHQuIFRoaXMgZGlyZWN0b3J5LCBgbW0vZGFtb24vYCwgaXMgb25seSBjb21waWxlZCBhbmQgaW5jbHVkZWQgaWYgYENPTkZJR19EQU1PTmAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCYjMzk7cyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgYW5kIGRlcGVuZGVuY2llcyBoZXJlLiBJdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbi4gR29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgYW5kIHJlbWluZHMgbWUgdG8gYWx3YXlzIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMzQ9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYub1xubW0vTWFrZWZpbGU6MTM1Om9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL1xubW0vTWFrZWZpbGUtMTM2LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgJiM0Mzs9IHVzZXJjb3B5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NzUKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogNjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCBmb3IgREFNT04gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGVzc2VudGlhbDogYENPTkZJR19EQU1PTmAgaXMgZGVmaW5pdGVseSByZXF1aXJlZCDigJMgbm8gcXVlc3Rpb24gdGhlcmUuIE5vdywgdGhlIGBDT05GSUdfREFNT05fU1lTRlNgIHBhcnQuLi4gaXQmIzM5O3MgdGhlIHN0YW5kYXJkIHVzZXItc3BhY2UgaW50ZXJmYWNlLCByaWdodD8gQmVzdCBwcmFjdGljZSBpcyB0byBpbmNsdWRlIGl0IGZvciBmdWxsIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgZm9yIHRlc3RpbmcsIHNvIEkmIzM5O2xsIGVuYWJsZSB0aGF0IHRvby4gU28gZmFyLCB3ZSYjMzk7cmUgYXQgYERBTU9OYCBhbmQgYERBTU9OX1NZU0ZTYC4KClRoZW4sIEkgc2VlIGEgS1VuaXQgdGVzdCBtZW50aW9uZWQ6IGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAuIFRoYXQmIzM5O3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX0RBTU9OX0tVTklUX1RFU1RgLiBUaGUgcHJvbXB0IGRvZXMgYXNrIHRvIGlkZW50aWZ5IG5lY2Vzc2FyeSBjb25maWdzIGZvciB0ZXN0aW5nLiBLVW5pdCBpc24mIzM5O3QgKmRpcmVjdGx5KiBpbnRlZ3JhdGVkIGludG8gc3l6a2FsbGVyLCB3aGljaCBpcyB3aGF0IHdlJiMzOTtyZSBmb2N1c2VkIG9uIGZvciBmdXp6aW5nLCBzbyBpdCYjMzk7cyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBFbmFibGluZyBpdCB3b24mIzM5O3QgaHVydCwgYnV0IHRoZSBwcmltYXJ5IGZ1enppbmcgbWV0aG9kIGRvZXNuJiMzOTt0IHVzZSBpdCwgc28gSSYjMzk7bSBsZWF2aW5nIGBEQU1PTl9LVU5JVF9URVNUYCBvdXQuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcy4gQWgsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIGluIGBtbS9kYW1vbi9zdGF0LmNgOiBgbXNlY3NfdG9famlmZmllc2AgY2hhbmdlZCB0byBgc2Vjc190b19qaWZmaWVzYC4gVGhpcyBpcyB3aXRoaW4gYGRhbW9uX3N0YXRfZGFtb25fY2FsbF9mbmAsIHNvIGBDT05GSUdfREFNT05fU1RBVGAgaXMgcmVsZXZhbnQuIEkgd2lsbCBpbmNsdWRlIHRoaXMuCgpTbywgdGhlIGRlZmluaXRpdmUgbGlzdDogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9TVEFUYC4KClRoZSBwYXRjaCYjMzk7cyBrZXkgY2hhbmdlIGlzIHRoZSBhbGxvY2F0b3Igc3dpdGNoIGluIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2bWFsbG9jX29ianNgLCBlbmFibGluZyBsYXJnZXIgYWxsb2NhdGlvbnMgdGhyb3VnaCBhIHZtYWxsb2MgZmFsbGJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gY29yZSBrZXJuZWwgbG9naWMsIGFuZCBpdCBuZWVkcyB0byBiZSBmdXp6ZWQgdG8gdmVyaWZ5IHRoZSB2bWFsbG9jIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4gVGhlIHBhdGNoIGFsc28gaGFzIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdHlwbyBmaXhlcywgYSBtYWNybyBzaW1wbGlmaWNhdGlvbiBpbiBgZGFtb25fc3RhdC5jYCwgYW5kIGluY2x1ZGVzIHRoZSBLVW5pdCB0ZXN0LCB3aGljaCBpcyBub3QgZXNzZW50aWFsIHRvIGZ1enppbmcsIGFzIHN5emthbGxlciBkb2VzbiYjMzk7dCB1c2UgaXQuCgpUaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgaXMgdGhpczogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgdG8gdXNlIGBrdm1hbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgLCBhbGxvd2luZyBsYXJnZSBhbGxvY2F0aW9ucyB0byBmYWxsIGJhY2sgdG8gdm1hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBmYWxsYmFjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4gT3RoZXIgY2hhbmdlcyBpbmNsdWRlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdHlwbyBmaXhlcywgYSBtYWNybyBzaW1wbGlmaWNhdGlvbiBpbiBgZGFtb25fc3RhdC5jYCwgYW5kIGEgbmV3IEtVbml0IHRlc3QuJiMzNDsKCmBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgdGhlIHJpZ2h0IGNhbGwgaGVyZS4gV2UmIzM5O3ZlIGdvdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIGludm9sdmluZyBhIG1lbW9yeSBhbGxvY2F0b3IuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byB1c2UgYGt2bWFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AsIGFsbG93aW5nIGxhcmdlIGFsbG9jYXRpb25zIHRvIGZhbGwgYmFjayB0byB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiBPdGhlciBjaGFuZ2VzIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCB0eXBvIGZpeGVzLCBhIG1hY3JvIHNpbXBsaWZpY2F0aW9uIGluIGBkYW1vbl9zdGF0LmNgLCBhbmQgYSBuZXcgS1VuaXQgdGVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byB1c2UgYGt2bWFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AsIGFsbG93aW5nIGxhcmdlIGFsbG9jYXRpb25zIHRvIGZhbGwgYmFjayB0byB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiBPdGhlciBjaGFuZ2VzIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCB0eXBvIGZpeGVzLCBhIG1hY3JvIHNpbXBsaWZpY2F0aW9uIGluIGBkYW1vbl9zdGF0LmNgLCBhbmQgYSBuZXcgS1VuaXQgdGVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjUwOjE3LjAzMDc3MDYxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDcyMjk0NzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1NUQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byB1c2UgYGt2bWFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AsIGFsbG93aW5nIGxhcmdlIGFsbG9jYXRpb25zIHRvIGZhbGwgYmFjayB0byB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuIE90aGVyIGNoYW5nZXMgaW5jbHVkZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHR5cG8gZml4ZXMsIGEgbWFjcm8gc2ltcGxpZmljYXRpb24gaW4gYGRhbW9uX3N0YXQuY2AsIGFuZCBhIG5ldyBLVW5pdCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MDoxNy4wMzA3Nzc1MjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDM0OTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI0NWQ3ZmVmM2RmYjIwMDY0M2RiMmMxNDc4YThjNzIwOWE3NmQ2OGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTU6NTA6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbmluZGV4IDAxMTI5NmYxZTdjMjE5Li5iMjY0OWVhMDExZjkzMSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuQEAgLTI0Niw3ICsyNDYsNyBAQCB3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhlIGZpbGVzLlxcbiBVbmRlciBgYG5yX3JlZ2lvbnNgYCBkaXJlY3RvcnksIHR3byBmaWxlcyBmb3IgdGhlIGxvd2VyLWJvdW5kIGFuZCB1cHBlci1ib3VuZFxcbiBvZiBEQU1PTidzIG1vbml0b3JpbmcgcmVnaW9ucyAoYGBtaW5gYCBhbmQgYGBtYXhgYCwgcmVzcGVjdGl2ZWx5KSwgd2hpY2hcXG4gY29udHJvbHMgdGhlIG1vbml0b3Jpbmcgb3ZlcmhlYWQsIGV4aXN0LiAgWW91IGNhbiBzZXQgYW5kIGdldCB0aGUgdmFsdWVzIGJ5XFxuLXdyaXRpbmcgdG8gYW5kIHJhZGluZyBmcm9tIHRoZSBmaWxlcy5cXG4rd3JpdGluZyB0byBhbmQgcmVhZGluZyBmcm9tIHRoZSBmaWxlcy5cXG4gXFxuIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGludGVydmFscyBhbmQgbW9uaXRvcmluZyByZWdpb25zIHJhbmdlLCBwbGVhc2UgcmVmZXJcXG4gdG8gdGhlIERlc2lnbiBkb2N1bWVudCAoOmRvYzpgL21tL2RhbW9uL2Rlc2lnbmApLlxcbkBAIC0yNjQsNyArMjY0LDcgQEAgUGxlYXNlIHJlZmVyIHRvICB0aGUgOnJlZjpgZGVzaWduIGRvY3VtZW50IG9mIHRoZSBmZWF0dXJlXFxuIFxcdTAwM2NkYW1vbl9kZXNpZ25fbW9uaXRvcmluZ19pbnRlcnZhbHNfYXV0b3R1bmluZ1xcdTAwM2VgIGZvciB0aGUgaW50ZXJuYWwgb2YgdGhlIHR1bmluZ1xcbiBtZWNoYW5pc20uICBSZWFkaW5nIGFuZCB3cml0aW5nIHRoZSBmb3VyIGZpbGVzIHVuZGVyIGBgaW50ZXJ2YWxzX2dvYWxgYFxcbiBkaXJlY3Rvcnkgc2hvd3MgYW5kIHVwZGF0ZXMgdGhlIHR1bmluZyBwYXJhbWV0ZXJzIHRoYXQgZGVzY3JpYmVkIGluIHRoZVxcbi06cmVmOmRlc2lnbiBkb2MgXFx1MDAzY2RhbW9uX2Rlc2lnbl9tb25pdG9yaW5nX2ludGVydmFsc19hdXRvdHVuaW5nXFx1MDAzZWAgd2l0aCB0aGUgc2FtZVxcbis6cmVmOmBkZXNpZ24gZG9jIFxcdTAwM2NkYW1vbl9kZXNpZ25fbW9uaXRvcmluZ19pbnRlcnZhbHNfYXV0b3R1bmluZ1xcdTAwM2VgIHdpdGggdGhlIHNhbWVcXG4gbmFtZXMuICBUaGUgdHVuaW5nIHN0YXJ0cyB3aXRoIHRoZSB1c2VyLXNldCBgYHNhbXBsZV91c2BgIGFuZCBgYGFnZ3JfdXNgYC4gIFRoZVxcbiB0dW5pbmctYXBwbGllZCBjdXJyZW50IHZhbHVlcyBvZiB0aGUgdHdvIGludGVydmFscyBjYW4gYmUgcmVhZCBmcm9tIHRoZVxcbiBgYHNhbXBsZV91c2BgIGFuZCBgYGFnZ3JfdXNgYCBmaWxlcyBhZnRlciB3cml0aW5nIGBgdXBkYXRlX3R1bmVkX2ludGVydmFsc2BgIHRvXFxuQEAgLTM3Nyw3ICszNzcsNyBAQCBzY2hlbWVzL1xcdTAwM2NOXFx1MDAzZS9cXG4gSW4gZWFjaCBzY2hlbWUgZGlyZWN0b3J5LCBuaW5lIGRpcmVjdG9yaWVzIChgYGFjY2Vzc19wYXR0ZXJuYGAsIGBgcXVvdGFzYGAsXFxuIGBgd2F0ZXJtYXJrc2BgLCBgYGNvcmVfZmlsdGVyc2BgLCBgYG9wc19maWx0ZXJzYGAsIGBgZmlsdGVyc2BgLCBgYGRlc3RzYGAsXFxuIGBgc3RhdHNgYCwgYW5kIGBgdHJpZWRfcmVnaW9uc2BgKSBhbmQgdGhyZWUgZmlsZXMgKGBgYWN0aW9uYGAsIGBgdGFyZ2V0X25pZGBgXFxuLWFuZCBgYGFwcGx5X2ludGVydmFsYGApIGV4aXN0LlxcbithbmQgYGBhcHBseV9pbnRlcnZhbF91c2BgKSBleGlzdC5cXG4gXFxuIFRoZSBgYGFjdGlvbmBgIGZpbGUgaXMgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIHNjaGVtZSdzIDpyZWY6YGFjdGlvblxcbiBcXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zX2FjdGlvblxcdTAwM2VgLiAgVGhlIGtleXdvcmRzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gYW5kIHJlYWRcXG5AQCAtNzQzLDcgKzc0Myw3IEBAIGNvdW50ZXIpLiAgRmluYWxseSB0aGUgdGVudGggZmllbGQgKGBgWGBgKSBzaG93cyB0aGUgYGBhZ2VgYCBvZiB0aGUgcmVnaW9uXFxuIChyZWZlciB0byA6cmVmOmBkZXNpZ24gXFx1MDAzY2RhbW9uX2Rlc2lnbl9hZ2VfdHJhY2tpbmdcXHUwMDNlYCBmb3IgbW9yZSBkZXRhaWxzIG9mIHRoZVxcbiBjb3VudGVyKS5cXG4gXFxuLUlmIHRoZSBldmVudCB3YXMgYGBkYW1vbjpkYW1vc19iZW9mcmVfYXBwbHlgYCwgdGhlIGBgcGVyZiBzY3JpcHRgYCBvdXRwdXQgd291bGRcXG4rSWYgdGhlIGV2ZW50IHdhcyBgYGRhbW9uOmRhbW9zX2JlZm9yZV9hcHBseWBgLCB0aGUgYGBwZXJmIHNjcmlwdGBgIG91dHB1dCB3b3VsZFxcbiBiZSBzb21ld2hhdCBsaWtlIGJlbG93OjpcXG4gXFxuICAgICBrZGFtb25kLjAgNDcyOTMgWzAwMF0gODA4MDEuMDYwMjE0OiBkYW1vbjpkYW1vc19iZWZvcmVfYXBwbHk6IGN0eF9pZHg9MCBzY2hlbWVfaWR4PTAgdGFyZ2V0X2lkeD0wIG5yX3JlZ2lvbnM9MTEgMTIxOTMyNjA3NDg4LTEzNTEyODcxMTE2ODogMCAxMzZcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuaW5kZXggMmRhN2NhMGQzZDE3YTQuLmMxNmEzYmIyODhkMDc5IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxcbkBAIC04Niw3ICs4Niw3IEBAIFRvIGtub3cgaG93IHVzZXItc3BhY2UgY2FuIGRvIHRoZSBjb25maWd1cmF0aW9uIHZpYSA6cmVmOmBEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXG4gZG9jdW1lbnRhdGlvbi5cXG4gXFxuIFxcbi0gLi4gX2RhbW9uX2Rlc2lnbl92YWRkcl90YXJnZXRfcmVnaW9uc19jb25zdHJ1Y3Rpb246XFxuKy4uIF9kYW1vbl9kZXNpZ25fdmFkZHJfdGFyZ2V0X3JlZ2lvbnNfY29uc3RydWN0aW9uOlxcbiBcXG4gVk1BLWJhc2VkIFRhcmdldCBBZGRyZXNzIFJhbmdlIENvbnN0cnVjdGlvblxcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuQEAgLTkzMCwxMSArOTMwLDExIEBAIGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgdGhlIHVzYWdlIHdvdWxkIGFsc28gbmVlZCB0byBiZSBvcHRpbWl6ZWQgZm9yIHRoZVxcbiBwdXJwb3NlLlxcbiBcXG4gVG8gc3VwcG9ydCBzdWNoIGNhc2VzLCB5ZXQgbW9yZSBEQU1PTiBBUEkgdXNlciBrZXJuZWwgbW9kdWxlcyB0aGF0IHByb3ZpZGUgbW9yZVxcbi1zaW1wbGUgYW5kIG9wdGltaXplZCB1c2VyIHNwYWNlIGludGVyZmFjZXMgYXJlIGF2YWlsYWJsZS4gIEN1cnJlbnRseSwgdHdvXFxuLW1vZHVsZXMgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiBhbmQgTFJVIGxpc3RzIG1hbmlwdWxhdGlvbiBhcmUgcHJvdmlkZWQuICBGb3JcXG4tbW9yZSBkZXRhaWwsIHBsZWFzZSByZWFkIHRoZSB1c2FnZSBkb2N1bWVudHMgZm9yIHRob3NlXFxuLSg6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdGAsIDpkb2M6YC9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltYCBhbmRcXG4tOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuXFxuK3NpbXBsZSBhbmQgb3B0aW1pemVkIHVzZXIgc3BhY2UgaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlLiAgQ3VycmVudGx5LCB0aHJlZVxcbittb2R1bGVzIGZvciBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzLCBwcm9hY3RpdmUgcmVjbGFtYXRpb24sIGFuZCBMUlUgbGlzdHNcXG4rbWFuaXB1bGF0aW9uIGFyZSBwcm92aWRlZC4gIEZvciBtb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3JcXG4rdGhvc2UgKDpkb2M6YC9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0YCwgOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW1gXFxuK2FuZCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnRgKS5cXG4gXFxuIC4uIF9kYW1vbl9kZXNpZ25fc3BlY2lhbF9wdXJwb3NlX21vZHVsZXNfZXhjbHVzaXZpdHk6XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCAwMjcyNTBlNDNjNjZmMi4uNjU4ZTRlMzI5N2IwODYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTEzNTYsMTQgKzEzNTYsMTQgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxcbiBcXHRpZiAoIWkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbitcXHRyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRpZiAoIXJhbmdlcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGkgPSAwO1xcbiBcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24oc3JjX3JlZ2lvbiwgc3JjKVxcbiBcXHRcXHRyYW5nZXNbaSsrXSA9IHNyY19yZWdpb24tXFx1MDAzZWFyO1xcbiBcXHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyhkc3QsIHJhbmdlcywgaSwgc3JjX21pbl9yZWdpb25fc3opO1xcbi1cXHRrZnJlZShyYW5nZXMpO1xcbitcXHRrdmZyZWUocmFuZ2VzKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3RhdC5jIGIvbW0vZGFtb24vc3RhdC5jXFxuaW5kZXggMGUxNGY1YmI4Zjc1ZDkuLmIwNWI2OGY3M2UxMGRlIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N0YXQuY1xcbisrKyBiL21tL2RhbW9uL3N0YXQuY1xcbkBAIC0xMzgsNyArMTM4LDcgQEAgc3RhdGljIGludCBkYW1vbl9zdGF0X2RhbW9uX2NhbGxfZm4odm9pZCAqZGF0YSlcXG4gXFxuIFxcdC8qIGF2b2lkIHVubmVjZXNzYXJpbHkgZnJlcXVlbnQgc3RhdCB1cGRhdGUgKi9cXG4gXFx0aWYgKHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsIGRhbW9uX3N0YXRfbGFzdF9yZWZyZXNoX2ppZmZpZXMgK1xcbi1cXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKDUgKiBNU0VDX1BFUl9TRUMpKSlcXG4rXFx0XFx0XFx0XFx0c2Vjc190b19qaWZmaWVzKDUpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGRhbW9uX3N0YXRfbGFzdF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuaW5kZXggZmNmN2M3ZmFkYjVmZTUuLmM1ZjUxMjRjM2QxZjQ2IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbkBAIC0xNDU2LDYgKzE0NTYsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBWZXJpZnkgdGhhdCBkYW1vc193YWxrKCkgcmVqZWN0cyBuZXcgcmVxdWVzdHMgd2hlblxcbisgKiB3YWxrX2NvbnRyb2xfb2Jzb2xldGUgaXMgc2V0LlxcbisgKlxcbisgKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcXG4rICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXFxcIm1tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVxcXCIpXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIGNvbnRyb2wgPSB7fTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG4rXFx0aWYgKCFjdHgpXFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcIik7XFxuK1xcbitcXHQvKiBTaW11bGF0ZSBzaHV0ZG93biBwaGFzZSAqL1xcbitcXHRjdHgtXFx1MDAzZXdhbGtfY29udHJvbF9vYnNvbGV0ZSA9IHRydWU7XFxuK1xcbitcXHRyZXQgPSBkYW1vc193YWxrKGN0eCwgXFx1MDAyNmNvbnRyb2wpO1xcbitcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgLUVDQU5DRUxFRCk7XFxuK1xcbitcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdGFyZ2V0KSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3JlZ2lvbnMpLFxcbkBAIC0xNDg1LDYgKzE1MTIsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnMpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24pLFxcbitcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfd2Fsa19jb250cm9sX29ic29sZXRlKSxcXG4gXFx0e30sXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL0tjb25maWcgYi9zYW1wbGVzL2RhbW9uL0tjb25maWdcXG5pbmRleCBjYmY5NmZkOGE4YmY5Yy4uMDBiZTNlNmJkZDY1OTkgMTAwNjQ0XFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9LY29uZmlnXFxuKysrIGIvc2FtcGxlcy9kYW1vbi9LY29uZmlnXFxuQEAgLTMxLDcgKzMxLDcgQEAgY29uZmlnIFNBTVBMRV9EQU1PTl9NVElFUlxcbiBcXHRib29sIFxcXCJEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmluZ1xcXCJcXG4gXFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBEQU1PTl9QQUREUlxcbiBcXHRoZWxwXFxuLVxcdCAgVGhwcyBidWlsZHMgREFNT04gc2FtcGxlIG1vZHVsZSBmb3IgbWVtb3J5IHRpZXJpZ24uXFxuK1xcdCAgVGhpcyBidWlsZHMgREFNT04gc2FtcGxlIG1vZHVsZSBmb3IgbWVtb3J5IHRpZXJpbmcuXFxuIFxcbiBcXHQgIFRoZSBtb2R1bGUgYXNzdW1lcyB0aGUgc3lzdGVtIGlzIGNvbnN0cnVjdGVkIHdpdGggdHdvIE5VTUEgbm9kZXMsXFxuIFxcdCAgd2hpY2ggc2VlbXMgYXMgbG9jYWwgYW5kIHJlbW90ZSBub2RlcyB0byBhbGwgQ1BVcy4gIEZvciBleGFtcGxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MDoxNy41NjIyMzQ2NDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDE5MTQ3MDY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1NUQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byB1c2UgYGt2bWFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AsIGFsbG93aW5nIGxhcmdlIGFsbG9jYXRpb25zIHRvIGZhbGwgYmFjayB0byB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuIE90aGVyIGNoYW5nZXMgaW5jbHVkZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHR5cG8gZml4ZXMsIGEgbWFjcm8gc2ltcGxpZmljYXRpb24gaW4gYGRhbW9uX3N0YXQuY2AsIGFuZCBhIG5ldyBLVW5pdCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI0NWQ3ZmVmM2RmYjIwMDY0M2RiMmMxNDc4YThjNzIwOWE3NmQ2OGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNTo1MDoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbmluZGV4IDAxMTI5NmYxZTdjMjE5Li5iMjY0OWVhMDExZjkzMSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTI0Niw3ICsyNDYsNyBAQCB3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhlIGZpbGVzLlxuIFVuZGVyIGBgbnJfcmVnaW9uc2BgIGRpcmVjdG9yeSwgdHdvIGZpbGVzIGZvciB0aGUgbG93ZXItYm91bmQgYW5kIHVwcGVyLWJvdW5kXG4gb2YgREFNT04ncyBtb25pdG9yaW5nIHJlZ2lvbnMgKGBgbWluYGAgYW5kIGBgbWF4YGAsIHJlc3BlY3RpdmVseSksIHdoaWNoXG4gY29udHJvbHMgdGhlIG1vbml0b3Jpbmcgb3ZlcmhlYWQsIGV4aXN0LiAgWW91IGNhbiBzZXQgYW5kIGdldCB0aGUgdmFsdWVzIGJ5XG4td3JpdGluZyB0byBhbmQgcmFkaW5nIGZyb20gdGhlIGZpbGVzLlxuK3dyaXRpbmcgdG8gYW5kIHJlYWRpbmcgZnJvbSB0aGUgZmlsZXMuXG4gXG4gRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgaW50ZXJ2YWxzIGFuZCBtb25pdG9yaW5nIHJlZ2lvbnMgcmFuZ2UsIHBsZWFzZSByZWZlclxuIHRvIHRoZSBEZXNpZ24gZG9jdW1lbnQgKDpkb2M6YC9tbS9kYW1vbi9kZXNpZ25gKS5cbkBAIC0yNjQsNyArMjY0LDcgQEAgUGxlYXNlIHJlZmVyIHRvICB0aGUgOnJlZjpgZGVzaWduIGRvY3VtZW50IG9mIHRoZSBmZWF0dXJlXG4gXHUwMDNjZGFtb25fZGVzaWduX21vbml0b3JpbmdfaW50ZXJ2YWxzX2F1dG90dW5pbmdcdTAwM2VgIGZvciB0aGUgaW50ZXJuYWwgb2YgdGhlIHR1bmluZ1xuIG1lY2hhbmlzbS4gIFJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIGZvdXIgZmlsZXMgdW5kZXIgYGBpbnRlcnZhbHNfZ29hbGBgXG4gZGlyZWN0b3J5IHNob3dzIGFuZCB1cGRhdGVzIHRoZSB0dW5pbmcgcGFyYW1ldGVycyB0aGF0IGRlc2NyaWJlZCBpbiB0aGVcbi06cmVmOmRlc2lnbiBkb2MgXHUwMDNjZGFtb25fZGVzaWduX21vbml0b3JpbmdfaW50ZXJ2YWxzX2F1dG90dW5pbmdcdTAwM2VgIHdpdGggdGhlIHNhbWVcbis6cmVmOmBkZXNpZ24gZG9jIFx1MDAzY2RhbW9uX2Rlc2lnbl9tb25pdG9yaW5nX2ludGVydmFsc19hdXRvdHVuaW5nXHUwMDNlYCB3aXRoIHRoZSBzYW1lXG4gbmFtZXMuICBUaGUgdHVuaW5nIHN0YXJ0cyB3aXRoIHRoZSB1c2VyLXNldCBgYHNhbXBsZV91c2BgIGFuZCBgYGFnZ3JfdXNgYC4gIFRoZVxuIHR1bmluZy1hcHBsaWVkIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSB0d28gaW50ZXJ2YWxzIGNhbiBiZSByZWFkIGZyb20gdGhlXG4gYGBzYW1wbGVfdXNgYCBhbmQgYGBhZ2dyX3VzYGAgZmlsZXMgYWZ0ZXIgd3JpdGluZyBgYHVwZGF0ZV90dW5lZF9pbnRlcnZhbHNgYCB0b1xuQEAgLTM3Nyw3ICszNzcsNyBAQCBzY2hlbWVzL1x1MDAzY05cdTAwM2UvXG4gSW4gZWFjaCBzY2hlbWUgZGlyZWN0b3J5LCBuaW5lIGRpcmVjdG9yaWVzIChgYGFjY2Vzc19wYXR0ZXJuYGAsIGBgcXVvdGFzYGAsXG4gYGB3YXRlcm1hcmtzYGAsIGBgY29yZV9maWx0ZXJzYGAsIGBgb3BzX2ZpbHRlcnNgYCwgYGBmaWx0ZXJzYGAsIGBgZGVzdHNgYCxcbiBgYHN0YXRzYGAsIGFuZCBgYHRyaWVkX3JlZ2lvbnNgYCkgYW5kIHRocmVlIGZpbGVzIChgYGFjdGlvbmBgLCBgYHRhcmdldF9uaWRgYFxuLWFuZCBgYGFwcGx5X2ludGVydmFsYGApIGV4aXN0LlxuK2FuZCBgYGFwcGx5X2ludGVydmFsX3VzYGApIGV4aXN0LlxuIFxuIFRoZSBgYGFjdGlvbmBgIGZpbGUgaXMgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIHNjaGVtZSdzIDpyZWY6YGFjdGlvblxuIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc19hY3Rpb25cdTAwM2VgLiAgVGhlIGtleXdvcmRzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gYW5kIHJlYWRcbkBAIC03NDMsNyArNzQzLDcgQEAgY291bnRlcikuICBGaW5hbGx5IHRoZSB0ZW50aCBmaWVsZCAoYGBYYGApIHNob3dzIHRoZSBgYGFnZWBgIG9mIHRoZSByZWdpb25cbiAocmVmZXIgdG8gOnJlZjpgZGVzaWduIFx1MDAzY2RhbW9uX2Rlc2lnbl9hZ2VfdHJhY2tpbmdcdTAwM2VgIGZvciBtb3JlIGRldGFpbHMgb2YgdGhlXG4gY291bnRlcikuXG4gXG4tSWYgdGhlIGV2ZW50IHdhcyBgYGRhbW9uOmRhbW9zX2Jlb2ZyZV9hcHBseWBgLCB0aGUgYGBwZXJmIHNjcmlwdGBgIG91dHB1dCB3b3VsZFxuK0lmIHRoZSBldmVudCB3YXMgYGBkYW1vbjpkYW1vc19iZWZvcmVfYXBwbHlgYCwgdGhlIGBgcGVyZiBzY3JpcHRgYCBvdXRwdXQgd291bGRcbiBiZSBzb21ld2hhdCBsaWtlIGJlbG93OjpcbiBcbiAgICAga2RhbW9uZC4wIDQ3MjkzIFswMDBdIDgwODAxLjA2MDIxNDogZGFtb246ZGFtb3NfYmVmb3JlX2FwcGx5OiBjdHhfaWR4PTAgc2NoZW1lX2lkeD0wIHRhcmdldF9pZHg9MCBucl9yZWdpb25zPTExIDEyMTkzMjYwNzQ4OC0xMzUxMjg3MTExNjg6IDAgMTM2XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCAyZGE3Y2EwZDNkMTdhNC4uYzE2YTNiYjI4OGQwNzkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTg2LDcgKzg2LDcgQEAgVG8ga25vdyBob3cgdXNlci1zcGFjZSBjYW4gZG8gdGhlIGNvbmZpZ3VyYXRpb24gdmlhIDpyZWY6YERBTU9OIHN5c2ZzIGludGVyZmFjZVxuIGRvY3VtZW50YXRpb24uXG4gXG4gXG4tIC4uIF9kYW1vbl9kZXNpZ25fdmFkZHJfdGFyZ2V0X3JlZ2lvbnNfY29uc3RydWN0aW9uOlxuKy4uIF9kYW1vbl9kZXNpZ25fdmFkZHJfdGFyZ2V0X3JlZ2lvbnNfY29uc3RydWN0aW9uOlxuIFxuIFZNQS1iYXNlZCBUYXJnZXQgQWRkcmVzcyBSYW5nZSBDb25zdHJ1Y3Rpb25cbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtOTMwLDExICs5MzAsMTEgQEAgY29udHJvbCBwYXJhbWV0ZXJzIGZvciB0aGUgdXNhZ2Ugd291bGQgYWxzbyBuZWVkIHRvIGJlIG9wdGltaXplZCBmb3IgdGhlXG4gcHVycG9zZS5cbiBcbiBUbyBzdXBwb3J0IHN1Y2ggY2FzZXMsIHlldCBtb3JlIERBTU9OIEFQSSB1c2VyIGtlcm5lbCBtb2R1bGVzIHRoYXQgcHJvdmlkZSBtb3JlXG4tc2ltcGxlIGFuZCBvcHRpbWl6ZWQgdXNlciBzcGFjZSBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUuICBDdXJyZW50bHksIHR3b1xuLW1vZHVsZXMgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiBhbmQgTFJVIGxpc3RzIG1hbmlwdWxhdGlvbiBhcmUgcHJvdmlkZWQuICBGb3Jcbi1tb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3IgdGhvc2Vcbi0oOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXRgLCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbWAgYW5kXG4tOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuXG4rc2ltcGxlIGFuZCBvcHRpbWl6ZWQgdXNlciBzcGFjZSBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUuICBDdXJyZW50bHksIHRocmVlXG4rbW9kdWxlcyBmb3IgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcywgcHJvYWN0aXZlIHJlY2xhbWF0aW9uLCBhbmQgTFJVIGxpc3RzXG4rbWFuaXB1bGF0aW9uIGFyZSBwcm92aWRlZC4gIEZvciBtb3JlIGRldGFpbCwgcGxlYXNlIHJlYWQgdGhlIHVzYWdlIGRvY3VtZW50cyBmb3Jcbit0aG9zZSAoOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXRgLCA6ZG9jOmAvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbWBcbithbmQgOmRvYzpgL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0YCkuXG4gXG4gLi4gX2RhbW9uX2Rlc2lnbl9zcGVjaWFsX3B1cnBvc2VfbW9kdWxlc19leGNsdXNpdml0eTpcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDAyNzI1MGU0M2M2NmYyLi42NThlNGUzMjk3YjA4NiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTM1NiwxNCArMTM1NiwxNCBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsXG4gXHRpZiAoIWkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuK1x0cmFuZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcmFuZ2VzLCBpLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmICghcmFuZ2VzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGkgPSAwO1xuIFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHNyY19yZWdpb24sIHNyYylcbiBcdFx0cmFuZ2VzW2krK10gPSBzcmNfcmVnaW9uLVx1MDAzZWFyO1xuIFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbi1cdGtmcmVlKHJhbmdlcyk7XG4rXHRrdmZyZWUocmFuZ2VzKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N0YXQuYyBiL21tL2RhbW9uL3N0YXQuY1xuaW5kZXggMGUxNGY1YmI4Zjc1ZDkuLmIwNWI2OGY3M2UxMGRlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3RhdC5jXG4rKysgYi9tbS9kYW1vbi9zdGF0LmNcbkBAIC0xMzgsNyArMTM4LDcgQEAgc3RhdGljIGludCBkYW1vbl9zdGF0X2RhbW9uX2NhbGxfZm4odm9pZCAqZGF0YSlcbiBcbiBcdC8qIGF2b2lkIHVubmVjZXNzYXJpbHkgZnJlcXVlbnQgc3RhdCB1cGRhdGUgKi9cbiBcdGlmICh0aW1lX2JlZm9yZV9lcShqaWZmaWVzLCBkYW1vbl9zdGF0X2xhc3RfcmVmcmVzaF9qaWZmaWVzICtcbi1cdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoNSAqIE1TRUNfUEVSX1NFQykpKVxuK1x0XHRcdFx0c2Vjc190b19qaWZmaWVzKDUpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRkYW1vbl9zdGF0X2xhc3RfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcztcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5jNWY1MTI0YzNkMWY0NiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTQ1Niw2ICsxNDU2LDMzIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XG4gfVxuIFxuKy8qXG4rICogVmVyaWZ5IHRoYXQgZGFtb3Nfd2FsaygpIHJlamVjdHMgbmV3IHJlcXVlc3RzIHdoZW5cbisgKiB3YWxrX2NvbnRyb2xfb2Jzb2xldGUgaXMgc2V0LlxuKyAqXG4rICogVGhpcyB0ZXN0cyB0aGUgaW52YXJpYW50IGludHJvZHVjZWQgYnk6XG4rICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXCJtbS9kYW1vbi9jb3JlOiBmaXggZGFtb3Nfd2FsaygpIHZzIGtkYW1vbmRfZm4oKSBleGl0IHJhY2VcIilcbisgKi9cbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuK1x0c3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCBjb250cm9sID0ge307XG4rXHRpbnQgcmV0O1xuK1xuK1x0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuK1x0aWYgKCFjdHgpXG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJjdHggYWxsb2MgZmFpbFwiKTtcbitcbitcdC8qIFNpbXVsYXRlIHNodXRkb3duIHBoYXNlICovXG4rXHRjdHgtXHUwMDNld2Fsa19jb250cm9sX29ic29sZXRlID0gdHJ1ZTtcbitcbitcdHJldCA9IGRhbW9zX3dhbGsoY3R4LCBcdTAwMjZjb250cm9sKTtcbitcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByZXQsIC1FQ0FOQ0VMRUQpO1xuK1xuK1x0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF90YXJnZXQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3JlZ2lvbnMpLFxuQEAgLTE0ODUsNiArMTUxMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbiksXG4rXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfd2Fsa19jb250cm9sX29ic29sZXRlKSxcbiBcdHt9LFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9LY29uZmlnIGIvc2FtcGxlcy9kYW1vbi9LY29uZmlnXG5pbmRleCBjYmY5NmZkOGE4YmY5Yy4uMDBiZTNlNmJkZDY1OTkgMTAwNjQ0XG4tLS0gYS9zYW1wbGVzL2RhbW9uL0tjb25maWdcbisrKyBiL3NhbXBsZXMvZGFtb24vS2NvbmZpZ1xuQEAgLTMxLDcgKzMxLDcgQEAgY29uZmlnIFNBTVBMRV9EQU1PTl9NVElFUlxuIFx0Ym9vbCBcIkRBTU9OIHNhbXBsZSBtb2R1bGUgZm9yIG1lbW9yeSB0aWVyaW5nXCJcbiBcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IERBTU9OX1BBRERSXG4gXHRoZWxwXG4tXHQgIFRocHMgYnVpbGRzIERBTU9OIHNhbXBsZSBtb2R1bGUgZm9yIG1lbW9yeSB0aWVyaWduLlxuK1x0ICBUaGlzIGJ1aWxkcyBEQU1PTiBzYW1wbGUgbW9kdWxlIGZvciBtZW1vcnkgdGllcmluZy5cbiBcbiBcdCAgVGhlIG1vZHVsZSBhc3N1bWVzIHRoZSBzeXN0ZW0gaXMgY29uc3RydWN0ZWQgd2l0aCB0d28gTlVNQSBub2RlcyxcbiBcdCAgd2hpY2ggc2VlbXMgYXMgbG9jYWwgYW5kIHJlbW90ZSBub2RlcyB0byBhbGwgQ1BVcy4gIEZvciBleGFtcGxlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTA6MTcuNTYyMjM4NjM4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM0MDMxNTQ0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggUmV2aWV3OiBJbml0aWFsIFRob3VnaHRzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLiBTZWVtcyBsaWtlIGl0IHRvdWNoZXMgYSBmZXcgYXJlYXM6IGRvY3VtZW50YXRpb24sIGNvcmUgY29kZSwgc29tZSBzdGF0cywgYW5kIGEgdGVzdCBmaWxlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzLlxuXG5SaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSBjaGFuZ2UgaW4gYG1tL2RhbW9uL2NvcmUuY2AuICBUaGV5J3ZlIHN3YXBwZWQgYGttYWxsb2Nfb2Jqc2AgZm9yIGBrdm1hbGxvY19vYmpzYCBhbmQgY29ycmVzcG9uZGluZ2x5LCBga2ZyZWVgIHRvIGBrdmZyZWVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgYWxsb2NhdG9yIGNoYW5nZS5cIiAgQnV0IHdhaXQsIHdoYXQncyBga21hbGxvY19vYmpzYD8gSXMgaXQgZXZlbiBhIHJlYWwgZnVuY3Rpb24/ICBBaCwgaXQncyBub3QgYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24sIGl0IGlzIHByb2JhYmx5IGEgbWFjcm8uIFNvIGl0IGRvZXNuJ3QgbWF0dGVyLCBpdCBpcyBhbiBhbGxvY2F0b3IgY2hhbmdlLiBPaywgbm93IEknbSBjdXJpb3VzLCBga21hbGxvY19vYmpzYCBtdXN0IGJlIGEgd3JhcHBlciBmb3Igc29tZXRoaW5nIGVsc2UuIElzIGl0IGBrbWFsbG9jX2FycmF5YD8gTGV0IG1lIGNoZWNrIHRoZSBjb2RlLi4uIFllcCwgZG9lc24ndCBtYXR0ZXIsIGl0J3MgYW4gYWxsb2NhdG9yIGNoYW5nZS5cblxuTW92aW5nIG9uLCBgbW0vZGFtb24vc3RhdC5jYCBoYXMgYSBzaW1wbGUgY2hhbmdlOiBgbXNlY3NfdG9famlmZmllcyg1ICogTVNFQ19QRVJfU0VDKWAgYmVjb21lcyBgc2Vjc190b19qaWZmaWVzKDUpYC4gIENvbXBsZXRlbHkgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIGp1c3QgYSBkaWZmZXJlbnQgd2F5IG9mIGV4cHJlc3NpbmcgdGhlIHNhbWUgdGltZSBpbnRlcnZhbC4gIE5vIGJpZyBkZWFsIHRoZXJlLlxuXG5UaGVuLCB0aGVyZSdzIGEgbmV3IEtVbml0IHRlc3QgYWRkZWQgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEZpbmUsIG1vcmUgdGVzdHMgYXJlIGFsd2F5cyBnb29kLlxuXG5TbywgdGhlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhbGx5IGJvaWxzIGRvd24gdG8gc3dhcHBpbmcgdGhlIGFsbG9jYXRvciBpbiBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYC4gQnV0IHdhaXQsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCB3YXJyYW50cyBmdXp6aW5nPyBDaGFuZ2luZyBmcm9tIGBrbWFsbG9jYCB0byBga3ZtYWxsb2NgIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBjYW4gYWxsb3cgYWxsb2NhdGlvbiBmYWlsdXJlcyB0byBiZSBwcmV2ZW50ZWQgZm9yIGxhcmdlIGFycmF5cy4gQWNjb3JkaW5nIHRvIHRoZSBwcm9tcHQgaXQgc2F5cywgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCJcblRoaXMgYWxsb3dzIGxhcmdlciBhbGxvY2F0aW9ucyB0byBzdWNjZWVkIGJ5IGZhbGxpbmcgYmFjayB0byB2bWFsbG9jLiBZZXMsIGl0IGFmZmVjdHMgZXhlY3V0aW9uIGZsb3cuIFllcywgaXQgaXMgd29ydGggZnV6emluZy5cbk9rLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0IG9mIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIG9uZSBtb3JlIHRpbWUsIGp1c3QgdG8gYmUgc3VyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTA6MzAuOTY1Mzk4NTk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDc3NTg4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMzI4PXN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9udGhfdGFyZ2V0KGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM0Ni0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTM0NzpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsXFxubW0vZGFtb24vY29yZS5jLTEzNDgtXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqc3JjLCB1bnNpZ25lZCBsb25nIHNyY19taW5fcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEzNzA9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0KFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNzYtXFxubW0vZGFtb24vY29yZS5jOjEzNzc6XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKGRzdCwgc3JjLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTEzNzgtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTM3PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE1My1cXHR9XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExNTQ6XFx0ZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKGRzdF90YXJnZXQsIHNyY190YXJnZXQsIDEpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTU1LVxcdGkgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MDozMy45MTMxNjkwNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjM2ODY1MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyB0aGUgRnVuY3Rpb24gQ2FsbCBIaWVyYXJjaHkqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGlzIGFjdHVhbGx5ICpkb2luZyouIFRoZSBjb2RlJ3Mgb3JnYW5pemVkLCBzbyBJIGNhbiBzdGFydCBieSB0cmFjaW5nIGl0cyBjYWxsaW5nIGZ1bmN0aW9ucy4gSXQgYXBwZWFycyB0byBiZSBjYWxsZWQgYnkgYGRhbW9uX2NvbW1pdF90YXJnZXRgLiBBbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRgLCBpbiB0dXJuLCBpcyB0cmlnZ2VyZWQgYnkgYGRhbW9uX2NvbW1pdF9jdHhgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgbGlrZWx5IHJlcHJlc2VudHMgYSAqbG93ZXItbGV2ZWwsIG1vcmUgZ3JhbnVsYXIqIG9wZXJhdGlvbiB3aXRoaW4gYSBsYXJnZXIgcHJvY2Vzcywgc2luY2UgaXQncyBuZXN0ZWQgZGVlcCB3aXRoaW4gdGhlIGNhbGwgc3RhY2suIFRoZSBcInJlZ2lvbnNcIiBpbiB0aGUgbmFtZSBhcmUgdGhlIGtleS4gSXQgbG9va3MgbGlrZSBgZGFtb25fY29tbWl0X3RhcmdldGAgaGFuZGxlcyBzb21lIGxhcmdlci1zY29wZWQgY29tbWl0bWVudCB0YXNrLCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgaXMgd2hhdCdzIGRlYWxpbmcgd2l0aCB0aGUgYWN0dWFsIG1lbW9yeSByZWdpb25zLCB0aGUgc3BlY2lmaWNzLCB0aGUgbWludXRpYWUuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgbGVhZGluZyBtZSB0byB0aGlzIGNvbmNsdXNpb24uIExldCdzIGRlbHZlIGluIHRvIHVuZGVyc3RhbmQgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjUwOjQxLjU1MDAzNzE1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg2OTYxMTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2NvbW1pdF9jdHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTg1Mj1zdHJ1Y3QgZGFtb25fY3R4IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC04ODgtXFx0ICogaW5kaWNhdGUgaWYgdGhpcyBtYXkgYmUgY29ycnVwdGVkLiAgQ3VycmVudG9ubHkgdGhpcyBpcyBzZXQgb25seSBmb3JcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODg5OlxcdCAqIGRhbW9uX2NvbW1pdF9jdHgoKSBmYWlsdXJlLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaC04OTAtXFx0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA1Mj12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1My1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLCBzc2l6ZV90IG5yX3NjaGVtZXMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDU0OmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKm9sZF9jdHgsIHN0cnVjdCBkYW1vbl9jdHggKm5ld19jdHgpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDU1LWludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTUyNz1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU1OC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTU1OTogKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cXG5tbS9kYW1vbi9jb3JlLmMtMTU2MC0gKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTcwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxNTcxOmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNTcyLXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDAtXFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDE6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDItb3V0Olxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI2Ny1cXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjY4OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNjktb3V0Olxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDg2PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwOTQtXFx0XFx0cmV0dXJuIE5VTEw7XFxubW0vZGFtb24vc3lzZnMuYzoyMDk1OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHJ1bm5pbmdfY3R4KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIwOTYtXFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTA5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMjgtXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjEyOTpcXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBwYXJhbV9jdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjEzMC1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjEzMS1cXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9zeXNmcy5jOjIxMzI6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTMzLW91dDpcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTc5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE5Mi1cXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk2O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTkzOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExOTQtXFx0c3JjLVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTE5NTpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIC1FSU5WQUwpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTk2LVxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExOTctXFx0c3JjLVxcdTAwM2VwYXVzZSA9IHRydWU7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExOTg6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAwKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE5OS1cXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkc3QtXFx1MDAzZXBhdXNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTA6NDQuMjM3MDExNDk0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5MTY4NDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkaWZmIHJlbGF0ZWQgdG8gREFNT04uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGlzIHJlYWNoYWJsZSBmcm9tIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCB3aGljaCBpbiB0dXJuIGdldHMgdHJpZ2dlcmVkIGJ5IHN5c2ZzIHdyaXRlcy4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBpdCBnaXZlcyBhIHBvdGVudGlhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93LlxuXG5UaGVuIEkgbm90aWNlZCB0aGVyZSdzIGEgbmV3IHRlc3QgYWRkZWQsIGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAsIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIHRlc3QgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIGBkYW1vc193YWxrKClgLCBiZWNhdXNlIHRoZSBwYXRjaCBzZWVtcyB0byBoYXZlIGFkZGVkIHRoaXMgdGVzdCB3aGljaCB0ZXN0cyBgZGFtb3Nfd2FsaygpYC4gSSBzaG91bGQgcHJvYmFibHkgZXhhbWluZSB0aGF0IHRlc3QgaW4gbW9yZSBkZXRhaWwgbGF0ZXIuXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBoYXMgY2hhbmdlZD8gSSBuZWVkIHRvIGdvIGJhY2sgb3ZlciB0aGUgZGlmZiBtb3JlIGNhcmVmdWxseS4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpdCBsb29rcyBsaWtlIGBrbWFsbG9jX29ianNgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGt2bWFsbG9jX29ianNgIGFuZCBjb3JyZXNwb25kaW5nIGBrZnJlZWAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBga3ZmcmVlYCBpbiBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYC4gIGBrbWFsbG9jX29ianNgIGRvZXNuJ3Qgc2VlbSBmYW1pbGlhciwgSSdtIHRoaW5raW5nIGl0J3MgcHJvYmFibHkgYSBtYWNybyBvciBoZWxwZXIgZGVmaW5lZCB3aXRoaW4gREFNT04gaXRzZWxmLCBtYXliZSBpbiBgbW0vZGFtb24vY29yZS5jYCBvciBzb21ldGhpbmcgaW5jbHVkZWQgbGlrZSBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gIExldCBtZSB2ZXJpZnkgdGhpcy4uLndhaXQsIEkgdGhpbmsgYGttYWxsb2NfYXJyYXlgICppcyogYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24uIFNvIGBrbWFsbG9jX29ianNgIG11c3QgYmUgYSBEQU1PTi1zcGVjaWZpYyBhYnN0cmFjdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NzMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTA6NTEuNTI4Njk5MzI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NjI2ODc1MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21hbGxvY19vYmpzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMzY2NiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1OD1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYW4gYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2MS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NjI6XFx0cCA9IGttYWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDEtXFx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMjpcXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDMtXFx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG4tLVxcbmFyY2gvYXJtL21tL3BnZC5jLTE5LSNpZmRlZiBDT05GSUdfQVJNX0xQQUVcXG5hcmNoL2FybS9tbS9wZ2QuYzoyMDojZGVmaW5lIF9wZ2RfYWxsb2MobW0pXFx0XFx0a21hbGxvY19vYmpzKHBnZF90LCBQVFJTX1BFUl9QR0QsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKVxcbmFyY2gvYXJtL21tL3BnZC5jLTIxLSNkZWZpbmUgX3BnZF9mcmVlKG1tLCBwZ2QpXFx0a2ZyZWUocGdkKVxcbi0tXFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM9NzY0PXN0YXRpYyBpbnQgY292ZXJhZ2Vfc3RhcnQoY29uc3QgdW5pb24gZGVjb2RlX2l0ZW0gKnRhYmxlKVxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2NS17XFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM6NzY2OlxcdGNvdmVyYWdlLmJhc2UgPSBrbWFsbG9jX29ianMoc3RydWN0IGNvdmVyYWdlX2VudHJ5LFxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2Ny1cXHRcXHRcXHRcXHQgICAgIE1BWF9DT1ZFUkFHRV9FTlRSSUVTKTtcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTM5MT11MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpXFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTQtXFx0ICovXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6NDE1OlxcdGRlc2NfYmFzZSA9ICh1MzIpIGttYWxsb2Nfb2JqcyhhdTF4X2RkbWFfZGVzY190LCBlbnRyaWVzLFxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNi1cXHRcXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTUzMj1hZGRfc3lzdGVtX21hcF9hZGRyZXNzZXMoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldiwgaW50IG51bV9hZGRycywgXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTM4LVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzo1Mzk6XFx0ZGV2LVxcdTAwM2VhZGRyID0ga21hbGxvY19vYmpzKCpkZXYtXFx1MDAzZWFkZHIsIG51bV9hZGRycyk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTU0MC1cXHRpZighZGV2LVxcdTAwM2VhZGRyKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9NzMxPWludCBrdm1fdmNwdV9pb2N0bF9jb25maWdfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzQtXFx0XFx0ICAgIGNmZy1cXHUwMDNlYXJyYXkgLyBQQUdFX1NJWkU7XFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjc3NTpcXHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3Ni1cXHRpZiAoIXBhZ2VzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTg5OD1pbnQga3ZtcHBjX2U1MDBfdGxiX2luaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjkxNTpcXHR2Y3B1X2U1MDAtXFx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVxcdTAwM2VndGxiX2FyY2gsXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNi1cXHRcXHRcXHRcXHRcXHQgICAgS1ZNX0U1MDBfVExCMF9TSVpFICsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYz00NT1zdGF0aWMgaW50IGdyb3cocmhfaW5mb190ICogaW5mbywgaW50IG1heF9ibG9ja3MpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTYtXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jOjU3OlxcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01OC1cXHRpZiAoYmxvY2sgPT0gTlVMTClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz03NTU9c3RhdGljIGludCBjcmVhdGVfZXZlbnRzX2Zyb21fY2F0YWxvZyhzdHJ1Y3QgYXR0cmlidXRlICoqKmV2ZW50c18sXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MDk6XFx0ZXZlbnRzID0ga21hbGxvY19vYmpzKCpldmVudHMsIGF0dHJfbWF4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxMC1cXHRpZiAoIWV2ZW50cykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1OlxcdGV2ZW50X2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9kZXNjcywgZXZlbnRfaWR4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNi1cXHRpZiAoIWV2ZW50X2Rlc2NzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIwLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MjE6XFx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cXHRpZiAoIWV2ZW50X2xvbmdfZGVzY3MpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTUzLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0OlxcdHBwYzR4eF9oc3RhX21zaS5pcnFfbWFwID0ga21hbGxvY19vYmpzKGludCwgaXJxX2NvdW50KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1NS1cXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM9MTIwPXN0YXRpYyBpbnQgcHNlcmllc19wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3ZmcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDMtXFx0cGRuID0gcGNpX2dldF9wZG4ocGRldik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcXHRwZG4tXFx1MDAzZXBlX251bV9tYXAgPSBrbWFsbG9jX29ianMoKnBkbi1cXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0NS1cXHRpZiAoIXBkbi1cXHUwMDNlcGVfbnVtX21hcClcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jPTE1NDk9dm9pZCBfX2luaXQgbXBpY19pbml0KHN0cnVjdCBtcGljICptcGljKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0MS1cXHQvKiBhbGxvY2F0ZSBtZW1vcnkgdG8gc2F2ZSBtcGljIHN0YXRlICovXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcXHRtcGljLVxcdTAwM2VzYXZlX2RhdGEgPSBrbWFsbG9jX29ianMoKm1waWMtXFx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cXHUwMDNlbnVtX3NvdXJjZXMpO1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDMtXFx0QlVHX09OKG1waWMtXFx1MDAzZXNhdmVfZGF0YSA9PSBOVUxMKTtcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0zMD1zdGF0aWMgdm9pZCAqZGlhZzBjX3N0b3JlKHVuc2lnbmVkIGludCAqY291bnQpXFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMzctXFx0Y3B1X2NvdW50ID0gbnVtX29ubGluZV9jcHVzKCk7XFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jOjM4OlxcdGNwdV92ZWMgPSBrbWFsbG9jX29ianMoKmNwdV92ZWMsIG51bV9wb3NzaWJsZV9jcHVzKCkpO1xcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0zOS1cXHRpZiAoIWNwdV92ZWMpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaD0xOTA9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWRhbF9idWZmZXIgKippZGFsX2J1ZmZlcl9hcnJheV9hbGxvYyhzaXplX3Qgc2l6ZSwgaW50IHBhZ2Vfb3JkZXIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaC0xOTctXFx0Y291bnQgPSAoc2l6ZSArIENDV19NQVhfQllURV9DT1VOVCAtIDEpIC8gQ0NXX01BWF9CWVRFX0NPVU5UO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oOjE5ODpcXHRpYnMgPSBrbWFsbG9jX29ianMoKmlicywgY291bnQgKyAxKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaC0xOTktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYz0yNjY9c3RhdGljIGRlYnVnX2VudHJ5X3QgKioqZGVidWdfYXJlYXNfYWxsb2MoaW50IHBhZ2VzX3Blcl9hcmVhLCBpbnQgbnJfYXJlYXMpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjcwLVxcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzoyNzE6XFx0YXJlYXMgPSBrbWFsbG9jX29ianMoZGVidWdfZW50cnlfdCAqKiwgbnJfYXJlYXMpO1xcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy0yNzItXFx0aWYgKCFhcmVhcylcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy0yNzUtXFx0XFx0LyogR0ZQX05PV0FSTiB0byBhdm9pZCB1c2VyIHRyaWdnZXJhYmxlIFdBUk4sIHdlIGhhbmRsZSBmYWlscyAqL1xcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzoyNzY6XFx0XFx0YXJlYXNbaV0gPSBrbWFsbG9jX29ianMoZGVidWdfZW50cnlfdCAqLCBwYWdlc19wZXJfYXJlYSxcXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjc3LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM9OTY0PXN0YXRpYyBfX2luaXQgc3RydWN0IGF0dHJpYnV0ZSAqKm1lcmdlX2F0dHIoc3RydWN0IGF0dHJpYnV0ZSAqKmEsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfY3B1bV9jZl9ldmVudHMuYy05NzgtXFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM6OTc5OlxcdG5ldyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYXR0cmlidXRlICosIGopO1xcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9jcHVtX2NmX2V2ZW50cy5jLTk4MC1cXHRpZiAoIW5ldylcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYz0xMDk2PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICoqIF9faW5pdCBhdHRyX2V2ZW50X2luaXQoc3RydWN0IHBhaV9wbXUgKnApXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmMtMTEwMS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM6MTEwMjpcXHRhdHRycyA9IGttYWxsb2Nfb2JqcygqYXR0cnMsIG1pbl9hdHRyICsgMSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0xMTAzLVxcdGlmICghYXR0cnMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9MjAzPWludCBrdm1fczM5MF9pbXBvcnRfYnBfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjM0LVxcdGlmIChucl93cCBcXHUwMDNlIDApIHtcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MjM1OlxcdFxcdHdwX2luZm8gPSBrbWFsbG9jX29ianMoKndwX2luZm8sIG5yX3dwLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yMzYtXFx0XFx0aWYgKCF3cF9pbmZvKSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjQxLVxcdGlmIChucl9icCBcXHUwMDNlIDApIHtcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MjQyOlxcdFxcdGJwX2luZm8gPSBrbWFsbG9jX29ianMoKmJwX2luZm8sIG5yX2JwLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNDMtXFx0XFx0aWYgKCFicF9pbmZvKSB7XFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYz02MjU9U1lTQ0FMTF9ERUZJTkU1KHV0cmFwX2luc3RhbGwsIHV0cmFwX2VudHJ5X3QsIHR5cGUsXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYy02NTktXFx0XFx0XFx0Y3VycmVudF90aHJlYWRfaW5mbygpLVxcdTAwM2V1dHJhcHMgPVxcbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jOjY2MDpcXHRcXHRcXHRcXHRrbWFsbG9jX29ianMobG9uZywgVVRfVFJBUF9JTlNUUlVDVElPTl8zMSArIDEpO1xcbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jLTY2MS1cXHRcXHRcXHRpZiAoIWN1cnJlbnRfdGhyZWFkX2luZm8oKS1cXHUwMDNldXRyYXBzKSB7XFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHViZF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYy0xMDcxLVxcbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jOjEwNzI6XFx0aXJxX3JlcV9idWZmZXIgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvX3RocmVhZF9yZXEgKixcXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYy0xMDczLVxcdFxcdFxcdFxcdCAgICAgIFVCRF9SRVFfQlVGRkVSX1NJWkUpO1xcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3OS1cXHR9XFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmM6MTA4MDpcXHRpb19yZXFfYnVmZmVyID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb190aHJlYWRfcmVxICosXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA4MS1cXHRcXHRcXHRcXHQgICAgIFVCRF9SRVFfQlVGRkVSX1NJWkUpO1xcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM9NTA3PXN0YXRpYyBzdHJ1Y3QgdmVjdG9yX3F1ZXVlICpjcmVhdGVfcXVldWUoXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYy01NDYtXFx0XFx0aWYgKHZwLVxcdTAwM2VoZWFkZXJfc2l6ZSBcXHUwMDNlIDApXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM6NTQ3OlxcdFxcdFxcdGlvdiA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW92ZWMsIDMgKyBudW1fZXh0cmFfZnJhZ3MpO1xcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jLTU0OC1cXHRcXHRlbHNlXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM6NTQ5OlxcdFxcdFxcdGlvdiA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW92ZWMsIDIgKyBudW1fZXh0cmFfZnJhZ3MpO1xcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jLTU1MC1cXHRcXHRpZiAoaW92ID09IE5VTEwpXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdmZpb19rZXJuLmM9NDg0PXN0YXRpYyB2b2lkIHVtbF92ZmlvX29wZW5fZGV2aWNlKHN0cnVjdCB1bWxfdmZpb19kZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvdW0vZHJpdmVycy92ZmlvX2tlcm4uYy01MTYtXFxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jOjUxNzpcXHRkZXYtXFx1MDAzZWludHJfY3R4ID0ga21hbGxvY19vYmpzKHN0cnVjdCB1bWxfdmZpb19pbnRyX2N0eCxcXG5hcmNoL3VtL2RyaXZlcnMvdmZpb19rZXJuLmMtNTE4LVxcdFxcdFxcdFxcdCAgICAgZGV2LVxcdTAwM2V1ZGV2LmlycV9jb3VudCk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9Nzk3PXN0YXRpYyBib29sIF9faW5pdCBzZ3hfcGFnZV9jYWNoZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtODAzLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo4MDQ6XFx0c2d4X251bWFfbm9kZXMgPSBrbWFsbG9jX29ianMoKnNneF9udW1hX25vZGVzLCBudW1fcG9zc2libGVfbm9kZXMoKSk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgwNS1cXHRpZiAoIXNneF9udW1hX25vZGVzKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jPTMyNz1zdGF0aWMgaW50IF9faW5pdCBjcmVhdGVfc2V0dXBfZGF0YV9ub2RlcyhzdHJ1Y3Qga29iamVjdCAqcGFyZW50KVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jLTM0Ni1cXG5hcmNoL3g4Ni9rZXJuZWwva3N5c2ZzLmM6MzQ3OlxcdGtvYmpwID0ga21hbGxvY19vYmpzKCprb2JqcCwgbnIpO1xcbmFyY2gveDg2L2tlcm5lbC9rc3lzZnMuYy0zNDgtXFx0aWYgKCFrb2JqcCkge1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTE0NzE9c3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE1MTYtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE1MTc6XFx0XFx0cG9ydHMgPSBrbWFsbG9jX29ianMoKnBvcnRzLCBzY2hlZF9wb2xsLm5yX3BvcnRzKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTUxOC1cXHRcXHRpZiAoIXBvcnRzKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjIwMz1zdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjIxOC1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MjIxOTpcXHRhbGxfZXZ0Y2huZmRzID0ga21hbGxvY19vYmpzKHN0cnVjdCBldnRjaG5mZCAqLCBuKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjIyMC1cXHRpZiAoIWFsbF9ldnRjaG5mZHMpIHtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jPTI1MjE9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI1MzMtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MjUzNDpcXHRhZGRycyA9IGttYWxsb2Nfb2JqcygqYWRkcnMsIHByb2ctXFx1MDAzZWxlbik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjUzNS1cXHRpZiAoIWFkZHJzKVxcbi0tXFxuYXJjaC94ODYvcG93ZXIvY3B1LmM9Mzg4PXN0YXRpYyBpbnQgbXNyX2J1aWxkX2NvbnRleHQoY29uc3QgdTMyICptc3JfaWQsIGNvbnN0IGludCBudW0pXFxuLS1cXG5hcmNoL3g4Ni9wb3dlci9jcHUuYy0zOTYtXFxuYXJjaC94ODYvcG93ZXIvY3B1LmM6Mzk3OlxcdG1zcl9hcnJheSA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2F2ZWRfbXNyLCB0b3RhbF9udW0pO1xcbmFyY2gveDg2L3Bvd2VyL2NwdS5jLTM5OC1cXHRpZiAoIW1zcl9hcnJheSkge1xcbi0tXFxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmM9MTAyPXN0YXRpYyBpbnQgYXJjaF9nbnR0YWJfdmFsbG9jKHN0cnVjdCBnbnR0YWJfdm1fYXJlYSAqYXJlYSwgdW5zaWduZWQgbnJfZnJhbWVzKVxcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jLTEwMy17XFxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmM6MTA0OlxcdGFyZWEtXFx1MDAzZXB0ZXMgPSBrbWFsbG9jX29ianMoKmFyZWEtXFx1MDAzZXB0ZXMsIG5yX2ZyYW1lcyk7XFxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMtMTA1LVxcdGlmIChhcmVhLVxcdTAwM2VwdGVzID09IE5VTEwpXFxuLS1cXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYz0zMDg9c3RhdGljIGludCBfX2luaXQgc2ltZGlza19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYy0zMjItXFxuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmM6MzIzOlxcdHNkZGV2ID0ga21hbGxvY19vYmpzKCpzZGRldiwgc2ltZGlza19jb3VudCk7XFxuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmMtMzI0LVxcdGlmIChzZGRldiA9PSBOVUxMKVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz01Nzg9c3RhdGljIGJvb2wgYmZxcV9yZXF1ZXN0X292ZXJfbGltaXQoc3RydWN0IGJmcV9kYXRhICpiZnFkLFxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MDgtXFx0XFx0XFx0a2ZyZWUoZW50aXRpZXMpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjA5OlxcdFxcdGVudGl0aWVzID0ga21hbGxvY19vYmpzKCplbnRpdGllcywgZGVwdGgsIEdGUF9OT0lPKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxMC1cXHRcXHRpZiAoIWVudGl0aWVzKVxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYz0xMDA9YmxrX3N0YXRfYWxsb2NfY2FsbGJhY2sodm9pZCAoKnRpbWVyX2ZuKShzdHJ1Y3QgYmxrX3N0YXRfY2FsbGJhY2sgKiksXFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTEwOS1cXG5ibG9jay9ibGstc3RhdC5jOjExMDpcXHRjYi1cXHUwMDNlc3RhdCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYmxrX3JxX3N0YXQsIGJ1Y2tldHMpO1xcbmJsb2NrL2Jsay1zdGF0LmMtMTExLVxcdGlmICghY2ItXFx1MDAzZXN0YXQpIHtcXG4tLVxcbmJsb2NrL2ZvcHMuYz01NT1zdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmJsb2NrL2ZvcHMuYy02Ny1cXHRlbHNlIHtcXG5ibG9jay9mb3BzLmM6Njg6XFx0XFx0dmVjcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYmlvX3ZlYywgbnJfcGFnZXMpO1xcbmJsb2NrL2ZvcHMuYy02OS1cXHRcXHRpZiAoIXZlY3MpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTM1MT1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdG9jYmxvY2tzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM2NC1cXHR0YlswXSA9IFxcdTAwMjZsZGItXFx1MDAzZXRvYztcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM2NTpcXHR0YlsxXSA9IGttYWxsb2Nfb2JqcygqdGJbMV0sIDMpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY2LVxcdGlmICghdGJbMV0pIHtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM9MTQwNz1zdGF0aWMgaW50IGhsX2NzX2NvcHlfY2h1bmtfYXJyYXkoc3RydWN0IGhsX2RldmljZSAqaGRldixcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmMtMTQyMi1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jOjE0MjM6XFx0KmNzX2NodW5rX2FycmF5ID0ga21hbGxvY19vYmpzKCoqY3NfY2h1bmtfYXJyYXksIG51bV9jaHVua3MsIEdGUF9BVE9NSUMpO1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmMtMTQyNC1cXHRpZiAoISpjc19jaHVua19hcnJheSlcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jOjE0MjU6XFx0XFx0KmNzX2NodW5rX2FycmF5ID0ga21hbGxvY19vYmpzKCoqY3NfY2h1bmtfYXJyYXksIG51bV9jaHVua3MpO1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmMtMTQyNi1cXHRpZiAoISpjc19jaHVua19hcnJheSkge1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYz0zMDA1PXN0YXRpYyBpbnQgaGxfbXVsdGlfY3Nfd2FpdF9pb2N0bChzdHJ1Y3QgaGxfZnByaXYgKmhwcml2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0zMDUzLVxcdC8qIGFsbG9jYXRlIGFycmF5IGZvciB0aGUgZmVuY2VzICovXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYzozMDU0OlxcdGZlbmNlX2FyciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxfZmVuY2UgKiwgc2VxX2Fycl9sZW4pO1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmMtMzA1NS1cXHRpZiAoIWZlbmNlX2Fycikge1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9kZWJ1Z2ZzLmM9MjA0OT1pbnQgaGxfZGVidWdmc19kZXZpY2VfaW5pdChzdHJ1Y3QgaGxfZGV2aWNlICpoZGV2KVxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9kZWJ1Z2ZzLmMtMjA1NC1cXHRkZXZfZW50cnktXFx1MDAzZWhkZXYgPSBoZGV2O1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vZGVidWdmcy5jOjIwNTU6XFx0ZGV2X2VudHJ5LVxcdTAwM2VlbnRyeV9hcnIgPSBrbWFsbG9jX29ianMoc3RydWN0IGhsX2RlYnVnZnNfZW50cnksIGNvdW50KTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYy0yMDU2LVxcdGlmICghZGV2X2VudHJ5LVxcdTAwM2VlbnRyeV9hcnIpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmM9ODI0PXN0YXRpYyBpbnQgZXh0X2FuZF9jcHVfcXVldWVfaW5pdChzdHJ1Y3QgaGxfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGxfaHdfcXVldWUgKnEsXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmMtODM5LVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaHdfcXVldWUuYzo4NDA6XFx0cS1cXHUwMDNlc2hhZG93X3F1ZXVlID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9jc19qb2IgKiwgSExfUVVFVUVfTEVOR1RIKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmMtODQxLVxcdGlmICghcS1cXHUwMDNlc2hhZG93X3F1ZXVlKSB7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jPTM5Mzg9c3RhdGljIGludCBnYXVkaTJfc3BlY2lhbF9ibG9ja3NfY29uZmlnKHN0cnVjdCBobF9kZXZpY2UgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NDUtXFx0cHJvcC1cXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzID0gQVJSQVlfU0laRShnYXVkaTJfc3BlY2lhbF9ibG9ja3MpO1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmM6Mzk0NjpcXHRwcm9wLVxcdTAwM2VzcGVjaWFsX2Jsb2NrcyA9IGttYWxsb2Nfb2JqcygqcHJvcC1cXHUwMDNlc3BlY2lhbF9ibG9ja3MsXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYy0zOTQ3LVxcdFxcdFxcdFxcdFxcdCAgICBwcm9wLVxcdTAwM2VudW1fb2Zfc3BlY2lhbF9ibG9ja3MpO1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYy0zOTYwLVxcdFxcdHByb3AtXFx1MDAzZXNraXBfc3BlY2lhbF9ibG9ja3NfY2ZnLmJsb2NrX3R5cGVzID1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jOjM5NjE6XFx0XFx0XFx0XFx0a21hbGxvY19vYmpzKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3R5cGVzWzBdLFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk2Mi1cXHRcXHRcXHRcXHRcXHQgICAgIEFSUkFZX1NJWkUoZ2F1ZGkyX2l0ZXJhdG9yX3NraXBfYmxvY2tfdHlwZXMpKTtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk3Ni1cXHRcXHRwcm9wLVxcdTAwM2Vza2lwX3NwZWNpYWxfYmxvY2tzX2NmZy5ibG9ja19yYW5nZXMgPVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmM6Mzk3NzpcXHRcXHRcXHRcXHRrbWFsbG9jX29ianMoZ2F1ZGkyX2l0ZXJhdG9yX3NraXBfYmxvY2tfcmFuZ2VzWzBdLFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk3OC1cXHRcXHRcXHRcXHRcXHQgICAgIEFSUkFZX1NJWkUoZ2F1ZGkyX2l0ZXJhdG9yX3NraXBfYmxvY2tfcmFuZ2VzKSk7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19jb250cm9sLmM9MzkzPXN0YXRpYyBpbnQgZmluZF9hbmRfbWFwX3VzZXJfcGFnZXMoc3RydWN0IHFhaWNfZGV2aWNlICpxZGV2LFxcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jLTQyNS1cXHR3aGlsZSAoMSkge1xcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2NvbnRyb2wuYzo0MjY6XFx0XFx0cGFnZV9saXN0ID0ga21hbGxvY19vYmpzKCpwYWdlX2xpc3QsIG5yX3BhZ2VzLFxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2NvbnRyb2wuYy00MjctXFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbi0tXFxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jPTQ5NT1pbnQgcm9ja2V0X2pvYl9vcGVuKHN0cnVjdCByb2NrZXRfZmlsZV9wcml2ICpyb2NrZXRfcHJpdilcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy00OTctXFx0c3RydWN0IHJvY2tldF9kZXZpY2UgKnJkZXYgPSByb2NrZXRfcHJpdi1cXHUwMDNlcmRldjtcXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmM6NDk4OlxcdHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqKnNjaGVkcyA9IGttYWxsb2Nfb2Jqcygqc2NoZWRzLFxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy00OTktXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHJkZXYtXFx1MDAzZW51bV9jb3Jlcyk7XFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmM9NTU9c3RhdGljIF9faW5pdCBpbnQgYWNwaV9wYXJzZV9tcnJtKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpXFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmMtODMtXFxuZHJpdmVycy9hY3BpL2FjcGlfbXJybS5jOjg0OlxcdG1ycm1fbWVtX3JhbmdlX2VudHJ5ID0ga21hbGxvY19vYmpzKCptcnJtX21lbV9yYW5nZV9lbnRyeSwgbXJlX2NvdW50LFxcbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYy04NS1cXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbi0tXFxuZHJpdmVycy9hY3BpL2FjcGlfdmlkZW8uYz03OTg9aW50IGFjcGlfdmlkZW9fZ2V0X2xldmVscyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMtODMxLVxcdCAqL1xcbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmM6ODMyOlxcdGJyLVxcdTAwM2VsZXZlbHMgPSBrbWFsbG9jX29ianMoKmJyLVxcdTAwM2VsZXZlbHMsXFxuZHJpdmVycy9hY3BpL2FjcGlfdmlkZW8uYy04MzMtXFx0XFx0XFx0XFx0ICBvYmotXFx1MDAzZXBhY2thZ2UuY291bnQgKyBBQ1BJX1ZJREVPX0ZJUlNUX0xFVkVMKTtcXG4tLVxcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jPTMxNT1zdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wZXJmb3JtYW5jZV9zdGF0ZXMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcilcXG4tLVxcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jLTM0My1cXHRwci1cXHUwMDNlcGVyZm9ybWFuY2UtXFx1MDAzZXN0YXRlcyA9XFxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmM6MzQ0OlxcdCAgICBrbWFsbG9jX29ianMoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3B4LCBwc3MtXFx1MDAzZXBhY2thZ2UuY291bnQpO1xcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jLTM0NS1cXHRpZiAoIXByLVxcdTAwM2VwZXJmb3JtYW5jZS1cXHUwMDNlc3RhdGVzKSB7XFxuLS1cXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYz00ODU9c3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfdGhyb3R0bGluZ19zdGF0ZXMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcilcXG4tLVxcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jLTUxNC1cXHRwci1cXHUwMDNldGhyb3R0bGluZy5zdGF0ZXNfdHNzID1cXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYzo1MTU6XFx0ICAgIGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfdHhfdHNzLCB0c3MtXFx1MDAzZXBhY2thZ2UuY291bnQpO1xcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jLTUxNi1cXHRpZiAoIXByLVxcdTAwM2V0aHJvdHRsaW5nLnN0YXRlc190c3MpIHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYz0zNTk9c3RhdGljIGludCBjb21wb25lbnRfbWF0Y2hfcmVhbGxvYyhzdHJ1Y3QgY29tcG9uZW50X21hdGNoICptYXRjaCwgc2l6ZV90IG51bSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYy0zNjUtXFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jOjM2NjpcXHRuZXcgPSBrbWFsbG9jX29ianMoKm5ldywgbnVtKTtcXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmMtMzY3LVxcdGlmICghbmV3KVxcbi0tXFxuZHJpdmVycy9iYXNlL21hcC5jPTMyPWludCBrb2JqX21hcChzdHJ1Y3Qga29ial9tYXAgKmRvbWFpbiwgZGV2X3QgZGV2LCB1bnNpZ25lZCBsb25nIHJhbmdlLFxcbi0tXFxuZHJpdmVycy9iYXNlL21hcC5jLTQzLVxcbmRyaXZlcnMvYmFzZS9tYXAuYzo0NDpcXHRwID0ga21hbGxvY19vYmpzKHN0cnVjdCBwcm9iZSwgbik7XFxuZHJpdmVycy9iYXNlL21hcC5jLTQ1LVxcdGlmIChwID09IE5VTEwpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmM9MTI0PWludCByZWdjYWNoZV9pbml0KHN0cnVjdCByZWdtYXAgKm1hcCwgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZylcXG4tLVxcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUuYy0xOTktXFx0XFx0bWFwLVxcdTAwM2VudW1fcmVnX2RlZmF1bHRzID0gY291bnQ7XFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jOjIwMDpcXHRcXHRtYXAtXFx1MDAzZXJlZ19kZWZhdWx0cyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcmVnX2RlZmF1bHQsIGNvdW50KTtcXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMtMjAxLVxcdFxcdGlmICghbWFwLVxcdTAwM2VyZWdfZGVmYXVsdHMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0zNDA9c3RhdGljIGludCBsb19yd19haW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zNTQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzU1OlxcdFxcdGNtZC1cXHUwMDNlYnZlYyA9IGttYWxsb2Nfb2JqcygqY21kLVxcdTAwM2VidmVjLCBucl9idmVjLCBHRlBfTk9JTyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMzU2LVxcdFxcdGlmICghY21kLVxcdTAwM2VidmVjKVxcbi0tXFxuZHJpdmVycy9ibG9jay9yYmQuYz0yNTMxPXN0YXRpYyBpbnQgcmJkX2ltZ19maWxsX3JlcXVlc3Qoc3RydWN0IHJiZF9pbWdfcmVxdWVzdCAqaW1nX3JlcSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svcmJkLmMtMjU2Ny1cXHRmb3JfZWFjaF9vYmpfcmVxdWVzdChpbWdfcmVxLCBvYmpfcmVxKSB7XFxuZHJpdmVycy9ibG9jay9yYmQuYzoyNTY4OlxcdFxcdG9ial9yZXEtXFx1MDAzZWJ2ZWNfcG9zLmJ2ZWNzID0ga21hbGxvY19vYmpzKCpvYmpfcmVxLVxcdTAwM2VidmVjX3Bvcy5idmVjcyxcXG5kcml2ZXJzL2Jsb2NrL3JiZC5jLTI1NjktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG9ial9yZXEtXFx1MDAzZWJ2ZWNfY291bnQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xNjA9c3RhdGljIGludCB2aXJ0YmxrX3NldHVwX2Rpc2NhcmRfd3JpdGVfemVyb2VzX2VyYXNlKHN0cnVjdCByZXF1ZXN0ICpyZXEsIGJvb2wgdW5tYXApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNzAtXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTcxOlxcdHJhbmdlID0ga21hbGxvY19vYmpzKCpyYW5nZSwgc2VnbWVudHMsIEdGUF9BVE9NSUMpO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE3Mi1cXHRpZiAoIXJhbmdlKVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9OTYwPXN0YXRpYyBpbnQgaW5pdF92cShzdHJ1Y3QgdmlydGlvX2JsayAqdmJsaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTk5NS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzo5OTY6XFx0dmJsay1cXHUwMDNldnFzID0ga21hbGxvY19vYmpzKCp2YmxrLVxcdTAwM2V2cXMsIG51bV92cXMpO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTk5Ny1cXHRpZiAoIXZibGstXFx1MDAzZXZxcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTEwMDAtXFx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBudW1fdnFzKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxMDAxOlxcdHZxcyA9IGttYWxsb2Nfb2JqcygqdnFzLCBudW1fdnFzKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAyLVxcdGlmICghdnFzX2luZm8gfHwgIXZxcykge1xcbi0tXFxuZHJpdmVycy9ibG9jay96MnJhbS5jPTE0Mz1zdGF0aWMgaW50IHoyX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svejJyYW0uYy0xODktXFx0XFx0XFx0ejJyYW1fbWFwID1cXG5kcml2ZXJzL2Jsb2NrL3oycmFtLmM6MTkwOlxcdFxcdFxcdCAgICBrbWFsbG9jX29ianMoejJyYW1fbWFwWzBdLCBzaXplIC8gWjJSQU1fQ0hVTktTSVpFKTtcXG5kcml2ZXJzL2Jsb2NrL3oycmFtLmMtMTkxLVxcdFxcdFxcdGlmICh6MnJhbV9tYXAgPT0gTlVMTCkge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTUxOD1zdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MzAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUzMTpcXHRcXHRjbWQtXFx1MDAzZWJ2ZWMgPSBrbWFsbG9jX29ianMoKmNtZC1cXHUwMDNlYnZlYywgbnJfYnZlYywgR0ZQX05PSU8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MzItXFx0XFx0aWYgKCFjbWQtXFx1MDAzZWJ2ZWMpXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYz0xODQyPXN0YXRpYyBpbnQgYnRpbnRlbF9wY2llX3NldHVwX3R4cV9idWZzKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTE4NDgtXFx0LyogQWxsb2NhdGUgdGhlIHNhbWUgbnVtYmVyIG9mIGJ1ZmZlcnMgYXMgdGhlIGRlc2NyaXB0b3IgKi9cXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYzoxODQ5OlxcdHR4cS1cXHUwMDNlYnVmcyA9IGttYWxsb2Nfb2JqcygqYnVmLCB0eHEtXFx1MDAzZWNvdW50KTtcXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xODUwLVxcdGlmICghdHhxLVxcdTAwM2VidWZzKVxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM9MTg4Nj1zdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9zZXR1cF9yeHFfYnVmcyhzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xODkyLVxcdC8qIEFsbG9jYXRlIHRoZSBzYW1lIG51bWJlciBvZiBidWZmZXJzIGFzIHRoZSBkZXNjcmlwdG9yICovXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM6MTg5MzpcXHRyeHEtXFx1MDAzZWJ1ZnMgPSBrbWFsbG9jX29ianMoKmJ1ZiwgcnhxLVxcdTAwM2Vjb3VudCk7XFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMTg5NC1cXHRpZiAoIXJ4cS1cXHUwMDNlYnVmcylcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9NjMyPXN0YXRpYyBpbnQgZnNsX21jX2RldmljZV9nZXRfbW1pb19yZWdpb25zKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19kZXYsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTY1NS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjY1NjpcXHRyZWdpb25zID0ga21hbGxvY19vYmpzKHJlZ2lvbnNbMF0sIG9ial9kZXNjLVxcdTAwM2VyZWdpb25fY291bnQpO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNjU3LVxcdGlmICghcmVnaW9ucylcXG4tLVxcbmRyaXZlcnMvY2hhci9hZ3AvaXNvY2guYz02ND1zdGF0aWMgaW50IGFncF8zXzVfaXNvY2hyb25vdXNfbm9kZV9lbmFibGUoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlLFxcbi0tXFxuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jLTk0LVxcdCAqL1xcbmRyaXZlcnMvY2hhci9hZ3AvaXNvY2guYzo5NTpcXHRtYXN0ZXIgPSBrbWFsbG9jX29ianMoKm1hc3RlciwgbmRldnMpO1xcbmRyaXZlcnMvY2hhci9hZ3AvaXNvY2guYy05Ni1cXHRpZiAobWFzdGVyID09IE5VTEwpIHtcXG4tLVxcbmRyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmM9MzY5PXN0YXRpYyBpbnQgdW5pbm9ydGhfY3JlYXRlX2dhdHRfdGFibGUoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlKVxcbi0tXFxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDYtXFxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYzo0MDc6XFx0dW5pbm9ydGhfcHJpdi5wYWdlc19hcnIgPSBrbWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgMSBcXHUwMDNjXFx1MDAzYyBwYWdlX29yZGVyKTtcXG5kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jLTQwOC1cXHRpZiAodW5pbm9ydGhfcHJpdi5wYWdlc19hcnIgPT0gTlVMTClcXG4tLVxcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jPTc1MD1pbnQgaXBtaV9zbWlfd2F0Y2hlcl9yZWdpc3RlcihzdHJ1Y3QgaXBtaV9zbWlfd2F0Y2hlciAqd2F0Y2hlcilcXG4tLVxcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc3OS1cXHRpZiAoY291bnQgXFx1MDAzZSAwKSB7XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmM6NzgwOlxcdFxcdGludGVyZmFjZXMgPSBrbWFsbG9jX29ianMoKmludGVyZmFjZXMsIGNvdW50KTtcXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYy03ODEtXFx0XFx0aWYgKCFpbnRlcmZhY2VzKSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYy03ODMtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYzo3ODQ6XFx0XFx0XFx0ZGV2aWNlcyA9IGttYWxsb2Nfb2JqcygqZGV2aWNlcywgY291bnQpO1xcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc4NS1cXHRcXHRcXHRpZiAoIWRldmljZXMpIHtcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jPTE4MTA9c3RhdGljIGludCBpbml0X3ZxcyhzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2KVxcbi0tXFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMTgxOS1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYzoxODIwOlxcdHZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3F1ZXVlcyk7XFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMTgyMS1cXHR2cXNfaW5mbyA9IGt6YWxsb2Nfb2JqcygqdnFzX2luZm8sIG5yX3F1ZXVlcyk7XFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMjpcXHRwb3J0ZGV2LVxcdTAwM2Vpbl92cXMgPSBrbWFsbG9jX29ianMoc3RydWN0IHZpcnRxdWV1ZSAqLCBucl9wb3J0cyk7XFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMzpcXHRwb3J0ZGV2LVxcdTAwM2VvdXRfdnFzID0ga21hbGxvY19vYmpzKHN0cnVjdCB2aXJ0cXVldWUgKiwgbnJfcG9ydHMpO1xcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE4MjQtXFx0aWYgKCF2cXMgfHwgIXZxc19pbmZvIHx8ICFwb3J0ZGV2LVxcdTAwM2Vpbl92cXMgfHwgIXBvcnRkZXYtXFx1MDAzZW91dF92cXMpIHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1idWxrLmM9NDc9c3RhdGljIGludCBfX211c3RfY2hlY2sgb2ZfY2xrX2J1bGtfZ2V0X2FsbChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jLTU4LVxcbmRyaXZlcnMvY2xrL2Nsay1idWxrLmM6NTk6XFx0Y2xrX2J1bGsgPSBrbWFsbG9jX29ianMoKmNsa19idWxrLCBudW1fY2xrcyk7XFxuZHJpdmVycy9jbGsvY2xrLWJ1bGsuYy02MC1cXHRpZiAoIWNsa19idWxrKVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXN0bTMyZjQuYz0xODI4PXN0YXRpYyB2b2lkIF9faW5pdCBzdG0zMmY0X3JjY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTctXFxuZHJpdmVycy9jbGsvY2xrLXN0bTMyZjQuYzoxODU4OlxcdGNsa3MgPSBrbWFsbG9jX29ianMoKmNsa3MsIGRhdGEtXFx1MDAzZWdhdGVzX251bSArIHN0bTMyZnhfZW5kX3ByaW1hcnlfY2xrKTtcXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTktXFx0aWYgKCFjbGtzKVxcbi0tXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYz03NDM9aW50IG9mX2RhdmluY2lfcGxsX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuLS1cXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BsbC5jLTc4NC1cXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BsbC5jOjc4NTpcXHRcXHRjbGtzID0ga21hbGxvY19vYmpzKCpjbGtzLCBuX2Nsa3MpO1xcbmRyaXZlcnMvY2xrL2RhdmluY2kvcGxsLmMtNzg2LVxcdFxcdGlmICghY2xrcykge1xcbi0tXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wc2MuYz0zNjQ9X19kYXZpbmNpX3BzY19yZWdpc3Rlcl9jbG9ja3Moc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wc2MuYy0zNzgtXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wc2MuYzozNzk6XFx0Y2xrcyA9IGttYWxsb2Nfb2JqcygqY2xrcywgbnVtX2Nsa3MpO1xcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmMtMzgwLVxcdGlmICghY2xrcykge1xcbi0tXFxuZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjEwLmM9MzY5Nz1zdGF0aWMgdm9pZCB0ZWdyYTIxMF9tYmlzdF9jbGtfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjEwLmMtMzcwNy1cXG5kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMTAuYzozNzA4OlxcdFxcdGNsa19kYXRhID0ga21hbGxvY19vYmpzKCpjbGtfZGF0YSwgbnVtX2Nsa3MpO1xcbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDktXFx0XFx0aWYgKFdBUk5fT04oIWNsa19kYXRhKSlcXG4tLVxcbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jPTE1NT1zdGF0aWMgaW50IG5pXzY3MHhfYXV0b19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jLTIwMC1cXG5kcml2ZXJzL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYzoyMDE6XFx0XFx0cmFuZ2VfdGFibGVfbGlzdCA9IGttYWxsb2Nfb2JqcygqcmFuZ2VfdGFibGVfbGlzdCwgMzIpO1xcbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jLTIwMi1cXHRcXHRpZiAoIXJhbmdlX3RhYmxlX2xpc3QpXFxuLS1cXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jPTY2PWJtaXBzX2NwdWZyZXFfZ2V0X2ZyZXFfdGFibGUoY29uc3Qgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpXFxuLS1cXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jLTczLVxcbmRyaXZlcnMvY3B1ZnJlcS9ibWlwcy1jcHVmcmVxLmM6NzQ6XFx0dGFibGUgPSBrbWFsbG9jX29ianMoKnRhYmxlLCBwcml2LVxcdTAwM2VtYXhfZnJlcXMgKyAxKTtcXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jLTc1LVxcdGlmICghdGFibGUpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9MTM0PXNwdV9za2NpcGhlcl9yeF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDMtXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjE0NDpcXHRtc3NnLVxcdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXFx1MDAzZWdmcCk7XFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTE0NS1cXHRpZiAoIW1zc2ctXFx1MDAzZXNwdS5kc3QpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9MTk3PXNwdV9za2NpcGhlcl90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0yMDYtXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjIwNzpcXHRtc3NnLVxcdTAwM2VzcHUuc3JjID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgdHhfZnJhZ19udW0sIHJjdHgtXFx1MDAzZWdmcCk7XFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTIwOC1cXHRpZiAodW5saWtlbHkoIW1zc2ctXFx1MDAzZXNwdS5zcmMpKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTUyND1zcHVfYWhhc2hfcnhfc2dfY3JlYXRlKHN0cnVjdCBicmNtX21lc3NhZ2UgKm1zc2csXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTMyLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzo1MzM6XFx0bXNzZy1cXHUwMDNlc3B1LmRzdCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHJ4X2ZyYWdfbnVtLCByY3R4LVxcdTAwM2VnZnApO1xcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01MzQtXFx0aWYgKCFtc3NnLVxcdTAwM2VzcHUuZHN0KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTU3NT1zcHVfYWhhc2hfdHhfc2dfY3JlYXRlKHN0cnVjdCBicmNtX21lc3NhZ2UgKm1zc2csXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg2LVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzo1ODc6XFx0bXNzZy1cXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVxcdTAwM2VnZnApO1xcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01ODgtXFx0aWYgKCFtc3NnLVxcdTAwM2VzcHUuc3JjKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTEwMzg9c3RhdGljIGludCBzcHVfYWVhZF9yeF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMDc1LVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMDc2OlxcdG1zc2ctXFx1MDAzZXNwdS5kc3QgPSBrbWFsbG9jX29ianMoc3RydWN0IHNjYXR0ZXJsaXN0LCByeF9mcmFnX251bSwgcmN0eC1cXHUwMDNlZ2ZwKTtcXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTA3Ny1cXHRpZiAoIW1zc2ctXFx1MDAzZXNwdS5kc3QpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9MTE1Nz1zdGF0aWMgaW50IHNwdV9hZWFkX3R4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTExNzYtXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjExNzc6XFx0bXNzZy1cXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVxcdTAwM2VnZnApO1xcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMTc4LVxcdGlmICghbXNzZy1cXHUwMDNlc3B1LnNyYylcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jPTMwNj1zdGF0aWMgc3RydWN0IHNsYV9idWZmZXJfaGRyICpzbGFfYnVmZmVyX21hcChzdHJ1Y3Qgc2xhX2FkZHJfdCBzbGEpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy0zMzItXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM6MzMzOlxcdFxcdHN0cnVjdCBwYWdlICoqcHAgPSBrbWFsbG9jX29ianMocHBbMF0sIG5wYWdlcyk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtMzM0LVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RlbGVtZXRyeS5jPTU4PXN0YXRpYyBpbnQgYWRmX3RsX2FsbG9jX21lbShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MDo1NC4yOTEzOTY0OThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njg5OTIxMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBrbWFsbG9jX29ianNgIGFuZCBga3ZtYWxsb2Nfb2Jqc2AgTWFjcm9zKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGlzIGBrbWFsbG9jX29ianNgIG1hY3JvLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBlaXRoZXIgc29tZXRoaW5nIG5ldyBpbiBhIHJlY2VudCBwYXRjaCwgb3IgaXQncyBhIHN0YW5kYXJkIGtlcm5lbCBjb25zdHJ1Y3QgSSdtIGp1c3Qgbm90IGltbWVkaWF0ZWx5IGZhbWlsaWFyIHdpdGguIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIGl0J3MgYmVpbmcgc3dhcHBlZCBvdXQgZm9yIGBrdm1hbGxvY19vYmpzYC4gT2theSwgaG9sZCBvbiwgaXMgKnRoYXQqIGFsc28gYSBtYWNybz8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB3aGF0IHRoZXNlIGFyZSBkb2luZy4gVGltZSB0byBjaGVjayBvdXQgdGhlIGRlZmluaXRpb24gb2YgYGt2bWFsbG9jX29ianNgIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBga21hbGxvY19vYmpzYCBpcyBiZWluZyByZXBsYWNlZCwgYW5kIHdoYXQgc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBjaGFuZ2UgYXJlIGludGVuZGVkIHRvIGJyaW5nIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg2OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MDo1OC45ODEzMjE2OThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjUxNzMxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtYWxsb2Nfb2Jqc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc4NSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jPTMzNz1hc21saW5rYWdlIGxvbmcgc3lzX29hYmlfc2VtdGltZWRvcChpbnQgc2VtaWQsXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMzUxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYzozNTI6XFx0c29wcyA9IGt2bWFsbG9jX29ianMoKnNvcHMsIG5zb3BzKTtcXG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMzUzLVxcdGlmICghc29wcylcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jPTczND1pbml0aWFsaXplX3JlbG9jYXRpb25faGFzaHRhYmxlKHVuc2lnbmVkIGludCBudW1fcmVsb2NhdGlvbnMsXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03NTUtXFx0LyogTnVtYmVyIG9mIHJlbG9jYXRpb25zIG1heSBiZSBsYXJnZSwgc28ga3ZtYWxsb2MgaXQgKi9cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3NTY6XFx0KnJlbG9jYXRpb25faGFzaHRhYmxlID0ga3ZtYWxsb2Nfb2JqcygqKnJlbG9jYXRpb25faGFzaHRhYmxlLFxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTc1Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBoYXNodGFibGVfc2l6ZSk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM9MjQ0PXN0YXRpYyBpbnQgcGFpX2FsbG9jX2NwdShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBjcHUpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmMtMjkwLVxcdFxcdH1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM6MjkxOlxcdFxcdGNwdW1wLVxcdTAwM2VzYXZlID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFpX3VzZXJkYXRhLFxcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0yOTItXFx0XFx0XFx0XFx0XFx0ICAgIHBhaV9wbXVbaWR4XS5udW1fYXZhaWwgKyAxKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jPTU4OT1pbnQga3ZtX3ZjcHVfaW9jdGxfc2V0X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTYwNC1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzo2MDU6XFx0XFx0ZTIgPSBrdm1hbGxvY19vYmpzKCplMiwgY3B1aWQtXFx1MDAzZW5lbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtNjA2LVxcdFxcdGlmICghZTIpIHtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODUxPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzkwNC1cXHR9XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM5MDU6XFx0YWRkcnMgPSBrdm1hbGxvY19vYmpzKCphZGRycywgcHJvZy1cXHUwMDNlbGVuICsgMSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5MDYtXFx0aWYgKCFhZGRycylcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tcHJvZmlsZS5jPTc2PWludCBibGtfY3J5cHRvX3Byb2ZpbGVfaW5pdChzdHJ1Y3QgYmxrX2NyeXB0b19wcm9maWxlICpwcm9maWxlLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1wcm9maWxlLmMtMTI0LVxcdHByb2ZpbGUtXFx1MDAzZXNsb3RfaGFzaHRhYmxlID1cXG5ibG9jay9ibGstY3J5cHRvLXByb2ZpbGUuYzoxMjU6XFx0XFx0a3ZtYWxsb2Nfb2Jqcyhwcm9maWxlLVxcdTAwM2VzbG90X2hhc2h0YWJsZVswXSwgc2xvdF9oYXNodGFibGVfc2l6ZSk7XFxuYmxvY2svYmxrLWNyeXB0by1wcm9maWxlLmMtMTI2LVxcdGlmICghcHJvZmlsZS1cXHUwMDNlc2xvdF9oYXNodGFibGUpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV91YnVmLmM9Nzg9c3RydWN0IGRtYV9idWYgKmFtZHhkbmFfZ2V0X3VidWYoc3RydWN0IGRybV9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3VidWYuYy0xMzYtXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfdWJ1Zi5jOjEzNzpcXHR1YnVmLVxcdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoKnVidWYtXFx1MDAzZXBhZ2VzLCB1YnVmLVxcdTAwM2Vucl9wYWdlcyk7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfdWJ1Zi5jLTEzOC1cXHRpZiAoIXVidWYtXFx1MDAzZXBhZ2VzKSB7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2V0aG9zdS9ldGhvc3Vfam9iLmM9NDg4PWludCBldGhvc3VfaW9jdGxfc3VibWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvYWNjZWwvZXRob3N1L2V0aG9zdV9qb2IuYy00OTktXFx0c3RydWN0IGRybV9ldGhvc3Vfam9iIF9fZnJlZShrdmZyZWUpICpqb2JzID1cXG5kcml2ZXJzL2FjY2VsL2V0aG9zdS9ldGhvc3Vfam9iLmM6NTAwOlxcdFxcdGt2bWFsbG9jX29ianMoKmpvYnMsIGFyZ3MtXFx1MDAzZWpvYl9jb3VudCk7XFxuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2pvYi5jLTUwMS1cXHRpZiAoIWpvYnMpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL21lbW9yeS5jPTIzMTU9c3RhdGljIGludCBnZXRfdXNlcl9tZW1vcnkoc3RydWN0IGhsX2RldmljZSAqaGRldiwgdTY0IGFkZHIsIHU2NCBzaXplLFxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9tZW1vcnkuYy0yMzI1LVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vbWVtb3J5LmM6MjMyNjpcXHR1c2VycHRyLVxcdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnBhZ2VzKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL21lbW9yeS5jLTIzMjctXFx0aWYgKCF1c2VycHRyLVxcdTAwM2VwYWdlcylcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2dlbV91c2VycHRyLmM9NjU9aXZwdV9jcmVhdGVfdXNlcnB0cl9kbWFidWYoc3RydWN0IGl2cHVfZGV2aWNlICp2ZGV2LCB2b2lkIF9fdXNlciAqdXNlcl9wdHIsXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2l2cHUvaXZwdV9nZW1fdXNlcnB0ci5jLTc5LVxcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2dlbV91c2VycHRyLmM6ODA6XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKCpwYWdlcywgbnJfcGFnZXMpO1xcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2dlbV91c2VycHRyLmMtODEtXFx0aWYgKCFwYWdlcylcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYz01OT1yb2NrZXRfY29weV90YXNrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jLTczLVxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYzo3NDpcXHRyam9iLVxcdTAwM2V0YXNrcyA9IGt2bWFsbG9jX29ianMoKnJqb2ItXFx1MDAzZXRhc2tzLCBqb2ItXFx1MDAzZXRhc2tfY291bnQpO1xcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy03NS1cXHRpZiAoIXJqb2ItXFx1MDAzZXRhc2tzKSB7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmM9NTkxPWludCByb2NrZXRfaW9jdGxfc3VibWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy02MTAtXFxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jOjYxMTpcXHRqb2JzID0ga3ZtYWxsb2Nfb2Jqcygqam9icywgYXJncy1cXHUwMDNlam9iX2NvdW50KTtcXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNjEyLVxcdGlmICgham9icykge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTUxPWludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy05My1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6OTQ6XFx0ZGV2LVxcdTAwM2V6b25lcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IG51bGxiX3pvbmUsIGRldi1cXHUwMDNlbnJfem9uZXMsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTk1LVxcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtY2hhaW4uYz0xMDg9c3RhdGljIGludCBmZW5jZV9jaGFpbnNfaW5pdChzdHJ1Y3QgZmVuY2VfY2hhaW5zICpmYywgdW5zaWduZWQgaW50IGNvdW50LFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3N0LWRtYS1mZW5jZS1jaGFpbi5jLTExMy1cXG5kcml2ZXJzL2RtYS1idWYvc3QtZG1hLWZlbmNlLWNoYWluLmM6MTE0OlxcdGZjLVxcdTAwM2VjaGFpbnMgPSBrdm1hbGxvY19vYmpzKCpmYy1cXHUwMDNlY2hhaW5zLCBjb3VudCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbmRyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtY2hhaW4uYy0xMTUtXFx0aWYgKCFmYy1cXHUwMDNlY2hhaW5zKVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3N0LWRtYS1mZW5jZS1jaGFpbi5jLTExNy1cXG5kcml2ZXJzL2RtYS1idWYvc3QtZG1hLWZlbmNlLWNoYWluLmM6MTE4OlxcdGZjLVxcdTAwM2VmZW5jZXMgPSBrdm1hbGxvY19vYmpzKCpmYy1cXHUwMDNlZmVuY2VzLCBjb3VudCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbmRyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtY2hhaW4uYy0xMTktXFx0aWYgKCFmYy1cXHUwMDNlZmVuY2VzKSB7XFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTE5MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBpbml0X3VkbWFidWYoc3RydWN0IHVkbWFidWYgKnVidWYsIHBnb2ZmX3QgcGdjbnQpXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xOTIte1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MTkzOlxcdHVidWYtXFx1MDAzZXBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqdWJ1Zi1cXHUwMDNlcGFnZXMsIHBnY250KTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5NC1cXHRpZiAoIXVidWYtXFx1MDAzZXBhZ2VzKVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xOTYtXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzoxOTc6XFx0dWJ1Zi1cXHUwMDNlcGlubmVkX2ZvbGlvcyA9IGt2bWFsbG9jX29ianMoKnVidWYtXFx1MDAzZXBpbm5lZF9mb2xpb3MsIHBnY250KTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5OC1cXHRpZiAoIXVidWYtXFx1MDAzZXBpbm5lZF9mb2xpb3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYz0xNjQ9c3RhdGljIGludCBhbWRncHVfY3NfcGFzczEoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYy0xODItXFx0cC1cXHUwMDNlbmNodW5rcyA9IGNzLVxcdTAwM2Vpbi5udW1fY2h1bmtzO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jOjE4MzpcXHRwLVxcdTAwM2VjaHVua3MgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBhbWRncHVfY3NfY2h1bmssIHAtXFx1MDAzZW5jaHVua3MpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jLTE4NC1cXHRpZiAoIXAtXFx1MDAzZWNodW5rcykge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYz0yNTYzPXN0YXRpYyBpbnQgY3JpdV9yZXN0b3JlX2JvcyhzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jLTI1NzktXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYzoyNTgwOlxcdGJvX2J1Y2tldHMgPSBrdm1hbGxvY19vYmpzKCpib19idWNrZXRzLCBhcmdzLVxcdTAwM2VudW1fYm9zKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jLTI1ODEtXFx0aWYgKCFib19idWNrZXRzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYy0yNTk3LVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmM6MjU5ODpcXHRib19wcml2cyA9IGt2bWFsbG9jX29ianMoKmJvX3ByaXZzLCBhcmdzLVxcdTAwM2VudW1fYm9zKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jLTI1OTktXFx0aWYgKCFib19wcml2cykge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYz02NjU9c3RydWN0IHBhZ2UgKipkcm1fZ2VtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iailcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtNjg2LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmM6Njg3OlxcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtNjg4LVxcdGlmIChwYWdlcyA9PSBOVUxMKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYz04MzM9aW50IGRybV9nZW1fb2JqZWN0c19sb29rdXAoc3RydWN0IGRybV9maWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYm9faGFuZGxlcyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtODQ0LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmM6ODQ1OlxcdG9ianMgPSBrdm1hbGxvY19vYmpzKCpvYmpzLCBjb3VudCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYy04NDYtXFx0aWYgKCFvYmpzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0xMzkzPWludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDg4LVxcdFxcdHN2bV9wYWdlcy1cXHUwMDNlZG1hX2FkZHIgPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ4OTpcXHRcXHRcXHRrdm1hbGxvY19vYmpzKCpzdm1fcGFnZXMtXFx1MDAzZWRtYV9hZGRyLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ5MC1cXHRcXHRpZiAoIXN2bV9wYWdlcy1cXHUwMDNlZG1hX2FkZHIpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmM9NjY2PXN0YXRpYyBpbnQgZXRuYXZpdl9nZW1fdXNlcnB0cl9nZXRfcGFnZXMoc3RydWN0IGV0bmF2aXZfZ2VtX29iamVjdCAqZXRuYXZpdl9vYmopXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTY3Ny1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jOjY3ODpcXHRwdmVjID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMtNjc5LVxcdGlmICghcHZlYylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmM9MTEyPXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZXRuYXZpdl9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jLTEyOC1cXHRldG5hdml2X29iai1cXHUwMDNlc2d0ID0gc2d0O1xcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmM6MTI5OlxcdGV0bmF2aXZfb2JqLVxcdTAwM2VwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnBhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jLTEzMC1cXHRpZiAoIWV0bmF2aXZfb2JqLVxcdTAwM2VwYWdlcykge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmM9NDEwPWludCBldG5hdml2X2lvY3RsX2dlbV9zdWJtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1Ym1pdC5jLTQ2OC1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9zdWJtaXQuYzo0Njk6XFx0Ym9zID0ga3ZtYWxsb2Nfb2JqcygqYm9zLCBhcmdzLVxcdTAwM2Vucl9ib3MpO1xcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1Ym1pdC5jOjQ3MDpcXHRyZWxvY3MgPSBrdm1hbGxvY19vYmpzKCpyZWxvY3MsIGFyZ3MtXFx1MDAzZW5yX3JlbG9jcyk7XFxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmM6NDcxOlxcdHBtcnMgPSBrdm1hbGxvY19vYmpzKCpwbXJzLCBhcmdzLVxcdTAwM2Vucl9wbXJzKTtcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9zdWJtaXQuYy00NzItXFx0c3RyZWFtID0ga3ZtYWxsb2NfYXJyYXkoMSwgYXJncy1cXHUwMDNlc3RyZWFtX3NpemUsIEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jPTQxNj1zdGF0aWMgZG1hX2FkZHJfdCAqZzJkX3VzZXJwdHJfZ2V0X2RtYV9hZGRyKHN0cnVjdCBnMmRfZGF0YSAqZzJkLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTQ3My1cXHRucGFnZXMgPSAoZW5kIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjQ3NDpcXHRnMmRfdXNlcnB0ci1cXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKCpnMmRfdXNlcnB0ci1cXHUwMDNlcGFnZXMsIG5wYWdlcyk7XFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTQ3NS1cXHRpZiAoIWcyZF91c2VycHRyLVxcdTAwM2VwYWdlcykge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM9Mjc1PXN0YXRpYyB2b2lkICppOTE1X2dlbV9vYmplY3RfbWFwX3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTMxNi1cXHRcXHQvKiBUb28gYmlnIGZvciBzdGFjayAtLSBhbGxvY2F0ZSB0ZW1wb3JhcnkgYXJyYXkgaW5zdGVhZCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jOjMxNzpcXHRcXHRwYWdlcyA9IGt2bWFsbG9jX29ianMoKnBhZ2VzLCBuX3BhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0zMTgtXFx0XFx0aWYgKCFwYWdlcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmM9MjM0PWludCBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9zdWJtaXRfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYy0yNjAtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYzoyNjE6XFx0cHZlYyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnVtX3BhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jLTI2Mi1cXHRpZiAoIXB2ZWMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jPTUyND1zdGF0aWMgaW50IGxpdmVfaHdzcF9lbmdpbmUodm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy01MzgtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYzo1Mzk6XFx0dGltZWxpbmVzID0ga3ZtYWxsb2Nfb2JqcygqdGltZWxpbmVzLCBOVU1fVElNRUxJTkVTICogSTkxNV9OVU1fRU5HSU5FUyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy01NDAtXFx0aWYgKCF0aW1lbGluZXMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jPTU5Nj1zdGF0aWMgaW50IGxpdmVfaHdzcF9hbHRlcm5hdGUodm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy02MTEtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYzo2MTI6XFx0dGltZWxpbmVzID0ga3ZtYWxsb2Nfb2JqcygqdGltZWxpbmVzLCBOVU1fVElNRUxJTkVTICogSTkxNV9OVU1fRU5HSU5FUyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYy02MTMtXFx0aWYgKCF0aW1lbGluZXMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zaG1lbV91dGlscy5jPTU5PXZvaWQgKnNobWVtX3Bpbl9tYXAoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zaG1lbV91dGlscy5jLTY1LVxcdG5fcGFnZXMgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3QtXFx1MDAzZWlfc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NobWVtX3V0aWxzLmM6NjY6XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKCpwYWdlcywgbl9wYWdlcyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2htZW1fdXRpbHMuYy02Ny1cXHRpZiAoIXBhZ2VzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9qb2IuYz03MDc9cHZyX3N1Ym1pdF9qb2JzKHN0cnVjdCBwdnJfZGV2aWNlICpwdnJfZGV2LCBzdHJ1Y3QgcHZyX2ZpbGUgKnB2cl9maWxlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9qb2IuYy03MjMtXFxuZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9qb2IuYzo3MjQ6XFx0am9iX2RhdGEgPSBrdm1hbGxvY19vYmpzKCpqb2JfZGF0YSwgYXJncy1cXHUwMDNlam9icy5jb3VudCxcXG5kcml2ZXJzL2dwdS9kcm0vaW1hZ2luYXRpb24vcHZyX2pvYi5jLTcyNS1cXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYz0yMT1pbnQgbGltYV9oZWFwX2FsbG9jKHN0cnVjdCBsaW1hX2JvICpibywgc3RydWN0IGxpbWFfdm0gKnZtKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYy00MS1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmM6NDI6XFx0XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKCpwYWdlcywgYm8tXFx1MDAzZWJhc2UuYmFzZS5zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYy00My1cXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYz0xMjg0PXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXNtX2dlbV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jLTEzMDUtXFx0bXNtX29iai1cXHUwMDNlc2d0ID0gc2d0O1xcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jOjEzMDY6XFx0bXNtX29iai1cXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5wYWdlcyk7XFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMtMTMwNy1cXHRpZiAoIW1zbV9vYmotXFx1MDAzZXBhZ2VzKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9pb21tdS5jPTMzMD1tc21faW9tbXVfcGFnZXRhYmxlX3ByZWFsbG9jX2FsbG9jYXRlKHN0cnVjdCBtc21fbW11ICptbXUsIHN0cnVjdCBtc21fbW11X3ByZWFsbG9jICpwKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYy0zMzgtXFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYzozMzk6XFx0cC1cXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKCpwLVxcdTAwM2VwYWdlcywgcC1cXHUwMDNlY291bnQpO1xcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmMtMzQwLVxcdGlmICghcC1cXHUwMDNlcGFnZXMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9sdXQuYz0zMj1udjUwX2x1dF9sb2FkKHN0cnVjdCBudjUwX2x1dCAqbHV0LCBpbnQgYnVmZmVyLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9sdXQuYy00MC1cXHRpZiAoIWluKSB7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvbHV0LmM6NDE6XFx0XFx0aW4gPSBrdm1hbGxvY19vYmpzKCppbiwgMTAyNCk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvbHV0LmMtNDItXFx0XFx0aWYgKCFXQVJOX09OKCFpbikpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L21tdS9tZW0uYz0xNDQ9bnZrbV9tZW1fbmV3X2hvc3Qoc3RydWN0IG52a21fbW11ICptbXUsIGludCB0eXBlLCB1OCBwYWdlLCB1NjQgc2l6ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L21tdS9tZW0uYy0xOTMtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvbW11L21lbS5jOjE5NDpcXHRpZiAoIShtZW0tXFx1MDAzZW1lbSA9IGt2bWFsbG9jX29ianMoKm1lbS1cXHUwMDNlbWVtLCBzaXplKSkpXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvbW11L21lbS5jLTE5NS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9tbXUvbWVtLmM6MTk2OlxcdGlmICghKG1lbS1cXHUwMDNlZG1hID0ga3ZtYWxsb2Nfb2JqcygqbWVtLVxcdTAwM2VkbWEsIHNpemUpKSlcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9tbXUvbWVtLmMtMTk3LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jPTE4OT1wYW5mcm9zdF9sb29rdXBfYm9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMtMjA5LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYzoyMTA6XFx0am9iLVxcdTAwM2VtYXBwaW5ncyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhbmZyb3N0X2dlbV9tYXBwaW5nICosXFxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jLTIxMS1cXHRcXHRcXHRcXHQgICAgICBqb2ItXFx1MDAzZWJvX2NvdW50LCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmM9NTg3PXN0YXRpYyBpbnQgcGFuZnJvc3RfaW9jdGxfc3luY19ibyhzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYy02MDEtXFxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jOjYwMjpcXHRvcHMgPSBrdm1hbGxvY19vYmpzKCpvcHMsIGFyZ3MtXFx1MDAzZW9wX2NvdW50KTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMtNjAzLVxcdGlmICghb3BzKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmM9NTg3PXN0YXRpYyBpbnQgcGFuZnJvc3RfbW11X21hcF9mYXVsdF9hZGRyKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2LCBpbnQgYXMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmMtNjIyLVxcdGlmICghYm8tXFx1MDAzZWJhc2UucGFnZXMpIHtcXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmM6NjIzOlxcdFxcdGJvLVxcdTAwM2VzZ3RzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2dfdGFibGUsXFxuZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5jLTYyNC1cXHRcXHRcXHRcXHRcXHQgYm8tXFx1MDAzZWJhc2UuYmFzZS5zaXplIC8gU1pfMk0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmMtNjMwLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9tbXUuYzo2MzE6XFx0XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5yX3BhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9tbXUuYy02MzItXFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz03MjY9c3RhdGljIGludCBwYW50aG9yX3N1Ym1pdF9jdHhfaW5pdChzdHJ1Y3QgcGFudGhvcl9zdWJtaXRfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTcyOC17XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzo3Mjk6XFx0Y3R4LVxcdTAwM2Vqb2JzID0ga3ZtYWxsb2Nfb2JqcygqY3R4LVxcdTAwM2Vqb2JzLCBqb2JfY291bnQsXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy03MzAtXFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl92bS5jPTEyOT1zdHJ1Y3QgcmFkZW9uX2JvX2xpc3QgKnJhZGVvbl92bV9nZXRfYm9zKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYy0xMzUtXFxuZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYzoxMzY6XFx0bGlzdCA9IGt2bWFsbG9jX29ianMoc3RydWN0IHJhZGVvbl9ib19saXN0LCB2bS1cXHUwMDNlbWF4X3BkZV91c2VkICsgMik7XFxuZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYy0xMzctXFx0aWYgKCFsaXN0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM9MzYwPXYzZF9nZXRfbXVsdGlzeW5jX3Bvc3RfZGVwcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTM3Mi1cXHRzZS1cXHUwMDNlb3V0X3N5bmNzID0gKHN0cnVjdCB2M2Rfc3VibWl0X291dHN5bmMgKilcXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYzozNzM6XFx0XFx0XFx0a3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdjNkX3N1Ym1pdF9vdXRzeW5jLCBjb3VudCk7XFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtMzc0LVxcdGlmICghc2UtXFx1MDAzZW91dF9zeW5jcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jPTUwNj12M2RfZ2V0X2NwdV90aW1lc3RhbXBfcXVlcnlfcGFyYW1zKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNTI2LVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jOjUyNzpcXHRxdWVyeV9pbmZvLVxcdTAwM2VxdWVyaWVzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgdjNkX3RpbWVzdGFtcF9xdWVyeSxcXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy01MjgtXFx0XFx0XFx0XFx0XFx0ICAgIHRpbWVzdGFtcC5jb3VudCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYz01Njc9djNkX2dldF9jcHVfcmVzZXRfdGltZXN0YW1wX3BhcmFtcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTU4NC1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYzo1ODU6XFx0cXVlcnlfaW5mby1cXHUwMDNlcXVlcmllcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHYzZF90aW1lc3RhbXBfcXVlcnksXFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNTg2LVxcdFxcdFxcdFxcdFxcdCAgICByZXNldC5jb3VudCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYz02MjA9djNkX2dldF9jcHVfY29weV9xdWVyeV9yZXN1bHRzX3BhcmFtcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTY0MC1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYzo2NDE6XFx0cXVlcnlfaW5mby1cXHUwMDNlcXVlcmllcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHYzZF90aW1lc3RhbXBfcXVlcnksXFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtNjQyLVxcdFxcdFxcdFxcdFxcdCAgICBjb3B5LmNvdW50KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jPTc1MD12M2RfZ2V0X2NwdV9yZXNldF9wZXJmb3JtYW5jZV9wYXJhbXMoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy03NjYtXFx0cXVlcnlfaW5mby1cXHUwMDNlcXVlcmllcyA9XFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6NzY3OlxcdFxcdGt2bWFsbG9jX29ianMoc3RydWN0IHYzZF9wZXJmb3JtYW5jZV9xdWVyeSwgcmVzZXQuY291bnQpO1xcbmRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1pdC5jLTc2OC1cXHRpZiAoIXF1ZXJ5X2luZm8tXFx1MDAzZXF1ZXJpZXMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYz03ODc9djNkX2dldF9jcHVfY29weV9wZXJmb3JtYW5jZV9xdWVyeV9wYXJhbXMoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zdWJtaXQuYy04MDYtXFx0cXVlcnlfaW5mby1cXHUwMDNlcXVlcmllcyA9XFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmM6ODA3OlxcdFxcdGt2bWFsbG9jX29ianMoc3RydWN0IHYzZF9wZXJmb3JtYW5jZV9xdWVyeSwgY29weS5jb3VudCk7XFxuZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMtODA4LVxcdGlmICghcXVlcnlfaW5mby1cXHUwMDNlcXVlcmllcylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9vYmplY3QuYz0xNjE9c3RhdGljIGludCB2aXJ0aW9fZ3B1X29iamVjdF9zaG1lbV9pbml0KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfb2JqZWN0LmMtMTc5LVxcbmRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9vYmplY3QuYzoxODA6XFx0KmVudHMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB2aXJ0aW9fZ3B1X21lbV9lbnRyeSwgKm5lbnRzKTtcXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfb2JqZWN0LmMtMTgxLVxcdGlmICghKCplbnRzKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ByaW1lLmM9MTQ2PWludCB2aXJ0Z3B1X2RtYV9idWZfaW1wb3J0X3NndChzdHJ1Y3QgdmlydGlvX2dwdV9tZW1fZW50cnkgKiplbnRzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ByaW1lLmMtMTY2LVxcbmRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9wcmltZS5jOjE2NzpcXHQqZW50cyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHZpcnRpb19ncHVfbWVtX2VudHJ5LCBzZ3QtXFx1MDAzZW5lbnRzKTtcXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfcHJpbWUuYy0xNjgtXFx0aWYgKCEoKmVudHMpKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmM9NTQxPWludCB2bXdfYm9fY3B1X2JsaXQoc3RydWN0IHZtd19ibyAqdm13X2RzdCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYy01ODgtXFx0aWYgKCFzcmMtXFx1MDAzZXR0bS1cXHUwMDNlcGFnZXMgXFx1MDAyNlxcdTAwMjYgc3JjLVxcdTAwM2V0dG0tXFx1MDAzZXNnKSB7XFxuZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYmxpdC5jOjU4OTpcXHRcXHRzcmNfcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHNyYy1cXHUwMDNldHRtLVxcdTAwM2VudW1fcGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYy01OTAtXFx0XFx0aWYgKCFzcmNfcGFnZXMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmMtNTk3LVxcdGlmICghZHN0LVxcdTAwM2V0dG0tXFx1MDAzZXBhZ2VzIFxcdTAwMjZcXHUwMDI2IGRzdC1cXHUwMDNldHRtLVxcdTAwM2VzZykge1xcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYzo1OTg6XFx0XFx0ZHN0X3BhZ2VzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBkc3QtXFx1MDAzZXR0bS1cXHUwMDNlbnVtX3BhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9ibGl0LmMtNTk5LVxcdFxcdGlmICghZHN0X3BhZ2VzKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYz0zNTkxPXN0YXRpYyBpbnQgdm1fYmluZF9pb2N0bF9jaGVja19hcmdzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdm0gKnZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtMzYxMS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYzozNjEyOlxcdFxcdCpiaW5kX29wcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IGRybV94ZV92bV9iaW5kX29wLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTM2MTMtXFx0XFx0XFx0XFx0XFx0ICBhcmdzLVxcdTAwM2VudW1fYmluZHMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmM9NDY9c3RhdGljIGludCBnZW1fYWxsb2NfcGFnZXNfYXJyYXkoc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jLTQ5LVxcdHhlbl9vYmotXFx1MDAzZW51bV9wYWdlcyA9IERJVl9ST1VORF9VUChidWZfc2l6ZSwgUEFHRV9TSVpFKTtcXG5kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmM6NTA6XFx0eGVuX29iai1cXHUwMDNlcGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHhlbl9vYmotXFx1MDAzZW51bV9wYWdlcyk7XFxuZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jLTUxLVxcdHJldHVybiAheGVuX29iai1cXHUwMDNlcGFnZXMgPyAtRU5PTUVNIDogMDtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L3FwLmM9MTExNz1zdGF0aWMgaW50IF9jcmVhdGVfa2VybmVsX3FwKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvcXAuYy0xMjA1LVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpxcC1cXHUwMDNlcnEud3JpZCksIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L3FwLmM6MTIwNjpcXHRxcC1cXHUwMDNlc3Eud19saXN0ID0ga3ZtYWxsb2Nfb2JqcygqcXAtXFx1MDAzZXNxLndfbGlzdCwgcXAtXFx1MDAzZXNxLndxZV9jbnQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L3FwLmMtMTIwNy1cXHRxcC1cXHUwMDNlc3Eud3FlX2hlYWQgPSBrdm1hbGxvY19hcnJheShxcC1cXHUwMDNlc3Eud3FlX2NudCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9pYl9zcnB0LmM9NzgxPXN0YXRpYyBzdHJ1Y3Qgc3JwdF9pb2N0eCAqKnNycHRfYWxsb2NfaW9jdHhfcmluZyhzdHJ1Y3Qgc3JwdF9kZXZpY2UgKnNkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvaWJfc3JwdC5jLTc5Mi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvaWJfc3JwdC5jOjc5MzpcXHRyaW5nID0ga3ZtYWxsb2Nfb2JqcyhyaW5nWzBdLCByaW5nX3NpemUpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9pYl9zcnB0LmMtNzk0LVxcdGlmICghcmluZylcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz02NzM9c3RhdGljIGludCBfX2luaXQgYWxsb2NfYWxpYXNfdGFibGUoc3RydWN0IGFtZF9pb21tdV9wY2lfc2VnICpwY2lfc2VnKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTY3Ni1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6Njc3OlxcdHBjaV9zZWctXFx1MDAzZWFsaWFzX3RhYmxlID0ga3ZtYWxsb2Nfb2JqcygqcGNpX3NlZy1cXHUwMDNlYWxpYXNfdGFibGUsXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTY3OC1cXHRcXHRcXHRcXHRcXHQgICAgIHBjaV9zZWctXFx1MDAzZWxhc3RfYmRmICsgMSk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWNsb25lLXRhcmdldC5jPTU3Nj1zdGF0aWMgaW50IGhhc2hfdGFibGVfaW5pdChzdHJ1Y3QgY2xvbmUgKmNsb25lKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1jbG9uZS10YXJnZXQuYy01ODItXFxuZHJpdmVycy9tZC9kbS1jbG9uZS10YXJnZXQuYzo1ODM6XFx0Y2xvbmUtXFx1MDAzZWh0ID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgaGFzaF90YWJsZV9idWNrZXQsIHN6KTtcXG5kcml2ZXJzL21kL2RtLWNsb25lLXRhcmdldC5jLTU4NC1cXHRpZiAoIWNsb25lLVxcdTAwM2VodClcXG4tLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM9NDIzNz1zdGF0aWMgc3RydWN0IHBhZ2VfbGlzdCAqZG1faW50ZWdyaXR5X2FsbG9jX3BhZ2VfbGlzdCh1bnNpZ25lZCBpbnQgbl9wYWdlcylcXG4tLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI0MS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jOjQyNDI6XFx0cGwgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlX2xpc3QsIG5fcGFnZXMgKyAxLFxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI0My1cXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jPTQyNzE9c3RhdGljIHN0cnVjdCBzY2F0dGVybGlzdCAqKmRtX2ludGVncml0eV9hbGxvY19qb3VybmFsX3NjYXR0ZXJsaXN0KHN0cnVjdCBkbV9pbnRlZ3JpdHlfYyAqaWMsXFxuLS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTQyNzYtXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo0Mjc3OlxcdHNsID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaWMtXFx1MDAzZWpvdXJuYWxfc2VjdGlvbnMsXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00Mjc4LVxcdFxcdFxcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNDI5NC1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jOjQyOTU6XFx0XFx0cyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHNjYXR0ZXJsaXN0LCBuX3BhZ2VzKTtcXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTQyOTYtXFx0XFx0aWYgKCFzKSB7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jPTQ0MTI9c3RhdGljIGludCBjcmVhdGVfam91cm5hbChzdHJ1Y3QgZG1faW50ZWdyaXR5X2MgKmljLCBjaGFyICoqZXJyb3IpXFxuLS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTQ0OTctXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzo0NDk4OlxcdFxcdFxcdHNnID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00NDk5LVxcdFxcdFxcdFxcdFxcdCAgIGljLVxcdTAwM2Vqb3VybmFsX3BhZ2VzICsgMSk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTQ1NjUtXFx0XFx0XFx0fVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6NDU2NjpcXHRcXHRcXHRpYy1cXHUwMDNlc2tfcmVxdWVzdHMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICosXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy00NTY3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGljLVxcdTAwM2Vqb3VybmFsX3NlY3Rpb25zLFxcbi0tXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYz00Njc0PXN0YXRpYyBpbnQgZG1faW50ZWdyaXR5X2N0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbi0tXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy01MjY4LVxcdFxcdH1cXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jOjUyNjk6XFx0XFx0aWMtXFx1MDAzZWJicyA9IGt2bWFsbG9jX29ianMoc3RydWN0IGJpdG1hcF9ibG9ja19zdGF0dXMsXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy01MjcwLVxcdFxcdFxcdFxcdFxcdGljLVxcdTAwM2VuX2JpdG1hcF9ibG9ja3MpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1zbmFwLmM9NjU5PXN0YXRpYyBpbnQgZG1fZXhjZXB0aW9uX3RhYmxlX2luaXQoc3RydWN0IGRtX2V4Y2VwdGlvbl90YWJsZSAqZXQsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXNuYXAuYy02NjUtXFx0ZXQtXFx1MDAzZWhhc2hfbWFzayA9IHNpemUgLSAxO1xcbmRyaXZlcnMvbWQvZG0tc25hcC5jOjY2NjpcXHRldC1cXHUwMDNldGFibGUgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBkbV9obGlzdF9oZWFkLCBzaXplKTtcXG5kcml2ZXJzL21kL2RtLXNuYXAuYy02NjctXFx0aWYgKCFldC1cXHUwMDNldGFibGUpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWN0cmxzLWFwaS5jPTQwOT1pbnQgdjRsMl9nX2V4dF9jdHJsc19jb21tb24oc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsXFxuLS1cXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWN0cmxzLWFwaS5jLTQzMy1cXHRpZiAoY3MtXFx1MDAzZWNvdW50IFxcdTAwM2UgQVJSQVlfU0laRShoZWxwZXIpKSB7XFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYzo0MzQ6XFx0XFx0aGVscGVycyA9IGt2bWFsbG9jX29ianMoaGVscGVyWzBdLCBjcy1cXHUwMDNlY291bnQpO1xcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmMtNDM1LVxcdFxcdGlmICghaGVscGVycylcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmM9NTg2PWludCB0cnlfc2V0X2V4dF9jdHJsc19jb21tb24oc3RydWN0IHY0bDJfZmggKmZoLFxcbi0tXFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYy02MTgtXFx0aWYgKGNzLVxcdTAwM2Vjb3VudCBcXHUwMDNlIEFSUkFZX1NJWkUoaGVscGVyKSkge1xcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3RybHMtYXBpLmM6NjE5OlxcdFxcdGhlbHBlcnMgPSBrdm1hbGxvY19vYmpzKGhlbHBlclswXSwgY3MtXFx1MDAzZWNvdW50KTtcXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWN0cmxzLWFwaS5jLTYyMC1cXHRcXHRpZiAoIWhlbHBlcnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcnNzLmM9MTE4PWludCBtbHg1ZV9yc3NfcGFyYW1zX2luZGlyX2luaXQoc3RydWN0IG1seDVlX3Jzc19wYXJhbXNfaW5kaXIgKmluZGlyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3Jzcy5jLTEyMC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3Jzcy5jOjEyMTpcXHRpbmRpci1cXHUwMDNldGFibGUgPSBrdm1hbGxvY19vYmpzKCppbmRpci1cXHUwMDNldGFibGUsIG1heF90YWJsZV9zaXplKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcnNzLmMtMTIyLVxcdGlmICghaW5kaXItXFx1MDAzZXRhYmxlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTgwMj1pbnQgbWFuYV9wcmVfYWxsb2NfcnhidWZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqbXBjLCBpbnQgbmV3X210dSwgaW50IG51bV9xdWV1ZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtODIzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzo4MjQ6XFx0bXBjLVxcdTAwM2VkYXNfcHJlID0ga3ZtYWxsb2Nfb2JqcyhkbWFfYWRkcl90LCBudW1fcnhiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtODI1LVxcdGlmICghbXBjLVxcdTAwM2VkYXNfcHJlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvbWV0YWRhdGEuYz01MTE9aW50IG5mcF9mbG93ZXJfbWV0YWRhdGFfaW5pdChzdHJ1Y3QgbmZwX2FwcCAqYXBwLCB1NjQgaG9zdF9jdHhfY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9tZXRhZGF0YS5jLTU3NS1cXHRcXHQgICAgIEZJRUxEX1BSRVAoTkZQX0ZMX1NUQVRfSURfTVVfTlVNLCBob3N0X251bV9tZW1zIC0gMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvbWV0YWRhdGEuYzo1NzY6XFx0cHJpdi1cXHUwMDNlc3RhdHMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBuZnBfZmxfc3RhdHMsIHN0YXRzX3NpemUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL21ldGFkYXRhLmMtNTc3LVxcdGlmICghcHJpdi1cXHUwMDNlc3RhdHMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM9MTU9c3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy01MC1cXHRpID0gbWF4X3QoaW50LCB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlcywgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzo1MTpcXHR0ZW1wX3JpbmcgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB3eF9yaW5nLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtNTItXFx0aWYgKCF0ZW1wX3JpbmcpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jPTM5PXN0YXRpYyBpbnQgdHhnYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNzQtXFx0aSA9IG1heF90KGludCwgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXMsIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYzo3NTpcXHR0ZW1wX3JpbmcgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB3eF9yaW5nLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy03Ni1cXHRpZiAoIXRlbXBfcmluZykge1xcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYz0xNDcwPXN0YXRpYyB2b2lkIG5ldHZzY19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYy0xNTI2LVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM6MTUyNzpcXHRwY3B1X3N1bSA9IGt2bWFsbG9jX29ianMoc3RydWN0IG5ldHZzY19ldGh0b29sX3BjcHVfc3RhdHMsIG5yX2NwdV9pZHMpO1xcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMTUyOC1cXHRpZiAoIXBjcHVfc3VtKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTMvaXB1My1kbWFtYXAuYz0zND1zdGF0aWMgc3RydWN0IHBhZ2UgKippbWd1X2RtYW1hcF9hbGxvY19idWZmZXIoc2l6ZV90IHNpemUsIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9pcHUzL2lwdTMtZG1hbWFwLmMtNDEtXFx0LyogQWxsb2NhdGUgbWVtIGZvciBhcnJheSBvZiBwYWdlIHB0cnMgKi9cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaXB1My9pcHUzLWRtYW1hcC5jOjQyOlxcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcGFnZXMsIGNvdW50KTtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaXB1My9pcHUzLWRtYW1hcC5jLTQzLVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfZnMuYz04MDc9c3RhdGljIHZvaWQgKmZmc19idWlsZF9zZ19saXN0KHN0cnVjdCBzZ190YWJsZSAqc2d0LCBzaXplX3Qgc3opXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9mcy5jLTgxOC1cXHRuX3BhZ2VzID0gUEFHRV9BTElHTihzeikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9mcy5jOjgxOTpcXHRwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbl9wYWdlcyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfZnMuYy04MjAtXFx0aWYgKCFwYWdlcykge1xcbi0tXFxuZHJpdmVycy91c2IvaG9zdC94aGNpLXNpZGViYW5kLmM9MTg9eGhjaV9yaW5nX3RvX3NndGFibGUoc3RydWN0IHhoY2lfc2lkZWJhbmQgKnNiLCBzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nKVxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC94aGNpLXNpZGViYW5kLmMtMzAtXFx0bl9wYWdlcyA9IFBBR0VfQUxJR04oc3opIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuZHJpdmVycy91c2IvaG9zdC94aGNpLXNpZGViYW5kLmM6MzE6XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5fcGFnZXMpO1xcbmRyaXZlcnMvdXNiL2hvc3QveGhjaS1zaWRlYmFuZC5jLTMyLVxcdGlmICghcGFnZXMpXFxuLS1cXG5kcml2ZXJzL3hlbi9ldnRjaG4uYz0zMTg9c3RhdGljIGludCBldnRjaG5fcmVzaXplX3Jpbmcoc3RydWN0IHBlcl91c2VyX2RhdGEgKnUpXFxuLS1cXG5kcml2ZXJzL3hlbi9ldnRjaG4uYy0zMzQtXFxuZHJpdmVycy94ZW4vZXZ0Y2huLmM6MzM1OlxcdG5ld19yaW5nID0ga3ZtYWxsb2Nfb2JqcygqbmV3X3JpbmcsIG5ld19zaXplKTtcXG5kcml2ZXJzL3hlbi9ldnRjaG4uYy0zMzYtXFx0aWYgKCFuZXdfcmluZylcXG4tLVxcbmRyaXZlcnMveGVuL2dudGRldi5jPTEzOD1zdHJ1Y3QgZ250ZGV2X2dyYW50X21hcCAqZ250ZGV2X2FsbG9jX21hcChzdHJ1Y3QgZ250ZGV2X3ByaXYgKnByaXYsIGludCBjb3VudCxcXG4tLVxcbmRyaXZlcnMveGVuL2dudGRldi5jLTE0Ny1cXG5kcml2ZXJzL3hlbi9nbnRkZXYuYzoxNDg6XFx0YWRkLVxcdTAwM2VncmFudHMgICAgPSBrdm1hbGxvY19vYmpzKGFkZC1cXHUwMDNlZ3JhbnRzWzBdLCBjb3VudCk7XFxuZHJpdmVycy94ZW4vZ250ZGV2LmM6MTQ5OlxcdGFkZC1cXHUwMDNlbWFwX29wcyAgID0ga3ZtYWxsb2Nfb2JqcyhhZGQtXFx1MDAzZW1hcF9vcHNbMF0sIGNvdW50KTtcXG5kcml2ZXJzL3hlbi9nbnRkZXYuYzoxNTA6XFx0YWRkLVxcdTAwM2V1bm1hcF9vcHMgPSBrdm1hbGxvY19vYmpzKGFkZC1cXHUwMDNldW5tYXBfb3BzWzBdLCBjb3VudCk7XFxuZHJpdmVycy94ZW4vZ250ZGV2LmMtMTUxLVxcdGFkZC1cXHUwMDNlcGFnZXMgICAgID0ga3Z6YWxsb2Nfb2JqcyhhZGQtXFx1MDAzZXBhZ2VzWzBdLCBjb3VudCk7XFxuLS1cXG5kcml2ZXJzL3hlbi9nbnRkZXYuYy0xNjAtXFx0aWYgKHhlbl9wdl9kb21haW4oKSkge1xcbmRyaXZlcnMveGVuL2dudGRldi5jOjE2MTpcXHRcXHRhZGQtXFx1MDAzZWttYXBfb3BzICAgPSBrdm1hbGxvY19vYmpzKGFkZC1cXHUwMDNla21hcF9vcHNbMF0sIGNvdW50KTtcXG5kcml2ZXJzL3hlbi9nbnRkZXYuYzoxNjI6XFx0XFx0YWRkLVxcdTAwM2VrdW5tYXBfb3BzID0ga3ZtYWxsb2Nfb2JqcyhhZGQtXFx1MDAzZWt1bm1hcF9vcHNbMF0sIGNvdW50KTtcXG5kcml2ZXJzL3hlbi9nbnRkZXYuYy0xNjMtXFx0XFx0aWYgKE5VTEwgPT0gYWRkLVxcdTAwM2VrbWFwX29wcyB8fCBOVUxMID09IGFkZC1cXHUwMDNla3VubWFwX29wcylcXG4tLVxcbmZzL2NlcGgvZmlsZS5jPTE0Nj1zdGF0aWMgc3NpemVfdCBpdGVyX2dldF9idmVjc19hbGxvYyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBtYXhzaXplLFxcbi0tXFxuZnMvY2VwaC9maWxlLmMtMTYxLVxcdCAqL1xcbmZzL2NlcGgvZmlsZS5jOjE2MjpcXHRidiA9IGt2bWFsbG9jX29ianMoKmJ2LCBucGFnZXMsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG5mcy9jZXBoL2ZpbGUuYy0xNjMtXFx0aWYgKCFidilcXG4tLVxcbmZzL2NvcmVkdW1wLmM9MTcyMD1zdGF0aWMgYm9vbCBkdW1wX3ZtYV9zbmFwc2hvdChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi0tXFxuZnMvY29yZWR1bXAuYy0xNzM4LVxcbmZzL2NvcmVkdW1wLmM6MTczOTpcXHRjcHJtLVxcdTAwM2V2bWFfbWV0YSA9IGt2bWFsbG9jX29ianMoKmNwcm0tXFx1MDAzZXZtYV9tZXRhLCBjcHJtLVxcdTAwM2V2bWFfY291bnQpO1xcbmZzL2NvcmVkdW1wLmMtMTc0MC1cXHRpZiAoIWNwcm0tXFx1MDAzZXZtYV9tZXRhKSB7XFxuLS1cXG5mcy9leGZhdC9iYWxsb2MuYz03Mz1zdGF0aWMgaW50IGV4ZmF0X2FsbG9jYXRlX2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXhmYXQvYmFsbG9jLmMtOTctXFx0XFx0XFx0KHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKSkgKyAxO1xcbmZzL2V4ZmF0L2JhbGxvYy5jOjk4OlxcdHNiaS1cXHUwMDNldm9sX2FtYXAgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzYmktXFx1MDAzZW1hcF9zZWN0b3JzKTtcXG5mcy9leGZhdC9iYWxsb2MuYy05OS1cXHRpZiAoIXNiaS1cXHUwMDNldm9sX2FtYXApXFxuLS1cXG5mcy9leHQyL3N1cGVyLmM9ODY0PXN0YXRpYyBpbnQgZXh0Ml9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2V4dDIvc3VwZXIuYy0xMDk4LVxcdFxcdCAgIEVYVDJfREVTQ19QRVJfQkxPQ0soc2IpO1xcbmZzL2V4dDIvc3VwZXIuYzoxMDk5OlxcdHNiaS1cXHUwMDNlc19ncm91cF9kZXNjID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgZGJfY291bnQpO1xcbmZzL2V4dDIvc3VwZXIuYy0xMTAwLVxcdGlmIChzYmktXFx1MDAzZXNfZ3JvdXBfZGVzYyA9PSBOVUxMKSB7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6MDEuNTQ2NTA0NjIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMjYzNDQyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1lbW9yeSBBbGxvY2F0aW9uIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB1c3VhbGx5IGBrdm1hbGxvY19hcnJheWAsIHRoYXQncyB0aGUgZXN0YWJsaXNoZWQgZnVuY3Rpb24gZm9yIHRoaXMuIEJ1dCB0aGVuIEkgc2F3IGBrdm1hbGxvY19vYmpzYCBhbmQgaXQgc3BhcmtlZCBhIHF1ZXN0aW9uLiBXaGVyZSBpcyB0aGF0IGRlZmluZWQ/IEl0J3MgdGltZSB0byBjaGVjayB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlIGZvciB0aGVzZSBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NsYWIuaGAuIFRoYXQncyB3aGVyZSBga3ZtYWxsb2NfYXJyYXlgIGlzIGRlZmluZWQsIHNvIHRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbiwgb3IgYW55IGhpbnRzLCBhYm91dCBga3ZtYWxsb2Nfb2Jqc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIHJlbGF0aW9uc2hpcCwgaWYgYW55LCBpcyBiZXR3ZWVuIHRoZSB0d28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDg3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6MDguODcyODU1Njc3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk0MzAwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtYWxsb2Nfb2Jqc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDUxPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNDItXFx0X19hbGxvY19vYmpzKGt2bWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTQzOiNkZWZpbmUga3ZtYWxsb2Nfb2JqcyhQLCBDT1VOVCwgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE0NC1cXHRfX2FsbG9jX29ianMoa3ZtYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6MDguOTkyMjk0MzU2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTc3ODMyNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYSBzd2l0Y2ggZnJvbSBga21hbGxvY19vYmpzYCB0byBga3ZtYWxsb2Nfb2Jqc2AuIEkgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBpbmNsdWRlL2xpbnV4L3NsYWIuaGAgaGVhZGVyIGZpbGUgdG8gcmVmcmVzaCBteSBtZW1vcnksIGFuZCwgeWVzLCB0aGF0J3MgY29ycmVjdC4gYGt2bWFsbG9jYCBjYW4gZmFsbCBiYWNrIHRvIHZtYWxsb2MsIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS5cblxuVGhlIGZpcnN0IHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHNpZ25pZmljYW50IGVub3VnaCBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIHByb21wdCdzIGNyaXRlcmlhLCBJIGNvbnNpZGVyIHRoaXMuIEl0J3Mgbm90IGEgZG9jdW1lbnRhdGlvbiB1cGRhdGUgb3IgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGt2bWFsbG9jYCBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIGZhbGxiYWNrIHRvIHZtYWxsb2Mgd2hlbiBga21hbGxvY2Agd291bGQgZmFpbCwgZm9yIGxhcmdlIGFsbG9jYXRpb25zLiBUaGF0J3MgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gZXhlY3V0aW9uIGZsb3cuIEJ1dCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IFRoZSBwcm9tcHQgcHJvdmlkZXMgc29tZSBndWlkYW5jZS5cblxuSW5pdGlhbGx5LCBJIHRoaW5rIHRoaXMgbWlnaHQgbm90IGludHJvZHVjZSBmdW5kYW1lbnRhbGx5IG5ldyAqbG9naWMqIHRvIGZ1enosIGJ1dCBpdCBkb2VzIGFsdGVyIGJlaGF2aW9yLiBBIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiB3aGVyZSBpdCBtaWdodCBoYXZlIGZhaWxlZCBiZWZvcmUgKmlzKiBhIHJlbGV2YW50IGNoYW5nZSB0byB0ZXN0LiBTbywgSSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGUgYXJlYSBpcyByZWFjaGFibGUuXG5cbkkgYWxzbyBub3RlIHRoZSBhZGRpdGlvbiBvZiBgZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGVgLCB3aGljaCBpcyBhIGt1bml0IHRlc3QuIFdoaWxlIEkgZG9uJ3QgZGlzY2FyZCB0aGUgcG9zc2liaWxpdHkgb2YgaXQgYmVpbmcgaGVscGZ1bCwga3VuaXQgdGVzdHMgYXJlIHVzdWFsbHkgbm90IHRoZSBwcmltYXJ5IGZvY3VzIG9mIGZ1enppbmcgZWZmb3J0cywgc28gSSBkb24ndCBnaXZlIHRoaXMgc2lnbmlmaWNhbnQgd2VpZ2h0IGluaXRpYWxseS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYG1zZWNzX3RvX2ppZmZpZXNgIHRvIGBzZWNzX3RvX2ppZmZpZXNgIHdoaWNoIGlzIGEgbWFjcm8gY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiBJIHNraXAgb3ZlciB0aGF0IGFzIGl0IGlzIG5vdCB0aGUgbWFpbiBpc3N1ZS5cblxuVGhlbiBJIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIGlzc3VlOiB0aGUgc2luZ2xlIGNvZGUgY2hhbmdlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYDpcblxuYGBgY1xucmFuZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcmFuZ2VzLCBpLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbmBgYFxuSSBjaGVjayB0aGUgY29kZSB0aGF0IHN1cnJvdW5kcyBpdCBhbmQgbm90ZSB0aGUgcGF0Y2gncyBga2ZyZWVgIGlzIGFsc28gYGt2ZnJlZWAgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBjaGFuZ2luZyB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbiB3YXJyYW50cyBhZGRpdGlvbmFsIGZ1enppbmcgZWZmb3J0cy5cblxuSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0LiBVc3VhbGx5LCBzd2l0Y2hpbmcgdG8gYGt2bWFsbG9jYCBpcyBhIGJ1ZyBmaXggb3IgaW1wcm92ZW1lbnQgZm9yIGxhcmdlIGFsbG9jYXRpb25zLiBJIGRvbid0IHNlZSBhbnkgXCJuZXdcIiBjb2RlIHRoYXQgaXMgbm93IHJlYWNoYWJsZSBieSB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24sIGJ1dCBhIHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmUgaGFzIGJlZW4gY29ycmVjdGVkLlxuXG5BY2NvcmRpbmcgdG8gdGhlIHByb21wdCwgaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRvIHJlYWNoIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgLiBJIGNoZWNrIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIC1cdTAwM2UgYGRhbW9uX2NvbW1pdF9jdHhgIC1cdTAwM2UgYGRhbW9uX2NvbW1pdF90YXJnZXRgIC1cdTAwM2UgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgYW5kIHJlYWxpemUgdGhhdCBpdCdzIHJlYWNoYWJsZSB2aWEgc3lzZnMgd3JpdGVzIHRvIERBTU9OLlxuXG5TaW5jZSBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aCBhbiBleGVjdXRpb24gZmxvdyBhbHRlcmF0aW9uICh2bWFsbG9jIGZhbGxiYWNrKSwgaXQncyBwcm9iYWJseSAqd29ydGgqIGZ1enppbmcuIFdlIGNhbiBwcm92aWRlIGEgbGFyZ2UgbnVtYmVyIG9mIHJlZ2lvbnMgdG8gc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSB2bWFsbG9jIGZhbGxiYWNrLiBXZSBjYW4gbm93IHRlc3Qgd2hldGhlciB0aGlzIGZhbGxiYWNrIGZ1bmN0aW9ucyBjb3JyZWN0bHksIGFuZCBpdCBjb3VsZCBpZGVudGlmeSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdm1hbGxvYyB1c2FnZSwgc3VjaCBhcyBlbnN1cmluZyB0aGF0IHRoZSBkb3duc3RyZWFtIGBkYW1vbl9zZXRfcmVnaW9uc2AgZnVuY3Rpb24gaGFuZGxlcyBwb3RlbnRpYWxseSBub24tY29udGlndW91cyBtZW1vcnksIG9yIHdoZXRoZXIgdGhlIGFsbG9jYXRpb24gZmFpbHVyZSBpcyBzaW1wbHkgbWFza2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjg4NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6MjMuOTcwMTMwODU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTYxNDMxMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF9yZWdpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMDEzPXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDE0LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDE1OmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDE2LVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeik7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzE5PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MC0vKlxcbm1tL2RhbW9uL2NvcmUuYzozNDE6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cXG5tbS9kYW1vbi9jb3JlLmMtMzQyLSAqIEB0OlxcdFxcdHRoZSBnaXZlbiB0YXJnZXQuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzUxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNTI6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxubW0vZGFtb24vY29yZS5jLTM1My1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTM0Nz1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM2NC1cXHRcXHRyYW5nZXNbaSsrXSA9IHNyY19yZWdpb24tXFx1MDAzZWFyO1xcbm1tL2RhbW9uL2NvcmUuYzoxMzY1OlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKGRzdCwgcmFuZ2VzLCBpLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTEzNjYtXFx0a3ZmcmVlKHJhbmdlcyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzY5Nj1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzcxMC1cXHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XFxubW0vZGFtb24vY29yZS5jOjM3MTE6XFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFxcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzcxMi19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE5NTc9c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xOTgxLVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjE5ODI6XFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBzeXNmc19yZWdpb25zLVxcdTAwM2VuciwgbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vc3lzZnMuYy0xOTgzLW91dDpcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0zODk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQxMC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NDExOlxcdGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MTItXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTkwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTAzLS8qXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxMDQ6ICogVGVzdCAnZGFtb25fc2V0X3JlZ2lvbnMoKSdcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwNS0gKlxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMTgtICogcmVnaW9ucy4gIFRoZSB1cGRhdGUgb2YgY3VycmVudCB0YXJnZXQgcmVnaW9ucyBpcyB0aGUgcm9sZSBvZlxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTE5OiAqICdkYW1vbl9zZXRfcmVnaW9ucygpJy5cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEyMC0gKlxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0xMjU9c3RhdGljIHZvaWQgZGFtb25fZG9fdGVzdF9hcHBseV90aHJlZV9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTQ3LVxcdH1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE0ODpcXHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBucl9yZWdpb25zIC8gMixcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0OS1cXHRcXHRcXHRcXHREQU1PTl9NSU5fUkVHSU9OX1NaKSkge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTEtXFx0XFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgTlVMTCk7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTI6XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsXFxcIik7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTMtXFx0fVxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTUtXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTY6XFx0aWYgKGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opKSB7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTctXFx0XFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgTlVMTCk7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTg6XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic2Vjb25kIGRhbW9uX3NldF9yZWdpb25zKCkgZmFpbFxcXCIpO1xcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU5LVxcdH1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MTkxPXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfaW5pdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjA3LVxcbm1tL2RhbW9uL3ZhZGRyLmM6MjA4OlxcdGRhbW9uX3NldF9yZWdpb25zKHQsIHJlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjA5LX1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjI2PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3VwZGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIzMy1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi92YWRkci5jOjIzNDpcXHRcXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCB0aHJlZV9yZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG5tbS9kYW1vbi92YWRkci5jLTIzNS1cXHR9XFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEyNS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTI2OlxcdHJldCA9IGRhbW9uX3NldF9yZWdpb25zKHRhcmdldCwgXFx1MDAyNnJhbmdlLCAxLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTI3LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjUxOjI2LjkzMTU3MTg3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzU1ODc3NjM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmUgaW4gREFNT04uIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZSBmcm9tIGBrbWFsbG9jYCB0byBga3ZtYWxsb2NgIGZvciBgcmFuZ2VzYCBhbGxvY2F0aW9uLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBmdXp6YWJsZT9cIiBTaW5jZSBJIGFtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBJIGtub3cgdGhpcyBpcyBpbXBvcnRhbnQsIEkgbmVlZCB0byBzZWUgaWYgaXQgbWVldHMgdGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nLlxuXG5Jbml0aWFsbHksIGl0IHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCB0byBhdm9pZCBhbGxvY2F0aW9uIGZhaWx1cmUgd2hlbiBoYW5kbGluZyBhIHBvdGVudGlhbGx5IGxhcmdlIG51bWJlciBvZiByZWdpb25zIChgbnJfcmVnaW9uc2ApLiBGdXp6aW5nIHdvdWxkIG1vc3RseSBjb25maXJtIHRoYXQgaXQgZG9lc24ndCBjcmFzaCBhbnltb3JlLiBIb3dldmVyLCBga3ZtYWxsb2NgICpjYW4qIHJldHVybiB2bWFsbG9jJ2QgbWVtb3J5LCB3aGljaCBpcyBhIGtleSBkaWZmZXJlbmNlLiBUaGF0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkkgYnJpZWZseSBjb25zaWRlcmVkIGlmIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGRvY3VtZW50YXRpb24gbmVlZCB0byBiZSBjb25zaWRlcmVkLiBJIHJldmlld2VkIGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAsIHJlbGV2YW50IGRvY3VtZW50YXRpb24gaW4gYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0YCwgYERvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdGAgYW5kIGBtbS9kYW1vbi9zdGF0LmNgIGZvciBkb2N1bWVudGF0aW9uIGFuZCBtYWNybyBjaGFuZ2VzLiBOb25lIG9mIHRob3NlIHNlZW0gdG8gaW5kaWNhdGUgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneTpcblxuYGBgY1xuLVx0cmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsIGksIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuK1x0cmFuZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcmFuZ2VzLCBpLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbi4uLlxuLVx0a2ZyZWUocmFuZ2VzKTtcbitcdGt2ZnJlZShyYW5nZXMpO1xuYGBgXG5cblRoaXMgY2hhbmdlICpkb2VzKiBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cgYnkgYWxsb3dpbmcgdGhlIGFsbG9jYXRpb24gdG8gc3VjY2VlZCB2aWEgdm1hbGxvYyBpbnN0ZWFkIG9mIGZhaWxpbmcuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBpcyBpdCB3b3J0aCBmdXp6aW5nP1xuXG5JZiBJIHNheSB5ZXMsIEkgbmVlZCB0byBwcm92aWRlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2Agc2luY2UgaXQgZnVuY3Rpb25hbGx5IGNoYW5nZXMgZXhlY3V0aW9uIGZsb3cuXG5cbkkgd2VudCBiYWNrIHRvIGxvb2sgYXQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgYWdhaW4uIEl0IGRlYWxzIHdpdGggYWxsb2NhdGlvbiBvZiBhbiBhcnJheSBvZiBgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VgLiBUaGUgc2l6ZSBvZiB0aGUgYXJyYXkgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMuIElmIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBpcyBsYXJnZSwgYGttYWxsb2NgIGNhbiBmYWlsLCBidXQgYGt2bWFsbG9jYCB3aWxsIHN1Y2NlZWQuIFRoaXMgaXMgYSBidWcgZml4LCBidXQgYSBjaGFuZ2Ugb2YgdGhpcyBuYXR1cmUgY291bGQgdW5jb3ZlciBwcm9ibGVtcyByZWxhdGVkIHRvIGFzc3VtcHRpb25zIGFib3V0IHRoZSByZWdpb24gYXJyYXkuIEl0IHdvdWxkIGFsc28gbGV0IG1lIHRlc3Qgd2hhdCBoYXBwZW5zIGluIGFuIGVkZ2UgY2FzZSB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiByZWdpb25zLlxuXG5JIGNvbnNpZGVyZWQgdGhhdCBgZGFtb25fc2V0X3JlZ2lvbnNgIG9ubHkgaXRlcmF0ZXMgb3ZlciByZWdpb25zOyBpdCBkb2Vzbid0ICpyZXF1aXJlKiBjb250aWd1b3VzIG1lbW9yeSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY2hhbmdlIHRvIGBrdm1hbGxvY2AgaXMgc29tZXdoYXQgaXNvbGF0ZWQuXG5cbklmIEkgZGVjaWRlIHRoaXMgaXMgd29ydGggZnV6emluZzpcbiogICBgRm9jdXNTeW1ib2xzYDogYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2BcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2BcblxuXG4iLCJJbnB1dFRva2VucyI6MzY1MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjUxOjQ0LjQ5MDM1MjEyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4MzczNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6NDQuNzQ4NzMzNzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg2MTQwMjQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBgbW0vZGFtb24vY29yZS5jYCBpcyBiZWluZyBjb21waWxlZCB1bmRlciBgQ09ORklHX0RBTU9OYC5cIiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIERhdGEgQWNjZXNzIE1PTml0b3IsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlbiwgdGhlcmUncyB0aGlzIG5ldyB0ZXN0LCBgZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGVgIGFkZGVkIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiAgSXQgc2VlbXMgdG8gYmUgYSB0ZXN0IHZlcmlmeWluZyBhIHJhY2UgY29uZGl0aW9uIGZpeCByZWxhdGVkIHRvIHRoZSBgZGFtb3Nfd2Fsa2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBqdXN0IGEgdGVzdCBhZGRpdGlvbiwgbm90IHRvdWNoaW5nIHRoZSBhY3R1YWwgY29yZSBsb2dpYyBpdHNlbGYuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBLY29uZmlnIG1vZGlmaWNhdGlvbnMsIGNvbW1lbnRzLCBsb2dnaW5nIGNoYW5nZXMsIGRlY29yYXRpdmUgbW9kaWZpY2F0aW9ucyBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiAgSSBoYXZlIHRvIGRldGVybWluZSBpZiB0aGlzIGFwcGxpZXMuXG5cbk9rYXksIGNoZWNraW5nIHRoZSBmaWxlcywgbm8sIGl0IGluY2x1ZGVzIGEgY2hhbmdlIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2bWFsbG9jX29ianNgIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBIbW0sIGBrbWFsbG9jX29ianNgIGlzIGEgbWFjcm8sIEkgc2VlLiBTd2l0Y2hpbmcgdGhhdCBtYWNybyB0byBga3ZtYWxsb2Nfb2Jqc2AgbWVhbnMgdGhhdCBpdOKAmXMgY2hhbmdpbmcgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3IsIHVzaW5nIGB2bWFsbG9jYCBpZiBuZWVkZWQgaW5zdGVhZCBvZiBiZWluZyBsaW1pdGVkIHRvIGBrbWFsbG9jYC4gRG9lcyB0aGlzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdz8gWWVzLCBhYnNvbHV0ZWx5LiBJdCBhbGxvd3MgbGFyZ2VyIGFsbG9jYXRpb25zIHRvIHN1Y2NlZWQsIHdoaWNoIGNvdWxkIHJldmVhbCBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLlxuXG5CdXQgaXMgdGhpcyBjaGFuZ2UgcmVhbGx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlICpmdXp6ZWQqPyBJZiBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBzeXprYWxsZXIgd2lsbCBhdHRlbXB0IHRvIGZ1enogYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AsIGJlY2F1c2UgaXQncyB0aGUgbW9zdCBsaWtlbHkgZW50cnkgcG9pbnQgdG8gZ2V0IHRyaWdnZXJlZC4gSXMgaXQgYSBnb29kIGlkZWE/IFllcywgYmVjYXVzZSBpdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgbG9naWMuICBBbHJpZ2h0LCBsZXQgbWUgbWFrZSBzdXJlIHRoYXQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgaXMgcmVhY2hhYmxlLiBZZXAsIHZpYSBzeXNmcyB3cml0ZXMuIFRoYXQgc2hvdWxkIGRvIGl0LiAgSSdsbCB3YW50IHRvIGNoZWNrIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIGFuZCBzZWUgd2hhdCB0aGF0IGV4cG9zZXMsIGJ1dCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5Mzg5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjUxOjU0LjYxMDE0MDYwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwMDA3MDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19jb21taXRfaW5wdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMDg2PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDMtLypcXG5tbS9kYW1vbi9zeXNmcy5jOjIxMDQ6ICogZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KCkgLSBDb21taXQgdXNlciBpbnB1dHMgdG8gYSBydW5uaW5nIGtkYW1vbmQuXFxubW0vZGFtb24vc3lzZnMuYy0yMTA1LSAqIEBrZGFtb25kOlxcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDgtICovXFxubW0vZGFtb24vc3lzZnMuYzoyMTA5OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxubW0vZGFtb24vc3lzZnMuYy0yMTEwLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjM1MT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzYzLVxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjM2NDpcXHRcXHRcXHRcXHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjM2NS1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTE6NTcuNDEwMjIyMzMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTA0ODA2MDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZSBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgdGhpcyByZWFjaGFibGU/IFllcywgdGhlIGNoYW5nZSBpcyByZWFjaGFibGUuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbiBsaWVzIGluIHRoZSBga3ZtYWxsb2Nfb2Jqc2AgY2hhbmdlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuIFNpbmNlIHRoZSBjaGFuZ2UgdG8gYGt2bWFsbG9jX29ianNgICpkb2VzKiBhbHRlciBleGVjdXRpb24gZmxvdywgc3BlY2lmaWNhbGx5IGJ5IGludHJvZHVjaW5nIGEgYHZtYWxsb2NgIGZhbGxiYWNrLCBpdCBmYWxscyBvdXRzaWRlIHRoZSBjYXRlZ29yeSBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlLlwiIFRoZSBjaGFuZ2UgaXMgYWxzbyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzLiBUaGVyZWZvcmUsIEknbSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgYWNjb3JkaW5nIHRvIHRoZSBwcm9tcHQsIGlmIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYCwgSSBuZWVkIHRvIGlkZW50aWZ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIExldCdzIGdldCB0byBpdC5cblxuVGhlIHByaW1hcnkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgaW4gYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AuIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gR2l2ZW4gdGhlIHByb21wdCwgSSBuZWVkIHRvIGxpc3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gRGVzcGl0ZSBiZWluZyBhIHN0YXRpYyBmdW5jdGlvbiwgc3l6a2FsbGVyICpjYW4qIGZ1enogaXQgaWYgcmVhY2hhYmxlLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4gSSdsbCBhZGQgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgdG8gYEZvY3VzU3ltYm9sc2AuIFRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSwgbGlrZSBgZGFtb25fY29tbWl0X3RhcmdldGAgLCBgZGFtb25fY29tbWl0X2N0eGAgYW5kIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIGJ1dCBJJ2xsIGZvY3VzIG9uIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5OZXh0LCBJIG11c3QgaWRlbnRpZnkgdGhlIHJlcXVpcmVkIGBDT05GSUdfYCBvcHRpb25zLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLiBMb29raW5nIGF0IHRoZSBjb2RlLCBwYXJ0aWN1bGFybHkgdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUgd2hpY2ggaW5jbHVkZXMgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBDT05GSUdfREFNT05gIGlzIHJlcXVpcmVkLiBUaGUgc3lzZnMgaW50ZXJmYWNlLCBhcyB0aGUgcHJpbWFyeSBwYXRoIHRvIHRoZSBjb2RlLCByZXF1aXJlcyBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgdGhvdWdoIG90aGVyIHJlbGF0ZWQgc2V0dGluZ3MgYXJlIHVzZWQgbGlrZSBgREFNT05fUkVDTEFJTWAuIFNvLCBJJ2xsIGxpc3Q6XG5gREFNT05gXG5gREFNT05fU1lTRlNgXG5hcyB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQuXG5cblRoaXMgc2VlbXMgdG8gYWRkcmVzcyB0aGUgcHJvbXB0IHJlcXVpcmVtZW50cyBjb21wbGV0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg5NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTo1MjowOS4zMTUwMzQwMzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDAzOTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3JlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vTWFrZWZpbGUtMi1cXG5tbS9kYW1vbi9NYWtlZmlsZTozOm9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxubW0vZGFtb24vTWFrZWZpbGUtNC1vYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTI6MDkuNDM1MDg0NDM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTAwMzExODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgREFNT04gTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYG9iai15IDo9IGNvcmUub2AuIFRoYXQncyB0aGUgY29yZSBvYmplY3QgZmlsZSBmb3IgdGhlIERBTU9OIG1vZHVsZSwgY2xlYXJseS4gV2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGNvbnRleHQuIFRoaXMgZGlyZWN0b3J5LCBgbW0vZGFtb24vYCwgaXMgb25seSBjb21waWxlZCBhbmQgaW5jbHVkZWQgaWYgYENPTkZJR19EQU1PTmAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCdzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgZGVwZW5kZW5jaWVzIGhlcmUuIEl0J3MgYSBjb25kaXRpb25hbCBpbmNsdXNpb24uIEdvb2QsIHRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGFuZCByZW1pbmRzIG1lIHRvIGFsd2F5cyBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzcxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTI6MTUuMDg1MTE5MTk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc0NTc5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTM0PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgKz0gZGVidWdfcGFnZV9yZWYub1xcbm1tL01ha2VmaWxlOjEzNTpvYmotJChDT05GSUdfREFNT04pICs9IGRhbW9uL1xcbm1tL01ha2VmaWxlLTEzNi1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICs9IHVzZXJjb3B5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTI6MTUuMjMyNTg0OTgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzc3MzUxNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCBmb3IgREFNT04gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBlc3NlbnRpYWw6IGBDT05GSUdfREFNT05gIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQg4oCTIG5vIHF1ZXN0aW9uIHRoZXJlLiBOb3csIHRoZSBgQ09ORklHX0RBTU9OX1NZU0ZTYCBwYXJ0Li4uIGl0J3MgdGhlIHN0YW5kYXJkIHVzZXItc3BhY2UgaW50ZXJmYWNlLCByaWdodD8gQmVzdCBwcmFjdGljZSBpcyB0byBpbmNsdWRlIGl0IGZvciBmdWxsIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgZm9yIHRlc3RpbmcsIHNvIEknbGwgZW5hYmxlIHRoYXQgdG9vLiBTbyBmYXIsIHdlJ3JlIGF0IGBEQU1PTmAgYW5kIGBEQU1PTl9TWVNGU2AuXG5cblRoZW4sIEkgc2VlIGEgS1VuaXQgdGVzdCBtZW50aW9uZWQ6IGBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZWAuIFRoYXQncyBjb21waWxlZCB3aXRoIGBDT05GSUdfREFNT05fS1VOSVRfVEVTVGAuIFRoZSBwcm9tcHQgZG9lcyBhc2sgdG8gaWRlbnRpZnkgbmVjZXNzYXJ5IGNvbmZpZ3MgZm9yIHRlc3RpbmcuIEtVbml0IGlzbid0ICpkaXJlY3RseSogaW50ZWdyYXRlZCBpbnRvIHN5emthbGxlciwgd2hpY2ggaXMgd2hhdCB3ZSdyZSBmb2N1c2VkIG9uIGZvciBmdXp6aW5nLCBzbyBpdCdzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuIEVuYWJsaW5nIGl0IHdvbid0IGh1cnQsIGJ1dCB0aGUgcHJpbWFyeSBmdXp6aW5nIG1ldGhvZCBkb2Vzbid0IHVzZSBpdCwgc28gSSdtIGxlYXZpbmcgYERBTU9OX0tVTklUX1RFU1RgIG91dC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBmdW5jdGlvbmFsIGNoYW5nZXMuIEFoLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIGluIGBtbS9kYW1vbi9zdGF0LmNgOiBgbXNlY3NfdG9famlmZmllc2AgY2hhbmdlZCB0byBgc2Vjc190b19qaWZmaWVzYC4gVGhpcyBpcyB3aXRoaW4gYGRhbW9uX3N0YXRfZGFtb25fY2FsbF9mbmAsIHNvIGBDT05GSUdfREFNT05fU1RBVGAgaXMgcmVsZXZhbnQuIEkgd2lsbCBpbmNsdWRlIHRoaXMuXG5cblNvLCB0aGUgZGVmaW5pdGl2ZSBsaXN0OiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX1NUQVRgLlxuXG5UaGUgcGF0Y2gncyBrZXkgY2hhbmdlIGlzIHRoZSBhbGxvY2F0b3Igc3dpdGNoIGluIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2bWFsbG9jX29ianNgLCBlbmFibGluZyBsYXJnZXIgYWxsb2NhdGlvbnMgdGhyb3VnaCBhIHZtYWxsb2MgZmFsbGJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gY29yZSBrZXJuZWwgbG9naWMsIGFuZCBpdCBuZWVkcyB0byBiZSBmdXp6ZWQgdG8gdmVyaWZ5IHRoZSB2bWFsbG9jIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLiBUaGUgcGF0Y2ggYWxzbyBoYXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCB0eXBvIGZpeGVzLCBhIG1hY3JvIHNpbXBsaWZpY2F0aW9uIGluIGBkYW1vbl9zdGF0LmNgLCBhbmQgaW5jbHVkZXMgdGhlIEtVbml0IHRlc3QsIHdoaWNoIGlzIG5vdCBlc3NlbnRpYWwgdG8gZnV6emluZywgYXMgc3l6a2FsbGVyIGRvZXNuJ3QgdXNlIGl0LlxuXG5UaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgaXMgdGhpczogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc2AgdG8gdXNlIGBrdm1hbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgLCBhbGxvd2luZyBsYXJnZSBhbGxvY2F0aW9ucyB0byBmYWxsIGJhY2sgdG8gdm1hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBmYWxsYmFjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiBPdGhlciBjaGFuZ2VzIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCB0eXBvIGZpeGVzLCBhIG1hY3JvIHNpbXBsaWZpY2F0aW9uIGluIGBkYW1vbl9zdGF0LmNgLCBhbmQgYSBuZXcgS1VuaXQgdGVzdC5cIlxuXG5gV29ydGhGdXp6aW5nPXRydWVgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuIFdlJ3ZlIGdvdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIGludm9sdmluZyBhIG1lbW9yeSBhbGxvY2F0b3IuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY3NSwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6NTI6MjcuNjA5OTQwOTkxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzU5MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1NUQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zYCB0byB1c2UgYGt2bWFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AsIGFsbG93aW5nIGxhcmdlIGFsbG9jYXRpb25zIHRvIGZhbGwgYmFjayB0byB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGZhbGxiYWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuIE90aGVyIGNoYW5nZXMgaW5jbHVkZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHR5cG8gZml4ZXMsIGEgbWFjcm8gc2ltcGxpZmljYXRpb24gaW4gYGRhbW9uX3N0YXQuY2AsIGFuZCBhIG5ldyBLVW5pdCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fU1RBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnNgIHRvIHVzZSBga3ZtYWxsb2Nfb2Jqc2AgaW5zdGVhZCBvZiBga21hbGxvY19vYmpzYCwgYWxsb3dpbmcgbGFyZ2UgYWxsb2NhdGlvbnMgdG8gZmFsbCBiYWNrIHRvIHZtYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZmFsbGJhY2sgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy4gT3RoZXIgY2hhbmdlcyBpbmNsdWRlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdHlwbyBmaXhlcywgYSBtYWNybyBzaW1wbGlmaWNhdGlvbiBpbiBgZGFtb25fc3RhdC5jYCwgYW5kIGEgbmV3IEtVbml0IHRlc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh2xl[1] Phase: Succeeded StartedAt: 2026-06-29 15:52:39 +0000 UTC FinishedAt: 2026-06-29 15:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 15:52:39 +0000 UTC FinishedAt: 2026-06-29 15:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2] Phase: Succeeded StartedAt: 2026-06-29 15:52:39 +0000 UTC FinishedAt: 2026-06-29 19:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-29 15:52:39 +0000 UTC FinishedAt: 2026-06-29 19:54:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","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-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 15:52:39 +0000 UTC FinishedAt: 2026-06-29 15:52:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 15:52:39 +0000 UTC FinishedAt: 2026-06-29 15:52:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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-workflowzh2xl/series-workflowzh2xl-convert-artifact-2725672664/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 15:52:49 +0000 UTC FinishedAt: 2026-06-29 16:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 15:52:49 +0000 UTC FinishedAt: 2026-06-29 16:18:02 +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:*893c2c10-b87d-4583-96ee-0a31b7c1e5cd,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-workflowzh2xl/series-workflowzh2xl-convert-artifact-2725672664/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": "559f67ca-e8af-4c03-b883-d150e23901ca", "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-workflowzh2xl/series-workflowzh2xl-build-action-1650659086/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 15:52:49 +0000 UTC FinishedAt: 2026-06-29 16:17:47 +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:*893c2c10-b87d-4583-96ee-0a31b7c1e5cd,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-workflowzh2xl/series-workflowzh2xl-convert-artifact-2725672664/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": "559f67ca-e8af-4c03-b883-d150e23901ca", "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-workflowzh2xl/series-workflowzh2xl-build-action-1650659086/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 16:18:02 +0000 UTC FinishedAt: 2026-06-29 16:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 16:18:02 +0000 UTC FinishedAt: 2026-06-29 16:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 16:18:02 +0000 UTC FinishedAt: 2026-06-29 16:18:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 16:18:02 +0000 UTC FinishedAt: 2026-06-29 16:18:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","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-workflowzh2xl/series-workflowzh2xl-convert-artifact-207908159/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 16:18:12 +0000 UTC FinishedAt: 2026-06-29 16:20:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 16:18:12 +0000 UTC FinishedAt: 2026-06-29 16:20:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*559f67ca-e8af-4c03-b883-d150e23901ca,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-workflowzh2xl/series-workflowzh2xl-build-action-1650659086/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-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 16:20:24 +0000 UTC FinishedAt: 2026-06-29 16:20:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 16:20:24 +0000 UTC FinishedAt: 2026-06-29 16:20:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 16:20:24 +0000 UTC FinishedAt: 2026-06-29 16:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 16:20:24 +0000 UTC FinishedAt: 2026-06-29 16:49:52 +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:*893c2c10-b87d-4583-96ee-0a31b7c1e5cd,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-workflowzh2xl/series-workflowzh2xl-convert-artifact-207908159/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": "45aaf3d9-f8e9-43dd-a980-c35933e8c85a", "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-workflowzh2xl/series-workflowzh2xl-build-action-1062891859/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-29 16:20:24 +0000 UTC FinishedAt: 2026-06-29 16:49:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*893c2c10-b87d-4583-96ee-0a31b7c1e5cd,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-workflowzh2xl/series-workflowzh2xl-convert-artifact-207908159/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": "45aaf3d9-f8e9-43dd-a980-c35933e8c85a", "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-workflowzh2xl/series-workflowzh2xl-build-action-1062891859/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 16:49:52 +0000 UTC FinishedAt: 2026-06-29 16:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 16:49:52 +0000 UTC FinishedAt: 2026-06-29 16:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 16:49:52 +0000 UTC FinishedAt: 2026-06-29 16:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 16:49:52 +0000 UTC FinishedAt: 2026-06-29 16:51:37 +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:*45aaf3d9-f8e9-43dd-a980-c35933e8c85a,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-workflowzh2xl/series-workflowzh2xl-build-action-1062891859/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-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-29 16:51:47 +0000 UTC FinishedAt: 2026-06-29 19:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 16:51:47 +0000 UTC FinishedAt: 2026-06-29 19:54:52 +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_commit_target_regions"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*559f67ca-e8af-4c03-b883-d150e23901ca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*45aaf3d9-f8e9-43dd-a980-c35933e8c85a,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-workflowzh2xl/series-workflowzh2xl-build-action-1650659086/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-workflowzh2xl/series-workflowzh2xl-build-action-1062891859/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 16:51:47 +0000 UTC FinishedAt: 2026-06-29 16:52:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 16:51:47 +0000 UTC FinishedAt: 2026-06-29 16:51:54 +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_commit_target_regions"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzh2xl/series-workflowzh2xl-convert-artifact-2432439256/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-29 16:51:47 +0000 UTC FinishedAt: 2026-06-29 16:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 16:51:47 +0000 UTC FinishedAt: 2026-06-29 16:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 16:51:47 +0000 UTC FinishedAt: 2026-06-29 16:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 16:52:07 +0000 UTC FinishedAt: 2026-06-29 19:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh2xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"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_commit_target_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_STAT"],"series_id":"79cb40d2-9da8-4197-a181-6c07fa657fe7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 16:52:07 +0000 UTC FinishedAt: 2026-06-29 19:54:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*559f67ca-e8af-4c03-b883-d150e23901ca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*45aaf3d9-f8e9-43dd-a980-c35933e8c85a,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-workflowzh2xl/series-workflowzh2xl-build-action-1650659086/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-workflowzh2xl/series-workflowzh2xl-build-action-1062891859/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-workflowzh2xl/series-workflowzh2xl-convert-artifact-2432439256/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,}