Name: series-workflowhtxgf Phase: Succeeded StartedAt: 2026-09-10 15:03:26 +0000 UTC FinishedAt: 2026-09-10 19:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[0] Phase: Succeeded StartedAt: 2026-09-10 15:03:26 +0000 UTC FinishedAt: 2026-09-10 15:24:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 15:03:26 +0000 UTC FinishedAt: 2026-09-10 15:24:12 +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": "cf558a250cf4475a8936902b8978fbb6c61016f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cf558a250cf4475a8936902b8978fbb6c61016f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "ece33db9-4802-4c0d-b860-87ee9f26ded5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_probe_hits_wsum", "damos_filter_match", "damos_filter_for_ops", "damos_commit_filter_arg", "damon_sysfs_add_scheme_filters", "damon_pa_apply_probes", "damon_va_apply_probes", "damon_merge_score" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19maWx0ZXJfZm9yX29wcyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9zY29yZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGZpbHRlciB0eXBlIGZvciBEQU1PTiBzY2hlbWVzLCBleHRlbmRpbmcgc3lzZnMgYXR0cmlidXRlcyAoYG1pbmAgYW5kIGBtYXhgKSBhbmQgY29yZSBmaWx0ZXIgbWF0Y2hpbmcgdG8gdXNlIHRoZSBwcm9iZSBoaXRzIHdlaWdodGVkIG1vdmluZyBzdW0uIFxuXG4tIE1lbW9yeSBBbGxvY2F0aW9uIFx1MDAyNiBJbml0aWFsaXphdGlvbjogU3lzZnMgc2NoZW1lIGZpbHRlciBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBJbiBEQU1PTiBjb3JlLCBmaWx0ZXIgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHVwb24gY3JlYXRpb24gYW5kIGZpbHRlciBhcmd1bWVudHMgY29tbWl0LlxuLSBVc2VyLXNwYWNlIERhdGEgVHJhbnNmZXI6IFN5c2ZzIG91dHB1dCB1c2VzIGZvcm1hdHRlZCBzdHJpbmcgZW1pc3Npb25zIHZpYSBgc3lzZnNfZW1pdCgpYCwgd2l0aCBubyByYXcgc3RydWN0IGNvcGllcyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLlxuLSBWYXJpYWJsZXMgYW5kIEJyYW5jaGluZzogQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgd2VpZ2h0ZWQgc3VtIGNhbGN1bGF0aW9uIGFuZCBmaWx0ZXIgbWF0Y2hpbmcgKGBzdW1gLCBgaWAsIGB3c3VtYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIG1lY2hhbmlzbXMgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSAvICYjMzk7cHJvYmVfaGl0c193c3VtJiMzOTspIGluIERBTU9OLCB1cGRhdGluZyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMsIHN5c2ZzIGNvbmZpZ3VyYXRpb24gaGFuZGxpbmcsIGFuZCBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBjYWxjdWxhdGlvbnMgYWNyb3NzIERBTU9OIGNvcmUsIHBhZGRyLCBhbmQgdmFkZHIgb3BlcmF0aW9ucy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYzkwMDFiZDk5ZjlmNzY2Yjk2ZGFkZjVlNzkzZGUxMGFmNzYwZGI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTU6MjI6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTU1MSw2ICYjNDM7NTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlXG4gZmlsdGVyLiAgUmVmZXIgdG8gOnJlZjpgdGhlIGRlc2lnbiBkb2MgXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnNcdTAwM2VgIGZvclxuIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLlxuIFxuJiM0MztGb3IgYGBwcm9iZV9oaXRzX3dzdW1gYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gcHJvYmVcbiYjNDM7aGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcyxcbiYjNDM7cmVzcGVjdGl2ZWx5LlxuJiM0MztcbiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnlcbiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG9cbiBgYG1lbWNnX3BhdGhgYCBmaWxlLiAgRm9yIGBgYWRkcmBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgc3RhcnQgYW5kIGVuZFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtODIyLDYgJiM0Mzs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gYWRkcmVzcyByYW5nZS5cbiAgICAgLSB0YXJnZXRcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LlxuJiM0MzsgICAgLSBwcm9iZV9oaXRzX3dzdW1cbiYjNDM7ICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlXG4mIzQzOyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSBcdTAwM2NkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nXHUwMDNlYCB2YWx1ZS5cbiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LlxuICAgICAtIGFub25cbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IG5vdCBzdG9yZWQgaW4gZmlsZXMuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0zOTksMTQgJiM0MzszOTksMTUgQEAgc3RydWN0IGRhbW9zX3N0YXQge1xuICAqIEBEQU1PU19GSUxURVJfVFlQRV9VTk1BUFBFRDpcdFVubWFwcGVkIHBhZ2VzLlxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9BRERSOlx0QWRkcmVzcyByYW5nZS5cbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlx0RGF0YSBBY2Nlc3MgTW9uaXRvcmluZyB0YXJnZXQuXG4mIzQzOyAqIEBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XHRwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS5cbiAgKiBATlJfREFNT1NfRklMVEVSX1RZUEVTOlx0TnVtYmVyIG9mIGZpbHRlciB0eXBlcy5cbiAgKlxuLSAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUXG4tICogYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZVxuLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LFxuLSAqIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkXG4tICogYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWRcbi0gKiBhcyAmIzM5O3RyaWVkJiMzOTsuXG4mIzQzOyAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGFuZFxuJiM0MzsgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0XG4mIzQzOyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZFxuJiM0MzsgKiBhcyAmIzM5O3RyaWVkJiMzOTsuICBJbiBjb250cmFzdCwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmRcbiYjNDM7ICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlXG4mIzQzOyAqIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQgYXMgJiMzOTt0cmllZCYjMzk7LlxuICAqXG4gICogU3VwcG9ydCBmb3IgdGhlIG9wZXJhdGlvbnMtaGFuZGxlZCBmaWx0ZXJzIGRlcGVuZHMgb24gdGhlIHJ1bm5pbmdcbiAgKiBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy5cbkBAIC00MjAsNiAmIzQzOzQyMSw3IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuIFx0REFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsXG4gXHREQU1PU19GSUxURVJfVFlQRV9BRERSLFxuIFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuJiM0MztcdERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcbiBcdE5SX0RBTU9TX0ZJTFRFUl9UWVBFUyxcbiB9O1xuIFxuQEAgLTQzNCw2ICYjNDM7NDM2LDggQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XG4gICpcdFx0XHUwMDI2ZGFtb25fY3R4LVx1MDAzZWFkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXNcbiAgKlx0XHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuXG4gICogQHN6X3JhbmdlOlx0U2l6ZSByYW5nZSBpZiBAdHlwZSBpcyBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFLlxuJiM0MzsgKiBAcmFuZ2VfbWluOlx0TWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXG4mIzQzOyAqIEByYW5nZV9tYXg6XHRNYXhpbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDUwLDYgJiM0Mzs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7XG4gXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4gXHRcdGludCB0YXJnZXRfaWR4O1xuIFx0XHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIHJhbmdlX21heDtcbiYjNDM7XHRcdH07XG4gXHR9O1xuIC8qIHByaXZhdGU6ICovXG4gXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuQEAgLTEwNjUsNyAmIzQzOzEwNzMsNyBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4gXG4gaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC00NjksMTEgJiM0Mzs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4gICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbiAgKiBAbGFzdDpcdGlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuXG4mIzQzOyAqIEBtdjpcdFx0dXNlIG1vdmluZyBzdW0uXG4gICogQGN0eDpcdGNvbnRleHQgb2YgXHUwMDI2ci5cbiAgKlxuICAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXG4gICovXG4tdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4mIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbkBAIC00ODMsNiAmIzQzOzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuIFx0XHRpZiAobGFzdClcbiBcdFx0XHRzdW0gJiM0Mzs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiYjNDM7XHRcdGVsc2UgaWYgKG12KVxuJiM0MztcdFx0XHRzdW0gJiM0Mzs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSYjNDM7JiM0MzssIHIsIGN0eCkgKlxuJiM0MztcdFx0XHRcdHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2Vwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdH1cbkBAIC02NTQsNiAmIzQzOzY1OCw3IEBAIGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuIFx0c3dpdGNoICh0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbiYjNDM7XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5AQCAtMTMyOCw2ICYjNDM7MTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcbiBcdFx0ZHN0LVx1MDAzZXN6X3JhbmdlID0gc3JjLVx1MDAzZXN6X3JhbmdlO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbiYjNDM7XHRcdGRzdC1cdTAwM2VyYW5nZV9taW4gPSBzcmMtXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0ZHN0LVx1MDAzZXJhbmdlX21heCA9IHNyYy1cdTAwM2VyYW5nZV9tYXg7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1MDYsNyAmIzQzOzI1MTUsNyBAQCBzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aTtcbiBcdGludCB0YXJnZXRfaWR4ID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHdzdW07XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbkBAIC0yNTQxLDYgJiM0MzsyNTUwLDExIEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLVx1MDAzZWFyLnN0YXJ0KTtcbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuJiM0MztcdFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcbiYjNDM7XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzYz0gd3N1bSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0d3N1bSBcdTAwM2M9IGZpbHRlci1cdTAwM2VyYW5nZV9tYXg7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0zNDQ5LDcgJiM0MzszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcbiB7XG4gXHRpZiAodXNlX3Byb2JlX2hpdHMpXG4tXHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcbiYjNDM7XHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7XG4gXHRpZiAobGFzdClcbiBcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcztcbiBcdHJldHVybiByLVx1MDAzZW5yX2FjY2Vzc2VzO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCBkN2M4MTgyOTQ0NWJhLi5iOGY0ZDI4MTY1ZGQ3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuJiM0MztcdFx0XHRcdFx0XHRcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiBtYXhfd3N1bTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbmluZGV4IGQ5YjgxZDdiNTkxMGUuLmQ5ZGQ0ZWUwNDQyYzcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTUzNCw3ICYjNDM7NTM0LDggQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xuIFx0Ym9vbCBhbGxvdztcbiBcdGNoYXIgKm1lbWNnX3BhdGg7XG4gXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xuLVx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4gXHRpbnQgdGFyZ2V0X2lkeDtcbiB9O1xuIFxuQEAgLTU4OCw2ICYjNDM7NTg5LDEwIEBAIGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XG4gXHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuIFx0XHQubmFtZSA9IFwmIzM0O3RhcmdldFwmIzM0OyxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3Byb2JlX2hpdHNfd3N1bVwmIzM0OyxcbiYjNDM7XHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc3OCw3ICYjNDM7NzgzLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuIFxuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuJiM0MztcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc4Niw3ICYjNDM7NzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4tXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluKTtcbiYjNDM7XHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtNzk3LDcgJiM0Mzs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtODA1LDcgJiM0Mzs4MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuJiM0MztcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xuIH1cbkBAIC0yODM1LDEyICYjNDM7Mjg0MCwyMSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbiBcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuIFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbi1cdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbiBcdTAwM2Vcbi1cdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCkge1xuJiM0MztcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbiYjNDM7XHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2VyYW5nZV9tYXgpIHtcbiYjNDM7XHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNKSB7XG4mIzQzO1x0XHRcdGlmIChzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzZVxuJiM0MztcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuIFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UgPSBzeXNmc19maWx0ZXItXHUwMDNlc3pfcmFuZ2U7XG4mIzQzO1x0XHRcdGZpbHRlci1cdTAwM2VyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbiBcdFx0fVxuIFxuIFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggOWEzOGRjODlhMTU2ZS4uNGFlY2YzNGUzOWJlMiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC03MDQsNyAmIzQzOzcwNCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuJiM0MztcdFx0XHRcdFx0XHRcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdFx0aWYgKG1tKVxuIFx0XHRcdG1tcHV0KG1tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfd3N1bSYjMzQ7LAogICAgJiMzNDtkYW1vc19maWx0ZXJfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZGFtb3NfZmlsdGVyX2Zvcl9vcHMmIzM0OywKICAgICYjMzQ7ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2FwcGx5X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZSAoREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNIC8gJiMzOTtwcm9iZV9oaXRzX3dzdW0mIzM5OykgaW4gREFNT04sIHVwZGF0aW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYywgc3lzZnMgY29uZmlndXJhdGlvbiBoYW5kbGluZywgYW5kIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbGN1bGF0aW9ucyBhY3Jvc3MgREFNT04gY29yZSwgcGFkZHIsIGFuZCB2YWRkciBvcGVyYXRpb25zLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjOTAwMWJkOTlmOWY3NjZiOTZkYWRmNWU3OTNkZTEwYWY3NjBkYjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxNToyMjozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKQEAgLTU1MSw2ICYjNDM7NTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlCiBmaWx0ZXIuICBSZWZlciB0byA6cmVmOmB0aGUgZGVzaWduIGRvYyAmbHQ7ZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnMmZ3Q7YCBmb3IKIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLgogCiYjNDM7Rm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlCiYjNDM7aGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcywKJiM0MztyZXNwZWN0aXZlbHkuCiYjNDM7CiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnkKIHdyaXRpbmcgdGhlIHBhdGggb2YgdGhlIG1lbW9yeSBjZ3JvdXAgZnJvbSB0aGUgY2dyb3VwcyBtb3VudCBwb2ludCB0bwogYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdAppbmRleCBhYWM4NGRlMjYxYWE4Li44ZTk4MGRkZTM2MmRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CkBAIC04MjIsNiAmIzQzOzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIGFkZHJlc3MgcmFuZ2UuCiAgICAgLSB0YXJnZXQKICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuCiYjNDM7ICAgIC0gcHJvYmVfaGl0c193c3VtCiYjNDM7ICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlCiYjNDM7ICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtICZsdDtkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nJmd0O2AgdmFsdWUuCiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LgogICAgIC0gYW5vbgogICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBjb250YWluaW5nIGRhdGEgdGhhdCBub3Qgc3RvcmVkIGluIGZpbGVzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDg3MWQyNmFkZjZhZTUuLjRhMzZmMzQ0YmJjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTM5OSwxNCAmIzQzOzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7CiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6CVVubWFwcGVkIHBhZ2VzLgogICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CUFkZHJlc3MgcmFuZ2UuCiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOglEYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC4KJiM0MzsgKiBAREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOglwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS4KICAqIEBOUl9EQU1PU19GSUxURVJfVFlQRVM6CU51bWJlciBvZiBmaWx0ZXIgdHlwZXMuCiAgKgotICogQWxsIHR5cGVzIGV4Y2VwdCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kICZhbXA7REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUCi0gKiBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWUKLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LAotICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkCi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZAotICogYXMgJiMzOTt0cmllZCYjMzk7LgomIzQzOyAqIEFsbCB0eXBlcyBleGNlcHQgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSLCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmQKJiM0MzsgKiAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdAomIzQzOyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZAomIzQzOyAqIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kCiYjNDM7ICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmUKJiM0MzsgKiB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4KICAqCiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZwogICogJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4KQEAgLTQyMCw2ICYjNDM7NDIxLDcgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7CiAJREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsCiAJREFNT1NfRklMVEVSX1RZUEVfQUREUiwKIAlEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsCiYjNDM7CURBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSwKIAlOUl9EQU1PU19GSUxURVJfVFlQRVMsCiB9OwogCkBAIC00MzQsNiAmIzQzOzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgewogICoJCSZhbXA7ZGFtb25fY3R4LSZndDthZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzCiAgKgkJREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULgogICogQHN6X3JhbmdlOglTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuCiYjNDM7ICogQHJhbmdlX21pbjoJTWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiYjNDM7ICogQHJhbmdlX21heDoJTWF4aW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiAgKgogICogQmVmb3JlIGFwcGx5aW5nIHRoZSAmYW1wO2RhbW9zLSZndDthY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaAogICogYnl0ZSBvZiB0aGUgcmVnaW9uIG1hdGNoZXMgdG8gdGhpcyBnaXZlbiBjb25kaXRpb24gYW5kIGF2b2lkIGFwcGx5aW5nIHRoZQpAQCAtNDUwLDYgJiM0Mzs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7CiAJCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7CiAJCWludCB0YXJnZXRfaWR4OwogCQlzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9taW47CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7CiYjNDM7CQl9OwogCX07CiAvKiBwcml2YXRlOiAqLwogCS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCkBAIC0xMDY1LDcgJiM0MzsxMDczLDcgQEAgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCk7CiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KTsKLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAomIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogCiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcywKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC00NjksMTEgJiM0Mzs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKICAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi4KICAqIEByOgkJcmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLgogICogQGxhc3Q6CWlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuCiYjNDM7ICogQG12OgkJdXNlIG1vdmluZyBzdW0uCiAgKiBAY3R4Ogljb250ZXh0IG9mICZhbXA7ci4KICAqCiAgKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLgogICovCi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKJiM0Mzt1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdiwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewogCXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CkBAIC00ODMsNiAmIzQzOzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAogCWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHsKIAkJaWYgKGxhc3QpCiAJCQlzdW0gJiM0Mzs9IHItJmd0O2xhc3RfcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS0mZ3Q7d2VpZ2h0OwomIzQzOwkJZWxzZSBpZiAobXYpCiYjNDM7CQkJc3VtICYjNDM7PSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkmIzQzOyYjNDM7LCByLCBjdHgpICoKJiM0MzsJCQkJcHJvYmUtJmd0O3dlaWdodDsKIAkJZWxzZQogCQkJc3VtICYjNDM7PSByLSZndDtwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLSZndDt3ZWlnaHQ7CiAJfQpAQCAtNjU0LDYgJiM0Mzs2NTgsNyBAQCBib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSkKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CiAJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6CiYjNDM7CWNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOgogCQlyZXR1cm4gZmFsc2U7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMzI4LDYgJiM0MzsxMzMzLDEwIEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKAogCWNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRToKIAkJZHN0LSZndDtzel9yYW5nZSA9IHNyYy0mZ3Q7c3pfcmFuZ2U7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCWRzdC0mZ3Q7cmFuZ2VfbWluID0gc3JjLSZndDtyYW5nZV9taW47CiYjNDM7CQlkc3QtJmd0O3JhbmdlX21heCA9IHNyYy0mZ3Q7cmFuZ2VfbWF4OwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMjUwNiw3ICYjNDM7MjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiAJc3RydWN0IGRhbW9uX3RhcmdldCAqdGk7CiAJaW50IHRhcmdldF9pZHggPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtOwogCiAJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDoKQEAgLTI1NDEsNiAmIzQzOzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItJmd0O2FyLnN0YXJ0KTsKIAkJbWF0Y2hlZCA9IHRydWU7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCXdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7CiYjNDM7CQltYXRjaGVkID0gZmlsdGVyLSZndDtyYW5nZV9taW4gJmx0Oz0gd3N1bSAmYW1wOyZhbXA7CiYjNDM7CQkJd3N1bSAmbHQ7PSBmaWx0ZXItJmd0O3JhbmdlX21heDsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0zNDQ5LDcgJiM0MzszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cykKIHsKIAlpZiAodXNlX3Byb2JlX2hpdHMpCi0JCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTsKJiM0MzsJCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7CiAJaWYgKGxhc3QpCiAJCXJldHVybiByLSZndDtsYXN0X25yX2FjY2Vzc2VzOwogCXJldHVybiByLSZndDtucl9hY2Nlc3NlczsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jCmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiAJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAotCQkJCQkJCWN0eCksIG1heF93c3VtKTsKJiM0MzsJCQkJCQkJZmFsc2UsIGN0eCksIG1heF93c3VtKTsKIAkJfQogCX0KIAlyZXR1cm4gbWF4X3dzdW07CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKaW5kZXggZDliODFkN2I1OTEwZS4uZDlkZDRlZTA0NDJjNyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwpAQCAtNTM0LDcgJiM0Mzs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7CiAJYm9vbCBhbGxvdzsKIAljaGFyICptZW1jZ19wYXRoOwogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7Ci0Jc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluOwomIzQzOwl1bnNpZ25lZCBsb25nIHJhbmdlX21heDsKIAlpbnQgdGFyZ2V0X2lkeDsKIH07CiAKQEAgLTU4OCw2ICYjNDM7NTg5LDEwIEBAIGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7CiAJCS50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULAogCQkubmFtZSA9ICYjMzQ7dGFyZ2V0JiMzNDssCiAJfSwKJiM0MzsJewomIzQzOwkJLnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sCiYjNDM7CQkubmFtZSA9ICYjMzQ7cHJvYmVfaGl0c193c3VtJiMzNDssCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC03NzgsNyAmIzQzOzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbik7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21pbik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTc4Niw3ICYjNDM7NzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWluKTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21pbik7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC03OTcsNyAmIzQzOzgwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1heCk7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21heCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTgwNSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21heCk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC0yODM1LDEyICYjNDM7Mjg0MCwyMSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwKIAkJfSBlbHNlIGlmIChmaWx0ZXItJmd0O3R5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7CiAJCQlmaWx0ZXItJmd0O3RhcmdldF9pZHggPSBzeXNmc19maWx0ZXItJmd0O3RhcmdldF9pZHg7CiAJCX0gZWxzZSBpZiAoZmlsdGVyLSZndDt0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHsKLQkJCWlmIChzeXNmc19maWx0ZXItJmd0O3N6X3JhbmdlLm1pbiAmZ3Q7Ci0JCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KSB7CiYjNDM7CQkJaWYgKHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluICZndDsKJiM0MzsJCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4KSB7CiYjNDM7CQkJCWRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCQlmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbiA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluOwomIzQzOwkJCWZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXg7CiYjNDM7CQl9IGVsc2UgaWYgKGZpbHRlci0mZ3Q7dHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHsKJiM0MzsJCQlpZiAoc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9taW4gJmd0OwomIzQzOwkJCQkJc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXgpIHsKIAkJCQlkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJZmlsdGVyLSZndDtzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2U7CiYjNDM7CQkJZmlsdGVyLSZndDtyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItJmd0O3JhbmdlX21pbjsKJiM0MzsJCQlmaWx0ZXItJmd0O3JhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4OwogCQl9CiAKIAkJZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCA5YTM4ZGM4OWExNTZlLi40YWVjZjM0ZTM5YmUyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTcwNCw3ICYjNDM7NzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCQkJX19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7CiAJCQlpZiAocmV0dXJuX21heF93c3VtKQogCQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKLQkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiYjNDM7CQkJCQkJCWZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7CiAJCX0KIAkJaWYgKG1tKQogCQkJbW1wdXQobW0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTQ0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlIHBhdGNoJiMzOTtzIHJpc2sgYW5kIGlkZW50aWZ5IHRoZSBtb3N0IHByb21pc2luZyBhcmVhcyBmb3IgdGFyZ2V0ZWQgZnV6emluZywgYWxvbmcgd2l0aCBhbnkgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQuIFRoZSBmaWxlIGxpc3QgdGVsbHMgdGhlIHN0b3J5OiBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgKGAucnN0YCBmaWxlcyksIGhlYWRlciBtb2RpZmljYXRpb25zIChgZGFtb24uaGApLCBhbmQgY29yZSBmdW5jdGlvbmFsaXR5IGNoYW5nZXMgYWNyb3NzIHNldmVyYWwgYC5jYCBmaWxlcyB3aXRoaW4gdGhlIGBtbS9kYW1vbmAgZGlyZWN0b3J5LiBUaGlzIHN1Z2dlc3RzIGEgc2lnbmlmaWNhbnQgYWx0ZXJhdGlvbiB0byB0aGUgREFNT04gc3Vic3lzdGVtJiMzOTtzIGJlaGF2aW9yLgoKU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGU6IGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gICgmIzM0O3Byb2JlX2hpdHNfd3N1bSYjMzQ7KS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSBtb2RpZmljYXRpb25zIHRvIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIGZ1bmN0aW9uLCBhZGRpbmcgYSBib29sZWFuIGFyZ3VtZW50IGBtdmAgd2hpY2ggaXMgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBpcyBub3cgdXNlZCBieSBzZXZlcmFsIGZ1bmN0aW9uczogYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKClgLCBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoKWAsIGBkYW1vc19maWx0ZXJfbWF0Y2goKWAsIGFuZCBzeXNmcyBmaWx0ZXIgaGFuZGxpbmcuIFRoaXMgc3VnZ2VzdHMgdGhlcmUgYXJlIG5ldyB3YXlzIHRvIGNvbnRyb2wgdGhlIGZpbHRlciYjMzk7cyBiZWhhdmlvci4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgZmlsdGVyIGRvZXMsIGluIHBhcnRpY3VsYXIgaG93IHRoZSBtb3Zpbmcgc3VtIGlzIGltcGxlbWVudGVkIGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGV4aXN0aW5nIGZpbHRlciBzeXN0ZW0uIFRoaXMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIERBTU9OIGNvZGUgYW5kIEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4aXN0aW5nIERBTU9OIGZlYXR1cmVzIGFuZCBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gVXNpbmcgYGdyZXBwZXJgIG9yIGRpZ2dpbmcgaW50byB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBpbXBhY3QgbXkgZnV6emluZyBzZXR1cCDigJMgZm9yIGV4YW1wbGUsIGRlYnVnIG9wdGlvbnMsIHRyYWNpbmcsIG9yIGxvZ2dpbmcgd2hpY2ggd291bGQgYmUgYmVuZWZpY2lhbCBkdXJpbmcgdGhlIGZ1enppbmcgc3RhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWc6NjpcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTctXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZzoxNjpcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTc6XHRkZXBlbmRzIG9uIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTE4LVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxOTpcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxubW0vZGFtb24vS2NvbmZpZzoyMDpcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG5tbS9kYW1vbi9LY29uZmlnLTIxLVx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjI4Olx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy0yOS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTMwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzozMTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjQwOlx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG5tbS9kYW1vbi9LY29uZmlnLTQxLVx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG5tbS9kYW1vbi9LY29uZmlnOjQyOlx0ZGVmYXVsdCBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy00My1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NDQ6XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDUtXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0OTpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy01MC1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo1MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNTItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjUzOlx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTU0LVx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnOjU3Olx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTU5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWctNjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjYxOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy02Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWc6Njk6XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo3MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjcxOlx0ZGVmYXVsdCBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy03Mi1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NzM6XHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxubW0vZGFtb24vS2NvbmZpZy03NC1cdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6Nzg6XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTc5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWctODAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjgxOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXG5tbS9kYW1vbi9LY29uZmlnLTgyLVxuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnOjg5Olx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo5MDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctOTEtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjkyOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcbm1tL2RhbW9uL0tjb25maWc6OTM6XHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cbm1tL2RhbW9uL0tjb25maWctOTQtXHQgIHRob3NlLlxuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWc6MTAxOlx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTAzLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyBzdWJzeXN0ZW0uICBJdCB0cmllcyB0b1xubW0vZGFtb24vS2NvbmZpZy0xMDUtXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZzoxMDk6XHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTEwOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy0xMTEtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIGFjY2VzcyBtb25pdG9yaW5nIHN0YXRpc3RpY3Mgc3Vic3lzdGVtLlxubW0vZGFtb24vS2NvbmZpZzoxMTM6XHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XG5tbS9kYW1vbi9LY29uZmlnLTExNC1cdCAgbWV0cmljcy5cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnOjExNzpcdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMTg6XHRkZXBlbmRzIG9uIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTE5Olx0ZGVmYXVsdCBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEyMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTIxOlx0ICBXaGV0aGVyIHRvIGVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHQuICBVc2VycyBjYW4gZGlzYWJsZSBpdCBpblxubW0vZGFtb24vS2NvbmZpZy0xMjItXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJiMzOTtlbmFibGVkJiMzOTsgcGFyYW1ldGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRXhhbWluaW5nIHRoZSBEQU1PTiBNYWtlZmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgTWFrZWZpbGVgIGxvY2F0ZWQgaW4gYG1tL2RhbW9uYC4gTXkgZ29hbCBpcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgREFNT04gKER5bmFtaWMgQWNjZXNzIE1vbml0b3JpbmcpIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIGFuZCBidWlsdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggc291cmNlIGZpbGVzIGFyZSBpbmNsdWRlZCBiYXNlZCBvbiB2YXJpb3VzIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZGVidWdnaW5nLCBjdXN0b21pemF0aW9uLCBhbmQgZW5zdXJpbmcgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBsaW5rZWQgaW4gdGhlIGZpbmFsIGtlcm5lbCBpbWFnZSwgZXNwZWNpYWxseSBpZiBJJiMzOTttIHRhcmdldGluZyBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIG9yIHVzZSBjYXNlLiBJJiMzOTttIGhvcGluZyB0aGlzIGBNYWtlZmlsZWAgd2lsbCBxdWlja2x5IHJldmVhbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBidWlsZCBmbGFncyBpbnZvbHZlZCwgZ2l2aW5nIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBEQU1PTiYjMzk7cyBhcmNoaXRlY3R1cmUgYXQgYSBidWlsZCBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDY3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIEZ1enppbmcgUmVhY2hhYmlsaXR5IGFuZCBGb2N1cyBTeW1ib2wgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICphY3R1YWxseSogcmVhY2ggREFNT04gdGhyb3VnaCBmdXp6aW5nPyBUaGUgYW5zd2VyIGxvb2tzIHByb21pc2luZy4gREFNT04mIzM5O3Mgc3lzZnMgaW50ZXJmYWNlIGlzIGV4cG9zZWQgYXQgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2Agd2hlbiBgQ09ORklHX0RBTU9OX1NZU0ZTPXlgLCBhbmQgdGhhdCYjMzk7cyBlYXNpbHkgYWNjZXNzaWJsZSBldmVuIGluIGEgUUVNVS1iYXNlZCBzZXR1cC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBEQU1PUyBmaWx0ZXIgbG9naWMsIGluY2x1ZGluZyBwYXJzaW5nIHdpdGhpbiBzeXNmcywgY29yZSBtYXRjaGluZyBsb2dpYywgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpYCBhbmQgaXRzIGNhbGwgc2l0ZXMuIEdpdmVuIHRoYXQgREFNT04gaXMgcGFydCBvZiB0aGUgTU0gc3Vic3lzdGVtLCBhbmQgd2UmIzM5O3JlIGludGVyYWN0aW5nIHdpdGggc3lzZnMsIGl0JiMzOTtzIGRlZmluaXRlbHkgd2l0aGluIHJlYWNoIGZvciBmdXp6aW5nLiBUaGUgc3Vic3lzdGVtIGlzIE1NL0RBTU9OIGFuZCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7ID0gdHJ1ZS4KCk5vdywgd2hpY2ggc3ltYm9scyBzaG91bGQgd2UgdGFyZ2V0PyBMZXQmIzM5O3MgaWRlbnRpZnkgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zLiBJbiBgbW0vZGFtb24vY29yZS5jYCwgd2UmIzM5O3ZlIGdvdDogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfZm9yX29wc2AsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AsIGBkYW1vc19maWx0ZXJfbWF0Y2hgICh3aGljaCBpcyBzdGF0aWMsIHNvIHdlIG5lZWQgdG8gY2hlY2sgY2FsbGVycyB0byB1bmRlcnN0YW5kIGl0cyBicm9hZGVyIHJlYWNoKSwgYW5kIGBkYW1vbl9tZXJnZV9zY29yZWAuICBPdmVyIGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIHJlc3BlY3RpdmVseSwgYXJlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMsIG9yLCBhdCBsZWFzdCwgdGhlaXIgY2FsbGVycy4gRmluYWxseSwgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHdlJiMzOTt2ZSBnb3QgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AsIGBtaW5fc3RvcmVgLCBgbWluX3Nob3dgLCBgbWF4X3N0b3JlYCwgYW5kIGBtYXhfc2hvd2AuCgpJIHNob3VsZCBwcm9iYWJseSBkaXZlIGRlZXBlciBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDI1MDAtMjYwMCwgdG8gdW5kZXJzdGFuZCBob3cgYGRhbW9zX2ZpbHRlcl9tYXRjaGAgaXMgY2FsbGVkLiBUaGF0JiMzOTtsbCBoZWxwIGNsYXJpZnkgaXRzIHJvbGUgYW5kIHByaW9yaXRpemUgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgYXJlIG1vc3QgbGlrZWx5IHRvIHByb3ZpZGUgZ29vZCBjb3ZlcmFnZSB0aHJvdWdoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1MDU6XHRcdGlmIChzel9hcHBsaWVkKVxuMjUwNjpcdFx0XHRzLVx1MDAzZXN0YXQubnJfYXBwbGllZCYjNDM7JiM0Mzs7XG4yNTA3Olx0XHRzLVx1MDAzZXN0YXQuc3pfYXBwbGllZCAmIzQzOz0gc3pfYXBwbGllZDtcbjI1MDg6XHRcdHMtXHUwMDNlc3RhdC5zel9vcHNfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gc3pfb3BzX2ZpbHRlcl9wYXNzZWQ7XG4yNTA5Olx0fVxuMjUxMDpcdFxuMjUxMTpcdHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNTEyOlx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcbjI1MTM6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjUxNDpcdHtcbjI1MTU6XHRcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuMjUxNjpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGk7XG4yNTE3Olx0XHRpbnQgdGFyZ2V0X2lkeCA9IDA7XG4yNTE4Olx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHdzdW07XG4yNTE5Olx0XG4yNTIwOlx0XHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4yNTIxOlx0XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbjI1MjI6XHRcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHRpLCBjdHgpIHtcbjI1MjM6XHRcdFx0XHRpZiAodGkgPT0gdClcbjI1MjQ6XHRcdFx0XHRcdGJyZWFrO1xuMjUyNTpcdFx0XHRcdHRhcmdldF9pZHgmIzQzOyYjNDM7O1xuMjUyNjpcdFx0XHR9XG4yNTI3Olx0XHRcdG1hdGNoZWQgPSB0YXJnZXRfaWR4ID09IGZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuMjUyODpcdFx0XHRicmVhaztcbjI1Mjk6XHRcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcbjI1MzA6XHRcdFx0c3RhcnQgPSBBTElHTl9ET1dOKGZpbHRlci1cdTAwM2VhZGRyX3JhbmdlLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTtcbjI1MzE6XHRcdFx0ZW5kID0gQUxJR05fRE9XTihmaWx0ZXItXHUwMDNlYWRkcl9yYW5nZS5lbmQsIG1pbl9yZWdpb25fc3opO1xuMjUzMjpcdFxuMjUzMzpcdFx0XHQvKiBpbnNpZGUgdGhlIHJhbmdlICovXG4yNTM0Olx0XHRcdGlmIChzdGFydCBcdTAwM2M9IHItXHUwMDNlYXIuc3RhcnQgXHUwMDI2XHUwMDI2IHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gZW5kKSB7XG4yNTM1Olx0XHRcdFx0bWF0Y2hlZCA9IHRydWU7XG4yNTM2Olx0XHRcdFx0YnJlYWs7XG4yNTM3Olx0XHRcdH1cbjI1Mzg6XHRcdFx0Lyogb3V0c2lkZSBvZiB0aGUgcmFuZ2UgKi9cbjI1Mzk6XHRcdFx0aWYgKHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gc3RhcnQgfHwgZW5kIFx1MDAzYz0gci1cdTAwM2Vhci5zdGFydCkge1xuMjU0MDpcdFx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbjI1NDE6XHRcdFx0XHRicmVhaztcbjI1NDI6XHRcdFx0fVxuMjU0MzpcdFx0XHQvKiBzdGFydCBiZWZvcmUgdGhlIHJhbmdlIGFuZCBvdmVybGFwICovXG4yNTQ0Olx0XHRcdGlmIChyLVx1MDAzZWFyLnN0YXJ0IFx1MDAzYyBzdGFydCkge1xuMjU0NTpcdFx0XHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzdGFydCAtIHItXHUwMDNlYXIuc3RhcnQpO1xuMjU0NjpcdFx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbjI1NDc6XHRcdFx0XHRicmVhaztcbjI1NDg6XHRcdFx0fVxuMjU0OTpcdFx0XHQvKiBzdGFydCBpbnNpZGUgdGhlIHJhbmdlICovXG4yNTUwOlx0XHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLVx1MDAzZWFyLnN0YXJ0KTtcbjI1NTE6XHRcdFx0bWF0Y2hlZCA9IHRydWU7XG4yNTUyOlx0XHRcdGJyZWFrO1xuMjU1MzpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4yNTU0Olx0XHRcdHdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7XG4yNTU1Olx0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzYz0gd3N1bSBcdTAwMjZcdTAwMjZcbjI1NTY6XHRcdFx0XHR3c3VtIFx1MDAzYz0gZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbjI1NTc6XHRcdFx0YnJlYWs7XG4yNTU4Olx0XHRkZWZhdWx0OlxuMjU1OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yNTYwOlx0XHR9XG4yNTYxOlx0XG4yNTYyOlx0XHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4yNTYzOlx0fVxuMjU2NDpcdFxuMjU2NTpcdHN0YXRpYyBib29sIGRhbW9zX2NvcmVfZmlsdGVyX291dChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNTY2Olx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcbjI1Njc6XHR7XG4yNTY4Olx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG4yNTY5Olx0XG4yNTcwOlx0XHRzLVx1MDAzZWNvcmVfZmlsdGVyc19hbGxvd2VkID0gZmFsc2U7XG4yNTcxOlx0XHRkYW1vc19mb3JfZWFjaF9jb3JlX2ZpbHRlcihmaWx0ZXIsIHMpIHtcbjI1NzI6XHRcdFx0aWYgKGRhbW9zX2ZpbHRlcl9tYXRjaChjdHgsIHQsIHIsIGZpbHRlciwgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4yNTczOlx0XHRcdFx0aWYgKGZpbHRlci1cdTAwM2VhbGxvdylcbjI1NzQ6XHRcdFx0XHRcdHMtXHUwMDNlY29yZV9maWx0ZXJzX2FsbG93ZWQgPSB0cnVlO1xuMjU3NTpcdFx0XHRcdHJldHVybiAhZmlsdGVyLVx1MDAzZWFsbG93O1xuMjU3NjpcdFx0XHR9XG4yNTc3Olx0XHR9XG4yNTc4Olx0XHRyZXR1cm4gcy1cdTAwM2Vjb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7XG4yNTc5Olx0fVxuMjU4MDpcdFxuMjU4MTpcdC8qXG4yNTgyOlx0ICogZGFtb3Nfd2Fsa19jYWxsX3dhbGsoKSAtIENhbGwgXHUwMDI2ZGFtb3Nfd2Fsa19jb250cm9sLVx1MDAzZXdhbGtfZm4uXG4yNTgzOlx0ICogQGN0eDpcdFRoZSBjb250ZXh0IG9mIFx1MDAyNmRhbW9uX2N0eC1cdTAwM2V3YWxrX2NvbnRyb2wuXG4yNTg0Olx0ICogQHQ6XHRcdFRoZSBtb25pdG9yaW5nIHRhcmdldCBvZiBAciB0aGF0IEBzIHdpbGwgYmUgYXBwbGllZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIERhbW9zIEZpbHRlcmluZyBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmaWx0ZXJpbmcgd29ya3Mgd2l0aGluIHRoZSBgZGFtb3NgIGZyYW1ld29yay4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgZGF0YSBpcyBiZWluZyBmaWx0ZXJlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gYGRhbW9zX2FwcGx5X3NjaGVtZWAgYmVjYXVzZSB0aGF0IGxvb2tzIGxpa2UgYSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGFwcGx5aW5nIHRoZSBmaWx0ZXJpbmcgcnVsZXMuIEFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBkYW1vc19jb3JlX2ZpbHRlcl9vdXRgIG9yIGBkYW1vc19maWx0ZXJfbWF0Y2hgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZSBhY3R1YWwgZmlsdGVyaW5nIGRlY2lzaW9ucy4gVHJhY2luZyB0aG9zZSBjYWxscyBhbmQgd2hlcmUgdGhleSYjMzk7cmUgdXNlZCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIHRoZSBvdmVyYWxsIGZpbHRlcmluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29yZV9maWx0ZXJfb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI1MTE9c3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjU2NC1cbm1tL2RhbW9uL2NvcmUuYzoyNTY1OnN0YXRpYyBib29sIGRhbW9zX2NvcmVfZmlsdGVyX291dChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjU2Ni1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjk5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzQ1LVx0XHR9XG5tbS9kYW1vbi9jb3JlLmM6Mjc0NjpcdFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcbm1tL2RhbW9uL2NvcmUuYy0yNzQ3LVx0XHRcdHJldHVybjtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzQ5LVx0XHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MzM1MDpcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxubW0vZGFtb24vY29yZS5jLTMzNTEtXHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLiBJIHNlZSBhIHByZXR0eSBjb25jZW50cmF0ZWQgYXJlYSBvZiBtb2RpZmljYXRpb24sIHByaW1hcmlseSBpbiB0aGUgREFNT04gY29yZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggc3lzZnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQ6CgoqICAgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfZm9yX29wc2AsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AsIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBhbmQgYGRhbW9uX21lcmdlX3Njb3JlYCwgYWxsIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBoZWFydCBvZiB0aGUgREFNT04gb3BlcmF0aW9uLgoqICAgYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AgYW5kIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgIGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgIHJlc3BlY3RpdmVseS4gSSYjMzk7bSBndWVzc2luZyB0aGVzZSBoYW5kbGUgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBwcm9iZXMgdG8gcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzc2VzLgoqICAgYG1pbl9zaG93YCwgYG1pbl9zdG9yZWAsIGBtYXhfc2hvd2AsIGBtYXhfc3RvcmVgIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gU3lzZnMgaXMgaG93IHdlIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCwgc28gdGhlc2UgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgdXNlciBjb250cm9scyB0aGUgREFNT04gZnVuY3Rpb25hbGl0eS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBkYW1vc19maWx0ZXJfZm9yX29wc2AgZnVuY3Rpb24gaW4gYGNvcmUuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBmaWx0ZXJpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbXBhY3Qgd2hhdCBvcGVyYXRpb25zIHRoZSBmaWx0ZXIgaXMgY29uc2lkZXJpbmcgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2ZpbHRlcl9mb3Jfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTYzND1zdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjQ5LS8qKlxubW0vZGFtb24vY29yZS5jOjY1MDogKiBkYW1vc19maWx0ZXJfZm9yX29wcygpIC0gUmV0dXJuIGlmIHRoZSBmaWx0ZXIgaXMgb3BzLWhhbmRsZWQgb25lLlxubW0vZGFtb24vY29yZS5jLTY1MS0gKiBAdHlwZTpcdHR5cGUgb2YgdGhlIGZpbHRlci5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjU1LSAqL1xubW0vZGFtb24vY29yZS5jOjY1Njpib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSlcbm1tL2RhbW9uL2NvcmUuYy02NTcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz02Njk9dm9pZCBkYW1vc19hZGRfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy02NzAte1xubW0vZGFtb24vY29yZS5jOjY3MTpcdGlmIChkYW1vc19maWx0ZXJfZm9yX29wcyhmLVx1MDAzZXR5cGUpKVxubW0vZGFtb24vY29yZS5jLTY3Mi1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZmLVx1MDAzZWxpc3QsIFx1MDAyNnMtXHUwMDNlb3BzX2ZpbHRlcnMpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02MTU9c3RhdGljIGJvb2wgZGFtb3Nfc3lzZnNfc2NoZW1lX2ZpbHRlcl92YWxpZF90eXBlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MjItXHRjYXNlIERBTU9TX1NZU0ZTX0ZJTFRFUl9IQU5ETEVfTEFZRVJfQ09SRTpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MjM6XHRcdHJldHVybiAhZGFtb3NfZmlsdGVyX2Zvcl9vcHModHlwZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjI0LVx0Y2FzZSBEQU1PU19TWVNGU19GSUxURVJfSEFORExFX0xBWUVSX09QUzpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MjU6XHRcdHJldHVybiBkYW1vc19maWx0ZXJfZm9yX29wcyh0eXBlKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MjYtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk0OQoJCQkJCQkJb3V0cHV0OiAyMzYKCQkJCQkJCXRob3VnaHRzOiA3NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUHJvYmUgSGl0cyBXZWlnaHRlZCBTdW0gRmlsdGVyIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QuIEkmIzM5O3ZlIGdvdCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fUEFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9WQUREUmAuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZXNlIGFnYWluc3QgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlIGl0c2VsZiB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIExvb2tzIGxpa2UgdGhvc2UgYXJlIGFsbCB0aGVyZSwgYW5kIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAgY29ycmVjdGx5IGRlcGVuZCBvbiBgREFNT04gJmFtcDsmYW1wOyBNTVVgLCBhbmQgYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTiAmYW1wOyZhbXA7IFNZU0ZTYC4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hpY2ggZmlsZXMgYXJlIGFjdHVhbGx5ICp0b3VjaGVkKiBieSB0aGlzIHBhdGNoLiBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIEtjb25maWcgZGVwZW5kZW5jeSBjaGVja3MsIGFzIHRoZXNlIGFyZSBidWlsdCB3aXRoIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fVkFERFJgLCByZXNwZWN0aXZlbHkuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5LCBub24tdWJpcXVpdG91cyBzeW1ib2xzIGltcGFjdGVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRob3NlIHNwZWNpZmljIHRvIHRoaXMgZmVhdHVyZTogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBgZGFtb3NfZmlsdGVyX2Zvcl9vcHNgLCBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCwgYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AsIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX21lcmdlX3Njb3JlYC4gSSYjMzk7bSBjb25maWRlbnQgdGhvc2Ugc3ltYm9scyBzaG91bGQgYmUgc3BlY2lmaWMgdG8gREFNT04gYW5kIG5vdCBnZW5lcmljIE1NIGZ1bmN0aW9ucywgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGV5IGV4aXN0IGFuZCBhcmUgbm9uLXViaXF1aXRvdXMuIFRoZXkgYXJlLCBhbmQgdGhleSBhcmUuCgpOb3csIGxldCYjMzk7cyBhc3NlbWJsZSB0aGUgcmF0aW9uYWxlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgKCYjMzQ7cHJvYmVfaGl0c193c3VtJiMzNDspIGZpbHRlciB0byBEQU1PTi9EQU1PUyBzY2hlbWVzLiBUaGlzIGFsbG93cyBmaWx0ZXJpbmcgbWVtb3J5IHJlZ2lvbnMgYmFzZWQgb24gdGhlaXIgcHJvYmUgaGl0IHdlaWdodGVkIHN1bSByYW5nZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG91Y2ggREFNT04mIzM5O3MgY29yZSBmaWx0ZXJpbmcgbG9naWMgKGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBgZGFtb3NfZmlsdGVyX2Zvcl9vcHNgLCBhbmQgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWApLCB0aGUgc3lzZnMgc2NoZW1lIGZpbHRlciBpbmdlc3Rpb24gdmlhIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnNgLCBhbmQgc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIGZvciBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLiBUaGVzZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgbWFraW5nIHRoZW0gdmFsaWQgdGFyZ2V0cy4gU28gdGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXJlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fVkFERFJgLgoKU2VlbXMgbGlrZSBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9wcm9iZV9oaXRzX3dzdW0mIzM0OywKICAgICYjMzQ7ZGFtb3NfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9mb3Jfb3BzJiMzNDssCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9maWx0ZXJfYXJnJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9wYV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX21lcmdlX3Njb3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSAvICYjMzk7cHJvYmVfaGl0c193c3VtJiMzOTspIGluIERBTU9OLCB1cGRhdGluZyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMsIHN5c2ZzIGNvbmZpZ3VyYXRpb24gaGFuZGxpbmcsIGFuZCBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBjYWxjdWxhdGlvbnMgYWNyb3NzIERBTU9OIGNvcmUsIHBhZGRyLCBhbmQgdmFkZHIgb3BlcmF0aW9ucy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19maWx0ZXJfZm9yX29wcyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9zY29yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gLyAmIzM5O3Byb2JlX2hpdHNfd3N1bSYjMzk7KSBpbiBEQU1PTiwgdXBkYXRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBzeXNmcyBjb25maWd1cmF0aW9uIGhhbmRsaW5nLCBhbmQgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb25zIGFjcm9zcyBEQU1PTiBjb3JlLCBwYWRkciwgYW5kIHZhZGRyIG9wZXJhdGlvbnMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgZmlsdGVyIHR5cGUgZm9yIERBTU9OIHNjaGVtZXMsIGV4dGVuZGluZyBzeXNmcyBhdHRyaWJ1dGVzIChgbWluYCBhbmQgYG1heGApIGFuZCBjb3JlIGZpbHRlciBtYXRjaGluZyB0byB1c2UgdGhlIHByb2JlIGhpdHMgd2VpZ2h0ZWQgbW92aW5nIHN1bS4gXG5cbi0gTWVtb3J5IEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBTeXNmcyBzY2hlbWUgZmlsdGVyIHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBlbnN1cmluZyBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEluIERBTU9OIGNvcmUsIGZpbHRlciBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdXBvbiBjcmVhdGlvbiBhbmQgZmlsdGVyIGFyZ3VtZW50cyBjb21taXQuXG4tIFVzZXItc3BhY2UgRGF0YSBUcmFuc2ZlcjogU3lzZnMgb3V0cHV0IHVzZXMgZm9ybWF0dGVkIHN0cmluZyBlbWlzc2lvbnMgdmlhIGBzeXNmc19lbWl0KClgLCB3aXRoIG5vIHJhdyBzdHJ1Y3QgY29waWVzIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuXG4tIFZhcmlhYmxlcyBhbmQgQnJhbmNoaW5nOiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gYW5kIGZpbHRlciBtYXRjaGluZyAoYHN1bWAsIGBpYCwgYHdzdW1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIG9yIGxvZ2ljIGlzc3VlcyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgbWVjaGFuaXNtcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjOTAwMWJkOTlmOWY3NjZiOTZkYWRmNWU3OTNkZTEwYWY3NjBkYjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxNToyMjozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKQEAgLTU1MSw2ICYjNDM7NTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlCiBmaWx0ZXIuICBSZWZlciB0byA6cmVmOmB0aGUgZGVzaWduIGRvYyAmbHQ7ZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnMmZ3Q7YCBmb3IKIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLgogCiYjNDM7Rm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlCiYjNDM7aGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcywKJiM0MztyZXNwZWN0aXZlbHkuCiYjNDM7CiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnkKIHdyaXRpbmcgdGhlIHBhdGggb2YgdGhlIG1lbW9yeSBjZ3JvdXAgZnJvbSB0aGUgY2dyb3VwcyBtb3VudCBwb2ludCB0bwogYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdAppbmRleCBhYWM4NGRlMjYxYWE4Li44ZTk4MGRkZTM2MmRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CkBAIC04MjIsNiAmIzQzOzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIGFkZHJlc3MgcmFuZ2UuCiAgICAgLSB0YXJnZXQKICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuCiYjNDM7ICAgIC0gcHJvYmVfaGl0c193c3VtCiYjNDM7ICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlCiYjNDM7ICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtICZsdDtkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nJmd0O2AgdmFsdWUuCiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LgogICAgIC0gYW5vbgogICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBjb250YWluaW5nIGRhdGEgdGhhdCBub3Qgc3RvcmVkIGluIGZpbGVzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDg3MWQyNmFkZjZhZTUuLjRhMzZmMzQ0YmJjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTM5OSwxNCAmIzQzOzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7CiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6CVVubWFwcGVkIHBhZ2VzLgogICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CUFkZHJlc3MgcmFuZ2UuCiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOglEYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC4KJiM0MzsgKiBAREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOglwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS4KICAqIEBOUl9EQU1PU19GSUxURVJfVFlQRVM6CU51bWJlciBvZiBmaWx0ZXIgdHlwZXMuCiAgKgotICogQWxsIHR5cGVzIGV4Y2VwdCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kICZhbXA7REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUCi0gKiBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWUKLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LAotICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkCi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZAotICogYXMgJiMzOTt0cmllZCYjMzk7LgomIzQzOyAqIEFsbCB0eXBlcyBleGNlcHQgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSLCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmQKJiM0MzsgKiAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdAomIzQzOyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZAomIzQzOyAqIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kCiYjNDM7ICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmUKJiM0MzsgKiB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4KICAqCiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZwogICogJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4KQEAgLTQyMCw2ICYjNDM7NDIxLDcgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7CiAJREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsCiAJREFNT1NfRklMVEVSX1RZUEVfQUREUiwKIAlEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsCiYjNDM7CURBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSwKIAlOUl9EQU1PU19GSUxURVJfVFlQRVMsCiB9OwogCkBAIC00MzQsNiAmIzQzOzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgewogICoJCSZhbXA7ZGFtb25fY3R4LSZndDthZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzCiAgKgkJREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULgogICogQHN6X3JhbmdlOglTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuCiYjNDM7ICogQHJhbmdlX21pbjoJTWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiYjNDM7ICogQHJhbmdlX21heDoJTWF4aW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiAgKgogICogQmVmb3JlIGFwcGx5aW5nIHRoZSAmYW1wO2RhbW9zLSZndDthY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaAogICogYnl0ZSBvZiB0aGUgcmVnaW9uIG1hdGNoZXMgdG8gdGhpcyBnaXZlbiBjb25kaXRpb24gYW5kIGF2b2lkIGFwcGx5aW5nIHRoZQpAQCAtNDUwLDYgJiM0Mzs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7CiAJCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7CiAJCWludCB0YXJnZXRfaWR4OwogCQlzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9taW47CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7CiYjNDM7CQl9OwogCX07CiAvKiBwcml2YXRlOiAqLwogCS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCkBAIC0xMDY1LDcgJiM0MzsxMDczLDcgQEAgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCk7CiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KTsKLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAomIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogCiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcywKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC00NjksMTEgJiM0Mzs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKICAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi4KICAqIEByOgkJcmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLgogICogQGxhc3Q6CWlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuCiYjNDM7ICogQG12OgkJdXNlIG1vdmluZyBzdW0uCiAgKiBAY3R4Ogljb250ZXh0IG9mICZhbXA7ci4KICAqCiAgKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLgogICovCi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKJiM0Mzt1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdiwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewogCXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CkBAIC00ODMsNiAmIzQzOzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAogCWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHsKIAkJaWYgKGxhc3QpCiAJCQlzdW0gJiM0Mzs9IHItJmd0O2xhc3RfcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS0mZ3Q7d2VpZ2h0OwomIzQzOwkJZWxzZSBpZiAobXYpCiYjNDM7CQkJc3VtICYjNDM7PSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkmIzQzOyYjNDM7LCByLCBjdHgpICoKJiM0MzsJCQkJcHJvYmUtJmd0O3dlaWdodDsKIAkJZWxzZQogCQkJc3VtICYjNDM7PSByLSZndDtwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLSZndDt3ZWlnaHQ7CiAJfQpAQCAtNjU0LDYgJiM0Mzs2NTgsNyBAQCBib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSkKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CiAJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6CiYjNDM7CWNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOgogCQlyZXR1cm4gZmFsc2U7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMzI4LDYgJiM0MzsxMzMzLDEwIEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKAogCWNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRToKIAkJZHN0LSZndDtzel9yYW5nZSA9IHNyYy0mZ3Q7c3pfcmFuZ2U7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCWRzdC0mZ3Q7cmFuZ2VfbWluID0gc3JjLSZndDtyYW5nZV9taW47CiYjNDM7CQlkc3QtJmd0O3JhbmdlX21heCA9IHNyYy0mZ3Q7cmFuZ2VfbWF4OwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMjUwNiw3ICYjNDM7MjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiAJc3RydWN0IGRhbW9uX3RhcmdldCAqdGk7CiAJaW50IHRhcmdldF9pZHggPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtOwogCiAJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDoKQEAgLTI1NDEsNiAmIzQzOzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItJmd0O2FyLnN0YXJ0KTsKIAkJbWF0Y2hlZCA9IHRydWU7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCXdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7CiYjNDM7CQltYXRjaGVkID0gZmlsdGVyLSZndDtyYW5nZV9taW4gJmx0Oz0gd3N1bSAmYW1wOyZhbXA7CiYjNDM7CQkJd3N1bSAmbHQ7PSBmaWx0ZXItJmd0O3JhbmdlX21heDsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0zNDQ5LDcgJiM0MzszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cykKIHsKIAlpZiAodXNlX3Byb2JlX2hpdHMpCi0JCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTsKJiM0MzsJCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7CiAJaWYgKGxhc3QpCiAJCXJldHVybiByLSZndDtsYXN0X25yX2FjY2Vzc2VzOwogCXJldHVybiByLSZndDtucl9hY2Nlc3NlczsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jCmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiAJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAotCQkJCQkJCWN0eCksIG1heF93c3VtKTsKJiM0MzsJCQkJCQkJZmFsc2UsIGN0eCksIG1heF93c3VtKTsKIAkJfQogCX0KIAlyZXR1cm4gbWF4X3dzdW07CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKaW5kZXggZDliODFkN2I1OTEwZS4uZDlkZDRlZTA0NDJjNyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwpAQCAtNTM0LDcgJiM0Mzs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7CiAJYm9vbCBhbGxvdzsKIAljaGFyICptZW1jZ19wYXRoOwogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7Ci0Jc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluOwomIzQzOwl1bnNpZ25lZCBsb25nIHJhbmdlX21heDsKIAlpbnQgdGFyZ2V0X2lkeDsKIH07CiAKQEAgLTU4OCw2ICYjNDM7NTg5LDEwIEBAIGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7CiAJCS50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULAogCQkubmFtZSA9ICYjMzQ7dGFyZ2V0JiMzNDssCiAJfSwKJiM0MzsJewomIzQzOwkJLnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sCiYjNDM7CQkubmFtZSA9ICYjMzQ7cHJvYmVfaGl0c193c3VtJiMzNDssCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC03NzgsNyAmIzQzOzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbik7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21pbik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTc4Niw3ICYjNDM7NzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWluKTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21pbik7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC03OTcsNyAmIzQzOzgwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1heCk7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21heCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTgwNSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21heCk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC0yODM1LDEyICYjNDM7Mjg0MCwyMSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwKIAkJfSBlbHNlIGlmIChmaWx0ZXItJmd0O3R5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7CiAJCQlmaWx0ZXItJmd0O3RhcmdldF9pZHggPSBzeXNmc19maWx0ZXItJmd0O3RhcmdldF9pZHg7CiAJCX0gZWxzZSBpZiAoZmlsdGVyLSZndDt0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHsKLQkJCWlmIChzeXNmc19maWx0ZXItJmd0O3N6X3JhbmdlLm1pbiAmZ3Q7Ci0JCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KSB7CiYjNDM7CQkJaWYgKHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluICZndDsKJiM0MzsJCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4KSB7CiYjNDM7CQkJCWRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCQlmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbiA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluOwomIzQzOwkJCWZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXg7CiYjNDM7CQl9IGVsc2UgaWYgKGZpbHRlci0mZ3Q7dHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHsKJiM0MzsJCQlpZiAoc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9taW4gJmd0OwomIzQzOwkJCQkJc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXgpIHsKIAkJCQlkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJZmlsdGVyLSZndDtzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2U7CiYjNDM7CQkJZmlsdGVyLSZndDtyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItJmd0O3JhbmdlX21pbjsKJiM0MzsJCQlmaWx0ZXItJmd0O3JhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4OwogCQl9CiAKIAkJZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCA5YTM4ZGM4OWExNTZlLi40YWVjZjM0ZTM5YmUyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTcwNCw3ICYjNDM7NzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCQkJX19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7CiAJCQlpZiAocmV0dXJuX21heF93c3VtKQogCQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKLQkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiYjNDM7CQkJCQkJCWZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7CiAJCX0KIAkJaWYgKG1tKQogCQkJbW1wdXQobW0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIGluIGEgREFNT04gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgaW4gYGluY2x1ZGUvbGludXgvZGFtb24uaGAuIFRoYXQmIzM5O3MgYSBuZXcgZmlsdGVyIHR5cGUuIE1vcmUgaW1wb3J0YW50bHksIHRoZSBgc3RydWN0IGRhbW9zX2ZpbHRlcmAgdW5pb24gaXMgbW9kaWZpZWQuIEkgc2VlIGEgYGNoYXIgKm1lbWNnX3BhdGhgLCBgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VgLCBgaW50IHRhcmdldF9pZHhgLCBhbmQgdGhlbiBgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2VgLiBCdXQgd2FpdC4uLnRoYXQgdW5pb24gaGFzIGJlZW4gbW9kaWZpZWQsIGl0IHNlZW1zIHRoYXQgYHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlYCBpcyBubyBsb25nZXIgdGhlcmUgYW5kIGluc3RlYWQgd2UgaGF2ZSBgdW5zaWduZWQgbG9uZyByYW5nZV9taW47IHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O2AuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZWAgZGVmaW5pdGlvbiwgc28gSSYjMzk7bGwgZ3JlcCBmb3IgaXQgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZy4KCk5leHQsIGxvb2tpbmcgYXQgYG1tL2RhbW9uL2NvcmUuY2AsIEkgc2VlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIHdpdGggYSBuZXcgYG12YCBwYXJhbWV0ZXIuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGhhbmRsaW5nIGl0IGNvcnJlY3RseSBpbiBpdHMgdGhyZWUgZGlzdGluY3QgYnJhbmNoZXMgb2YgYGRhbW9uX2Zvcl9lYWNoX3Byb2JlYC4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gSSBzZWUgYSBuZXcgZW50cnkgaW4gYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzYCBmb3IgdGhlIG5ldyBgUFJPQkVfSElUU19XU1VNYCBjYXNlIHdoaWNoIHJldHVybnMgYGZhbHNlYC4gVGhlbiB0aGVyZSYjMzk7cyBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgIHRoYXQgYXBwZWFycyB0byBoYW5kbGUgdGhlIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCBhc3NpZ25tZW50cyB3aGljaCBpcyBjb3JyZWN0IGdpdmVuIHRoZSBuZXcgc3RydWN0LiBJbiBgZGFtb3NfZmlsdGVyX21hdGNoYCwgdGhlIGxvZ2ljIGZvciB0aGUgbmV3IGZpbHRlciB0eXBlIHNlZW1zIHNvdW5kLiBJdCYjMzk7cyBjYWxsaW5nIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gICh3aGljaCBzaG91bGQgbm93IGJlIGNvcnJlY3RseSBpbXBsZW1lbnRlZCBnaXZlbiB0aGUgY2hhbmdlKSwgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIHJhbmdlLiBUaGUgY2FsbGVycyBvZiBgZGFtb25fcHJvYmVfaGl0c193c3VtYCBoYXZlIGFsc28gYmVlbiB1cGRhdGVkLCB3aGljaCBpcyBnb29kLgoKRmluYWxseSwgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHRoZSByZW1vdmFsIG9mIGBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZWAgYW5kIHRoZSBkaXJlY3QgaW5jbHVzaW9uIG9mIGB1bnNpZ25lZCBsb25nIHJhbmdlX21pbjsgdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7YCBpbiBgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGNvbmZpcm1zIG15IGluaXRpYWwgb2JzZXJ2YXRpb24uIFRoZSBzdWJzZXF1ZW50IHVwZGF0ZXMgdG8gdGhlIHN5c2ZzIHNob3cvc3RvcmUgZnVuY3Rpb25zIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCBzZWVtIGxvZ2ljYWwgZ2l2ZW4gdGhpcyBjaGFuZ2UuCgpOb3csIHRvIGJlIHJlYWxseSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGJyb2FkZXIgY29udGV4dC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFyb3VuZCB0aGUgREFNT04gc3lzZnMsIGhvdyB0aGUgZmlsdGVycyBhcmUgY3JlYXRlZCwgYW5kIHBhcnRpY3VsYXJseSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHBsYWNlIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBzbmVhayBpbi4gSSBuZWVkIHRvIGxlYXZlIG5vIHN0b25lIHVudHVybmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9uZXdfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJlcChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzAtXG5tbS9kYW1vbi9jb3JlLmM6MTcxOnN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxubW0vZGFtb24vY29yZS5jLTE3Mi1cdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgxNT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODMyLVxubW0vZGFtb24vY29yZS5jOjE4MzM6XHRcdG5ld19maWx0ZXIgPSBkYW1vbl9uZXdfZmlsdGVyKHNyY19maWx0ZXItXHUwMDNldHlwZSxcbm1tL2RhbW9uL2NvcmUuYy0xODM0LVx0XHRcdFx0c3JjX2ZpbHRlci1cdTAwM2VtYXRjaGluZywgc3JjX2ZpbHRlci1cdTAwM2VhbGxvdyk7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMTk5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDgtXG5tbS9kYW1vbi9zeXNmcy5jOjIyMDk6XHRcdGZpbHRlciA9IGRhbW9uX25ld19maWx0ZXIoc3lzX2ZpbHRlci1cdTAwM2V0eXBlLFxubW0vZGFtb24vc3lzZnMuYy0yMjEwLVx0XHRcdFx0c3lzX2ZpbHRlci1cdTAwM2VtYXRjaGluZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkzMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIHRoZSBOZXcgRmlsdGVyJiMzOTtzIEludGVncmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBjaXJjbGUgYmFjayBhbmQgZ2l2ZSBgZGFtb3NfbmV3X2ZpbHRlcmAgYSB0aG9yb3VnaCBnb2luZy1vdmVyLiBJIGtub3cgd2UmIzM5O3ZlIHRlc3RlZCB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzLCBhbmQgdGhlIHByZWxpbWluYXJ5IHJlc3VsdHMgbG9va2VkIHByb21pc2luZy4gQnV0LCBiZWZvcmUgd2UgZnVsbHkgaW50ZWdyYXRlIHRoaXMgaW50byB0aGUgcGlwZWxpbmUsIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGludGVyYWN0aW9ucyBvciBlZGdlIGNhc2VzIHdoZW4gaXQmIzM5O3MgY29tYmluZWQgd2l0aCB0aGUgZXhpc3RpbmcgbG9naWMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHRvbyDigJMgZG9lcyBpdCBpbnRyb2R1Y2UgYW55IG5vdGljZWFibGUgYm90dGxlbmVja3Mgb3IgbWVtb3J5IGxlYWtzPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0cyBvdXRwdXQgaXMgY29uc2lzdGVudCBhbmQgcmVsaWFibGUgdW5kZXIgdmFyeWluZyBkYXRhIGxvYWRzIGFuZCBjb25kaXRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgZW5zdXJlIHRoaXMgZmlsdGVyIHBsYXlzIG5pY2VseSB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW07IHRoaXMgaXMgcGFydGljdWxhcmx5IGNydWNpYWwgbm93LCBjb25zaWRlcmluZyB0aGUgZGVhZGxpbmUuIE5vIGxvb3NlIGVuZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX25ld19maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NTQzPWludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy02MzMtXG5tbS9kYW1vbi9jb3JlLmM6NjM0OnN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX25ld19maWx0ZXIoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlLFxubW0vZGFtb24vY29yZS5jLTYzNS1cdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTM1ND1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9jb3JlX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzcwLVxubW0vZGFtb24vY29yZS5jOjEzNzE6XHRcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxubW0vZGFtb24vY29yZS5jLTEzNzItXHRcdFx0XHRzcmNfZmlsdGVyLVx1MDAzZXR5cGUsIHNyY19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vY29yZS5jPTEzODI9c3RhdGljIGludCBkYW1vc19jb21taXRfb3BzX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzk4LVxubW0vZGFtb24vY29yZS5jOjEzOTk6XHRcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxubW0vZGFtb24vY29yZS5jLTE0MDAtXHRcdFx0XHRzcmNfZmlsdGVyLVx1MDAzZXR5cGUsIHNyY19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNTctXHQvKiBkaXNhbGxvdyBwcmlvcml0aXppbmcgbm90LXlvdW5nIHBhZ2VzICovXG5tbS9kYW1vbi9scnVfc29ydC5jOjI1ODpcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfWU9VTkcsIGZhbHNlLCBmYWxzZSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTI1OS1cdGlmICghZmlsdGVyKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjYzLVx0LyogZGlzYWJsbG93IGRlLXByaW9yaXRpemluZyB5b3VuZyBwYWdlcyAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyNjQ6XHRmaWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HLCB0cnVlLCBmYWxzZSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTI2NS1cdGlmICghZmlsdGVyKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MjM5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI1Ni1cdGlmIChpbnN0YWxsX3lvdW5nX2ZpbHRlcikge1xubW0vZGFtb24vcGFkZHIuYzoyNTc6XHRcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoXG5tbS9kYW1vbi9wYWRkci5jLTI1OC1cdFx0XHRcdERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HLCB0cnVlLCBmYWxzZSk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNTEtXHRpZiAoc2tpcF9hbm9uKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjUyOlx0XHRmaWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX0FOT04sIHRydWUsIGZhbHNlKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNTMtXHRcdGlmICghZmlsdGVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODA5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE3LVx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MTg6XHRcdFx0ZGFtb3NfbmV3X2ZpbHRlcihzeXNmc19maWx0ZXItXHUwMDNldHlwZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE5LVx0XHRcdFx0XHRzeXNmc19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc5MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X25ld19maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03OTMtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Nzk0Olx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzk1LVx0aWYgKCFmaWx0ZXIpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1NzA9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU3NS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTc2Olx0ZiA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQUREUiwgdHJ1ZSwgZmFsc2UpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NzctXHRpZiAoIWYpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE2Nzk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2OTQtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTY5NTpcdHRhcmdldF9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCwgdHJ1ZSwgdHJ1ZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY5Ni1cdGlmICghdGFyZ2V0X2ZpbHRlcilcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyMS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzIyOlx0YW5vbl9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX0FOT04sIHRydWUsIHRydWUpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3MjMtXHRpZiAoIWFub25fZmlsdGVyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgYXBwcm9hY2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGBkYW1vc19uZXdfZmlsdGVyYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIHNob3VsZCBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZpbHRlciBpcyBiZWluZyBjcmVhdGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgbWFpbiBEQU1PTiBsb29wLCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgbW9kaWZ5aW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgZWRnZSBjYXNlcyBoZXJlLiBJJiMzOTtsbCBwcm9iYWJseSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIGZpbHRlciBjcmVhdGlvbiB0byBpdHMgdXNlIGluIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZy4KCkFuZCBuZXh0LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdGhlIHN5c2ZzIGlzIGFsbG9jYXRpbmcgc3BhY2UgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZSBmaWx0ZXJzIGFyZSBleHBvc2VkIHRocm91Z2ggc3lzZnMuIEkgd2FudCB0byBjaGVjayBmb3IgcmFjZSBjb25kaXRpb25zLiBQZXJoYXBzLCBJIHdpbGwgbmVlZCB0byB0aGluayBob3cgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggREFNT04gdmlhIHN5c2ZzLiBJIHdpbGwgbmVlZCB0byBsb29rIGZvciBhbGxvY2F0aW9uIHNpemUgbGltaXRzIGFuZCBob3cgdGhlc2UgbGltaXRzIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gZ2V0IGEgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gQW55IGluZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IG9yIHVuYm91bmRlZCBhbGxvY2F0aW9ucyBjb3VsZCBjYXVzZSBzZXJpb3VzIGlzc3Vlcywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHByb2JsZW1zIHRoZXJlLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhlc2Ugc3lzZnMgYXR0cmlidXRlcyB0aWUgaW50byB0aGUgYGRhbW9zX25ld19maWx0ZXJgIGZ1bmN0aW9uIGFuZCB0aGUgb3ZlcmFsbCBEQU1PTiBzY2hlbWUgbWFuYWdlbWVudC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBjb25jdXJyZW50IGFjY2VzcyBhbmQgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRoZXNlIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MzA6XHRcdH1cbiA2MzE6XHRcdHJldHVybiAwO1xuIDYzMjpcdH1cbiA2MzM6XHRcbiA2MzQ6XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcbiA2MzU6XHRcdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbiA2MzY6XHR7XG4gNjM3Olx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG4gNjM4Olx0XG4gNjM5Olx0XHRmaWx0ZXIgPSBrbWFsbG9jX29iaigqZmlsdGVyKTtcbiA2NDA6XHRcdGlmICghZmlsdGVyKVxuIDY0MTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA2NDI6XHRcdGZpbHRlci1cdTAwM2V0eXBlID0gdHlwZTtcbiA2NDM6XHRcdGZpbHRlci1cdTAwM2VtYXRjaGluZyA9IG1hdGNoaW5nO1xuIDY0NDpcdFx0ZmlsdGVyLVx1MDAzZWFsbG93ID0gYWxsb3c7XG4gNjQ1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmaWx0ZXItXHUwMDNlbGlzdCk7XG4gNjQ2Olx0XHRyZXR1cm4gZmlsdGVyO1xuIDY0NzpcdH1cbiA2NDg6XHRcbiA2NDk6XHQvKipcbiA2NTA6XHQgKiBkYW1vc19maWx0ZXJfZm9yX29wcygpIC0gUmV0dXJuIGlmIHRoZSBmaWx0ZXIgaXMgb3BzLWhhbmRsZWQgb25lLlxuIDY1MTpcdCAqIEB0eXBlOlx0dHlwZSBvZiB0aGUgZmlsdGVyLlxuIDY1MjpcdCAqXG4gNjUzOlx0ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBmaWx0ZXIgb2YgQHR5cGUgbmVlZHMgdG8gYmUgaGFuZGxlZCBieSBvcHMgbGF5ZXIsIGZhbHNlXG4gNjU0Olx0ICogb3RoZXJ3aXNlLlxuIDY1NTpcdCAqL1xuIDY1NjpcdGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuIDY1NzpcdHtcbiA2NTg6XHRcdHN3aXRjaCAodHlwZSkge1xuIDY1OTpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxuIDY2MDpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG4gNjYxOlx0XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbiA2NjI6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDY2MzpcdFx0ZGVmYXVsdDpcbiA2NjQ6XHRcdFx0YnJlYWs7XG4gNjY1Olx0XHR9XG4gNjY2Olx0XHRyZXR1cm4gdHJ1ZTtcbiA2Njc6XHR9XG4gNjY4Olx0XG4gNjY5Olx0dm9pZCBkYW1vc19hZGRfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBEQU1PTiYjMzk7cyBTeXNmcyBJbnRlcmZhY2UqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBmb2N1c2luZyBvbiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIGZyYW1ld29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHNvbGlkIG9uIGhvdyBpdCYjMzk7cyBpbnRlcmZhY2luZyB3aXRoIHRoZSBzeXN0ZW0gdGhyb3VnaCBgc3lzZnNgLiBXZSBuZWVkIHRvIHZlcmlmeSB0aGUgYWxsb2NhdGlvbiBhbmQgdXNlIG9mIHRoZSBgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcmAgc3RydWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoYXQmIzM5O3MgaGFuZGxlZCwgd2hpY2ggb2YgY291cnNlLCBsZWFkcyBtZSB0byB0aGUgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgZmlsZS4gVGltZSB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiBmaWx0ZXJpbmcgREFNT04mIzM5O3Mgb3BlcmF0aW9ucyBpcyBzb3VuZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyOT1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDI6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My1cdFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MzA9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19hZGRfZGlycyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTQ2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZmlsdGVyczsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5NDc6XHRcdGZpbHRlciA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTQ4LVx0XHRcdFx0ZmlsdGVycy1cdTAwM2VoYW5kbGVfbGF5ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkRpdmluZyBpbnRvIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jYCB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZXNvdXJjZXMgZm9yIG1hbmFnaW5nIERBTU9OJiMzOTtzIHN5c2ZzIHNjaGVtZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGZpbHRlcmluZy4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBwb2ludHMgb2YgY29udGVudGlvbiBoZXJlLCBjb25zaWRlcmluZyB0aGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBwcm9jZXNzZWQsIHBhcnNlZCwgYW5kIGFwcGxpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiB3b3Jrczogd2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQgKGlmIGFueSksIHdoYXQgdGhlIG1lbW9yeSBmb290cHJpbnQgaXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgaXMgZm91bmRhdGlvbmFsIGNvZGUgYW5kIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpdCBiYWNrd2FyZHMgYW5kIGZvcndhcmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0fTtcbiA1NDE6XHRcbiA1NDI6XHRzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXG4gNTQzOlx0XHRcdGVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciBsYXllcilcbiA1NDQ6XHR7XG4gNTQ1Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyO1xuIDU0NjpcdFxuIDU0NzpcdFx0ZmlsdGVyID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIpO1xuIDU0ODpcdFx0aWYgKGZpbHRlcilcbiA1NDk6XHRcdFx0ZmlsdGVyLVx1MDAzZWhhbmRsZV9sYXllciA9IGxheWVyO1xuIDU1MDpcdFx0cmV0dXJuIGZpbHRlcjtcbiA1NTE6XHR9XG4gNTUyOlx0XG4gNTUzOlx0c3RydWN0IGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWUge1xuIDU1NDpcdFx0ZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlO1xuIDU1NTpcdFx0Y2hhciAqbmFtZTtcbiA1NTY6XHR9O1xuIDU1NzpcdFxuIDU1ODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZVxuIDU1OTpcdGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XG4gNTYwOlx0XHR7XG4gNTYxOlx0XHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfQU5PTixcbiA1NjI6XHRcdFx0Lm5hbWUgPSBcJiMzNDthbm9uXCYjMzQ7LFxuIDU2MzpcdFx0fSxcbiA1NjQ6XHRcdHtcbiA1NjU6XHRcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9BQ1RJVkUsXG4gNTY2Olx0XHRcdC5uYW1lID0gXCYjMzQ7YWN0aXZlXCYjMzQ7LFxuIDU2NzpcdFx0fSxcbiA1Njg6XHRcdHtcbiA1Njk6XHRcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRyxcbiA1NzA6XHRcdFx0Lm5hbWUgPSBcJiMzNDttZW1jZ1wmIzM0OyxcbiA1NzE6XHRcdH0sXG4gNTcyOlx0XHR7XG4gNTczOlx0XHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfWU9VTkcsXG4gNTc0Olx0XHRcdC5uYW1lID0gXCYjMzQ7eW91bmdcJiMzNDssXG4gNTc1Olx0XHR9LFxuIDU3NjpcdFx0e1xuIDU3NzpcdFx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUsXG4gNTc4Olx0XHRcdC5uYW1lID0gXCYjMzQ7aHVnZXBhZ2Vfc2l6ZVwmIzM0OyxcbiA1Nzk6XHRcdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODI0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGFtb24gc3lzZnMgU2NoZW1lIEZpbHRlciBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jYCBmdW5jdGlvbiB3b3Jrcy4gSXQgdXRpbGl6ZXMgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMga2V5LiBUaGlzIG1lYW5zIHRoYXQgYm90aCBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgd2l0aGluIHRoZSBhbGxvY2F0ZWQgZmlsdGVyIHN0cnVjdHVyZSBhcmUgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGJlY2F1c2UgbGF0ZXIsIHdoZW4gdGhlIHN5c2ZzIGludGVyZmFjZSBpcyBhY2Nlc3NlZCBhbmQgd2UgcmVhZCBlaXRoZXIgYG1pbl9zaG93YCBvciBgbWF4X3Nob3dgLCB0aGUgc3lzdGVtIGlzIGdvaW5nIHRvIG91dHB1dCB0aGUgY3VycmVudCB2YWx1ZXMgb2YgYGZpbHRlci0mZ3Q7cmFuZ2VfbWluYCBhbmQgYGZpbHRlci0mZ3Q7cmFuZ2VfbWF4YC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgdmFsdWVzICphcmUqIGF0IGFueSBnaXZlbiB0aW1lLCBwYXJ0aWN1bGFybHkgd2hlbiBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCBpcyBjYWxsZWQuIFRoYXQgY2FsbCBpcyBjcml0aWNhbDsgaXQmIzM5O3Mgd2hlcmUgdGhlIGZpbHRlcnMgYXJlIGxpa2VseSBwb3B1bGF0ZWQuIFRpbWUgdG8ganVtcCBvdmVyIHRvIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBsaW5lcyAyODM1IHRocm91Z2ggMjg2NS4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgbGlmZWN5Y2xlIGFuZCBob3cgdGhlc2UgcmFuZ2VzIGFyZSBhY3R1YWxseSBzZXQsIGFuZCB3aGF0IHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZS4gVGhlIGluaXRpYWxpemF0aW9uIGlzIHplcm8sIGJ1dCB0aGF0IHdvbiYjMzk7dCBuZWNlc3NhcmlseSB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MzU6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZWFkZHJfcmFuZ2Uuc3RhcnQpIHtcbjI4MzY6XHRcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG4yODM3Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI4Mzg6XHRcdFx0XHR9XG4yODM5Olx0XHRcdFx0ZmlsdGVyLVx1MDAzZWFkZHJfcmFuZ2UgPSBzeXNmc19maWx0ZXItXHUwMDNlYWRkcl9yYW5nZTtcbjI4NDA6XHRcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbjI4NDE6XHRcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuMjg0MjpcdFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbjI4NDM6XHRcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbjI4NDQ6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuMjg0NTpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbjI4NDY6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg0NzpcdFx0XHRcdH1cbjI4NDg6XHRcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbjI4NDk6XHRcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbjI4NTA6XHRcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcbjI4NTE6XHRcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbjI4NTI6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuMjg1MzpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbjI4NTQ6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg1NTpcdFx0XHRcdH1cbjI4NTY6XHRcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbjI4NTc6XHRcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbjI4NTg6XHRcdFx0fVxuMjg1OTpcdFxuMjg2MDpcdFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbjI4NjE6XHRcdH1cbjI4NjI6XHRcdHJldHVybiAwO1xuMjg2MzpcdH1cbjI4NjQ6XHRcbjI4NjU6XHRzdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbjI4NjY6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpzeXNmc19nb2FscyxcbjI4Njc6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbjI4Njg6XHR7XG4yODY5Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbjI4NzA6XHRcdGludCBpLCBlcnI7XG4yODcxOlx0XG4yODcyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNmc19nb2Fscy1cdTAwM2VucjsgaSYjNDM7JiM0MzspIHtcbjI4NzM6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKnN5c2ZzX2dvYWwgPVxuMjg3NDpcdFx0XHRcdHN5c2ZzX2dvYWxzLVx1MDAzZWdvYWxzX2FycltpXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgaW1wbGVtZW50YXRpb24gYW5kIGhvdyB0aGUgcHJvYmUgaGl0cyBtb3Zpbmcgc3VtIG9wZXJhdGVzOgoKKipEZWVwIERpdmUgaW50byBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1lY2hhbmlzbSBiZWhpbmQgdGhlIHByb2JlIGhpdHMgbW92aW5nIHN1bS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgd29ya3MgYmVjYXVzZSBhbnkgZWZmaWNpZW5jeSBnYWlucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgd2l0aGluIHRoaXMgYXJlIGNydWNpYWwgZm9yIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIEkmIzM5O20gdHJ5aW5nIHRvIGFjaGlldmUuIEkgc2hvdWxkIGZpcnN0IHZlcmlmeSB0aGUgY29yZSBsb2dpYywgbWFraW5nIHN1cmUgdGhlIGF2ZXJhZ2luZyBpcyBkb25lIGNvcnJlY3RseSBhbmQgdGhhdCB0aGUgd2luZG93IHNpemUgaXMgZWZmZWN0aXZlbHkgdXRpbGl6ZWQuIEFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGhlcmUgY2FuIGludHJvZHVjZSBlcnJvcnMgaW4gdGhlIG91dHB1dCB3aGljaCBkaXJlY3RseSBpbXBhY3RzIGRvd25zdHJlYW0gY29tcHV0YXRpb25zIG9yIGRlY2lzaW9uLW1ha2luZy4gSSYjMzk7bGwgbWV0aWN1bG91c2x5IGNoZWNrIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhleSBoYW5kbGUgdXBkYXRlcy4gSSB3aWxsIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdG8gY29uZmlybSBob3cgdXBkYXRlcyBhcmUgc3luY2hyb25pemVkLCBlc3BlY2lhbGx5IGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcHJvYmVfaGl0c19tdnN1bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMjU9dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0OC1cbm1tL2RhbW9uL2NvcmUuYzozNDk6dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmMtMzUwLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jPTQ3Nz11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDg3LVx0XHRlbHNlIGlmIChtdilcbm1tL2RhbW9uL2NvcmUuYzo0ODg6XHRcdFx0c3VtICYjNDM7PSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkmIzQzOyYjNDM7LCByLCBjdHgpICpcbm1tL2RhbW9uL2NvcmUuYy00ODktXHRcdFx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2Jlcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEzLVx0XHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XHRcdFx0XHRkYW1vbl9wcm9iZV9oaXRzX212c3VtKGksIHJlZ2lvbiwgY3R4KSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVx0XHRpZiAoIXN5c19wcm9iZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBQcm9iZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgZnVuY3Rpb24gaW4gdGhlIERBTU9OIGNvcmUgaXMgd29ya2luZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG1tL2RhbW9uL2NvcmUuY2AuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW92aW5nIHN1bS1iYXNlZCBoaXQgY291bnRlciB0aGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIGF0IGxlYXN0LCBhIHNpZ25pZmljYW50IHBhcnQgb2YgaXQpIGhhcHBlbnMgaW4gREFNT04mIzM5O3MgcHJvYmluZyBtZXRob2RvbG9neS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLCBob3cgaXTigJlzIHRyaWdnZXJlZCwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcHJvYmUgYWNjdXJhY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDU6XHRcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZW5yX2FjY2Vzc2VzLCByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsXG4gMzQ2Olx0XHRcdFx0bGVmdF93aW5kb3dfYnApO1xuIDM0NzpcdH1cbiAzNDg6XHRcbiAzNDk6XHR1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAzNTA6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIDM1MTpcdHtcbiAzNTI6XHRcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsLCBhZ2dyX2ludGVydmFsO1xuIDM1MzpcdFx0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XG4gMzU0Olx0XG4gMzU1Olx0XHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxO1xuIDM1NjpcdFx0YWdncl9pbnRlcnZhbCA9ICBjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA/IDogMTtcbiAzNTc6XHRcdHdpbmRvd19sZW4gPSBhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsO1xuIDM1ODpcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxuIDM1OTpcdFx0XHRcdFx0Y3R4LVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzKSlcbiAzNjA6XHRcdFx0bGVmdF93aW5kb3cgPSAwO1xuIDM2MTpcdFx0ZWxzZVxuIDM2MjpcdFx0XHRsZWZ0X3dpbmRvdyA9IGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyAtXG4gMzYzOlx0XHRcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzO1xuIDM2NDpcdFx0bGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTtcbiAzNjU6XHRcbiAzNjY6XHRcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcbiAzNjc6XHRcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF07XG4gMzY4Olx0XG4gMzY5Olx0XHRyZXR1cm4gZGFtb25fbXZzdW0oci1cdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXG4gMzcwOlx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xuIDM3MTpcdH1cbiAzNzI6XHRcbiAzNzM6XHQjaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxuIDM3NDpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIDM3NTpcdHtcbiAzNzY6XHRcdFdBUk5fT05DRShzdGFydCBcdTAwM2U9IGVuZCwgXCYjMzQ7c3RhcnQgJWx1IFx1MDAzZT0gZW5kICVsdVxcblwmIzM0Oywgc3RhcnQsIGVuZCk7XG4gMzc3Olx0fVxuIDM3ODpcdCNlbHNlXG4gMzc5Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gMzgwOlx0e1xuIDM4MTpcdH1cbiAzODI6XHQjZW5kaWZcbiAzODM6XHRcbiAzODQ6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQzNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBGaWx0ZXIgQXJndW1lbnQgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBnZXQgZ3JhbnVsYXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgZmlsdGVyIGFyZ3VtZW50cywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGFyZ3VtZW50IGlzIGFjdHVhbGx5ICpjb21taXR0ZWQqIG9yICpjb3BpZWQqIHdpdGhpbiB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIHRyYWNpbmcgaXRzIHByb3BhZ2F0aW9uIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBJIG5lZWQgdG8ga25vdyB0aGUgZXhhY3QgcG9pbnRzIG9mIGludGVyYWN0aW9uLCBzbyBJIGNhbiBiZXR0ZXIgZGlhZ25vc2UgYW55IGlzc3VlcyBvciBvcHRpbWl6ZSByZWxhdGVkIHByb2Nlc3Nlcy4gSSYjMzk7bGwgbGlrZWx5IGJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIGNhbGxzLCBhc3NpZ25tZW50cywgb3IgbWVtb3J5IG1hbmlwdWxhdGlvbnMgaW52b2x2aW5nIHRoaXMgc3BlY2lmaWMgdmFyaWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2NvbW1pdF9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTMwOD1zdGF0aWMgc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbnRoX29wc19maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTMxOS1cbm1tL2RhbW9uL2NvcmUuYzoxMzIwOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKFxubW0vZGFtb24vY29yZS5jLTEzMjEtXHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzQ0LVxubW0vZGFtb24vY29yZS5jOjEzNDU6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcihcbm1tL2RhbW9uL2NvcmUuYy0xMzQ2LVx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vc19maWx0ZXIgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM1MC1cdGRzdC1cdTAwM2VhbGxvdyA9IHNyYy1cdTAwM2VhbGxvdztcbm1tL2RhbW9uL2NvcmUuYzoxMzUxOlx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEzNTItfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzU0PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEzNjEtXHRcdGlmIChzcmNfZmlsdGVyKVxubW0vZGFtb24vY29yZS5jOjEzNjI6XHRcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3RfZmlsdGVyLCBzcmNfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xMzYzLVx0XHRlbHNlXG4tLVxubW0vZGFtb24vY29yZS5jLTEzNzUtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTM3NjpcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmMtMTM3Ny1cdFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzgyPXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM4OS1cdFx0aWYgKHNyY19maWx0ZXIpXG5tbS9kYW1vbi9jb3JlLmM6MTM5MDpcdFx0XHRkYW1vc19jb21taXRfZmlsdGVyKGRzdF9maWx0ZXIsIHNyY19maWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEzOTEtXHRcdGVsc2Vcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQwMy1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxNDA0Olx0XHRkYW1vc19jb21taXRfZmlsdGVyX2FyZyhuZXdfZmlsdGVyLCBzcmNfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDA1LVx0XHRkYW1vc19hZGRfZmlsdGVyKGRzdCwgbmV3X2ZpbHRlcik7XG4tLVxubW0vZGFtb24vY29yZS5jPTE0ODg9c3RhdGljIGludCBkYW1vc19jb21taXRfZGVzdHMoc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKmRzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTUxOC1cbm1tL2RhbW9uL2NvcmUuYzoxNTE5OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE1MjAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTQ1PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTU2My1cbm1tL2RhbW9uL2NvcmUuYzoxNTY0Olx0ZXJyID0gZGFtb3NfY29tbWl0X2ZpbHRlcnMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE1NjUtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTE4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTIwLXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTIxOlx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTEyMi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldHlwZSwgc3JjLVx1MDAzZXR5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCBpbiB0aGUgREFNT04gQ29yZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIERBTU9OIGNvcmUgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBvdXQgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgYW4gYXJndW1lbnQgcmVsYXRlZCB0byBmaWx0ZXJpbmcgY29tbWl0cywgbGlrZWx5IHVzZWQgd2hlbiBEQU1PTiBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1lbW9yeSByZWdpb25zIHRvIGFjdCB1cG9uLiBJdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXNwZWN0IG9mIGNvbW1pdCBiZWhhdmlvciwgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IHdvcmtzIGJlY2F1c2UgaXQmIzM5O3Mga2V5IHRvIGVpdGhlciBwZXJmb3JtYW5jZSB0dW5pbmcgb3IgZGVidWdnaW5nIGEgYmVoYXZpb3IgaW4gYSBkYW1vbi1yZWxhdGVkIGNvbnRleHQuIElzIGl0IGEgYml0bWFzaz8gQSBmbGFnPyBEb2VzIGl0IHJlbGF0ZSB0byBhIGNvbW1pdCB0aHJlc2hvbGQ/IEEgc3BlY2lmaWMgdHlwZSBvZiBjb21taXQgb3BlcmF0aW9uPyBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBlY29zeXN0ZW0uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaGluZCB0aGUgc2NlbmVzIHJlZ2FyZGluZyBob3cgdGhpcyBwYXJhbWV0ZXIgZ3VpZGVzIHRoZSBjb21taXQgbG9naWMgc28gSSBjYW4gc29sdmUgdGhlIGlzc3VlIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG4xMzIxOlx0XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxuMTMyMjpcdHtcbjEzMjM6XHRcdHN3aXRjaCAoZHN0LVx1MDAzZXR5cGUpIHtcbjEzMjQ6XHRcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XG4xMzI1Olx0XHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbjEzMjY6XHRcdFx0YnJlYWs7XG4xMzI3Olx0XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4xMzI4Olx0XHRcdGRzdC1cdTAwM2VhZGRyX3JhbmdlID0gc3JjLVx1MDAzZWFkZHJfcmFuZ2U7XG4xMzI5Olx0XHRcdGJyZWFrO1xuMTMzMDpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG4xMzMxOlx0XHRcdGRzdC1cdTAwM2V0YXJnZXRfaWR4ID0gc3JjLVx1MDAzZXRhcmdldF9pZHg7XG4xMzMyOlx0XHRcdGJyZWFrO1xuMTMzMzpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFOlxuMTMzNDpcdFx0XHRkc3QtXHUwMDNlc3pfcmFuZ2UgPSBzcmMtXHUwMDNlc3pfcmFuZ2U7XG4xMzM1Olx0XHRcdGJyZWFrO1xuMTMzNjpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4xMzM3Olx0XHRcdGRzdC1cdTAwM2VyYW5nZV9taW4gPSBzcmMtXHUwMDNlcmFuZ2VfbWluO1xuMTMzODpcdFx0XHRkc3QtXHUwMDNlcmFuZ2VfbWF4ID0gc3JjLVx1MDAzZXJhbmdlX21heDtcbjEzMzk6XHRcdFx0YnJlYWs7XG4xMzQwOlx0XHRkZWZhdWx0OlxuMTM0MTpcdFx0XHRicmVhaztcbjEzNDI6XHRcdH1cbjEzNDM6XHR9XG4xMzQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIERBTU9OIEZpbHRlciBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBzdHJ1Y3QgZGFtb3NfZmlsdGVyYCBkZWZpbml0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBEQU1PTiBmaWx0ZXIgaW1wbGVtZW50YXRpb24gaW4gdGhlIGtlcm5lbD8mIzM0OyBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IHRoZSBmaWx0ZXJpbmcgbWVjaGFuaXNtIGlzIHN0cnVjdHVyZWQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayBmb3IgYW55IHJlY2VudCBtb2RpZmljYXRpb25zIG9yIGVuaGFuY2VtZW50cy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBmaWVsZHMsIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGggREFNT04mIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWNjZXNzIHRyYWNraW5nLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgZmlsdGVyaW5nIGNyaXRlcmlhLCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZSBmaWx0ZXJpbmcgbG9naWMsIGFuZCBhbnkgbWVjaGFuaXNtcyBmb3IgZHluYW1pYyBhZGp1c3RtZW50IG9yIGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGZpbHRlciYjMzk7cyBpbnRlcm5hbHMgd2lsbCBiZSBrZXkgdG8gb3B0aW1pemluZyBEQU1PTiYjMzk7cyBiZWhhdmlvciBpbiBjb21wbGV4IHNjZW5hcmlvcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQ1Olx0ICogZGFtb25fb3BlcmF0aW9ucyBhbmQgdGhlIHR5cGUuICBSZWZlciB0byBcdTAwMjZlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIGZvciBtb3JlXG4gNDQ2Olx0ICogZGV0YWlscy5cbiA0NDc6XHQgKi9cbiA0NDg6XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcbiA0NDk6XHRcdGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZTtcbiA0NTA6XHRcdGJvb2wgbWF0Y2hpbmc7XG4gNDUxOlx0XHRib29sIGFsbG93O1xuIDQ1MjpcdFx0dW5pb24ge1xuIDQ1MzpcdFx0XHR1NjQgbWVtY2dfaWQ7XG4gNDU0Olx0XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4gNDU1Olx0XHRcdGludCB0YXJnZXRfaWR4O1xuIDQ1NjpcdFx0XHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbiA0NTc6XHRcdFx0c3RydWN0IHtcbiA0NTg6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHJhbmdlX21pbjtcbiA0NTk6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHJhbmdlX21heDtcbiA0NjA6XHRcdFx0fTtcbiA0NjE6XHRcdH07XG4gNDYyOlx0LyogcHJpdmF0ZTogKi9cbiA0NjM6XHRcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gNDY0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gNDY1Olx0fTtcbiA0NjY6XHRcbiA0Njc6XHRzdHJ1Y3QgZGFtb25fY3R4O1xuIDQ2ODpcdHN0cnVjdCBkYW1vcztcbiA0Njk6XHRcbiA0NzA6XHQvKipcbiA0NzE6XHQgKiBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIC0gQ29udHJvbCBkYW1vc193YWxrKCkuXG4gNDcyOlx0ICpcbiA0NzM6XHQgKiBAd2Fsa19mbjpcdEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBiYWNrIGZvciBlYWNoIHJlZ2lvbi5cbiA0NzQ6XHQgKiBAZGF0YTpcdERhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB3YWxrIGZ1bmN0aW9ucy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MzEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgY29uc2Npb3VzbmVzczoKCioqRGlnZ2luZyBpbnRvIFByb2JlIEhpdCBUcmFja2luZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aG9zZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIOKAkyBgZGFtb25fZm9yX2VhY2hfcHJvYmVgLCBgci0mZ3Q7cHJvYmVfaGl0c2AsIGFuZCBgci0mZ3Q7bGFzdF9wcm9iZV9oaXRzYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBtZW1vcnkgaGFuZGxpbmcgaXMgc291bmQsIGFuZCB0aGVyZSBhcmUgbm8gc25lYWt5IGlzc3VlcyBsdXJraW5nIHRoZXJlLgoKU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIGV4YWN0bHkgKmhvdyogdGhlc2UgYHByb2JlX2hpdHNgIGZpZWxkcyBhcmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gdHJhY2UgYmFjayB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3Qgc2VxdWVuY2UuIEdvdHRhIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgYmVmb3JlIGFueXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2JlX2hpdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDgtXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTM1MC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjYtXHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXG5tbS9kYW1vbi9jb3JlLmM6MzY3Olx0XHRyZXR1cm4gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcbm1tL2RhbW9uL2NvcmUuYy0zNjgtXG5tbS9kYW1vbi9jb3JlLmM6MzY5Olx0cmV0dXJuIGRhbW9uX212c3VtKHItXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxubW0vZGFtb24vY29yZS5jOjM3MDpcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XG5tbS9kYW1vbi9jb3JlLmMtMzcxLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzg5PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NDAzOlx0XHRyZWdpb24tXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6NDA0Olx0XHRyZWdpb24tXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy00MDUtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTQ2Mj1zdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NjgtLyoqXG5tbS9kYW1vbi9jb3JlLmM6NDY5OiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbm1tL2RhbW9uL2NvcmUuYy00NzAtICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc2LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3Nzp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbm1tL2RhbW9uL2NvcmUuYy00NzgtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDg1LVx0XHRpZiAobGFzdClcbm1tL2RhbW9uL2NvcmUuYzo0ODY6XHRcdFx0c3VtICYjNDM7PSByLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmMtNDg3LVx0XHRlbHNlIGlmIChtdilcbm1tL2RhbW9uL2NvcmUuYzo0ODg6XHRcdFx0c3VtICYjNDM7PSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkmIzQzOyYjNDM7LCByLCBjdHgpICpcbm1tL2RhbW9uL2NvcmUuYy00ODktXHRcdFx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmMtNDkwLVx0XHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6NDkxOlx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2Vwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbm1tL2RhbW9uL2NvcmUuYy00OTItXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMDg9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDE0LVxubW0vZGFtb24vY29yZS5jOjEwMTU6c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0xMDE2LVx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMjItXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYzoxMDIzOlx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbm1tL2RhbW9uL2NvcmUuYzoxMDI0Olx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0xMDI1LVx0XHRpZiAoIWFnZ3JlZ2F0aW5nKVxubW0vZGFtb24vY29yZS5jOjEwMjY6XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxubW0vZGFtb24vY29yZS5jOjEwMjc6XHRcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxubW0vZGFtb24vY29yZS5jLTEwMjgtXHRcdFx0XHRcdG5ld19hdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTAyOS1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjEwMzA6XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMDMxLVx0XHRpJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTAzNT1zdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAzOC17XG5tbS9kYW1vbi9jb3JlLmM6MTAzOTpcdGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZywgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0xMDQwLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNDM2PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0MzgtXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcbm1tL2RhbW9uL2NvcmUuYzoxNDM5Olx0dW5zaWduZWQgY2hhciBtYXhfcHJvYmVfaGl0cztcbm1tL2RhbW9uL2NvcmUuYy0xNDQwLVx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ1Ny1cdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXG5tbS9kYW1vbi9jb3JlLmM6MTQ1ODpcdG1heF9wcm9iZV9oaXRzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjdHgtXHUwMDNlYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTE0NTktXHR3c3VtID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xNDYwLVx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xubW0vZGFtb24vY29yZS5jOjE0NjE6XHRcdGlmIChwcm9iZS1cdTAwM2V3ZWlnaHQgXHUwMDNlIFVJTlRfTUFYIC8gbWF4X3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmMtMTQ2Mi1cdFx0XHRyZXR1cm4gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmM6MTQ2MzpcdFx0d3N1bV90b19hZGQgPSBwcm9iZS1cdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcbm1tL2RhbW9uL2NvcmUuYy0xNDY0LVx0XHRpZiAoVUlOVF9NQVggLSB3c3VtIFx1MDAzYyB3c3VtX3RvX2FkZClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjMwMj1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMyNS1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIzMjY6XHRcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IHItXHUwMDNlcHJvYmVfaGl0c1tpXTtcbm1tL2RhbW9uL2NvcmUuYzoyMzI3Olx0XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0yMzI4LVx0XHRcdH1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjUxMT1zdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNTUzLVx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG5tbS9kYW1vbi9jb3JlLmM6MjU1NDpcdFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0yNTU1LVx0XHRtYXRjaGVkID0gZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2M9IHdzdW0gXHUwMDI2XHUwMDI2XG4tLVxubW0vZGFtb24vY29yZS5jPTM0NDQ9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ1NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KVxubW0vZGFtb24vY29yZS5jOjM0NTY6XHRcdGwtXHUwMDNlcHJvYmVfaGl0c1tpXSA9IChsLVx1MDAzZXByb2JlX2hpdHNbaV0gKiBzel9sICYjNDM7IHItXHUwMDNlcHJvYmVfaGl0c1tpXVxubW0vZGFtb24vY29yZS5jLTM0NTctXHRcdFx0XHQqIHN6X3IpIC8gKHN6X2wgJiM0Mzsgc3pfcik7XG4tLVxubW0vZGFtb24vY29yZS5jPTM0NjI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5tbS9kYW1vbi9jb3JlLmM6MzQ2MzpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxubW0vZGFtb24vY29yZS5jLTM0NjQte1xubW0vZGFtb24vY29yZS5jOjM0NjU6XHRpZiAodXNlX3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmM6MzQ2NjpcdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBmYWxzZSwgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNDY3LVx0aWYgKGxhc3QpXG4tLVxubW0vZGFtb24vY29yZS5jPTM0Nzk9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0ODItXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xubW0vZGFtb24vY29yZS5jOjM0ODM6XHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNDg0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDg3LVxubW0vZGFtb24vY29yZS5jOjM0ODg6XHRcdHNjb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgZmFsc2UsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xubW0vZGFtb24vY29yZS5jOjM0ODk6XHRcdGxhc3Rfc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCB0cnVlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcbm1tL2RhbW9uL2NvcmUuYy0zNDkwLVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNTA0LVx0XHRkaWZmID0gYWJzX2RpZmYoc2NvcmUsIGRhbW9uX21lcmdlX3Njb3JlKHByZXYsIGZhbHNlLCBjdHgsXG5tbS9kYW1vbi9jb3JlLmM6MzUwNTpcdFx0XHRcdFx0dXNlX3Byb2JlX2hpdHMpKTtcbm1tL2RhbW9uL2NvcmUuYy0zNTA2LVx0XHRpZiAoZGlmZiBcdTAwM2UgdGhyZXMpXG4tLVxubW0vZGFtb24vY29yZS5jPTM1ODQ9c3RhdGljIGludCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzU5OS1cdC8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqL1xubW0vZGFtb24vY29yZS5jOjM2MDA6XHRtZW1jcHkobmV3LVx1MDAzZXByb2JlX2hpdHMsIHItXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXHUwMDNlcHJvYmVfaGl0cykpO1xubW0vZGFtb24vY29yZS5jOjM2MDE6XHRtZW1jcHkobmV3LVx1MDAzZWxhc3RfcHJvYmVfaGl0cywgci1cdTAwM2VsYXN0X3Byb2JlX2hpdHMsXG5tbS9kYW1vbi9jb3JlLmM6MzYwMjpcdFx0XHRzaXplb2Yoci1cdTAwM2VsYXN0X3Byb2JlX2hpdHMpKTtcbm1tL2RhbW9uL2NvcmUuYy0zNjAzLVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTc2PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE5Ny1cdFx0XHRcdGlmIChkYW1vbl9wYV9maWx0ZXJfcGFzcyhwYSwgZm9saW8sIHApKVxubW0vZGFtb24vcGFkZHIuYzoxOTg6XHRcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSYjNDM7JiM0Mzs7XG5tbS9kYW1vbi9wYWRkci5jLTE5OS1cdFx0XHRcdGkmIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjAzLVx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG5tbS9kYW1vbi9wYWRkci5jOjIwNDpcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbm1tL2RhbW9uL3BhZGRyLmMtMjA1LVx0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDA9c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcHJvYmVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5LVx0XHRfX0FUVFJfUk9fTU9ERShoaXRzLCAwNDAwKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI6XHRcdTAwMjZkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01My1cdE5VTEwsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2Jlcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEzLVx0XHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XHRcdFx0XHRkYW1vbl9wcm9iZV9oaXRzX212c3VtKGksIHJlZ2lvbiwgY3R4KSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVx0XHRpZiAoIXN5c19wcm9iZSkge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01NTk9ZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTkzLVx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1OTQ6XHRcdC5uYW1lID0gXCYjMzQ7cHJvYmVfaGl0c193c3VtXCYjMzQ7LFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5NS1cdH0sXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE0MD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2F0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU0LVx0ci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gMTU7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU1Olx0ci1cdTAwM2Vwcm9iZV9oaXRzWzBdID0gNztcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTY6XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSA9IDM7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU3LVx0ci1cdTAwM2VhZ2UgPSAxMDtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgcl9uZXctXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTczOlx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlcHJvYmVfaGl0c1swXSwgcl9uZXctXHUwMDNlcHJvYmVfaGl0c1swXSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTc0Olx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdLCByX25ldy1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0pO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3NS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgcl9uZXctXHUwMDNlYWdlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTgxPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTk1LVx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IDEwO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE5NjpcdHItXHUwMDNlcHJvYmVfaGl0c1swXSA9IDY7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTk3LVx0ci1cdTAwM2VhZ2UgPSA5O1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMDQtXHRyMi1cdTAwM2Vucl9hY2Nlc3NlcyA9IDIwO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjIwNTpcdHIyLVx1MDAzZXByb2JlX2hpdHNbMF0gPSAxNDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMDYtXHRyMi1cdTAwM2VhZ2UgPSAyMTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjEyLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXMsIDE2dSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjEzOlx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlcHJvYmVfaGl0c1swXSwgMTEpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIxNC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMTd1KTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTUxND1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MzgtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTUzOTpcdC8qIE1vcmUgc2FtcGxlcyBjb3VsZCBvdmVyZmxvdyB0aGUgcHJvYmVfaGl0cyBjb3VudGVycy4gKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTQwLVx0Y3R4LVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAyNTY7XG4tLVxubW0vZGFtb24vdmFkZHIuYz01ODE9c3RhdGljIHZvaWQgZGFtb25fdmFfcHJvYmVfZm9saW8oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTkwLVx0XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIpKVxubW0vZGFtb24vdmFkZHIuYzo1OTE6XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldJiM0MzsmIzQzOztcbm1tL2RhbW9uL3ZhZGRyLmMtNTkyLVx0XHRpJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi92YWRkci5jPTY5MD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03MDUtXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbm1tL2RhbW9uL3ZhZGRyLmM6NzA2Olx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxubW0vZGFtb24vdmFkZHIuYy03MDctXHRcdFx0XHRcdFx0XHRmYWxzZSwgY3R4KSwgbWF4X3dzdW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY4NQoJCQkJCQkJb3V0cHV0OiAyNDAKCQkJCQkJCXRob3VnaHRzOiAxMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IERBTU9OIFByb2JlIEhpdHMgV2VpZ2h0ZWQgU3VtIEZpbHRlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTi4gRmlyc3QsIGxldCYjMzk7cyByZWNhcCB3aGF0IHRoZSBwYXRjaCAqZG9lcyo6IGl0IGludHJvZHVjZXMgYSBuZXcgZmlsdGVyIHR5cGUgZm9yIERBTU9OICh0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvcikgdGhhdCB1c2VzIGEgJiMzNDtwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSYjMzQ7LiBUaGlzIGludm9sdmVzIGFkZGluZyBuZXcgZmllbGRzIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIHRvIGZpbHRlciBzdHJ1Y3R1cmVzLCB1cGRhdGluZyBzeXNmcyBpbnRlcmZhY2VzIGZvciBjb25maWd1cmF0aW9uLCBhbmQgaW50cm9kdWNpbmcgYSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gaW4gdGhlIG1hdGNoaW5nIGxvZ2ljLiBFc3NlbnRpYWxseSwgaXQgYWxsb3dzIGZpbHRlcmluZyBiYXNlZCBvbiBhIHJhbmdlIG9mIHdlaWdodGVkIHByb2JlIGhpdCBjb3VudHMuCgpOb3csIGNyaXRpY2FsbHksIEkgbmVlZCB0byBldmFsdWF0ZSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZWNvbWUgYW4gaXNzdWUuCgoxLiAgKipVc2VyLVNwYWNlIEV4cG9zdXJlOioqIFRoZSBwYXRjaCB1c2VzIHN5c2ZzIHRvIGV4cG9zZSBmaWx0ZXIgcGFyYW1ldGVycy4gTXkgZmlyc3QgY29uY2VybiBpcyBhbHdheXMgYWJvdXQgd2hhdCYjMzk7cyBzZW50IHRvIHVzZXIgc3BhY2UuIEFyZSB3ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeT8gSGVyZSwgdGhlIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCB2YWx1ZXMgYXJlIHNob3duIHZpYSBgc3lzZnNfZW1pdGAsIGJ1dCB0aGUgYHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIFRoaXMgaW5jbHVkZXMgdGhlIG5ldyBmaWVsZHMuIFRoZSBgc3RydWN0IGRhbW9zX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IHRvby4gU28sIHRoZSBkYXRhIGV4cG9zZWQgdG8gdXNlciBzcGFjZSAqc2hvdWxkKiBiZSBzYWZlLiBObyBsZWFrcy4KCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljICZhbXA7IFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIERvZXMgdGhlIGNvZGUgaGF2ZSBicmFuY2hpbmcgb3IgZGVjaXNpb24tbWFraW5nIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBXaXRoaW4gdGhlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIGFuZCBgZGFtb3NfZmlsdGVyX21hdGNoYCBmdW5jdGlvbnMsIGFsbCB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBhcmUgZGVmaW5pdGVseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyB1c2VkLiBgci0mZ3Q7cHJvYmVfaGl0c2AgYW5kIGByLSZndDtsYXN0X3Byb2JlX2hpdHNgIGFyZSBoYW5kbGVkIHNhZmVseSBpbiBgZGFtb25fbmV3X3JlZ2lvbmAuIFRoZSBmaWx0ZXJzIGFyZSBjb25maWd1cmVkIHdpdGggYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIHZhbHVlcywgYW5kIHRoZSBgd3N1bWAgaXMgdGhlbiBjb3JyZWN0bHkgYXNzaWduZWQuIFRoaXMgaXMgYSB2ZXJ5IGNsZWFuIGluaXRpYWxpemF0aW9uIGFuZCB1c2Ugb2YgdmFsdWVzLiBObyB1bmluaXRpYWxpemVkIHJlYWRzLgoKMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogQXJlIHRoZXJlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQgbGF0ZXI/IE5vdCBpbiB0aGlzIHBhdGNoLiBUaGUgc3RydWN0dXJlcyBhbmQgZmlsdGVycyBhcmUgc2ltcGxlLCBhbmQgdGhleSYjMzk7cmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgZHVyaW5nIGFsbG9jYXRpb24gb3IgY29uZmlndXJhdGlvbi4KCjQuICAqKkJvdW5kcyBDaGVja2luZyBhbmQgTWVtb3J5IFNhZmV0eToqKiBBcmUgdGhlcmUgYW55IHBsYWNlcyB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgbGVhZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uPyBUaGUgYGRhbW9uX2Zvcl9lYWNoX3Byb2JlYCBsb29wIGl0ZXJhdGVzIHRocm91Z2ggcHJvYmVzIGluIGBjdHhgLCBhbmQgdGhlIHByb2JlIGNvdW50IGlzIGxpbWl0ZWQgdG8gYERBTU9OX01BWF9QUk9CRVNgLiBUaGUgbG9vcCBpbmRleCBgaWAgaXMgcHJvcGVybHkgbWFuYWdlZCwgc28gdGhpcyBzZWVtcyBzYWZlLgoKKipEb3VibGUgQ2hlY2sgYW5kIENvbmNsdXNpb246KioKCkkmIzM5O3ZlIGdvbmUgdGhyb3VnaCBlYWNoIG9mIHRoZSBwb3RlbnRpYWwgaXNzdWVzLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdDoKCiogICBObyBkYXRhIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uCiogICBObyBjb250cm9sIGZsb3cgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgcmVhZHMuCiogICBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBzYWZldHkgdG9vbHMgKGxpa2UgTE9DS0RFUCkgY292ZXIgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIHJpc2tzLiBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZSB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gTm93LCBJIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHRvb2wgY2FsbCB0byByZWZsZWN0IHRoaXMgY29uY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgZmlsdGVyIHR5cGUgZm9yIERBTU9OIHNjaGVtZXMsIGV4dGVuZGluZyBzeXNmcyBhdHRyaWJ1dGVzIChgbWluYCBhbmQgYG1heGApIGFuZCBjb3JlIGZpbHRlciBtYXRjaGluZyB0byB1c2UgdGhlIHByb2JlIGhpdHMgd2VpZ2h0ZWQgbW92aW5nIHN1bS4gXG5cbi0gTWVtb3J5IEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBTeXNmcyBzY2hlbWUgZmlsdGVyIHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBlbnN1cmluZyBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEluIERBTU9OIGNvcmUsIGZpbHRlciBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdXBvbiBjcmVhdGlvbiBhbmQgZmlsdGVyIGFyZ3VtZW50cyBjb21taXQuXG4tIFVzZXItc3BhY2UgRGF0YSBUcmFuc2ZlcjogU3lzZnMgb3V0cHV0IHVzZXMgZm9ybWF0dGVkIHN0cmluZyBlbWlzc2lvbnMgdmlhIGBzeXNmc19lbWl0KClgLCB3aXRoIG5vIHJhdyBzdHJ1Y3QgY29waWVzIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuXG4tIFZhcmlhYmxlcyBhbmQgQnJhbmNoaW5nOiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gYW5kIGZpbHRlciBtYXRjaGluZyAoYHN1bWAsIGBpYCwgYHdzdW1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIG9yIGxvZ2ljIGlzc3VlcyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgbWVjaGFuaXNtcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGZpbHRlciB0eXBlIGZvciBEQU1PTiBzY2hlbWVzLCBleHRlbmRpbmcgc3lzZnMgYXR0cmlidXRlcyAoYG1pbmAgYW5kIGBtYXhgKSBhbmQgY29yZSBmaWx0ZXIgbWF0Y2hpbmcgdG8gdXNlIHRoZSBwcm9iZSBoaXRzIHdlaWdodGVkIG1vdmluZyBzdW0uIFxuXG4tIE1lbW9yeSBBbGxvY2F0aW9uIFx1MDAyNiBJbml0aWFsaXphdGlvbjogU3lzZnMgc2NoZW1lIGZpbHRlciBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBJbiBEQU1PTiBjb3JlLCBmaWx0ZXIgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHVwb24gY3JlYXRpb24gYW5kIGZpbHRlciBhcmd1bWVudHMgY29tbWl0LlxuLSBVc2VyLXNwYWNlIERhdGEgVHJhbnNmZXI6IFN5c2ZzIG91dHB1dCB1c2VzIGZvcm1hdHRlZCBzdHJpbmcgZW1pc3Npb25zIHZpYSBgc3lzZnNfZW1pdCgpYCwgd2l0aCBubyByYXcgc3RydWN0IGNvcGllcyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLlxuLSBWYXJpYWJsZXMgYW5kIEJyYW5jaGluZzogQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgd2VpZ2h0ZWQgc3VtIGNhbGN1bGF0aW9uIGFuZCBmaWx0ZXIgbWF0Y2hpbmcgKGBzdW1gLCBgaWAsIGB3c3VtYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIG1lY2hhbmlzbXMgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIyOjM1LjI4OTgzODEwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNTYwMDc0NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9zX2ZpbHRlcl9mb3Jfb3BzXCIsXG4gICAgXCJkYW1vc19jb21taXRfZmlsdGVyX2FyZ1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fbWVyZ2Vfc2NvcmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGZpbHRlciB0eXBlIGZvciBEQU1PTiBzY2hlbWVzLCBleHRlbmRpbmcgc3lzZnMgYXR0cmlidXRlcyAoYG1pbmAgYW5kIGBtYXhgKSBhbmQgY29yZSBmaWx0ZXIgbWF0Y2hpbmcgdG8gdXNlIHRoZSBwcm9iZSBoaXRzIHdlaWdodGVkIG1vdmluZyBzdW0uIFxcblxcbi0gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogU3lzZnMgc2NoZW1lIGZpbHRlciBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBJbiBEQU1PTiBjb3JlLCBmaWx0ZXIgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHVwb24gY3JlYXRpb24gYW5kIGZpbHRlciBhcmd1bWVudHMgY29tbWl0Llxcbi0gVXNlci1zcGFjZSBEYXRhIFRyYW5zZmVyOiBTeXNmcyBvdXRwdXQgdXNlcyBmb3JtYXR0ZWQgc3RyaW5nIGVtaXNzaW9ucyB2aWEgYHN5c2ZzX2VtaXQoKWAsIHdpdGggbm8gcmF3IHN0cnVjdCBjb3BpZXMgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4tIFZhcmlhYmxlcyBhbmQgQnJhbmNoaW5nOiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gYW5kIGZpbHRlciBtYXRjaGluZyAoYHN1bWAsIGBpYCwgYHdzdW1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3IgbG9naWMgaXNzdWVzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBtZWNoYW5pc21zIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSAvICdwcm9iZV9oaXRzX3dzdW0nKSBpbiBEQU1PTiwgdXBkYXRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBzeXNmcyBjb25maWd1cmF0aW9uIGhhbmRsaW5nLCBhbmQgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb25zIGFjcm9zcyBEQU1PTiBjb3JlLCBwYWRkciwgYW5kIHZhZGRyIG9wZXJhdGlvbnMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjozNS4yODk4NDM3ODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTQzMjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZjOTAwMWJkOTlmOWY3NjZiOTZkYWRmNWU3OTNkZTEwYWY3NjBkYjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTU6MjI6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbmluZGV4IDAyM2M2MzM0MDI0ZjguLmQzZTM3NDAwMzY3YmQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbkBAIC01NTEsNiArNTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlXFxuIGZpbHRlci4gIFJlZmVyIHRvIDpyZWY6YHRoZSBkZXNpZ24gZG9jIFxcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVyc1xcdTAwM2VgIGZvclxcbiBhdmFpbGFibGUgdHlwZSBuYW1lcywgdGhlaXIgbWVhbmluZyBhbmQgb24gd2hhdCBsYXllciB0aG9zZSBhcmUgaGFuZGxlZC5cXG4gXFxuK0ZvciBgYHByb2JlX2hpdHNfd3N1bWBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBwcm9iZVxcbitoaXRzIHdlaWdodGVkIHN1bSB2YWx1ZSBmb3IgdGhlIGZpbHRlciB0byBgYG1pbmBgIGFuZCBgYG1heGBgIGZpbGVzLFxcbityZXNwZWN0aXZlbHkuXFxuK1xcbiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnlcXG4gd3JpdGluZyB0aGUgcGF0aCBvZiB0aGUgbWVtb3J5IGNncm91cCBmcm9tIHRoZSBjZ3JvdXBzIG1vdW50IHBvaW50IHRvXFxuIGBgbWVtY2dfcGF0aGBgIGZpbGUuICBGb3IgYGBhZGRyYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBzdGFydCBhbmQgZW5kXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxcbmluZGV4IGFhYzg0ZGUyNjFhYTguLjhlOTgwZGRlMzYyZGUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuQEAgLTgyMiw2ICs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLlxcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIGFkZHJlc3MgcmFuZ2UuXFxuICAgICAtIHRhcmdldFxcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LlxcbisgICAgLSBwcm9iZV9oaXRzX3dzdW1cXG4rICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlXFxuKyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSBcXHUwMDNjZGFtb25fZGVzaWduX2F0dHJzX29ubHlfbW9uaXRvcmluZ1xcdTAwM2VgIHZhbHVlLlxcbiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LlxcbiAgICAgLSBhbm9uXFxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgY29udGFpbmluZyBkYXRhIHRoYXQgbm90IHN0b3JlZCBpbiBmaWxlcy5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXFxuaW5kZXggODcxZDI2YWRmNmFlNS4uNGEzNmYzNDRiYmM3YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtMzk5LDE0ICszOTksMTUgQEAgc3RydWN0IGRhbW9zX3N0YXQge1xcbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6XFx0VW5tYXBwZWQgcGFnZXMuXFxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxcdEFkZHJlc3MgcmFuZ2UuXFxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XFx0RGF0YSBBY2Nlc3MgTW9uaXRvcmluZyB0YXJnZXQuXFxuKyAqIEBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XFx0cHJvYmVfaGl0cyB3ZWlnaHRlZCBzdW0gcmFuZ2UuXFxuICAqIEBOUl9EQU1PU19GSUxURVJfVFlQRVM6XFx0TnVtYmVyIG9mIGZpbHRlciB0eXBlcy5cXG4gICpcXG4tICogQWxsIHR5cGVzIGV4Y2VwdCBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVFxcbi0gKiBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyBcXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZVxcbi0gKiBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZCBhcyAndHJpZWQnLiAgSW4gY29udHJhc3QsXFxuLSAqIFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWRcXG4tICogYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWRcXG4tICogYXMgJ3RyaWVkJy5cXG4rICogQWxsIHR5cGVzIGV4Y2VwdCBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiwgXFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmRcXG4rICogXFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyBcXHUwMDI2c3RydWN0XFxuKyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZFxcbisgKiBhcyAndHJpZWQnLiAgSW4gY29udHJhc3QsIFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZFxcbisgKiBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlXFxuKyAqIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQgYXMgJ3RyaWVkJy5cXG4gICpcXG4gICogU3VwcG9ydCBmb3IgdGhlIG9wZXJhdGlvbnMtaGFuZGxlZCBmaWx0ZXJzIGRlcGVuZHMgb24gdGhlIHJ1bm5pbmdcXG4gICogXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLlxcbkBAIC00MjAsNiArNDIxLDcgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XFxuIFxcdERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVELFxcbiBcXHREQU1PU19GSUxURVJfVFlQRV9BRERSLFxcbiBcXHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsXFxuK1xcdERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcXG4gXFx0TlJfREFNT1NfRklMVEVSX1RZUEVTLFxcbiB9O1xcbiBcXG5AQCAtNDM0LDYgKzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xcbiAgKlxcdFxcdFxcdTAwMjZkYW1vbl9jdHgtXFx1MDAzZWFkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXNcXG4gICpcXHRcXHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuXFxuICAqIEBzel9yYW5nZTpcXHRTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuXFxuKyAqIEByYW5nZV9taW46XFx0TWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXFxuKyAqIEByYW5nZV9tYXg6XFx0TWF4aW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXFxuICAqXFxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXFx1MDAyNmRhbW9zLVxcdTAwM2VhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaFxcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXFxuQEAgLTQ1MCw2ICs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7XFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XFxuIFxcdFxcdGludCB0YXJnZXRfaWR4O1xcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O1xcbitcXHRcXHR9O1xcbiBcXHR9O1xcbiAvKiBwcml2YXRlOiAqL1xcbiBcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbkBAIC0xMDY1LDcgKzEwNzMsNyBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4gdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4gXFxuIGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC00NjksMTEgKzQ2OSwxMiBAQCBzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXFxuICAqIEByOlxcdFxcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cXG4gICogQGxhc3Q6XFx0aWYgdGhlIHJlcXVlc3QgaXMgZm9yIGxhc3Qtd2luZG93IGFnZ3JlZ2F0ZWQgcHJvYmUgaGl0cy5cXG4rICogQG12OlxcdFxcdHVzZSBtb3Zpbmcgc3VtLlxcbiAgKiBAY3R4OlxcdGNvbnRleHQgb2YgXFx1MDAyNnIuXFxuICAqXFxuICAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXFxuICAqL1xcbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4rdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbkBAIC00ODMsNiArNDg0LDkgQEAgdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcXG4gXFx0XFx0aWYgKGxhc3QpXFxuIFxcdFxcdFxcdHN1bSArPSByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSsrXSAqIHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuK1xcdFxcdGVsc2UgaWYgKG12KVxcbitcXHRcXHRcXHRzdW0gKz0gZGFtb25fcHJvYmVfaGl0c19tdnN1bShpKyssIHIsIGN0eCkgKlxcbitcXHRcXHRcXHRcXHRwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHN1bSArPSByLVxcdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbiBcXHR9XFxuQEAgLTY1NCw2ICs2NTgsNyBAQCBib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSlcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuIFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcXG4gXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XFxuK1xcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xMzI4LDYgKzEzMzMsMTAgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXFxuIFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcXG4gXFx0XFx0ZHN0LVxcdTAwM2Vzel9yYW5nZSA9IHNyYy1cXHUwMDNlc3pfcmFuZ2U7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcXG4rXFx0XFx0ZHN0LVxcdTAwM2VyYW5nZV9taW4gPSBzcmMtXFx1MDAzZXJhbmdlX21pbjtcXG4rXFx0XFx0ZHN0LVxcdTAwM2VyYW5nZV9tYXggPSBzcmMtXFx1MDAzZXJhbmdlX21heDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTI1MDYsNyArMjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuIFxcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aTtcXG4gXFx0aW50IHRhcmdldF9pZHggPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgd3N1bTtcXG4gXFxuIFxcdHN3aXRjaCAoZmlsdGVyLVxcdTAwM2V0eXBlKSB7XFxuIFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlxcbkBAIC0yNTQxLDYgKzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0XFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItXFx1MDAzZWFyLnN0YXJ0KTtcXG4gXFx0XFx0bWF0Y2hlZCA9IHRydWU7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcXG4rXFx0XFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcXG4rXFx0XFx0bWF0Y2hlZCA9IGZpbHRlci1cXHUwMDNlcmFuZ2VfbWluIFxcdTAwM2M9IHdzdW0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0d3N1bSBcXHUwMDNjPSBmaWx0ZXItXFx1MDAzZXJhbmdlX21heDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbkBAIC0zNDQ5LDcgKzM0NjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxcbiB7XFxuIFxcdGlmICh1c2VfcHJvYmVfaGl0cylcXG4tXFx0XFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xcbitcXHRcXHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGZhbHNlLCBjdHgpO1xcbiBcXHRpZiAobGFzdClcXG4gXFx0XFx0cmV0dXJuIHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XFxuIFxcdHJldHVybiByLVxcdTAwM2Vucl9hY2Nlc3NlcztcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcXG5pbmRleCBkN2M4MTgyOTQ0NWJhLi5iOGY0ZDI4MTY1ZGQ3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXFxuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdFxcdGlmIChyZXR1cm5fbWF4X3dzdW0pXFxuIFxcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRmYWxzZSwgY3R4KSwgbWF4X3dzdW0pO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0cmV0dXJuIG1heF93c3VtO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcXG5pbmRleCBkOWI4MWQ3YjU5MTBlLi5kOWRkNGVlMDQ0MmM3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbkBAIC01MzQsNyArNTM0LDggQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xcbiBcXHRib29sIGFsbG93O1xcbiBcXHRjaGFyICptZW1jZ19wYXRoO1xcbiBcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xcbi1cXHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcXG4rXFx0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XFxuK1xcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O1xcbiBcXHRpbnQgdGFyZ2V0X2lkeDtcXG4gfTtcXG4gXFxuQEAgLTU4OCw2ICs1ODksMTAgQEAgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcXG4gXFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsXFxuIFxcdFxcdC5uYW1lID0gXFxcInRhcmdldFxcXCIsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sXFxuK1xcdFxcdC5uYW1lID0gXFxcInByb2JlX2hpdHNfd3N1bVxcXCIsXFxuK1xcdH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuQEAgLTc3OCw3ICs3ODMsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxuIFxcbi1cXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWluKTtcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWx1XFxcXG5cXFwiLCBmaWx0ZXItXFx1MDAzZXJhbmdlX21pbik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5AQCAtNzg2LDcgKzc5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxuIFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG4tXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWluKTtcXG4rXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlcmFuZ2VfbWluKTtcXG4gXFxuIFxcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcXG4gfVxcbkBAIC03OTcsNyArODAyLDcgQEAgc3RhdGljIHNzaXplX3QgbWF4X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG4gXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbiBcXG4tXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWx1XFxcXG5cXFwiLCBmaWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1heCk7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuQEAgLTgwNSw3ICs4MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxuLVxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1heCk7XFxuK1xcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZXJhbmdlX21heCk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7XFxuIH1cXG5AQCAtMjgzNSwxMiArMjg0MCwyMSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcXG4gXFx0XFx0fSBlbHNlIGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7XFxuIFxcdFxcdFxcdGZpbHRlci1cXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNldGFyZ2V0X2lkeDtcXG4gXFx0XFx0fSBlbHNlIGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRSkge1xcbi1cXHRcXHRcXHRpZiAoc3lzZnNfZmlsdGVyLVxcdTAwM2Vzel9yYW5nZS5taW4gXFx1MDAzZVxcbi1cXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1heCkge1xcbitcXHRcXHRcXHRpZiAoc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9taW4gXFx1MDAzZVxcbitcXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21heCkge1xcbitcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1pbiA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluO1xcbitcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1heCA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4O1xcbitcXHRcXHR9IGVsc2UgaWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcXG4rXFx0XFx0XFx0aWYgKHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluIFxcdTAwM2VcXG4rXFx0XFx0XFx0XFx0XFx0c3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXgpIHtcXG4gXFx0XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2Vzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlc3pfcmFuZ2U7XFxuK1xcdFxcdFxcdGZpbHRlci1cXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9taW47XFxuK1xcdFxcdFxcdGZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXg7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGRhbW9zX2FkZF9maWx0ZXIoc2NoZW1lLCBmaWx0ZXIpO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xcbmluZGV4IDlhMzhkYzg5YTE1NmUuLjRhZWNmMzRlMzliZTIgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5AQCAtNzA0LDcgKzcwNCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4gXFx0XFx0XFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XFxuIFxcdFxcdFxcdGlmIChyZXR1cm5fbWF4X3dzdW0pXFxuIFxcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRmYWxzZSwgY3R4KSwgbWF4X3dzdW0pO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChtbSlcXG4gXFx0XFx0XFx0bW1wdXQobW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjozNS44NDYxNzAyOTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1Mzg5ODEwNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9zX2ZpbHRlcl9mb3Jfb3BzXCIsXG4gICAgXCJkYW1vc19jb21taXRfZmlsdGVyX2FyZ1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fbWVyZ2Vfc2NvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gLyAncHJvYmVfaGl0c193c3VtJykgaW4gREFNT04sIHVwZGF0aW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYywgc3lzZnMgY29uZmlndXJhdGlvbiBoYW5kbGluZywgYW5kIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbGN1bGF0aW9ucyBhY3Jvc3MgREFNT04gY29yZSwgcGFkZHIsIGFuZCB2YWRkciBvcGVyYXRpb25zLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYzkwMDFiZDk5ZjlmNzY2Yjk2ZGFkZjVlNzkzZGUxMGFmNzYwZGI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTU6MjI6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCAwMjNjNjMzNDAyNGY4Li5kM2UzNzQwMDM2N2JkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5AQCAtNTUxLDYgKzU1MSwxMCBAQCBhbmQgYGBkYW1vbl90YXJnZXRfaWR4YGAuICBUbyBgYHR5cGVgYCBmaWxlLCB5b3UgY2FuIHdyaXRlIHRoZSB0eXBlIG9mIHRoZVxuIGZpbHRlci4gIFJlZmVyIHRvIDpyZWY6YHRoZSBkZXNpZ24gZG9jIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc19maWx0ZXJzXHUwMDNlYCBmb3JcbiBhdmFpbGFibGUgdHlwZSBuYW1lcywgdGhlaXIgbWVhbmluZyBhbmQgb24gd2hhdCBsYXllciB0aG9zZSBhcmUgaGFuZGxlZC5cbiBcbitGb3IgYGBwcm9iZV9oaXRzX3dzdW1gYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gcHJvYmVcbitoaXRzIHdlaWdodGVkIHN1bSB2YWx1ZSBmb3IgdGhlIGZpbHRlciB0byBgYG1pbmBgIGFuZCBgYG1heGBgIGZpbGVzLFxuK3Jlc3BlY3RpdmVseS5cbitcbiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnlcbiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG9cbiBgYG1lbWNnX3BhdGhgYCBmaWxlLiAgRm9yIGBgYWRkcmBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgc3RhcnQgYW5kIGVuZFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtODIyLDYgKzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBiZWxvbmdpbmcgdG8gYSBnaXZlbiBhZGRyZXNzIHJhbmdlLlxuICAgICAtIHRhcmdldFxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuXG4rICAgIC0gcHJvYmVfaGl0c193c3VtXG4rICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlXG4rICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtIFx1MDAzY2RhbW9uX2Rlc2lnbl9hdHRyc19vbmx5X21vbml0b3JpbmdcdTAwM2VgIHZhbHVlLlxuIC0gT3BlcmF0aW9ucyBsYXllciBoYW5kbGVkLCBzdXBwb3J0ZWQgYnkgb25seSBgYHBhZGRyYGAgb3BlcmF0aW9ucyBzZXQuXG4gICAgIC0gYW5vblxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgY29udGFpbmluZyBkYXRhIHRoYXQgbm90IHN0b3JlZCBpbiBmaWxlcy5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDg3MWQyNmFkZjZhZTUuLjRhMzZmMzQ0YmJjN2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTM5OSwxNCArMzk5LDE1IEBAIHN0cnVjdCBkYW1vc19zdGF0IHtcbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6XHRVbm1hcHBlZCBwYWdlcy5cbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfQUREUjpcdEFkZHJlc3MgcmFuZ2UuXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcdERhdGEgQWNjZXNzIE1vbml0b3JpbmcgdGFyZ2V0LlxuKyAqIEBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XHRwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS5cbiAgKiBATlJfREFNT1NfRklMVEVSX1RZUEVTOlx0TnVtYmVyIG9mIGZpbHRlciB0eXBlcy5cbiAgKlxuLSAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUXG4tICogYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZVxuLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICd0cmllZCcuICBJbiBjb250cmFzdCxcbi0gKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZFxuLSAqIGJ5IHRoZSBjb3JlIGxheWVyIGJlZm9yZSB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkXG4tICogYXMgJ3RyaWVkJy5cbisgKiBBbGwgdHlwZXMgZXhjZXB0IFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIsIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmRcbisgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0XG4rICogZGFtb25fb3BlcmF0aW9ucyBhcyBhIHBhcnQgb2Ygc2NoZW1lIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkXG4rICogYXMgJ3RyaWVkJy4gIEluIGNvbnRyYXN0LCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZFxuKyAqIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjb3JlIGxheWVyIGJlZm9yZVxuKyAqIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQgYXMgJ3RyaWVkJy5cbiAgKlxuICAqIFN1cHBvcnQgZm9yIHRoZSBvcGVyYXRpb25zLWhhbmRsZWQgZmlsdGVycyBkZXBlbmRzIG9uIHRoZSBydW5uaW5nXG4gICogXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuXG5AQCAtNDIwLDYgKzQyMSw3IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuIFx0REFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsXG4gXHREQU1PU19GSUxURVJfVFlQRV9BRERSLFxuIFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuK1x0REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxuIFx0TlJfREFNT1NfRklMVEVSX1RZUEVTLFxuIH07XG4gXG5AQCAtNDM0LDYgKzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuICAqXHRcdFx1MDAyNmRhbW9uX2N0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzXG4gICpcdFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULlxuICAqIEBzel9yYW5nZTpcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cbisgKiBAcmFuZ2VfbWluOlx0TWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXG4rICogQHJhbmdlX21heDpcdE1heGltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLlxuICAqXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcdTAwMjZkYW1vcy1cdTAwM2VhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaFxuICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGVcbkBAIC00NTAsNiArNDU0LDEwIEBAIHN0cnVjdCBkYW1vc19maWx0ZXIge1xuIFx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xuIFx0XHRpbnQgdGFyZ2V0X2lkeDtcbiBcdFx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4rXHRcdFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4rXHRcdH07XG4gXHR9O1xuIC8qIHByaXZhdGU6ICovXG4gXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuQEAgLTEwNjUsNyArMTA3Myw3IEBAIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIHVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuK3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIFxuIGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ1Y2IzNjcwMTlhZS4uZDlkNTZmNGJlMWE5NyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtNDY5LDExICs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4gICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbiAgKiBAbGFzdDpcdGlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuXG4rICogQG12Olx0XHR1c2UgbW92aW5nIHN1bS5cbiAgKiBAY3R4Olx0Y29udGV4dCBvZiBcdTAwMjZyLlxuICAqXG4gICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi5cbiAgKi9cbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG5AQCAtNDgzLDYgKzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuIFx0XHRpZiAobGFzdClcbiBcdFx0XHRzdW0gKz0gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSsrXSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbitcdFx0ZWxzZSBpZiAobXYpXG4rXHRcdFx0c3VtICs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSsrLCByLCBjdHgpICpcbitcdFx0XHRcdHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHN1bSArPSByLVx1MDAzZXByb2JlX2hpdHNbaSsrXSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdH1cbkBAIC02NTQsNiArNjU4LDcgQEAgYm9vbCBkYW1vc19maWx0ZXJfZm9yX29wcyhlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUpXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlxuK1x0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTEzMjgsNiArMTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcbiBcdFx0ZHN0LVx1MDAzZXN6X3JhbmdlID0gc3JjLVx1MDAzZXN6X3JhbmdlO1xuIFx0XHRicmVhaztcbitcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuK1x0XHRkc3QtXHUwMDNlcmFuZ2VfbWluID0gc3JjLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0ZHN0LVx1MDAzZXJhbmdlX21heCA9IHNyYy1cdTAwM2VyYW5nZV9tYXg7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjUwNiw3ICsyNTE1LDcgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuIFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGk7XG4gXHRpbnQgdGFyZ2V0X2lkeCA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHdzdW07XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbkBAIC0yNTQxLDYgKzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItXHUwMDNlYXIuc3RhcnQpO1xuIFx0XHRtYXRjaGVkID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbitcdFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcbitcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VyYW5nZV9taW4gXHUwMDNjPSB3c3VtIFx1MDAyNlx1MDAyNlxuK1x0XHRcdHdzdW0gXHUwMDNjPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0zNDQ5LDcgKzM0NjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxuIHtcbiBcdGlmICh1c2VfcHJvYmVfaGl0cylcbi1cdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xuK1x0XHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGZhbHNlLCBjdHgpO1xuIFx0aWYgKGxhc3QpXG4gXHRcdHJldHVybiByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XG4gXHRyZXR1cm4gci1cdTAwM2Vucl9hY2Nlc3NlcztcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggZDdjODE4Mjk0NDViYS4uYjhmNGQyODE2NWRkNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0fVxuIFx0cmV0dXJuIG1heF93c3VtO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggZDliODFkN2I1OTEwZS4uZDlkZDRlZTA0NDJjNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5AQCAtNTM0LDcgKzUzNCw4IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcbiBcdGJvb2wgYWxsb3c7XG4gXHRjaGFyICptZW1jZ19wYXRoO1xuIFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbi1cdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuK1x0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4rXHR1bnNpZ25lZCBsb25nIHJhbmdlX21heDtcbiBcdGludCB0YXJnZXRfaWR4O1xuIH07XG4gXG5AQCAtNTg4LDYgKzU4OSwxMCBAQCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0ge1xuIFx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcbiBcdFx0Lm5hbWUgPSBcInRhcmdldFwiLFxuIFx0fSxcbitcdHtcbitcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sXG4rXHRcdC5uYW1lID0gXCJwcm9iZV9oaXRzX3dzdW1cIixcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtNzc4LDcgKzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbiBcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbik7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2VyYW5nZV9taW4pO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtNzg2LDcgKzc5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuLVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbik7XG4rXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtNzk3LDcgKzgwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbiBcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtODA1LDcgKzgxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuLVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4rXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4KTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtMjgzNSwxMiArMjg0MCwyMSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbiBcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuIFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbi1cdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbiBcdTAwM2Vcbi1cdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCkge1xuK1x0XHRcdGlmIChzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzZVxuK1x0XHRcdFx0XHRzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4KSB7XG4rXHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuK1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXggPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkge1xuK1x0XHRcdGlmIChzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzZVxuK1x0XHRcdFx0XHRzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4KSB7XG4gXHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZTtcbitcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbiBcdFx0fVxuIFxuIFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggOWEzOGRjODlhMTU2ZS4uNGFlY2YzNGUzOWJlMiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC03MDQsNyArNzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpO1xuIFx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4gXHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG4tXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4rXHRcdFx0XHRcdFx0XHRmYWxzZSwgY3R4KSwgbWF4X3dzdW0pO1xuIFx0XHR9XG4gXHRcdGlmIChtbSlcbiBcdFx0XHRtbXB1dChtbSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjozNS44NDYxNzE3MzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzk3NzQzMjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIERBTU9OIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHRoZSBwYXRjaCdzIHJpc2sgYW5kIGlkZW50aWZ5IHRoZSBtb3N0IHByb21pc2luZyBhcmVhcyBmb3IgdGFyZ2V0ZWQgZnV6emluZywgYWxvbmcgd2l0aCBhbnkgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBjaGFuZ2VkLiBUaGUgZmlsZSBsaXN0IHRlbGxzIHRoZSBzdG9yeTogZG9jdW1lbnRhdGlvbiB1cGRhdGVzIChgLnJzdGAgZmlsZXMpLCBoZWFkZXIgbW9kaWZpY2F0aW9ucyAoYGRhbW9uLmhgKSwgYW5kIGNvcmUgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGAuY2AgZmlsZXMgd2l0aGluIHRoZSBgbW0vZGFtb25gIGRpcmVjdG9yeS4gVGhpcyBzdWdnZXN0cyBhIHNpZ25pZmljYW50IGFsdGVyYXRpb24gdG8gdGhlIERBTU9OIHN1YnN5c3RlbSdzIGJlaGF2aW9yLlxuXG5TcGVjaWZpY2FsbHksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZTogYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgKFwicHJvYmVfaGl0c193c3VtXCIpLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAgZnVuY3Rpb24sIGFkZGluZyBhIGJvb2xlYW4gYXJndW1lbnQgYG12YCB3aGljaCBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIGlzIG5vdyB1c2VkIGJ5IHNldmVyYWwgZnVuY3Rpb25zOiBgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoKWAsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZygpYCwgYGRhbW9zX2ZpbHRlcl9tYXRjaCgpYCwgYW5kIHN5c2ZzIGZpbHRlciBoYW5kbGluZy4gVGhpcyBzdWdnZXN0cyB0aGVyZSBhcmUgbmV3IHdheXMgdG8gY29udHJvbCB0aGUgZmlsdGVyJ3MgYmVoYXZpb3IuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbmV3IGZpbHRlciBkb2VzLCBpbiBwYXJ0aWN1bGFyIGhvdyB0aGUgbW92aW5nIHN1bSBpcyBpbXBsZW1lbnRlZCBhbmQgaW50ZWdyYXRlZCBpbnRvIHRoZSBleGlzdGluZyBmaWx0ZXIgc3lzdGVtLiBUaGlzIGlzIGEgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgREFNT04gY29kZSBhbmQgS2NvbmZpZyBvcHRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhpc3RpbmcgREFNT04gZmVhdHVyZXMgYW5kIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBVc2luZyBgZ3JlcHBlcmAgb3IgZGlnZ2luZyBpbnRvIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaW1wYWN0IG15IGZ1enppbmcgc2V0dXAg4oCTIGZvciBleGFtcGxlLCBkZWJ1ZyBvcHRpb25zLCB0cmFjaW5nLCBvciBsb2dnaW5nIHdoaWNoIHdvdWxkIGJlIGJlbmVmaWNpYWwgZHVyaW5nIHRoZSBmdXp6aW5nIHN0YWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTQ0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjI6MzkuNjQzOTE3MzYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg0NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnOjY6XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNy1cXHRoZWxwXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWc6MTY6XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxNzpcXHRkZXBlbmRzIG9uIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy0xOC1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxOTpcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG5tbS9kYW1vbi9LY29uZmlnOjIwOlxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxubW0vZGFtb24vS2NvbmZpZy0yMS1cXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZzoyODpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG5tbS9kYW1vbi9LY29uZmlnLTI5LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZy0zMC1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzozMTpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctMzItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo0MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL2RhbW9uL0tjb25maWctNDEtXFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxubW0vZGFtb24vS2NvbmZpZzo0MjpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy00My1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo0NDpcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTQ1LVxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo0OTpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL2RhbW9uL0tjb25maWctNTAtXFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxubW0vZGFtb24vS2NvbmZpZzo1MTpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy01Mi1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo1MzpcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTU0LVxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZzo1NzpcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZzo1ODpcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG5tbS9kYW1vbi9LY29uZmlnLTU5LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZy02MC1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo2MTpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy02Mi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnOjY5OlxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjcwOlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnOjcxOlxcdGRlZmF1bHQgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTcyLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjczOlxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxubW0vZGFtb24vS2NvbmZpZy03NC1cXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZzo3ODpcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG5tbS9kYW1vbi9LY29uZmlnLTc5LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZy04MC1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo4MTpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTgyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZzo4OTpcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjkwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTkxLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjkyOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXFxubW0vZGFtb24vS2NvbmZpZzo5MzpcXHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cXG5tbS9kYW1vbi9LY29uZmlnLTk0LVxcdCAgdGhvc2UuXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWc6MTAxOlxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMDI6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctMTAzLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjEwNDpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyBzdWJzeXN0ZW0uICBJdCB0cmllcyB0b1xcbm1tL2RhbW9uL0tjb25maWctMTA1LVxcdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZzoxMDk6XFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjExMDpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy0xMTEtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTEyOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIGFjY2VzcyBtb25pdG9yaW5nIHN0YXRpc3RpY3Mgc3Vic3lzdGVtLlxcbm1tL2RhbW9uL0tjb25maWc6MTEzOlxcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcXG5tbS9kYW1vbi9LY29uZmlnLTExNC1cXHQgIG1ldHJpY3MuXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZzoxMTc6XFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjExODpcXHRkZXBlbmRzIG9uIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnOjExOTpcXHRkZWZhdWx0IERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEyMC1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMjE6XFx0ICBXaGV0aGVyIHRvIGVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHQuICBVc2VycyBjYW4gZGlzYWJsZSBpdCBpblxcbm1tL2RhbW9uL0tjb25maWctMTIyLVxcdCAgYm9vdCBvciBydW50aW1lIHVzaW5nIGl0cyAnZW5hYmxlZCcgcGFyYW1ldGVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjozOS42ODk2MDc0ODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ0NjEwODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRXhhbWluaW5nIHRoZSBEQU1PTiBNYWtlZmlsZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYE1ha2VmaWxlYCBsb2NhdGVkIGluIGBtbS9kYW1vbmAuIE15IGdvYWwgaXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIERBTU9OIChEeW5hbWljIEFjY2VzcyBNb25pdG9yaW5nKSBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCBhbmQgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgaW5jbHVkZWQgYmFzZWQgb24gdmFyaW91cyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZywgY3VzdG9taXphdGlvbiwgYW5kIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgbGlua2VkIGluIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UsIGVzcGVjaWFsbHkgaWYgSSdtIHRhcmdldGluZyBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIG9yIHVzZSBjYXNlLiBJJ20gaG9waW5nIHRoaXMgYE1ha2VmaWxlYCB3aWxsIHF1aWNrbHkgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGJ1aWxkIGZsYWdzIGludm9sdmVkLCBnaXZpbmcgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIERBTU9OJ3MgYXJjaGl0ZWN0dXJlIGF0IGEgYnVpbGQgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjo0Mi4zMzQyMjAxMDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjo0Mi4zMzQyOTY3OTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTY3MDYzOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIEZ1enppbmcgUmVhY2hhYmlsaXR5IGFuZCBGb2N1cyBTeW1ib2wgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSAqYWN0dWFsbHkqIHJlYWNoIERBTU9OIHRocm91Z2ggZnV6emluZz8gVGhlIGFuc3dlciBsb29rcyBwcm9taXNpbmcuIERBTU9OJ3Mgc3lzZnMgaW50ZXJmYWNlIGlzIGV4cG9zZWQgYXQgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2Agd2hlbiBgQ09ORklHX0RBTU9OX1NZU0ZTPXlgLCBhbmQgdGhhdCdzIGVhc2lseSBhY2Nlc3NpYmxlIGV2ZW4gaW4gYSBRRU1VLWJhc2VkIHNldHVwLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IERBTU9TIGZpbHRlciBsb2dpYywgaW5jbHVkaW5nIHBhcnNpbmcgd2l0aGluIHN5c2ZzLCBjb3JlIG1hdGNoaW5nIGxvZ2ljLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgZGFtb25fcHJvYmVfaGl0c193c3VtKClgIGFuZCBpdHMgY2FsbCBzaXRlcy4gR2l2ZW4gdGhhdCBEQU1PTiBpcyBwYXJ0IG9mIHRoZSBNTSBzdWJzeXN0ZW0sIGFuZCB3ZSdyZSBpbnRlcmFjdGluZyB3aXRoIHN5c2ZzLCBpdCdzIGRlZmluaXRlbHkgd2l0aGluIHJlYWNoIGZvciBmdXp6aW5nLiBUaGUgc3Vic3lzdGVtIGlzIE1NL0RBTU9OIGFuZCBcIldvcnRoRnV6emluZ1wiID0gdHJ1ZS5cblxuTm93LCB3aGljaCBzeW1ib2xzIHNob3VsZCB3ZSB0YXJnZXQ/IExldCdzIGlkZW50aWZ5IHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucy4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIHdlJ3ZlIGdvdDogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfZm9yX29wc2AsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AsIGBkYW1vc19maWx0ZXJfbWF0Y2hgICh3aGljaCBpcyBzdGF0aWMsIHNvIHdlIG5lZWQgdG8gY2hlY2sgY2FsbGVycyB0byB1bmRlcnN0YW5kIGl0cyBicm9hZGVyIHJlYWNoKSwgYW5kIGBkYW1vbl9tZXJnZV9zY29yZWAuICBPdmVyIGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIHJlc3BlY3RpdmVseSwgYXJlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMsIG9yLCBhdCBsZWFzdCwgdGhlaXIgY2FsbGVycy4gRmluYWxseSwgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHdlJ3ZlIGdvdCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCwgYG1pbl9zdG9yZWAsIGBtaW5fc2hvd2AsIGBtYXhfc3RvcmVgLCBhbmQgYG1heF9zaG93YC5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBkZWVwZXIgaW50byBgbW0vZGFtb24vY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAyNTAwLTI2MDAsIHRvIHVuZGVyc3RhbmQgaG93IGBkYW1vc19maWx0ZXJfbWF0Y2hgIGlzIGNhbGxlZC4gVGhhdCdsbCBoZWxwIGNsYXJpZnkgaXRzIHJvbGUgYW5kIHByaW9yaXRpemUgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgYXJlIG1vc3QgbGlrZWx5IHRvIHByb3ZpZGUgZ29vZCBjb3ZlcmFnZSB0aHJvdWdoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjI6NDcuOTAxMzYyNTM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTA1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTA1OlxcdFxcdGlmIChzel9hcHBsaWVkKVxcbjI1MDY6XFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5ucl9hcHBsaWVkKys7XFxuMjUwNzpcXHRcXHRzLVxcdTAwM2VzdGF0LnN6X2FwcGxpZWQgKz0gc3pfYXBwbGllZDtcXG4yNTA4OlxcdFxcdHMtXFx1MDAzZXN0YXQuc3pfb3BzX2ZpbHRlcl9wYXNzZWQgKz0gc3pfb3BzX2ZpbHRlcl9wYXNzZWQ7XFxuMjUwOTpcXHR9XFxuMjUxMDpcXHRcXG4yNTExOlxcdHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjUxMjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuMjUxMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuMjUxNDpcXHR7XFxuMjUxNTpcXHRcXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcXG4yNTE2OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xcbjI1MTc6XFx0XFx0aW50IHRhcmdldF9pZHggPSAwO1xcbjI1MTg6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtO1xcbjI1MTk6XFx0XFxuMjUyMDpcXHRcXHRzd2l0Y2ggKGZpbHRlci1cXHUwMDNldHlwZSkge1xcbjI1MjE6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XFxuMjUyMjpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodGksIGN0eCkge1xcbjI1MjM6XFx0XFx0XFx0XFx0aWYgKHRpID09IHQpXFxuMjUyNDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNTI1OlxcdFxcdFxcdFxcdHRhcmdldF9pZHgrKztcXG4yNTI2OlxcdFxcdFxcdH1cXG4yNTI3OlxcdFxcdFxcdG1hdGNoZWQgPSB0YXJnZXRfaWR4ID09IGZpbHRlci1cXHUwMDNldGFyZ2V0X2lkeDtcXG4yNTI4OlxcdFxcdFxcdGJyZWFrO1xcbjI1Mjk6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxcbjI1MzA6XFx0XFx0XFx0c3RhcnQgPSBBTElHTl9ET1dOKGZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZS5zdGFydCwgbWluX3JlZ2lvbl9zeik7XFxuMjUzMTpcXHRcXHRcXHRlbmQgPSBBTElHTl9ET1dOKGZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZS5lbmQsIG1pbl9yZWdpb25fc3opO1xcbjI1MzI6XFx0XFxuMjUzMzpcXHRcXHRcXHQvKiBpbnNpZGUgdGhlIHJhbmdlICovXFxuMjUzNDpcXHRcXHRcXHRpZiAoc3RhcnQgXFx1MDAzYz0gci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAyNlxcdTAwMjYgci1cXHUwMDNlYXIuZW5kIFxcdTAwM2M9IGVuZCkge1xcbjI1MzU6XFx0XFx0XFx0XFx0bWF0Y2hlZCA9IHRydWU7XFxuMjUzNjpcXHRcXHRcXHRcXHRicmVhaztcXG4yNTM3OlxcdFxcdFxcdH1cXG4yNTM4OlxcdFxcdFxcdC8qIG91dHNpZGUgb2YgdGhlIHJhbmdlICovXFxuMjUzOTpcXHRcXHRcXHRpZiAoci1cXHUwMDNlYXIuZW5kIFxcdTAwM2M9IHN0YXJ0IHx8IGVuZCBcXHUwMDNjPSByLVxcdTAwM2Vhci5zdGFydCkge1xcbjI1NDA6XFx0XFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbjI1NDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjU0MjpcXHRcXHRcXHR9XFxuMjU0MzpcXHRcXHRcXHQvKiBzdGFydCBiZWZvcmUgdGhlIHJhbmdlIGFuZCBvdmVybGFwICovXFxuMjU0NDpcXHRcXHRcXHRpZiAoci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzYyBzdGFydCkge1xcbjI1NDU6XFx0XFx0XFx0XFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN0YXJ0IC0gci1cXHUwMDNlYXIuc3RhcnQpO1xcbjI1NDY6XFx0XFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbjI1NDc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjU0ODpcXHRcXHRcXHR9XFxuMjU0OTpcXHRcXHRcXHQvKiBzdGFydCBpbnNpZGUgdGhlIHJhbmdlICovXFxuMjU1MDpcXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgZW5kIC0gci1cXHUwMDNlYXIuc3RhcnQpO1xcbjI1NTE6XFx0XFx0XFx0bWF0Y2hlZCA9IHRydWU7XFxuMjU1MjpcXHRcXHRcXHRicmVhaztcXG4yNTUzOlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxcbjI1NTQ6XFx0XFx0XFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcXG4yNTU1OlxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZXJhbmdlX21pbiBcXHUwMDNjPSB3c3VtIFxcdTAwMjZcXHUwMDI2XFxuMjU1NjpcXHRcXHRcXHRcXHR3c3VtIFxcdTAwM2M9IGZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4O1xcbjI1NTc6XFx0XFx0XFx0YnJlYWs7XFxuMjU1ODpcXHRcXHRkZWZhdWx0OlxcbjI1NTk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjI1NjA6XFx0XFx0fVxcbjI1NjE6XFx0XFxuMjU2MjpcXHRcXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXFx1MDAzZW1hdGNoaW5nO1xcbjI1NjM6XFx0fVxcbjI1NjQ6XFx0XFxuMjU2NTpcXHRzdGF0aWMgYm9vbCBkYW1vc19jb3JlX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI1NjY6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbjI1Njc6XFx0e1xcbjI1Njg6XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbjI1Njk6XFx0XFxuMjU3MDpcXHRcXHRzLVxcdTAwM2Vjb3JlX2ZpbHRlcnNfYWxsb3dlZCA9IGZhbHNlO1xcbjI1NzE6XFx0XFx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXIoZmlsdGVyLCBzKSB7XFxuMjU3MjpcXHRcXHRcXHRpZiAoZGFtb3NfZmlsdGVyX21hdGNoKGN0eCwgdCwgciwgZmlsdGVyLCBjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxuMjU3MzpcXHRcXHRcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VhbGxvdylcXG4yNTc0OlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZWNvcmVfZmlsdGVyc19hbGxvd2VkID0gdHJ1ZTtcXG4yNTc1OlxcdFxcdFxcdFxcdHJldHVybiAhZmlsdGVyLVxcdTAwM2VhbGxvdztcXG4yNTc2OlxcdFxcdFxcdH1cXG4yNTc3OlxcdFxcdH1cXG4yNTc4OlxcdFxcdHJldHVybiBzLVxcdTAwM2Vjb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7XFxuMjU3OTpcXHR9XFxuMjU4MDpcXHRcXG4yNTgxOlxcdC8qXFxuMjU4MjpcXHQgKiBkYW1vc193YWxrX2NhbGxfd2FsaygpIC0gQ2FsbCBcXHUwMDI2ZGFtb3Nfd2Fsa19jb250cm9sLVxcdTAwM2V3YWxrX2ZuLlxcbjI1ODM6XFx0ICogQGN0eDpcXHRUaGUgY29udGV4dCBvZiBcXHUwMDI2ZGFtb25fY3R4LVxcdTAwM2V3YWxrX2NvbnRyb2wuXFxuMjU4NDpcXHQgKiBAdDpcXHRcXHRUaGUgbW9uaXRvcmluZyB0YXJnZXQgb2YgQHIgdGhhdCBAcyB3aWxsIGJlIGFwcGxpZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIyOjQ3LjkwMTUzNDI3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjQ4ODI1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIERhbW9zIEZpbHRlcmluZyBMb2dpYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZpbHRlcmluZyB3b3JrcyB3aXRoaW4gdGhlIGBkYW1vc2AgZnJhbWV3b3JrLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGhvdyBkYXRhIGlzIGJlaW5nIGZpbHRlcmVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGBkYW1vc19hcHBseV9zY2hlbWVgIGJlY2F1c2UgdGhhdCBsb29rcyBsaWtlIGEgbGlrZWx5IGVudHJ5IHBvaW50IGZvciBhcHBseWluZyB0aGUgZmlsdGVyaW5nIHJ1bGVzLiBBZGRpdGlvbmFsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZGFtb3NfY29yZV9maWx0ZXJfb3V0YCBvciBgZGFtb3NfZmlsdGVyX21hdGNoYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGUgYWN0dWFsIGZpbHRlcmluZyBkZWNpc2lvbnMuIFRyYWNpbmcgdGhvc2UgY2FsbHMgYW5kIHdoZXJlIHRoZXkncmUgdXNlZCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIHRoZSBvdmVyYWxsIGZpbHRlcmluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIyOjQ5Ljg2NjQxOTk2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2OTk0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfY29yZV9maWx0ZXJfb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNTExPXN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjU2NC1cXG5tbS9kYW1vbi9jb3JlLmM6MjU2NTpzdGF0aWMgYm9vbCBkYW1vc19jb3JlX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0yNTY2LVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjk5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NDUtXFx0XFx0fVxcbm1tL2RhbW9uL2NvcmUuYzoyNzQ2OlxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxubW0vZGFtb24vY29yZS5jLTI3NDctXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzMDQ9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzQ5LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL2NvcmUuYzozMzUwOlxcdFxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxubW0vZGFtb24vY29yZS5jLTMzNTEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIyOjQ5LjkxMTEyNjYwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Njk5MDg1ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBnZXQgYSBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEkgc2VlIGEgcHJldHR5IGNvbmNlbnRyYXRlZCBhcmVhIG9mIG1vZGlmaWNhdGlvbiwgcHJpbWFyaWx5IGluIHRoZSBEQU1PTiBjb3JlIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBzeXNmcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbG9vayBhdDpcblxuKiAgIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb3NfZmlsdGVyX2Zvcl9vcHNgLCBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgLCBgZGFtb3NfZmlsdGVyX21hdGNoYCwgYW5kIGBkYW1vbl9tZXJnZV9zY29yZWAsIGFsbCBpbiBgbW0vZGFtb24vY29yZS5jYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgaGVhcnQgb2YgdGhlIERBTU9OIG9wZXJhdGlvbi5cbiogICBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AgcmVzcGVjdGl2ZWx5LiBJJ20gZ3Vlc3NpbmcgdGhlc2UgaGFuZGxlIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgcHJvYmVzIHRvIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Nlcy5cbiogICBgbWluX3Nob3dgLCBgbWluX3N0b3JlYCwgYG1heF9zaG93YCwgYG1heF9zdG9yZWAgYW5kIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnNgIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBTeXNmcyBpcyBob3cgd2UgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsLCBzbyB0aGVzZSBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB1c2VyIGNvbnRyb2xzIHRoZSBEQU1PTiBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGF0IGBkYW1vc19maWx0ZXJfZm9yX29wc2AgZnVuY3Rpb24gaW4gYGNvcmUuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBmaWx0ZXJpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbXBhY3Qgd2hhdCBvcGVyYXRpb25zIHRoZSBmaWx0ZXIgaXMgY29uc2lkZXJpbmcgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIyOjU0LjYxMDIxNTQ0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMzI2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfZmlsdGVyX2Zvcl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTYzND1zdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02NDktLyoqXFxubW0vZGFtb24vY29yZS5jOjY1MDogKiBkYW1vc19maWx0ZXJfZm9yX29wcygpIC0gUmV0dXJuIGlmIHRoZSBmaWx0ZXIgaXMgb3BzLWhhbmRsZWQgb25lLlxcbm1tL2RhbW9uL2NvcmUuYy02NTEtICogQHR5cGU6XFx0dHlwZSBvZiB0aGUgZmlsdGVyLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTY1NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NjU2OmJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxcbm1tL2RhbW9uL2NvcmUuYy02NTcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTY2OT12b2lkIGRhbW9zX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy02NzAte1xcbm1tL2RhbW9uL2NvcmUuYzo2NzE6XFx0aWYgKGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGYtXFx1MDAzZXR5cGUpKVxcbm1tL2RhbW9uL2NvcmUuYy02NzItXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Zi1cXHUwMDNlbGlzdCwgXFx1MDAyNnMtXFx1MDAzZW9wc19maWx0ZXJzKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02MTU9c3RhdGljIGJvb2wgZGFtb3Nfc3lzZnNfc2NoZW1lX2ZpbHRlcl92YWxpZF90eXBlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYyMi1cXHRjYXNlIERBTU9TX1NZU0ZTX0ZJTFRFUl9IQU5ETEVfTEFZRVJfQ09SRTpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjIzOlxcdFxcdHJldHVybiAhZGFtb3NfZmlsdGVyX2Zvcl9vcHModHlwZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYyNC1cXHRjYXNlIERBTU9TX1NZU0ZTX0ZJTFRFUl9IQU5ETEVfTEFZRVJfT1BTOlxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MjU6XFx0XFx0cmV0dXJuIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKHR5cGUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MjYtXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjI6NTQuNjU3NTU0MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ5MjkzOTQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBQcm9iZSBIaXRzIFdlaWdodGVkIFN1bSBGaWx0ZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QuIEkndmUgZ290IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYC4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlc2UgYWdhaW5zdCB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUgaXRzZWxmIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBMb29rcyBsaWtlIHRob3NlIGFyZSBhbGwgdGhlcmUsIGFuZCBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgIGNvcnJlY3RseSBkZXBlbmQgb24gYERBTU9OIFx1MDAyNlx1MDAyNiBNTVVgLCBhbmQgYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNgLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgd2hpY2ggZmlsZXMgYXJlIGFjdHVhbGx5ICp0b3VjaGVkKiBieSB0aGlzIHBhdGNoLiBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIEtjb25maWcgZGVwZW5kZW5jeSBjaGVja3MsIGFzIHRoZXNlIGFyZSBidWlsdCB3aXRoIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fVkFERFJgLCByZXNwZWN0aXZlbHkuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSwgbm9uLXViaXF1aXRvdXMgc3ltYm9scyBpbXBhY3RlZC4gSSdtIGZvY3VzaW5nIG9uIHRob3NlIHNwZWNpZmljIHRvIHRoaXMgZmVhdHVyZTogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBgZGFtb3NfZmlsdGVyX2Zvcl9vcHNgLCBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCwgYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AsIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX21lcmdlX3Njb3JlYC4gSSdtIGNvbmZpZGVudCB0aG9zZSBzeW1ib2xzIHNob3VsZCBiZSBzcGVjaWZpYyB0byBEQU1PTiBhbmQgbm90IGdlbmVyaWMgTU0gZnVuY3Rpb25zLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhleSBleGlzdCBhbmQgYXJlIG5vbi11YmlxdWl0b3VzLiBUaGV5IGFyZSwgYW5kIHRoZXkgYXJlLlxuXG5Ob3csIGxldCdzIGFzc2VtYmxlIHRoZSByYXRpb25hbGUuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCAoXCJwcm9iZV9oaXRzX3dzdW1cIikgZmlsdGVyIHRvIERBTU9OL0RBTU9TIHNjaGVtZXMuIFRoaXMgYWxsb3dzIGZpbHRlcmluZyBtZW1vcnkgcmVnaW9ucyBiYXNlZCBvbiB0aGVpciBwcm9iZSBoaXQgd2VpZ2h0ZWQgc3VtIHJhbmdlLiBUaGUgbW9kaWZpY2F0aW9ucyB0b3VjaCBEQU1PTidzIGNvcmUgZmlsdGVyaW5nIGxvZ2ljIChgZGFtb3NfZmlsdGVyX21hdGNoYCwgYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzYCwgYW5kIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gKSwgdGhlIHN5c2ZzIHNjaGVtZSBmaWx0ZXIgaW5nZXN0aW9uIHZpYSBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCwgYW5kIHNjaGVtZSBhcHBsaWNhdGlvbiBsb2dpYyBmb3IgYm90aCBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy4gVGhlc2UgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIHZhbGlkIHRhcmdldHMuIFNvIHRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1ZBRERSYC5cblxuU2VlbXMgbGlrZSBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk0OSwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MDEuMTUwNDk3NzU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0ODAwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9zX2ZpbHRlcl9mb3Jfb3BzXCIsXG4gICAgXCJkYW1vc19jb21taXRfZmlsdGVyX2FyZ1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fbWVyZ2Vfc2NvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gLyAncHJvYmVfaGl0c193c3VtJykgaW4gREFNT04sIHVwZGF0aW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYywgc3lzZnMgY29uZmlndXJhdGlvbiBoYW5kbGluZywgYW5kIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbGN1bGF0aW9ucyBhY3Jvc3MgREFNT04gY29yZSwgcGFkZHIsIGFuZCB2YWRkciBvcGVyYXRpb25zLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3Byb2JlX2hpdHNfd3N1bVwiLFxuICAgIFwiZGFtb3NfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vc19maWx0ZXJfZm9yX29wc1wiLFxuICAgIFwiZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc1wiLFxuICAgIFwiZGFtb25fcGFfYXBwbHlfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX21lcmdlX3Njb3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZSAoREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNIC8gJ3Byb2JlX2hpdHNfd3N1bScpIGluIERBTU9OLCB1cGRhdGluZyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMsIHN5c2ZzIGNvbmZpZ3VyYXRpb24gaGFuZGxpbmcsIGFuZCBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBjYWxjdWxhdGlvbnMgYWNyb3NzIERBTU9OIGNvcmUsIHBhZGRyLCBhbmQgdmFkZHIgb3BlcmF0aW9ucy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjAxLjIzNTk4NTI4NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTM5MDY5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzowMS4yMzY2MTU1MTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NjYxMzI3MDY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgZmlsdGVyIHR5cGUgZm9yIERBTU9OIHNjaGVtZXMsIGV4dGVuZGluZyBzeXNmcyBhdHRyaWJ1dGVzIChgbWluYCBhbmQgYG1heGApIGFuZCBjb3JlIGZpbHRlciBtYXRjaGluZyB0byB1c2UgdGhlIHByb2JlIGhpdHMgd2VpZ2h0ZWQgbW92aW5nIHN1bS4gXFxuXFxuLSBNZW1vcnkgQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBTeXNmcyBzY2hlbWUgZmlsdGVyIHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBlbnN1cmluZyBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEluIERBTU9OIGNvcmUsIGZpbHRlciBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdXBvbiBjcmVhdGlvbiBhbmQgZmlsdGVyIGFyZ3VtZW50cyBjb21taXQuXFxuLSBVc2VyLXNwYWNlIERhdGEgVHJhbnNmZXI6IFN5c2ZzIG91dHB1dCB1c2VzIGZvcm1hdHRlZCBzdHJpbmcgZW1pc3Npb25zIHZpYSBgc3lzZnNfZW1pdCgpYCwgd2l0aCBubyByYXcgc3RydWN0IGNvcGllcyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLlxcbi0gVmFyaWFibGVzIGFuZCBCcmFuY2hpbmc6IEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhlIHdlaWdodGVkIHN1bSBjYWxjdWxhdGlvbiBhbmQgZmlsdGVyIG1hdGNoaW5nIChgc3VtYCwgYGlgLCBgd3N1bWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIG1lY2hhbmlzbXMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmM5MDAxYmQ5OWY5Zjc2NmI5NmRhZGY1ZTc5M2RlMTBhZjc2MGRiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDE1OjIyOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTU1MSw2ICs1NTEsMTAgQEAgYW5kIGBgZGFtb25fdGFyZ2V0X2lkeGBgLiAgVG8gYGB0eXBlYGAgZmlsZSwgeW91IGNhbiB3cml0ZSB0aGUgdHlwZSBvZiB0aGVcbiBmaWx0ZXIuICBSZWZlciB0byA6cmVmOmB0aGUgZGVzaWduIGRvYyBcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVyc1x1MDAzZWAgZm9yXG4gYXZhaWxhYmxlIHR5cGUgbmFtZXMsIHRoZWlyIG1lYW5pbmcgYW5kIG9uIHdoYXQgbGF5ZXIgdGhvc2UgYXJlIGhhbmRsZWQuXG4gXG4rRm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlXG4raGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcyxcbityZXNwZWN0aXZlbHkuXG4rXG4gRm9yIGBgbWVtY2dgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1lbW9yeSBjZ3JvdXAgb2YgdGhlIGludGVyZXN0IGJ5XG4gd3JpdGluZyB0aGUgcGF0aCBvZiB0aGUgbWVtb3J5IGNncm91cCBmcm9tIHRoZSBjZ3JvdXBzIG1vdW50IHBvaW50IHRvXG4gYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmRcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbmluZGV4IGFhYzg0ZGUyNjFhYTguLjhlOTgwZGRlMzYyZGUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTgyMiw2ICs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gYWRkcmVzcyByYW5nZS5cbiAgICAgLSB0YXJnZXRcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LlxuKyAgICAtIHByb2JlX2hpdHNfd3N1bVxuKyAgICAgICAgLSBNYXRjaGVzIHRvIG1vbml0b3JpbmcgcmVnaW9ucyBoYXZpbmcgYSBnaXZlbiByYW5nZSBvZiA6cmVmOmBwcm9iZVxuKyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSBcdTAwM2NkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nXHUwMDNlYCB2YWx1ZS5cbiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LlxuICAgICAtIGFub25cbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IG5vdCBzdG9yZWQgaW4gZmlsZXMuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0zOTksMTQgKzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7XG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVEOlx0VW5tYXBwZWQgcGFnZXMuXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XHRBZGRyZXNzIHJhbmdlLlxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XHREYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC5cbisgKiBAREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlx0cHJvYmVfaGl0cyB3ZWlnaHRlZCBzdW0gcmFuZ2UuXG4gICogQE5SX0RBTU9TX0ZJTFRFUl9UWVBFUzpcdE51bWJlciBvZiBmaWx0ZXIgdHlwZXMuXG4gICpcbi0gKiBBbGwgdHlwZXMgZXhjZXB0IFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVFxuLSAqIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWVcbi0gKiBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZCBhcyAndHJpZWQnLiAgSW4gY29udHJhc3QsXG4tICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWRcbi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZFxuLSAqIGFzICd0cmllZCcuXG4rICogQWxsIHR5cGVzIGV4Y2VwdCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSLCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgYW5kXG4rICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdFxuKyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZFxuKyAqIGFzICd0cmllZCcuICBJbiBjb250cmFzdCwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmRcbisgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmVcbisgKiB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkIGFzICd0cmllZCcuXG4gICpcbiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZ1xuICAqIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLlxuQEAgLTQyMCw2ICs0MjEsNyBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHtcbiBcdERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVELFxuIFx0REFNT1NfRklMVEVSX1RZUEVfQUREUixcbiBcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcbitcdERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcbiBcdE5SX0RBTU9TX0ZJTFRFUl9UWVBFUyxcbiB9O1xuIFxuQEAgLTQzNCw2ICs0MzYsOCBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHtcbiAgKlx0XHRcdTAwMjZkYW1vbl9jdHgtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpc1xuICAqXHRcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC5cbiAgKiBAc3pfcmFuZ2U6XHRTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuXG4rICogQHJhbmdlX21pbjpcdE1pbmltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLlxuKyAqIEByYW5nZV9tYXg6XHRNYXhpbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDUwLDYgKzQ1NCwxMCBAQCBzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcbiBcdFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbiBcdFx0aW50IHRhcmdldF9pZHg7XG4gXHRcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O1xuK1x0XHR9O1xuIFx0fTtcbiAvKiBwcml2YXRlOiAqL1xuIFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbkBAIC0xMDY1LDcgKzEwNzMsNyBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiBcbiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NWNiMzY3MDE5YWUuLmQ5ZDU2ZjRiZTFhOTcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTQ2OSwxMSArNDY5LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxuICAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG4gICogQGxhc3Q6XHRpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLlxuKyAqIEBtdjpcdFx0dXNlIG1vdmluZyBzdW0uXG4gICogQGN0eDpcdGNvbnRleHQgb2YgXHUwMDI2ci5cbiAgKlxuICAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXG4gICovXG4tdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4rdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xuQEAgLTQ4Myw2ICs0ODQsOSBAQCB1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiBcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbiBcdFx0aWYgKGxhc3QpXG4gXHRcdFx0c3VtICs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4rXHRcdGVsc2UgaWYgKG12KVxuK1x0XHRcdHN1bSArPSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkrKywgciwgY3R4KSAqXG4rXHRcdFx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHRcdGVsc2VcbiBcdFx0XHRzdW0gKz0gci1cdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHR9XG5AQCAtNjU0LDYgKzY1OCw3IEBAIGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuIFx0c3dpdGNoICh0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbitcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbkBAIC0xMzI4LDYgKzEzMzMsMTAgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkU6XG4gXHRcdGRzdC1cdTAwM2Vzel9yYW5nZSA9IHNyYy1cdTAwM2Vzel9yYW5nZTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbitcdFx0ZHN0LVx1MDAzZXJhbmdlX21pbiA9IHNyYy1cdTAwM2VyYW5nZV9taW47XG4rXHRcdGRzdC1cdTAwM2VyYW5nZV9tYXggPSBzcmMtXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1MDYsNyArMjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xuIFx0aW50IHRhcmdldF9pZHggPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtO1xuIFxuIFx0c3dpdGNoIChmaWx0ZXItXHUwMDNldHlwZSkge1xuIFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG5AQCAtMjU0MSw2ICsyNTUwLDExIEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLVx1MDAzZWFyLnN0YXJ0KTtcbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4rXHRcdHdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7XG4rXHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzYz0gd3N1bSBcdTAwMjZcdTAwMjZcbitcdFx0XHR3c3VtIFx1MDAzYz0gZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtMzQ0OSw3ICszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcbiB7XG4gXHRpZiAodXNlX3Byb2JlX2hpdHMpXG4tXHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcbitcdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBmYWxzZSwgY3R4KTtcbiBcdGlmIChsYXN0KVxuIFx0XHRyZXR1cm4gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xuIFx0cmV0dXJuIHItXHUwMDNlbnJfYWNjZXNzZXM7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbiBcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbi1cdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbitcdFx0XHRcdFx0XHRcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiBtYXhfd3N1bTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbmluZGV4IGQ5YjgxZDdiNTkxMGUuLmQ5ZGQ0ZWUwNDQyYzcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTUzNCw3ICs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XG4gXHRib29sIGFsbG93O1xuIFx0Y2hhciAqbWVtY2dfcGF0aDtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4tXHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbitcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuK1x0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4gXHRpbnQgdGFyZ2V0X2lkeDtcbiB9O1xuIFxuQEAgLTU4OCw2ICs1ODksMTAgQEAgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbiBcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsXG4gXHRcdC5uYW1lID0gXCJ0YXJnZXRcIixcbiBcdH0sXG4rXHR7XG4rXHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxuK1x0XHQubmFtZSA9IFwicHJvYmVfaGl0c193c3VtXCIsXG4rXHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc3OCw3ICs3ODMsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsdVxcblwiLCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc4Niw3ICs3OTEsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuK1x0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXJhbmdlX21pbik7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7XG4gfVxuQEAgLTc5Nyw3ICs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsdVxcblwiLCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4KTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTgwNSw3ICs4MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuK1x0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXJhbmdlX21heCk7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7XG4gfVxuQEAgLTI4MzUsMTIgKzI4NDAsMjEgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpzY2hlbWUsXG4gXHRcdH0gZWxzZSBpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7XG4gXHRcdFx0ZmlsdGVyLVx1MDAzZXRhcmdldF9pZHggPSBzeXNmc19maWx0ZXItXHUwMDNldGFyZ2V0X2lkeDtcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFKSB7XG4tXHRcdFx0aWYgKHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gXHUwMDNlXG4tXHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpIHtcbitcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbitcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuK1x0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbitcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcbitcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbitcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuIFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UgPSBzeXNmc19maWx0ZXItXHUwMDNlc3pfcmFuZ2U7XG4rXHRcdFx0ZmlsdGVyLVx1MDAzZXJhbmdlX21pbiA9IHN5c2ZzX2ZpbHRlci1cdTAwM2VyYW5nZV9taW47XG4rXHRcdFx0ZmlsdGVyLVx1MDAzZXJhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2VyYW5nZV9tYXg7XG4gXHRcdH1cbiBcbiBcdFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IDlhMzhkYzg5YTE1NmUuLjRhZWNmMzRlMzliZTIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNzA0LDcgKzcwNCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0XHRpZiAobW0pXG4gXHRcdFx0bW1wdXQobW0pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MDEuMjM2NjE2NjY0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4ODI0Njg3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBpbiBhIERBTU9OIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHdhcnJhbnQgS01TQU4gZnV6emluZy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGluIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLiBUaGF0J3MgYSBuZXcgZmlsdGVyIHR5cGUuIE1vcmUgaW1wb3J0YW50bHksIHRoZSBgc3RydWN0IGRhbW9zX2ZpbHRlcmAgdW5pb24gaXMgbW9kaWZpZWQuIEkgc2VlIGEgYGNoYXIgKm1lbWNnX3BhdGhgLCBgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VgLCBgaW50IHRhcmdldF9pZHhgLCBhbmQgdGhlbiBgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2VgLiBCdXQgd2FpdC4uLnRoYXQgdW5pb24gaGFzIGJlZW4gbW9kaWZpZWQsIGl0IHNlZW1zIHRoYXQgYHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlYCBpcyBubyBsb25nZXIgdGhlcmUgYW5kIGluc3RlYWQgd2UgaGF2ZSBgdW5zaWduZWQgbG9uZyByYW5nZV9taW47IHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O2AuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZWAgZGVmaW5pdGlvbiwgc28gSSdsbCBncmVwIGZvciBpdCB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcuXG5cbk5leHQsIGxvb2tpbmcgYXQgYG1tL2RhbW9uL2NvcmUuY2AsIEkgc2VlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIHdpdGggYSBuZXcgYG12YCBwYXJhbWV0ZXIuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGhhbmRsaW5nIGl0IGNvcnJlY3RseSBpbiBpdHMgdGhyZWUgZGlzdGluY3QgYnJhbmNoZXMgb2YgYGRhbW9uX2Zvcl9lYWNoX3Byb2JlYC4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gSSBzZWUgYSBuZXcgZW50cnkgaW4gYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzYCBmb3IgdGhlIG5ldyBgUFJPQkVfSElUU19XU1VNYCBjYXNlIHdoaWNoIHJldHVybnMgYGZhbHNlYC4gVGhlbiB0aGVyZSdzIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AgdGhhdCBhcHBlYXJzIHRvIGhhbmRsZSB0aGUgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFzc2lnbm1lbnRzIHdoaWNoIGlzIGNvcnJlY3QgZ2l2ZW4gdGhlIG5ldyBzdHJ1Y3QuIEluIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCB0aGUgbG9naWMgZm9yIHRoZSBuZXcgZmlsdGVyIHR5cGUgc2VlbXMgc291bmQuIEl0J3MgY2FsbGluZyBgZGFtb25fcHJvYmVfaGl0c193c3VtYCAod2hpY2ggc2hvdWxkIG5vdyBiZSBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgZ2l2ZW4gdGhlIGNoYW5nZSksIGFuZCB0aGVuIGNoZWNraW5nIHRoZSByYW5nZS4gVGhlIGNhbGxlcnMgb2YgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAgaGF2ZSBhbHNvIGJlZW4gdXBkYXRlZCwgd2hpY2ggaXMgZ29vZC5cblxuRmluYWxseSwgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHRoZSByZW1vdmFsIG9mIGBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZWAgYW5kIHRoZSBkaXJlY3QgaW5jbHVzaW9uIG9mIGB1bnNpZ25lZCBsb25nIHJhbmdlX21pbjsgdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7YCBpbiBgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGNvbmZpcm1zIG15IGluaXRpYWwgb2JzZXJ2YXRpb24uIFRoZSBzdWJzZXF1ZW50IHVwZGF0ZXMgdG8gdGhlIHN5c2ZzIHNob3cvc3RvcmUgZnVuY3Rpb25zIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCBzZWVtIGxvZ2ljYWwgZ2l2ZW4gdGhpcyBjaGFuZ2UuXG5cbk5vdywgdG8gYmUgcmVhbGx5IHN1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb250ZXh0LiBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhcm91bmQgdGhlIERBTU9OIHN5c2ZzLCBob3cgdGhlIGZpbHRlcnMgYXJlIGNyZWF0ZWQsIGFuZCBwYXJ0aWN1bGFybHksIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBwbGFjZSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gc25lYWsgaW4uIEkgbmVlZCB0byBsZWF2ZSBubyBzdG9uZSB1bnR1cm5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjA3LjExOTA4ODQ0OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2MzQ3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTcwLVxcbm1tL2RhbW9uL2NvcmUuYzoxNzE6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXFxubW0vZGFtb24vY29yZS5jLTE3Mi1cXHRcXHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4MTU9c3RhdGljIGludCBkYW1vbl9jb21taXRfZmlsdGVycyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODMyLVxcbm1tL2RhbW9uL2NvcmUuYzoxODMzOlxcdFxcdG5ld19maWx0ZXIgPSBkYW1vbl9uZXdfZmlsdGVyKHNyY19maWx0ZXItXFx1MDAzZXR5cGUsXFxubW0vZGFtb24vY29yZS5jLTE4MzQtXFx0XFx0XFx0XFx0c3JjX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsIHNyY19maWx0ZXItXFx1MDAzZWFsbG93KTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjE5OT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDgtXFxubW0vZGFtb24vc3lzZnMuYzoyMjA5OlxcdFxcdGZpbHRlciA9IGRhbW9uX25ld19maWx0ZXIoc3lzX2ZpbHRlci1cXHUwMDNldHlwZSxcXG5tbS9kYW1vbi9zeXNmcy5jLTIyMTAtXFx0XFx0XFx0XFx0c3lzX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjA3LjE3NTcyODc4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODY4Mzc3MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyB0aGUgTmV3IEZpbHRlcidzIEludGVncmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBnaXZlIGBkYW1vc19uZXdfZmlsdGVyYCBhIHRob3JvdWdoIGdvaW5nLW92ZXIuIEkga25vdyB3ZSd2ZSB0ZXN0ZWQgdGhlIGluZGl2aWR1YWwgY29tcG9uZW50cywgYW5kIHRoZSBwcmVsaW1pbmFyeSByZXN1bHRzIGxvb2tlZCBwcm9taXNpbmcuIEJ1dCwgYmVmb3JlIHdlIGZ1bGx5IGludGVncmF0ZSB0aGlzIGludG8gdGhlIHBpcGVsaW5lLCBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmUgbm8gdW5mb3Jlc2VlbiBpbnRlcmFjdGlvbnMgb3IgZWRnZSBjYXNlcyB3aGVuIGl0J3MgY29tYmluZWQgd2l0aCB0aGUgZXhpc3RpbmcgbG9naWMuIEknbSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgdG9vIOKAkyBkb2VzIGl0IGludHJvZHVjZSBhbnkgbm90aWNlYWJsZSBib3R0bGVuZWNrcyBvciBtZW1vcnkgbGVha3M/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIG91dHB1dCBpcyBjb25zaXN0ZW50IGFuZCByZWxpYWJsZSB1bmRlciB2YXJ5aW5nIGRhdGEgbG9hZHMgYW5kIGNvbmRpdGlvbnMuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIGVuc3VyZSB0aGlzIGZpbHRlciBwbGF5cyBuaWNlbHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtOyB0aGlzIGlzIHBhcnRpY3VsYXJseSBjcnVjaWFsIG5vdywgY29uc2lkZXJpbmcgdGhlIGRlYWRsaW5lLiBObyBsb29zZSBlbmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MTAuMDQ0MTA4MTgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ4NTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19uZXdfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz01NDM9aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjMzLVxcbm1tL2RhbW9uL2NvcmUuYzo2MzQ6c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXFxubW0vZGFtb24vY29yZS5jLTYzNS1cXHRcXHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEzNTQ9c3RhdGljIGludCBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzcwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMzcxOlxcdFxcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxcbm1tL2RhbW9uL2NvcmUuYy0xMzcyLVxcdFxcdFxcdFxcdHNyY19maWx0ZXItXFx1MDAzZXR5cGUsIHNyY19maWx0ZXItXFx1MDAzZW1hdGNoaW5nLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEzODI9c3RhdGljIGludCBkYW1vc19jb21taXRfb3BzX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzOTgtXFxubW0vZGFtb24vY29yZS5jOjEzOTk6XFx0XFx0bmV3X2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoXFxubW0vZGFtb24vY29yZS5jLTE0MDAtXFx0XFx0XFx0XFx0c3JjX2ZpbHRlci1cXHUwMDNldHlwZSwgc3JjX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI0OT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjU3LVxcdC8qIGRpc2FsbG93IHByaW9yaXRpemluZyBub3QteW91bmcgcGFnZXMgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI1ODpcXHRmaWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HLCBmYWxzZSwgZmFsc2UpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjU5LVxcdGlmICghZmlsdGVyKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNjMtXFx0LyogZGlzYWJsbG93IGRlLXByaW9yaXRpemluZyB5b3VuZyBwYWdlcyAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjY0OlxcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfWU9VTkcsIHRydWUsIGZhbHNlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI2NS1cXHRpZiAoIWZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MjM5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjU2LVxcdGlmIChpbnN0YWxsX3lvdW5nX2ZpbHRlcikge1xcbm1tL2RhbW9uL3BhZGRyLmM6MjU3OlxcdFxcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoXFxubW0vZGFtb24vcGFkZHIuYy0yNTgtXFx0XFx0XFx0XFx0REFNT1NfRklMVEVSX1RZUEVfWU9VTkcsIHRydWUsIGZhbHNlKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNTEtXFx0aWYgKHNraXBfYW5vbikge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNTI6XFx0XFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI1My1cXHRcXHRpZiAoIWZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODA5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MTctXFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgxODpcXHRcXHRcXHRkYW1vc19uZXdfZmlsdGVyKHN5c2ZzX2ZpbHRlci1cXHUwMDNldHlwZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgxOS1cXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZW1hdGNoaW5nLFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc5MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X25ld19maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc5My1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Nzk0OlxcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgZmFsc2UpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03OTUtXFx0aWYgKCFmaWx0ZXIpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTU3MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2ZpbHRlcl9vdXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NzUtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1NzY6XFx0ZiA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQUREUiwgdHJ1ZSwgZmFsc2UpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTc3LVxcdGlmICghZilcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNjc5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2OTQtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE2OTU6XFx0dGFyZ2V0X2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULCB0cnVlLCB0cnVlKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY5Ni1cXHRpZiAoIXRhcmdldF9maWx0ZXIpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyMS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTcyMjpcXHRhbm9uX2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgdHJ1ZSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3MjMtXFx0aWYgKCFhbm9uX2ZpbHRlcikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzoxMC4wODk1OTgyMjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyOTU3NTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbi4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGFwcHJvYWNoIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBEQU1PTiBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGRhbW9zX25ld19maWx0ZXJgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHNvIHRoYXQncyB3aGVyZSBJIHNob3VsZCBzdGFydC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZmlsdGVyIGlzIGJlaW5nIGNyZWF0ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY29yZSBEQU1PTiBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgbWFpbiBEQU1PTiBsb29wLCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQncyBtb2RpZnlpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGVkZ2UgY2FzZXMgaGVyZS4gSSdsbCBwcm9iYWJseSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIGZpbHRlciBjcmVhdGlvbiB0byBpdHMgdXNlIGluIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZy5cblxuQW5kIG5leHQsIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzZnMgaXMgYWxsb2NhdGluZyBzcGFjZSBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBuZWVkIHRvIGFzc2VzcyBob3cgdGhlIGZpbHRlcnMgYXJlIGV4cG9zZWQgdGhyb3VnaCBzeXNmcy4gSSB3YW50IHRvIGNoZWNrIGZvciByYWNlIGNvbmRpdGlvbnMuIFBlcmhhcHMsIEkgd2lsbCBuZWVkIHRvIHRoaW5rIGhvdyB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBEQU1PTiB2aWEgc3lzZnMuIEkgd2lsbCBuZWVkIHRvIGxvb2sgZm9yIGFsbG9jYXRpb24gc2l6ZSBsaW1pdHMgYW5kIGhvdyB0aGVzZSBsaW1pdHMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgYSBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEFueSBpbmVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCBvciB1bmJvdW5kZWQgYWxsb2NhdGlvbnMgY291bGQgY2F1c2Ugc2VyaW91cyBpc3N1ZXMsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHByb2JsZW1zIHRoZXJlLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBzeXNmcyBhdHRyaWJ1dGVzIHRpZSBpbnRvIHRoZSBgZGFtb3NfbmV3X2ZpbHRlcmAgZnVuY3Rpb24gYW5kIHRoZSBvdmVyYWxsIERBTU9OIHNjaGVtZSBtYW5hZ2VtZW50LiBJJ20gdGhpbmtpbmcgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MgYW5kIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdGhhdCBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB0aGVzZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MTIuNzE5MTc3MTI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjMwOlxcdFxcdH1cXG4gNjMxOlxcdFxcdHJldHVybiAwO1xcbiA2MzI6XFx0fVxcbiA2MzM6XFx0XFxuIDYzNDpcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcXG4gNjM1OlxcdFxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXFxuIDYzNjpcXHR7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxuIDYzODpcXHRcXG4gNjM5OlxcdFxcdGZpbHRlciA9IGttYWxsb2Nfb2JqKCpmaWx0ZXIpO1xcbiA2NDA6XFx0XFx0aWYgKCFmaWx0ZXIpXFxuIDY0MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjQyOlxcdFxcdGZpbHRlci1cXHUwMDNldHlwZSA9IHR5cGU7XFxuIDY0MzpcXHRcXHRmaWx0ZXItXFx1MDAzZW1hdGNoaW5nID0gbWF0Y2hpbmc7XFxuIDY0NDpcXHRcXHRmaWx0ZXItXFx1MDAzZWFsbG93ID0gYWxsb3c7XFxuIDY0NTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZmlsdGVyLVxcdTAwM2VsaXN0KTtcXG4gNjQ2OlxcdFxcdHJldHVybiBmaWx0ZXI7XFxuIDY0NzpcXHR9XFxuIDY0ODpcXHRcXG4gNjQ5OlxcdC8qKlxcbiA2NTA6XFx0ICogZGFtb3NfZmlsdGVyX2Zvcl9vcHMoKSAtIFJldHVybiBpZiB0aGUgZmlsdGVyIGlzIG9wcy1oYW5kbGVkIG9uZS5cXG4gNjUxOlxcdCAqIEB0eXBlOlxcdHR5cGUgb2YgdGhlIGZpbHRlci5cXG4gNjUyOlxcdCAqXFxuIDY1MzpcXHQgKiBSZXR1cm46IHRydWUgaWYgdGhlIGZpbHRlciBvZiBAdHlwZSBuZWVkcyB0byBiZSBoYW5kbGVkIGJ5IG9wcyBsYXllciwgZmFsc2VcXG4gNjU0OlxcdCAqIG90aGVyd2lzZS5cXG4gNjU1OlxcdCAqL1xcbiA2NTY6XFx0Ym9vbCBkYW1vc19maWx0ZXJfZm9yX29wcyhlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUpXFxuIDY1NzpcXHR7XFxuIDY1ODpcXHRcXHRzd2l0Y2ggKHR5cGUpIHtcXG4gNjU5OlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcXG4gNjYwOlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlxcbiA2NjE6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XFxuIDY2MjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDY2MzpcXHRcXHRkZWZhdWx0OlxcbiA2NjQ6XFx0XFx0XFx0YnJlYWs7XFxuIDY2NTpcXHRcXHR9XFxuIDY2NjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNjY3OlxcdH1cXG4gNjY4OlxcdFxcbiA2Njk6XFx0dm9pZCBkYW1vc19hZGRfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MTIuNzE5MzM5MDY5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTE5NjUzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBEQU1PTidzIFN5c2ZzIEludGVyZmFjZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBmb2N1c2luZyBvbiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIGZyYW1ld29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gc29saWQgb24gaG93IGl0J3MgaW50ZXJmYWNpbmcgd2l0aCB0aGUgc3lzdGVtIHRocm91Z2ggYHN5c2ZzYC4gV2UgbmVlZCB0byB2ZXJpZnkgdGhlIGFsbG9jYXRpb24gYW5kIHVzZSBvZiB0aGUgYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGF0J3MgaGFuZGxlZCwgd2hpY2ggb2YgY291cnNlLCBsZWFkcyBtZSB0byB0aGUgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgZmlsZS4gVGltZSB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiBmaWx0ZXJpbmcgREFNT04ncyBvcGVyYXRpb25zIGlzIHNvdW5kLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MTUuMTMxMzA3NzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTc2MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyOT1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDI6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDMtXFx0XFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkzMD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJzX2FkZF9kaXJzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk0Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZmlsdGVyczsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjk0NzpcXHRcXHRmaWx0ZXIgPSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05NDgtXFx0XFx0XFx0XFx0ZmlsdGVycy1cXHUwMDNlaGFuZGxlX2xheWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MTUuMTc4ODg5NDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyMTQwNDcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byBgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvY2AqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2NgIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlc291cmNlcyBmb3IgbWFuYWdpbmcgREFNT04ncyBzeXNmcyBzY2hlbWVzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBmaWx0ZXJpbmcuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBwb2ludHMgb2YgY29udGVudGlvbiBoZXJlLCBjb25zaWRlcmluZyB0aGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBwcm9jZXNzZWQsIHBhcnNlZCwgYW5kIGFwcGxpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiB3b3Jrczogd2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQgKGlmIGFueSksIHdoYXQgdGhlIG1lbW9yeSBmb290cHJpbnQgaXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBmb3VuZGF0aW9uYWwgY29kZSBhbmQgSSdsbCBuZWVkIHRvIGtub3cgaXQgYmFja3dhcmRzIGFuZCBmb3J3YXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzoxNy44MDAyOTY4NTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDA6XFx0fTtcXG4gNTQxOlxcdFxcbiA1NDI6XFx0c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxcbiA1NDM6XFx0XFx0XFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxcbiA1NDQ6XFx0e1xcbiA1NDU6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlcjtcXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0ZmlsdGVyID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIpO1xcbiA1NDg6XFx0XFx0aWYgKGZpbHRlcilcXG4gNTQ5OlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlaGFuZGxlX2xheWVyID0gbGF5ZXI7XFxuIDU1MDpcXHRcXHRyZXR1cm4gZmlsdGVyO1xcbiA1NTE6XFx0fVxcbiA1NTI6XFx0XFxuIDU1MzpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XFxuIDU1NDpcXHRcXHRlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGU7XFxuIDU1NTpcXHRcXHRjaGFyICpuYW1lO1xcbiA1NTY6XFx0fTtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lXFxuIDU1OTpcXHRkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0ge1xcbiA1NjA6XFx0XFx0e1xcbiA1NjE6XFx0XFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9BTk9OLFxcbiA1NjI6XFx0XFx0XFx0Lm5hbWUgPSBcXFwiYW5vblxcXCIsXFxuIDU2MzpcXHRcXHR9LFxcbiA1NjQ6XFx0XFx0e1xcbiA1NjU6XFx0XFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9BQ1RJVkUsXFxuIDU2NjpcXHRcXHRcXHQubmFtZSA9IFxcXCJhY3RpdmVcXFwiLFxcbiA1Njc6XFx0XFx0fSxcXG4gNTY4OlxcdFxcdHtcXG4gNTY5OlxcdFxcdFxcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfTUVNQ0csXFxuIDU3MDpcXHRcXHRcXHQubmFtZSA9IFxcXCJtZW1jZ1xcXCIsXFxuIDU3MTpcXHRcXHR9LFxcbiA1NzI6XFx0XFx0e1xcbiA1NzM6XFx0XFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9ZT1VORyxcXG4gNTc0OlxcdFxcdFxcdC5uYW1lID0gXFxcInlvdW5nXFxcIixcXG4gNTc1OlxcdFxcdH0sXFxuIDU3NjpcXHRcXHR7XFxuIDU3NzpcXHRcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUsXFxuIDU3ODpcXHRcXHRcXHQubmFtZSA9IFxcXCJodWdlcGFnZV9zaXplXFxcIixcXG4gNTc5OlxcdFxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjE3LjgwMDQzNTM4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzU2MDMxMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGFtb24gc3lzZnMgU2NoZW1lIEZpbHRlciBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvY2AgZnVuY3Rpb24gd29ya3MuIEl0IHV0aWxpemVzIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGtleS4gVGhpcyBtZWFucyB0aGF0IGJvdGggYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIHdpdGhpbiB0aGUgYWxsb2NhdGVkIGZpbHRlciBzdHJ1Y3R1cmUgYXJlIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZCByaWdodCBvZmYgdGhlIGJhdC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBiZWNhdXNlIGxhdGVyLCB3aGVuIHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgYWNjZXNzZWQgYW5kIHdlIHJlYWQgZWl0aGVyIGBtaW5fc2hvd2Agb3IgYG1heF9zaG93YCwgdGhlIHN5c3RlbSBpcyBnb2luZyB0byBvdXRwdXQgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIGBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluYCBhbmQgYGZpbHRlci1cdTAwM2VyYW5nZV9tYXhgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRob3NlIHZhbHVlcyAqYXJlKiBhdCBhbnkgZ2l2ZW4gdGltZSwgcGFydGljdWxhcmx5IHdoZW4gYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AgaXMgY2FsbGVkLiBUaGF0IGNhbGwgaXMgY3JpdGljYWw7IGl0J3Mgd2hlcmUgdGhlIGZpbHRlcnMgYXJlIGxpa2VseSBwb3B1bGF0ZWQuIFRpbWUgdG8ganVtcCBvdmVyIHRvIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBsaW5lcyAyODM1IHRocm91Z2ggMjg2NS4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQncyBnb2luZyBvbiB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBsaWZlY3ljbGUgYW5kIGhvdyB0aGVzZSByYW5nZXMgYXJlIGFjdHVhbGx5IHNldCwgYW5kIHdoYXQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlLiBUaGUgaW5pdGlhbGl6YXRpb24gaXMgemVybywgYnV0IHRoYXQgd29uJ3QgbmVjZXNzYXJpbHkgdGVsbCB0aGUgd2hvbGUgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODI0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MjIuMTU2NDY4Nzk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgzNTpcXHRcXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZWFkZHJfcmFuZ2Uuc3RhcnQpIHtcXG4yODM2OlxcdFxcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XFxuMjgzNzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODM4OlxcdFxcdFxcdFxcdH1cXG4yODM5OlxcdFxcdFxcdFxcdGZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZSA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZTtcXG4yODQwOlxcdFxcdFxcdH0gZWxzZSBpZiAoZmlsdGVyLVxcdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCkge1xcbjI4NDE6XFx0XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2V0YXJnZXRfaWR4ID0gc3lzZnNfZmlsdGVyLVxcdTAwM2V0YXJnZXRfaWR4O1xcbjI4NDI6XFx0XFx0XFx0fSBlbHNlIGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRSkge1xcbjI4NDM6XFx0XFx0XFx0XFx0aWYgKHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluIFxcdTAwM2VcXG4yODQ0OlxcdFxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4KSB7XFxuMjg0NTpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbjI4NDY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjg0NzpcXHRcXHRcXHRcXHR9XFxuMjg0ODpcXHRcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1pbiA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluO1xcbjI4NDk6XFx0XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2Vzel9yYW5nZS5tYXggPSBzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21heDtcXG4yODUwOlxcdFxcdFxcdH0gZWxzZSBpZiAoZmlsdGVyLVxcdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkge1xcbjI4NTE6XFx0XFx0XFx0XFx0aWYgKHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluIFxcdTAwM2VcXG4yODUyOlxcdFxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4KSB7XFxuMjg1MzpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbjI4NTQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjg1NTpcXHRcXHRcXHRcXHR9XFxuMjg1NjpcXHRcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXJhbmdlX21pbiA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluO1xcbjI4NTc6XFx0XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXggPSBzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21heDtcXG4yODU4OlxcdFxcdFxcdH1cXG4yODU5OlxcdFxcbjI4NjA6XFx0XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XFxuMjg2MTpcXHRcXHR9XFxuMjg2MjpcXHRcXHRyZXR1cm4gMDtcXG4yODYzOlxcdH1cXG4yODY0OlxcdFxcbjI4NjU6XFx0c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuMjg2NjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKnN5c2ZzX2dvYWxzLFxcbjI4Njc6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4yODY4OlxcdHtcXG4yODY5OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbjI4NzA6XFx0XFx0aW50IGksIGVycjtcXG4yODcxOlxcdFxcbjI4NzI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN5c2ZzX2dvYWxzLVxcdTAwM2VucjsgaSsrKSB7XFxuMjg3MzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqc3lzZnNfZ29hbCA9XFxuMjg3NDpcXHRcXHRcXHRcXHRzeXNmc19nb2Fscy1cXHUwMDNlZ29hbHNfYXJyW2ldO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzoyMi4xNTY2MDAwNjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA3MzIxODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IHRoZSBwcm9iZSBoaXRzIG1vdmluZyBzdW0gb3BlcmF0ZXM6XG5cbioqRGVlcCBEaXZlIGludG8gYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1lY2hhbmlzbSBiZWhpbmQgdGhlIHByb2JlIGhpdHMgbW92aW5nIHN1bS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgd29ya3MgYmVjYXVzZSBhbnkgZWZmaWNpZW5jeSBnYWlucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgd2l0aGluIHRoaXMgYXJlIGNydWNpYWwgZm9yIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIEknbSB0cnlpbmcgdG8gYWNoaWV2ZS4gSSBzaG91bGQgZmlyc3QgdmVyaWZ5IHRoZSBjb3JlIGxvZ2ljLCBtYWtpbmcgc3VyZSB0aGUgYXZlcmFnaW5nIGlzIGRvbmUgY29ycmVjdGx5IGFuZCB0aGF0IHRoZSB3aW5kb3cgc2l6ZSBpcyBlZmZlY3RpdmVseSB1dGlsaXplZC4gQW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IgaGVyZSBjYW4gaW50cm9kdWNlIGVycm9ycyBpbiB0aGUgb3V0cHV0IHdoaWNoIGRpcmVjdGx5IGltcGFjdHMgZG93bnN0cmVhbSBjb21wdXRhdGlvbnMgb3IgZGVjaXNpb24tbWFraW5nLiBJJ2xsIG1ldGljdWxvdXNseSBjaGVjayB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IHRoZXkgaGFuZGxlIHVwZGF0ZXMuIEkgd2lsbCBwYXkgc3BlY2lhbCBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHRvIGNvbmZpcm0gaG93IHVwZGF0ZXMgYXJlIHN5bmNocm9uaXplZCwgZXNwZWNpYWxseSBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzoyNS4yMjk4MjE3MzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjU0MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3Byb2JlX2hpdHNfbXZzdW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyNT11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDgtXFxubW0vZGFtb24vY29yZS5jOjM0OTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzUwLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz00Nzc9dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDg3LVxcdFxcdGVsc2UgaWYgKG12KVxcbm1tL2RhbW9uL2NvcmUuYzo0ODg6XFx0XFx0XFx0c3VtICs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSsrLCByLCBjdHgpICpcXG5tbS9kYW1vbi9jb3JlLmMtNDg5LVxcdFxcdFxcdFxcdHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cXHRcXHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0OlxcdFxcdFxcdFxcdGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSwgcmVnaW9uLCBjdHgpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVxcdFxcdGlmICghc3lzX3Byb2JlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjI1LjI3NzQ4MDgyN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODYzMjYwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gUHJvYmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgZnVuY3Rpb24gaW4gdGhlIERBTU9OIGNvcmUgaXMgd29ya2luZy4gTGV0J3Mgc3RhcnQgd2l0aCBgbW0vZGFtb24vY29yZS5jYC4gSSBleHBlY3QgdG8gc2VlIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb3Zpbmcgc3VtLWJhc2VkIGhpdCBjb3VudGVyIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgYXQgbGVhc3QsIGEgc2lnbmlmaWNhbnQgcGFydCBvZiBpdCkgaGFwcGVucyBpbiBEQU1PTidzIHByb2JpbmcgbWV0aG9kb2xvZ3kuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIG92ZXJhbGwgcHJvY2VzcywgaG93IGl04oCZcyB0cmlnZ2VyZWQsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIHByb2JlIGFjY3VyYWN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjI4LjE0MDc0NDczWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcdHJldHVybiBkYW1vbl9tdnN1bShyLVxcdTAwM2Vucl9hY2Nlc3Nlcywgci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyxcXG4gMzQ2OlxcdFxcdFxcdFxcdGxlZnRfd2luZG93X2JwKTtcXG4gMzQ3OlxcdH1cXG4gMzQ4OlxcdFxcbiAzNDk6XFx0dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIDM1MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIDM1MTpcXHR7XFxuIDM1MjpcXHRcXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCwgYWdncl9pbnRlcnZhbDtcXG4gMzUzOlxcdFxcdHVuc2lnbmVkIGxvbmcgd2luZG93X2xlbiwgbGVmdF93aW5kb3csIGxlZnRfd2luZG93X2JwO1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4gMzU2OlxcdFxcdGFnZ3JfaW50ZXJ2YWwgPSAgY3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID8gOiAxO1xcbiAzNTc6XFx0XFx0d2luZG93X2xlbiA9IGFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWw7XFxuIDM1ODpcXHRcXHRpZiAodGltZV9hZnRlcl9lcShjdHgtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxcbiAzNTk6XFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcykpXFxuIDM2MDpcXHRcXHRcXHRsZWZ0X3dpbmRvdyA9IDA7XFxuIDM2MTpcXHRcXHRlbHNlXFxuIDM2MjpcXHRcXHRcXHRsZWZ0X3dpbmRvdyA9IGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgLVxcbiAzNjM6XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscztcXG4gMzY0OlxcdFxcdGxlZnRfd2luZG93X2JwID0gbXVsdF9mcmFjKGxlZnRfd2luZG93LCAxMDAwMCwgd2luZG93X2xlbik7XFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcXG4gMzY3OlxcdFxcdFxcdHJldHVybiByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcXG4gMzY4OlxcdFxcbiAzNjk6XFx0XFx0cmV0dXJuIGRhbW9uX212c3VtKHItXFx1MDAzZXByb2JlX2hpdHNbcHJvYmVfaWR4XSxcXG4gMzcwOlxcdFxcdFxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XFxuIDM3MTpcXHR9XFxuIDM3MjpcXHRcXG4gMzczOlxcdCNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxuIDM3NDpcXHRzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gMzc1OlxcdHtcXG4gMzc2OlxcdFxcdFdBUk5fT05DRShzdGFydCBcXHUwMDNlPSBlbmQsIFxcXCJzdGFydCAlbHUgXFx1MDAzZT0gZW5kICVsdVxcXFxuXFxcIiwgc3RhcnQsIGVuZCk7XFxuIDM3NzpcXHR9XFxuIDM3ODpcXHQjZWxzZVxcbiAzNzk6XFx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIDM4MDpcXHR7XFxuIDM4MTpcXHR9XFxuIDM4MjpcXHQjZW5kaWZcXG4gMzgzOlxcdFxcbiAzODQ6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MjguMTQwOTIwNzQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MzQwMDQyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBGaWx0ZXIgQXJndW1lbnQgSGFuZGxpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBncmFudWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBmaWx0ZXIgYXJndW1lbnRzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYC4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBhcmd1bWVudCBpcyBhY3R1YWxseSAqY29tbWl0dGVkKiBvciAqY29waWVkKiB3aXRoaW4gdGhlIHN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byB0cmFjaW5nIGl0cyBwcm9wYWdhdGlvbiBhbmQgcG90ZW50aWFsIGltcGFjdC4gSSBuZWVkIHRvIGtub3cgdGhlIGV4YWN0IHBvaW50cyBvZiBpbnRlcmFjdGlvbiwgc28gSSBjYW4gYmV0dGVyIGRpYWdub3NlIGFueSBpc3N1ZXMgb3Igb3B0aW1pemUgcmVsYXRlZCBwcm9jZXNzZXMuIEknbGwgbGlrZWx5IGJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIGNhbGxzLCBhc3NpZ25tZW50cywgb3IgbWVtb3J5IG1hbmlwdWxhdGlvbnMgaW52b2x2aW5nIHRoaXMgc3BlY2lmaWMgdmFyaWFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDM1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzozMC4wNzQ5Mjg5MjlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjA1MjU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19jb21taXRfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMzA4PXN0YXRpYyBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19udGhfb3BzX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzMTktXFxubW0vZGFtb24vY29yZS5jOjEzMjA6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXFxubW0vZGFtb24vY29yZS5jLTEzMjEtXFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM0NC1cXG5tbS9kYW1vbi9jb3JlLmM6MTM0NTpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyKFxcbm1tL2RhbW9uL2NvcmUuYy0xMzQ2LVxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNTAtXFx0ZHN0LVxcdTAwM2VhbGxvdyA9IHNyYy1cXHUwMDNlYWxsb3c7XFxubW0vZGFtb24vY29yZS5jOjEzNTE6XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzUyLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzU0PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM2MS1cXHRcXHRpZiAoc3JjX2ZpbHRlcilcXG5tbS9kYW1vbi9jb3JlLmM6MTM2MjpcXHRcXHRcXHRkYW1vc19jb21taXRfZmlsdGVyKGRzdF9maWx0ZXIsIHNyY19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzYzLVxcdFxcdGVsc2VcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzc1LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzoxMzc2OlxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKG5ld19maWx0ZXIsIHNyY19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzc3LVxcdFxcdGRhbW9zX2FkZF9maWx0ZXIoZHN0LCBuZXdfZmlsdGVyKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzgyPXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzg5LVxcdFxcdGlmIChzcmNfZmlsdGVyKVxcbm1tL2RhbW9uL2NvcmUuYzoxMzkwOlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEzOTEtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0MDMtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjE0MDQ6XFx0XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTE0MDUtXFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE0ODg9c3RhdGljIGludCBkYW1vc19jb21taXRfZGVzdHMoc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKmRzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTE4LVxcbm1tL2RhbW9uL2NvcmUuYzoxNTE5OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNTIwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTQ1PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTYzLVxcbm1tL2RhbW9uL2NvcmUuYzoxNTY0OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9maWx0ZXJzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTU2NS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTExMTg9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTEyMC17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExMjE6XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMjItXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNldHlwZSwgc3JjLVxcdTAwM2V0eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MzAuMjc2OTg3MjI2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTQ2OTA2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCBpbiB0aGUgREFNT04gQ29yZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgREFNT04gY29yZSBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYC4gSSdtIGFzc3VtaW5nIGl0J3MgcHJvYmFibHkgYW4gYXJndW1lbnQgcmVsYXRlZCB0byBmaWx0ZXJpbmcgY29tbWl0cywgbGlrZWx5IHVzZWQgd2hlbiBEQU1PTiBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1lbW9yeSByZWdpb25zIHRvIGFjdCB1cG9uLiBJdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gc29tZSBhc3BlY3Qgb2YgY29tbWl0IGJlaGF2aW9yLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgd29ya3MgYmVjYXVzZSBpdCdzIGtleSB0byBlaXRoZXIgcGVyZm9ybWFuY2UgdHVuaW5nIG9yIGRlYnVnZ2luZyBhIGJlaGF2aW9yIGluIGEgZGFtb24tcmVsYXRlZCBjb250ZXh0LiBJcyBpdCBhIGJpdG1hc2s/IEEgZmxhZz8gRG9lcyBpdCByZWxhdGUgdG8gYSBjb21taXQgdGhyZXNob2xkPyBBIHNwZWNpZmljIHR5cGUgb2YgY29tbWl0IG9wZXJhdGlvbj8gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBlY29zeXN0ZW0uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVoaW5kIHRoZSBzY2VuZXMgcmVnYXJkaW5nIGhvdyB0aGlzIHBhcmFtZXRlciBndWlkZXMgdGhlIGNvbW1pdCBsb2dpYyBzbyBJIGNhbiBzb2x2ZSB0aGUgaXNzdWUgYXQgaGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzozMy4wMzE2ODE4NDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKFxcbjEzMjE6XFx0XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXFxuMTMyMjpcXHR7XFxuMTMyMzpcXHRcXHRzd2l0Y2ggKGRzdC1cXHUwMDNldHlwZSkge1xcbjEzMjQ6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG4xMzI1OlxcdFxcdFxcdGRzdC1cXHUwMDNlbWVtY2dfaWQgPSBzcmMtXFx1MDAzZW1lbWNnX2lkO1xcbjEzMjY6XFx0XFx0XFx0YnJlYWs7XFxuMTMyNzpcXHRcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XFxuMTMyODpcXHRcXHRcXHRkc3QtXFx1MDAzZWFkZHJfcmFuZ2UgPSBzcmMtXFx1MDAzZWFkZHJfcmFuZ2U7XFxuMTMyOTpcXHRcXHRcXHRicmVhaztcXG4xMzMwOlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlxcbjEzMzE6XFx0XFx0XFx0ZHN0LVxcdTAwM2V0YXJnZXRfaWR4ID0gc3JjLVxcdTAwM2V0YXJnZXRfaWR4O1xcbjEzMzI6XFx0XFx0XFx0YnJlYWs7XFxuMTMzMzpcXHRcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkU6XFxuMTMzNDpcXHRcXHRcXHRkc3QtXFx1MDAzZXN6X3JhbmdlID0gc3JjLVxcdTAwM2Vzel9yYW5nZTtcXG4xMzM1OlxcdFxcdFxcdGJyZWFrO1xcbjEzMzY6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XFxuMTMzNzpcXHRcXHRcXHRkc3QtXFx1MDAzZXJhbmdlX21pbiA9IHNyYy1cXHUwMDNlcmFuZ2VfbWluO1xcbjEzMzg6XFx0XFx0XFx0ZHN0LVxcdTAwM2VyYW5nZV9tYXggPSBzcmMtXFx1MDAzZXJhbmdlX21heDtcXG4xMzM5OlxcdFxcdFxcdGJyZWFrO1xcbjEzNDA6XFx0XFx0ZGVmYXVsdDpcXG4xMzQxOlxcdFxcdFxcdGJyZWFrO1xcbjEzNDI6XFx0XFx0fVxcbjEzNDM6XFx0fVxcbjEzNDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjMzLjAzMTg1MjYxMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM5NTE3NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gRmlsdGVyIFN0cnVjdHVyZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBzdHJ1Y3QgZGFtb3NfZmlsdGVyYCBkZWZpbml0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIERBTU9OIGZpbHRlciBpbXBsZW1lbnRhdGlvbiBpbiB0aGUga2VybmVsP1wiIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSBob3cgdGhlIGZpbHRlcmluZyBtZWNoYW5pc20gaXMgc3RydWN0dXJlZC4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgY2hlY2sgZm9yIGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucyBvciBlbmhhbmNlbWVudHMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBmaWVsZHMsIGhvdyBpdCdzIHVzZWQgd2l0aCBEQU1PTidzIGNvcmUgZnVuY3Rpb25hbGl0eSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBwYWdlIGFjY2VzcyB0cmFja2luZy4gSSdtIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgZmlsdGVyaW5nIGNyaXRlcmlhLCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZSBmaWx0ZXJpbmcgbG9naWMsIGFuZCBhbnkgbWVjaGFuaXNtcyBmb3IgZHluYW1pYyBhZGp1c3RtZW50IG9yIGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGZpbHRlcidzIGludGVybmFscyB3aWxsIGJlIGtleSB0byBvcHRpbWl6aW5nIERBTU9OJ3MgYmVoYXZpb3IgaW4gY29tcGxleCBzY2VuYXJpb3MuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzozNS45NzEzNzQyNzRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0ICogZGFtb25fb3BlcmF0aW9ucyBhbmQgdGhlIHR5cGUuICBSZWZlciB0byBcXHUwMDI2ZW51bSBkYW1vc19maWx0ZXJfdHlwZSBmb3IgbW9yZVxcbiA0NDY6XFx0ICogZGV0YWlscy5cXG4gNDQ3OlxcdCAqL1xcbiA0NDg6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciB7XFxuIDQ0OTpcXHRcXHRlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGU7XFxuIDQ1MDpcXHRcXHRib29sIG1hdGNoaW5nO1xcbiA0NTE6XFx0XFx0Ym9vbCBhbGxvdztcXG4gNDUyOlxcdFxcdHVuaW9uIHtcXG4gNDUzOlxcdFxcdFxcdHU2NCBtZW1jZ19pZDtcXG4gNDU0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XFxuIDQ1NTpcXHRcXHRcXHRpbnQgdGFyZ2V0X2lkeDtcXG4gNDU2OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xcbiA0NTc6XFx0XFx0XFx0c3RydWN0IHtcXG4gNDU4OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xcbiA0NTk6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XFxuIDQ2MDpcXHRcXHRcXHR9O1xcbiA0NjE6XFx0XFx0fTtcXG4gNDYyOlxcdC8qIHByaXZhdGU6ICovXFxuIDQ2MzpcXHRcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiA0NjQ6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiA0NjU6XFx0fTtcXG4gNDY2OlxcdFxcbiA0Njc6XFx0c3RydWN0IGRhbW9uX2N0eDtcXG4gNDY4OlxcdHN0cnVjdCBkYW1vcztcXG4gNDY5OlxcdFxcbiA0NzA6XFx0LyoqXFxuIDQ3MTpcXHQgKiBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIC0gQ29udHJvbCBkYW1vc193YWxrKCkuXFxuIDQ3MjpcXHQgKlxcbiA0NzM6XFx0ICogQHdhbGtfZm46XFx0RnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJhY2sgZm9yIGVhY2ggcmVnaW9uLlxcbiA0NzQ6XFx0ICogQGRhdGE6XFx0RGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHdhbGsgZnVuY3Rpb25zLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzozNS45NzE1MzI4MTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyMzM5OTg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiBjb25zY2lvdXNuZXNzOlxuXG4qKkRpZ2dpbmcgaW50byBQcm9iZSBIaXQgVHJhY2tpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aG9zZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIOKAkyBgZGFtb25fZm9yX2VhY2hfcHJvYmVgLCBgci1cdTAwM2Vwcm9iZV9oaXRzYCwgYW5kIGByLVx1MDAzZWxhc3RfcHJvYmVfaGl0c2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgbWVtb3J5IGhhbmRsaW5nIGlzIHNvdW5kLCBhbmQgdGhlcmUgYXJlIG5vIHNuZWFreSBpc3N1ZXMgbHVya2luZyB0aGVyZS5cblxuU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gZXhhY3RseSAqaG93KiB0aGVzZSBgcHJvYmVfaGl0c2AgZmllbGRzIGFyZSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBUaGF0J3MgdGhlIGNvcmUgb2YgdW5kZXJzdGFuZGluZyBhbnkgcG90ZW50aWFsIHByb2JsZW1zLiBMZXQncyBzZWUgaWYgSSBjYW4gdHJhY2UgYmFjayB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3Qgc2VxdWVuY2UuIEdvdHRhIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgYmVmb3JlIGFueXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTMxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzozOC4xOTQ5MzUyNDhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDY1NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2JlX2hpdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyNT11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDgtXFxubW0vZGFtb24vY29yZS5jOjM0OTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzUwLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjYtXFx0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxcbm1tL2RhbW9uL2NvcmUuYzozNjc6XFx0XFx0cmV0dXJuIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdO1xcbm1tL2RhbW9uL2NvcmUuYy0zNjgtXFxubW0vZGFtb24vY29yZS5jOjM2OTpcXHRyZXR1cm4gZGFtb25fbXZzdW0oci1cXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxcbm1tL2RhbW9uL2NvcmUuYzozNzA6XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF0sIGxlZnRfd2luZG93X2JwKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzcxLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zODk9c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKykge1xcbm1tL2RhbW9uL2NvcmUuYzo0MDM6XFx0XFx0cmVnaW9uLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6NDA0OlxcdFxcdHJlZ2lvbi1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtNDA1LVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz00NjI9c3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NjgtLyoqXFxubW0vZGFtb24vY29yZS5jOjQ2OTogKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXFxubW0vZGFtb24vY29yZS5jLTQ3MC0gKiBAcjpcXHRcXHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDc2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0Nzc6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXFxubW0vZGFtb24vY29yZS5jLTQ3OC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDg1LVxcdFxcdGlmIChsYXN0KVxcbm1tL2RhbW9uL2NvcmUuYzo0ODY6XFx0XFx0XFx0c3VtICs9IHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpKytdICogcHJvYmUtXFx1MDAzZXdlaWdodDtcXG5tbS9kYW1vbi9jb3JlLmMtNDg3LVxcdFxcdGVsc2UgaWYgKG12KVxcbm1tL2RhbW9uL2NvcmUuYzo0ODg6XFx0XFx0XFx0c3VtICs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSsrLCByLCBjdHgpICpcXG5tbS9kYW1vbi9jb3JlLmMtNDg5LVxcdFxcdFxcdFxcdHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxubW0vZGFtb24vY29yZS5jLTQ5MC1cXHRcXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjQ5MTpcXHRcXHRcXHRzdW0gKz0gci1cXHUwMDNlcHJvYmVfaGl0c1tpKytdICogcHJvYmUtXFx1MDAzZXdlaWdodDtcXG5tbS9kYW1vbi9jb3JlLmMtNDkyLVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDA4PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDE0LVxcbm1tL2RhbW9uL2NvcmUuYzoxMDE1OnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTEwMTYtXFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMjItXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jOjEwMjM6XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxcbm1tL2RhbW9uL2NvcmUuYzoxMDI0OlxcdFxcdFxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDI1LVxcdFxcdGlmICghYWdncmVnYXRpbmcpXFxubW0vZGFtb24vY29yZS5jOjEwMjY6XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcXG5tbS9kYW1vbi9jb3JlLmM6MTAyNzpcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsXFxubW0vZGFtb24vY29yZS5jLTEwMjgtXFx0XFx0XFx0XFx0XFx0bmV3X2F0dHJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTAyOS1cXHRcXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjEwMzA6XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTEwMzEtXFx0XFx0aSsrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMzU9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAzOC17XFxubW0vZGFtb24vY29yZS5jOjEwMzk6XFx0ZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMociwgb2xkX2F0dHJzLCBuZXdfYXR0cnMsIGFnZ3JlZ2F0aW5nLCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDQwLVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE0MzY9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDM4LVxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDM5OlxcdHVuc2lnbmVkIGNoYXIgbWF4X3Byb2JlX2hpdHM7XFxubW0vZGFtb24vY29yZS5jLTE0NDAtXFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDU3LVxcdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXFxubW0vZGFtb24vY29yZS5jOjE0NTg6XFx0bWF4X3Byb2JlX2hpdHMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZjdHgtXFx1MDAzZWF0dHJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1OS1cXHR3c3VtID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ2MC1cXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jOjE0NjE6XFx0XFx0aWYgKHByb2JlLVxcdTAwM2V3ZWlnaHQgXFx1MDAzZSBVSU5UX01BWCAvIG1heF9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYy0xNDYyLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTQ2MzpcXHRcXHR3c3VtX3RvX2FkZCA9IHByb2JlLVxcdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcXG5tbS9kYW1vbi9jb3JlLmMtMTQ2NC1cXHRcXHRpZiAoVUlOVF9NQVggLSB3c3VtIFxcdTAwM2Mgd3N1bV90b19hZGQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjMwMj1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzI1LVxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjMyNjpcXHRcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSByLVxcdTAwM2Vwcm9iZV9oaXRzW2ldO1xcbm1tL2RhbW9uL2NvcmUuYzoyMzI3OlxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0yMzI4LVxcdFxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTExPXN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjU1My1cXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcXG5tbS9kYW1vbi9jb3JlLmM6MjU1NDpcXHRcXHR3c3VtID0gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLCB0cnVlLCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0yNTU1LVxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZXJhbmdlX21pbiBcXHUwMDNjPSB3c3VtIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzQ0ND1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MzQ1NjpcXHRcXHRsLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gKGwtXFx1MDAzZXByb2JlX2hpdHNbaV0gKiBzel9sICsgci1cXHUwMDNlcHJvYmVfaGl0c1tpXVxcbm1tL2RhbW9uL2NvcmUuYy0zNDU3LVxcdFxcdFxcdFxcdCogc3pfcikgLyAoc3pfbCArIHN6X3IpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NjI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxubW0vZGFtb24vY29yZS5jOjM0NjM6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYy0zNDY0LXtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ2NTpcXHRpZiAodXNlX3Byb2JlX2hpdHMpXFxubW0vZGFtb24vY29yZS5jOjM0NjY6XFx0XFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBmYWxzZSwgY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ2Ny1cXHRpZiAobGFzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDc5PXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0ODItXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ4MzpcXHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ4NC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDg3LVxcbm1tL2RhbW9uL2NvcmUuYzozNDg4OlxcdFxcdHNjb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgZmFsc2UsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xcbm1tL2RhbW9uL2NvcmUuYzozNDg5OlxcdFxcdGxhc3Rfc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCB0cnVlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ5MC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNTA0LVxcdFxcdGRpZmYgPSBhYnNfZGlmZihzY29yZSwgZGFtb25fbWVyZ2Vfc2NvcmUocHJldiwgZmFsc2UsIGN0eCxcXG5tbS9kYW1vbi9jb3JlLmM6MzUwNTpcXHRcXHRcXHRcXHRcXHR1c2VfcHJvYmVfaGl0cykpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNTA2LVxcdFxcdGlmIChkaWZmIFxcdTAwM2UgdGhyZXMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzU4ND1zdGF0aWMgaW50IGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1OTktXFx0LyogdG9kbzogZG8gdGhpcyBmb3Igb25seSBpbnN0YWxsZWQgcHJvYmVzICovXFxubW0vZGFtb24vY29yZS5jOjM2MDA6XFx0bWVtY3B5KG5ldy1cXHUwMDNlcHJvYmVfaGl0cywgci1cXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXFx1MDAzZXByb2JlX2hpdHMpKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzYwMTpcXHRtZW1jcHkobmV3LVxcdTAwM2VsYXN0X3Byb2JlX2hpdHMsIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0cyxcXG5tbS9kYW1vbi9jb3JlLmM6MzYwMjpcXHRcXHRcXHRzaXplb2Yoci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzKSk7XFxubW0vZGFtb24vY29yZS5jLTM2MDMtXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE3Nj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE5Ny1cXHRcXHRcXHRcXHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcXG5tbS9kYW1vbi9wYWRkci5jOjE5ODpcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldKys7XFxubW0vZGFtb24vcGFkZHIuYy0xOTktXFx0XFx0XFx0XFx0aSsrO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yMDMtXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG5tbS9kYW1vbi9wYWRkci5jOjIwNDpcXHRcXHRcXHRcXHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXFxubW0vZGFtb24vcGFkZHIuYy0yMDUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MD1zdGF0aWMgdm9pZCBkYW1vc19zeXNmc19wcm9iZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3Byb2JlX2hpdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5LVxcdFxcdF9fQVRUUl9ST19NT0RFKGhpdHMsIDA0MDApO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19wcm9iZV9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MjpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcHJvYmVfaGl0c19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUzLVxcdE5VTEwsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cXHRcXHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0OlxcdFxcdFxcdFxcdGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSwgcmVnaW9uLCBjdHgpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVxcdFxcdGlmICghc3lzX3Byb2JlKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTU5PWRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTkzLVxcdFxcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1OTQ6XFx0XFx0Lm5hbWUgPSBcXFwicHJvYmVfaGl0c193c3VtXFxcIixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk1LVxcdH0sXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NC1cXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gMTU7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1NTpcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzWzBdID0gNztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU2OlxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSA9IDM7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1Ny1cXHRyLVxcdTAwM2VhZ2UgPSAxMDtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNzItXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIHJfbmV3LVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTczOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vwcm9iZV9oaXRzWzBdLCByX25ldy1cXHUwMDNlcHJvYmVfaGl0c1swXSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE3NDpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdLCByX25ldy1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTc1LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIHJfbmV3LVxcdTAwM2VhZ2UpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE4MT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3R3byhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTk1LVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gMTA7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE5NjpcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzWzBdID0gNjtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTk3LVxcdHItXFx1MDAzZWFnZSA9IDk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjA0LVxcdHIyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDIwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyMDU6XFx0cjItXFx1MDAzZXByb2JlX2hpdHNbMF0gPSAxNDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjA2LVxcdHIyLVxcdTAwM2VhZ2UgPSAyMTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMTItXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzLCAxNnUpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyMTM6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZXByb2JlX2hpdHNbMF0sIDExKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjE0LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIDE3dSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTUxND1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUzOC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTUzOTpcXHQvKiBNb3JlIHNhbXBsZXMgY291bGQgb3ZlcmZsb3cgdGhlIHByb2JlX2hpdHMgY291bnRlcnMuICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NDAtXFx0Y3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMjU2O1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz01ODE9c3RhdGljIHZvaWQgZGFtb25fdmFfcHJvYmVfZm9saW8oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy01OTAtXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlc2FtcGxpbmdfYWRkcikpXFxubW0vZGFtb24vdmFkZHIuYzo1OTE6XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbm1tL2RhbW9uL3ZhZGRyLmMtNTkyLVxcdFxcdGkrKztcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjkwPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNzA1LVxcdFxcdFxcdGlmIChyZXR1cm5fbWF4X3dzdW0pXFxubW0vZGFtb24vdmFkZHIuYzo3MDY6XFx0XFx0XFx0XFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxcbm1tL2RhbW9uL3ZhZGRyLmMtNzA3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjM4LjI0NzAwNTgxOFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NjAyODQ4MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IERBTU9OIFByb2JlIEhpdHMgV2VpZ2h0ZWQgU3VtIEZpbHRlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHdhcnJhbnQgS01TQU4uIEZpcnN0LCBsZXQncyByZWNhcCB3aGF0IHRoZSBwYXRjaCAqZG9lcyo6IGl0IGludHJvZHVjZXMgYSBuZXcgZmlsdGVyIHR5cGUgZm9yIERBTU9OICh0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvcikgdGhhdCB1c2VzIGEgXCJwcm9iZSBoaXRzIHdlaWdodGVkIHN1bVwiLiBUaGlzIGludm9sdmVzIGFkZGluZyBuZXcgZmllbGRzIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIHRvIGZpbHRlciBzdHJ1Y3R1cmVzLCB1cGRhdGluZyBzeXNmcyBpbnRlcmZhY2VzIGZvciBjb25maWd1cmF0aW9uLCBhbmQgaW50cm9kdWNpbmcgYSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gaW4gdGhlIG1hdGNoaW5nIGxvZ2ljLiBFc3NlbnRpYWxseSwgaXQgYWxsb3dzIGZpbHRlcmluZyBiYXNlZCBvbiBhIHJhbmdlIG9mIHdlaWdodGVkIHByb2JlIGhpdCBjb3VudHMuXG5cbk5vdywgY3JpdGljYWxseSwgSSBuZWVkIHRvIGV2YWx1YXRlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlY29tZSBhbiBpc3N1ZS5cblxuMS4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBUaGUgcGF0Y2ggdXNlcyBzeXNmcyB0byBleHBvc2UgZmlsdGVyIHBhcmFtZXRlcnMuIE15IGZpcnN0IGNvbmNlcm4gaXMgYWx3YXlzIGFib3V0IHdoYXQncyBzZW50IHRvIHVzZXIgc3BhY2UuIEFyZSB3ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeT8gSGVyZSwgdGhlIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCB2YWx1ZXMgYXJlIHNob3duIHZpYSBgc3lzZnNfZW1pdGAsIGJ1dCB0aGUgYHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIFRoaXMgaW5jbHVkZXMgdGhlIG5ldyBmaWVsZHMuIFRoZSBgc3RydWN0IGRhbW9zX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IHRvby4gU28sIHRoZSBkYXRhIGV4cG9zZWQgdG8gdXNlciBzcGFjZSAqc2hvdWxkKiBiZSBzYWZlLiBObyBsZWFrcy5cblxuMi4gICoqQ29uZGl0aW9uYWwgTG9naWMgXHUwMDI2IFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIERvZXMgdGhlIGNvZGUgaGF2ZSBicmFuY2hpbmcgb3IgZGVjaXNpb24tbWFraW5nIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBXaXRoaW4gdGhlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIGFuZCBgZGFtb3NfZmlsdGVyX21hdGNoYCBmdW5jdGlvbnMsIGFsbCB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBhcmUgZGVmaW5pdGVseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyB1c2VkLiBgci1cdTAwM2Vwcm9iZV9oaXRzYCBhbmQgYHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzYCBhcmUgaGFuZGxlZCBzYWZlbHkgaW4gYGRhbW9uX25ld19yZWdpb25gLiBUaGUgZmlsdGVycyBhcmUgY29uZmlndXJlZCB3aXRoIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCB2YWx1ZXMsIGFuZCB0aGUgYHdzdW1gIGlzIHRoZW4gY29ycmVjdGx5IGFzc2lnbmVkLiBUaGlzIGlzIGEgdmVyeSBjbGVhbiBpbml0aWFsaXphdGlvbiBhbmQgdXNlIG9mIHZhbHVlcy4gTm8gdW5pbml0aWFsaXplZCByZWFkcy5cblxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogQXJlIHRoZXJlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQgbGF0ZXI/IE5vdCBpbiB0aGlzIHBhdGNoLiBUaGUgc3RydWN0dXJlcyBhbmQgZmlsdGVycyBhcmUgc2ltcGxlLCBhbmQgdGhleSdyZSBpbml0aWFsaXplZCBwcm9wZXJseSBkdXJpbmcgYWxsb2NhdGlvbiBvciBjb25maWd1cmF0aW9uLlxuXG40LiAgKipCb3VuZHMgQ2hlY2tpbmcgYW5kIE1lbW9yeSBTYWZldHk6KiogQXJlIHRoZXJlIGFueSBwbGFjZXMgd2hlcmUgdW5pbml0aWFsaXplZCBkYXRhIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbj8gVGhlIGBkYW1vbl9mb3JfZWFjaF9wcm9iZWAgbG9vcCBpdGVyYXRlcyB0aHJvdWdoIHByb2JlcyBpbiBgY3R4YCwgYW5kIHRoZSBwcm9iZSBjb3VudCBpcyBsaW1pdGVkIHRvIGBEQU1PTl9NQVhfUFJPQkVTYC4gVGhlIGxvb3AgaW5kZXggYGlgIGlzIHByb3Blcmx5IG1hbmFnZWQsIHNvIHRoaXMgc2VlbXMgc2FmZS5cblxuKipEb3VibGUgQ2hlY2sgYW5kIENvbmNsdXNpb246KipcblxuSSd2ZSBnb25lIHRocm91Z2ggZWFjaCBvZiB0aGUgcG90ZW50aWFsIGlzc3Vlcy4gSSd2ZSBjb25maXJtZWQgdGhhdDpcblxuKiAgIE5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbi5cbiogICBObyBjb250cm9sIGZsb3cgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG4qICAgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgc2FmZXR5IHRvb2xzIChsaWtlIExPQ0tERVApIGNvdmVyIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIHJpc2tzLiBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZSB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gTm93LCBJIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHRvb2wgY2FsbCB0byByZWZsZWN0IHRoaXMgY29uY2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2ODUsIk91dHB1dFRva2VucyI6MjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzo0Ny44NDk4NTc3ODNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGZpbHRlciB0eXBlIGZvciBEQU1PTiBzY2hlbWVzLCBleHRlbmRpbmcgc3lzZnMgYXR0cmlidXRlcyAoYG1pbmAgYW5kIGBtYXhgKSBhbmQgY29yZSBmaWx0ZXIgbWF0Y2hpbmcgdG8gdXNlIHRoZSBwcm9iZSBoaXRzIHdlaWdodGVkIG1vdmluZyBzdW0uIFxcblxcbi0gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogU3lzZnMgc2NoZW1lIGZpbHRlciBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBJbiBEQU1PTiBjb3JlLCBmaWx0ZXIgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHVwb24gY3JlYXRpb24gYW5kIGZpbHRlciBhcmd1bWVudHMgY29tbWl0Llxcbi0gVXNlci1zcGFjZSBEYXRhIFRyYW5zZmVyOiBTeXNmcyBvdXRwdXQgdXNlcyBmb3JtYXR0ZWQgc3RyaW5nIGVtaXNzaW9ucyB2aWEgYHN5c2ZzX2VtaXQoKWAsIHdpdGggbm8gcmF3IHN0cnVjdCBjb3BpZXMgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4tIFZhcmlhYmxlcyBhbmQgQnJhbmNoaW5nOiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gYW5kIGZpbHRlciBtYXRjaGluZyAoYHN1bWAsIGBpYCwgYHdzdW1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3IgbG9naWMgaXNzdWVzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBtZWNoYW5pc21zIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGZpbHRlciB0eXBlIGZvciBEQU1PTiBzY2hlbWVzLCBleHRlbmRpbmcgc3lzZnMgYXR0cmlidXRlcyAoYG1pbmAgYW5kIGBtYXhgKSBhbmQgY29yZSBmaWx0ZXIgbWF0Y2hpbmcgdG8gdXNlIHRoZSBwcm9iZSBoaXRzIHdlaWdodGVkIG1vdmluZyBzdW0uIFxcblxcbi0gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogU3lzZnMgc2NoZW1lIGZpbHRlciBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBJbiBEQU1PTiBjb3JlLCBmaWx0ZXIgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHVwb24gY3JlYXRpb24gYW5kIGZpbHRlciBhcmd1bWVudHMgY29tbWl0Llxcbi0gVXNlci1zcGFjZSBEYXRhIFRyYW5zZmVyOiBTeXNmcyBvdXRwdXQgdXNlcyBmb3JtYXR0ZWQgc3RyaW5nIGVtaXNzaW9ucyB2aWEgYHN5c2ZzX2VtaXQoKWAsIHdpdGggbm8gcmF3IHN0cnVjdCBjb3BpZXMgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4tIFZhcmlhYmxlcyBhbmQgQnJhbmNoaW5nOiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gYW5kIGZpbHRlciBtYXRjaGluZyAoYHN1bWAsIGBpYCwgYHdzdW1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3IgbG9naWMgaXNzdWVzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBtZWNoYW5pc21zIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhtxgf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 15:03:26 +0000 UTC FinishedAt: 2026-09-10 15:23:49 +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": "cf558a250cf4475a8936902b8978fbb6c61016f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cf558a250cf4475a8936902b8978fbb6c61016f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "ece33db9-4802-4c0d-b860-87ee9f26ded5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_probe_hits_wsum", "damos_filter_match", "damos_filter_for_ops", "damos_commit_filter_arg", "damon_sysfs_add_scheme_filters", "damon_pa_apply_probes", "damon_va_apply_probes", "damon_merge_score" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19maWx0ZXJfZm9yX29wcyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9zY29yZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGZpbHRlciB0eXBlIGZvciBEQU1PTiBzY2hlbWVzLCBleHRlbmRpbmcgc3lzZnMgYXR0cmlidXRlcyAoYG1pbmAgYW5kIGBtYXhgKSBhbmQgY29yZSBmaWx0ZXIgbWF0Y2hpbmcgdG8gdXNlIHRoZSBwcm9iZSBoaXRzIHdlaWdodGVkIG1vdmluZyBzdW0uIFxuXG4tIE1lbW9yeSBBbGxvY2F0aW9uIFx1MDAyNiBJbml0aWFsaXphdGlvbjogU3lzZnMgc2NoZW1lIGZpbHRlciBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBJbiBEQU1PTiBjb3JlLCBmaWx0ZXIgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHVwb24gY3JlYXRpb24gYW5kIGZpbHRlciBhcmd1bWVudHMgY29tbWl0LlxuLSBVc2VyLXNwYWNlIERhdGEgVHJhbnNmZXI6IFN5c2ZzIG91dHB1dCB1c2VzIGZvcm1hdHRlZCBzdHJpbmcgZW1pc3Npb25zIHZpYSBgc3lzZnNfZW1pdCgpYCwgd2l0aCBubyByYXcgc3RydWN0IGNvcGllcyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLlxuLSBWYXJpYWJsZXMgYW5kIEJyYW5jaGluZzogQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgd2VpZ2h0ZWQgc3VtIGNhbGN1bGF0aW9uIGFuZCBmaWx0ZXIgbWF0Y2hpbmcgKGBzdW1gLCBgaWAsIGB3c3VtYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIG1lY2hhbmlzbXMgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSAvICYjMzk7cHJvYmVfaGl0c193c3VtJiMzOTspIGluIERBTU9OLCB1cGRhdGluZyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMsIHN5c2ZzIGNvbmZpZ3VyYXRpb24gaGFuZGxpbmcsIGFuZCBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBjYWxjdWxhdGlvbnMgYWNyb3NzIERBTU9OIGNvcmUsIHBhZGRyLCBhbmQgdmFkZHIgb3BlcmF0aW9ucy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYzkwMDFiZDk5ZjlmNzY2Yjk2ZGFkZjVlNzkzZGUxMGFmNzYwZGI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTU6MjI6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTU1MSw2ICYjNDM7NTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlXG4gZmlsdGVyLiAgUmVmZXIgdG8gOnJlZjpgdGhlIGRlc2lnbiBkb2MgXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnNcdTAwM2VgIGZvclxuIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLlxuIFxuJiM0MztGb3IgYGBwcm9iZV9oaXRzX3dzdW1gYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gcHJvYmVcbiYjNDM7aGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcyxcbiYjNDM7cmVzcGVjdGl2ZWx5LlxuJiM0MztcbiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnlcbiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG9cbiBgYG1lbWNnX3BhdGhgYCBmaWxlLiAgRm9yIGBgYWRkcmBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgc3RhcnQgYW5kIGVuZFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtODIyLDYgJiM0Mzs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gYWRkcmVzcyByYW5nZS5cbiAgICAgLSB0YXJnZXRcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LlxuJiM0MzsgICAgLSBwcm9iZV9oaXRzX3dzdW1cbiYjNDM7ICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlXG4mIzQzOyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSBcdTAwM2NkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nXHUwMDNlYCB2YWx1ZS5cbiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LlxuICAgICAtIGFub25cbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IG5vdCBzdG9yZWQgaW4gZmlsZXMuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0zOTksMTQgJiM0MzszOTksMTUgQEAgc3RydWN0IGRhbW9zX3N0YXQge1xuICAqIEBEQU1PU19GSUxURVJfVFlQRV9VTk1BUFBFRDpcdFVubWFwcGVkIHBhZ2VzLlxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9BRERSOlx0QWRkcmVzcyByYW5nZS5cbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlx0RGF0YSBBY2Nlc3MgTW9uaXRvcmluZyB0YXJnZXQuXG4mIzQzOyAqIEBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XHRwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS5cbiAgKiBATlJfREFNT1NfRklMVEVSX1RZUEVTOlx0TnVtYmVyIG9mIGZpbHRlciB0eXBlcy5cbiAgKlxuLSAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUXG4tICogYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZVxuLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LFxuLSAqIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkXG4tICogYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWRcbi0gKiBhcyAmIzM5O3RyaWVkJiMzOTsuXG4mIzQzOyAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGFuZFxuJiM0MzsgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0XG4mIzQzOyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZFxuJiM0MzsgKiBhcyAmIzM5O3RyaWVkJiMzOTsuICBJbiBjb250cmFzdCwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmRcbiYjNDM7ICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlXG4mIzQzOyAqIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQgYXMgJiMzOTt0cmllZCYjMzk7LlxuICAqXG4gICogU3VwcG9ydCBmb3IgdGhlIG9wZXJhdGlvbnMtaGFuZGxlZCBmaWx0ZXJzIGRlcGVuZHMgb24gdGhlIHJ1bm5pbmdcbiAgKiBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy5cbkBAIC00MjAsNiAmIzQzOzQyMSw3IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuIFx0REFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsXG4gXHREQU1PU19GSUxURVJfVFlQRV9BRERSLFxuIFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuJiM0MztcdERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcbiBcdE5SX0RBTU9TX0ZJTFRFUl9UWVBFUyxcbiB9O1xuIFxuQEAgLTQzNCw2ICYjNDM7NDM2LDggQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XG4gICpcdFx0XHUwMDI2ZGFtb25fY3R4LVx1MDAzZWFkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXNcbiAgKlx0XHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuXG4gICogQHN6X3JhbmdlOlx0U2l6ZSByYW5nZSBpZiBAdHlwZSBpcyBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFLlxuJiM0MzsgKiBAcmFuZ2VfbWluOlx0TWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXG4mIzQzOyAqIEByYW5nZV9tYXg6XHRNYXhpbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDUwLDYgJiM0Mzs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7XG4gXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4gXHRcdGludCB0YXJnZXRfaWR4O1xuIFx0XHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIHJhbmdlX21heDtcbiYjNDM7XHRcdH07XG4gXHR9O1xuIC8qIHByaXZhdGU6ICovXG4gXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuQEAgLTEwNjUsNyAmIzQzOzEwNzMsNyBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4gXG4gaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC00NjksMTEgJiM0Mzs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4gICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbiAgKiBAbGFzdDpcdGlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuXG4mIzQzOyAqIEBtdjpcdFx0dXNlIG1vdmluZyBzdW0uXG4gICogQGN0eDpcdGNvbnRleHQgb2YgXHUwMDI2ci5cbiAgKlxuICAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXG4gICovXG4tdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4mIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbkBAIC00ODMsNiAmIzQzOzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuIFx0XHRpZiAobGFzdClcbiBcdFx0XHRzdW0gJiM0Mzs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiYjNDM7XHRcdGVsc2UgaWYgKG12KVxuJiM0MztcdFx0XHRzdW0gJiM0Mzs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSYjNDM7JiM0MzssIHIsIGN0eCkgKlxuJiM0MztcdFx0XHRcdHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2Vwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdH1cbkBAIC02NTQsNiAmIzQzOzY1OCw3IEBAIGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuIFx0c3dpdGNoICh0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbiYjNDM7XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5AQCAtMTMyOCw2ICYjNDM7MTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcbiBcdFx0ZHN0LVx1MDAzZXN6X3JhbmdlID0gc3JjLVx1MDAzZXN6X3JhbmdlO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbiYjNDM7XHRcdGRzdC1cdTAwM2VyYW5nZV9taW4gPSBzcmMtXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0ZHN0LVx1MDAzZXJhbmdlX21heCA9IHNyYy1cdTAwM2VyYW5nZV9tYXg7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1MDYsNyAmIzQzOzI1MTUsNyBAQCBzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aTtcbiBcdGludCB0YXJnZXRfaWR4ID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHdzdW07XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbkBAIC0yNTQxLDYgJiM0MzsyNTUwLDExIEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLVx1MDAzZWFyLnN0YXJ0KTtcbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuJiM0MztcdFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcbiYjNDM7XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzYz0gd3N1bSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0d3N1bSBcdTAwM2M9IGZpbHRlci1cdTAwM2VyYW5nZV9tYXg7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0zNDQ5LDcgJiM0MzszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcbiB7XG4gXHRpZiAodXNlX3Byb2JlX2hpdHMpXG4tXHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcbiYjNDM7XHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7XG4gXHRpZiAobGFzdClcbiBcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcztcbiBcdHJldHVybiByLVx1MDAzZW5yX2FjY2Vzc2VzO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCBkN2M4MTgyOTQ0NWJhLi5iOGY0ZDI4MTY1ZGQ3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuJiM0MztcdFx0XHRcdFx0XHRcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiBtYXhfd3N1bTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbmluZGV4IGQ5YjgxZDdiNTkxMGUuLmQ5ZGQ0ZWUwNDQyYzcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTUzNCw3ICYjNDM7NTM0LDggQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xuIFx0Ym9vbCBhbGxvdztcbiBcdGNoYXIgKm1lbWNnX3BhdGg7XG4gXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xuLVx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4gXHRpbnQgdGFyZ2V0X2lkeDtcbiB9O1xuIFxuQEAgLTU4OCw2ICYjNDM7NTg5LDEwIEBAIGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XG4gXHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuIFx0XHQubmFtZSA9IFwmIzM0O3RhcmdldFwmIzM0OyxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3Byb2JlX2hpdHNfd3N1bVwmIzM0OyxcbiYjNDM7XHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc3OCw3ICYjNDM7NzgzLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuIFxuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuJiM0MztcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc4Niw3ICYjNDM7NzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4tXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluKTtcbiYjNDM7XHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtNzk3LDcgJiM0Mzs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtODA1LDcgJiM0Mzs4MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuJiM0MztcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xuIH1cbkBAIC0yODM1LDEyICYjNDM7Mjg0MCwyMSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbiBcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuIFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbi1cdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbiBcdTAwM2Vcbi1cdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCkge1xuJiM0MztcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbiYjNDM7XHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2VyYW5nZV9tYXgpIHtcbiYjNDM7XHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNKSB7XG4mIzQzO1x0XHRcdGlmIChzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzZVxuJiM0MztcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuIFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UgPSBzeXNmc19maWx0ZXItXHUwMDNlc3pfcmFuZ2U7XG4mIzQzO1x0XHRcdGZpbHRlci1cdTAwM2VyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbiBcdFx0fVxuIFxuIFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggOWEzOGRjODlhMTU2ZS4uNGFlY2YzNGUzOWJlMiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC03MDQsNyAmIzQzOzcwNCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuJiM0MztcdFx0XHRcdFx0XHRcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdFx0aWYgKG1tKVxuIFx0XHRcdG1tcHV0KG1tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfd3N1bSYjMzQ7LAogICAgJiMzNDtkYW1vc19maWx0ZXJfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZGFtb3NfZmlsdGVyX2Zvcl9vcHMmIzM0OywKICAgICYjMzQ7ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2FwcGx5X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZSAoREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNIC8gJiMzOTtwcm9iZV9oaXRzX3dzdW0mIzM5OykgaW4gREFNT04sIHVwZGF0aW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYywgc3lzZnMgY29uZmlndXJhdGlvbiBoYW5kbGluZywgYW5kIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbGN1bGF0aW9ucyBhY3Jvc3MgREFNT04gY29yZSwgcGFkZHIsIGFuZCB2YWRkciBvcGVyYXRpb25zLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjOTAwMWJkOTlmOWY3NjZiOTZkYWRmNWU3OTNkZTEwYWY3NjBkYjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxNToyMjozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKQEAgLTU1MSw2ICYjNDM7NTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlCiBmaWx0ZXIuICBSZWZlciB0byA6cmVmOmB0aGUgZGVzaWduIGRvYyAmbHQ7ZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnMmZ3Q7YCBmb3IKIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLgogCiYjNDM7Rm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlCiYjNDM7aGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcywKJiM0MztyZXNwZWN0aXZlbHkuCiYjNDM7CiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnkKIHdyaXRpbmcgdGhlIHBhdGggb2YgdGhlIG1lbW9yeSBjZ3JvdXAgZnJvbSB0aGUgY2dyb3VwcyBtb3VudCBwb2ludCB0bwogYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdAppbmRleCBhYWM4NGRlMjYxYWE4Li44ZTk4MGRkZTM2MmRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CkBAIC04MjIsNiAmIzQzOzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIGFkZHJlc3MgcmFuZ2UuCiAgICAgLSB0YXJnZXQKICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuCiYjNDM7ICAgIC0gcHJvYmVfaGl0c193c3VtCiYjNDM7ICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlCiYjNDM7ICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtICZsdDtkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nJmd0O2AgdmFsdWUuCiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LgogICAgIC0gYW5vbgogICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBjb250YWluaW5nIGRhdGEgdGhhdCBub3Qgc3RvcmVkIGluIGZpbGVzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDg3MWQyNmFkZjZhZTUuLjRhMzZmMzQ0YmJjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTM5OSwxNCAmIzQzOzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7CiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6CVVubWFwcGVkIHBhZ2VzLgogICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CUFkZHJlc3MgcmFuZ2UuCiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOglEYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC4KJiM0MzsgKiBAREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOglwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS4KICAqIEBOUl9EQU1PU19GSUxURVJfVFlQRVM6CU51bWJlciBvZiBmaWx0ZXIgdHlwZXMuCiAgKgotICogQWxsIHR5cGVzIGV4Y2VwdCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kICZhbXA7REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUCi0gKiBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWUKLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LAotICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkCi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZAotICogYXMgJiMzOTt0cmllZCYjMzk7LgomIzQzOyAqIEFsbCB0eXBlcyBleGNlcHQgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSLCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmQKJiM0MzsgKiAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdAomIzQzOyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZAomIzQzOyAqIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kCiYjNDM7ICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmUKJiM0MzsgKiB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4KICAqCiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZwogICogJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4KQEAgLTQyMCw2ICYjNDM7NDIxLDcgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7CiAJREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsCiAJREFNT1NfRklMVEVSX1RZUEVfQUREUiwKIAlEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsCiYjNDM7CURBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSwKIAlOUl9EQU1PU19GSUxURVJfVFlQRVMsCiB9OwogCkBAIC00MzQsNiAmIzQzOzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgewogICoJCSZhbXA7ZGFtb25fY3R4LSZndDthZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzCiAgKgkJREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULgogICogQHN6X3JhbmdlOglTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuCiYjNDM7ICogQHJhbmdlX21pbjoJTWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiYjNDM7ICogQHJhbmdlX21heDoJTWF4aW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiAgKgogICogQmVmb3JlIGFwcGx5aW5nIHRoZSAmYW1wO2RhbW9zLSZndDthY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaAogICogYnl0ZSBvZiB0aGUgcmVnaW9uIG1hdGNoZXMgdG8gdGhpcyBnaXZlbiBjb25kaXRpb24gYW5kIGF2b2lkIGFwcGx5aW5nIHRoZQpAQCAtNDUwLDYgJiM0Mzs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7CiAJCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7CiAJCWludCB0YXJnZXRfaWR4OwogCQlzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9taW47CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7CiYjNDM7CQl9OwogCX07CiAvKiBwcml2YXRlOiAqLwogCS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCkBAIC0xMDY1LDcgJiM0MzsxMDczLDcgQEAgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCk7CiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KTsKLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAomIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogCiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcywKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC00NjksMTEgJiM0Mzs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKICAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi4KICAqIEByOgkJcmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLgogICogQGxhc3Q6CWlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuCiYjNDM7ICogQG12OgkJdXNlIG1vdmluZyBzdW0uCiAgKiBAY3R4Ogljb250ZXh0IG9mICZhbXA7ci4KICAqCiAgKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLgogICovCi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKJiM0Mzt1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdiwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewogCXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CkBAIC00ODMsNiAmIzQzOzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAogCWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHsKIAkJaWYgKGxhc3QpCiAJCQlzdW0gJiM0Mzs9IHItJmd0O2xhc3RfcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS0mZ3Q7d2VpZ2h0OwomIzQzOwkJZWxzZSBpZiAobXYpCiYjNDM7CQkJc3VtICYjNDM7PSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkmIzQzOyYjNDM7LCByLCBjdHgpICoKJiM0MzsJCQkJcHJvYmUtJmd0O3dlaWdodDsKIAkJZWxzZQogCQkJc3VtICYjNDM7PSByLSZndDtwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLSZndDt3ZWlnaHQ7CiAJfQpAQCAtNjU0LDYgJiM0Mzs2NTgsNyBAQCBib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSkKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CiAJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6CiYjNDM7CWNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOgogCQlyZXR1cm4gZmFsc2U7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMzI4LDYgJiM0MzsxMzMzLDEwIEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKAogCWNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRToKIAkJZHN0LSZndDtzel9yYW5nZSA9IHNyYy0mZ3Q7c3pfcmFuZ2U7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCWRzdC0mZ3Q7cmFuZ2VfbWluID0gc3JjLSZndDtyYW5nZV9taW47CiYjNDM7CQlkc3QtJmd0O3JhbmdlX21heCA9IHNyYy0mZ3Q7cmFuZ2VfbWF4OwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMjUwNiw3ICYjNDM7MjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiAJc3RydWN0IGRhbW9uX3RhcmdldCAqdGk7CiAJaW50IHRhcmdldF9pZHggPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtOwogCiAJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDoKQEAgLTI1NDEsNiAmIzQzOzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItJmd0O2FyLnN0YXJ0KTsKIAkJbWF0Y2hlZCA9IHRydWU7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCXdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7CiYjNDM7CQltYXRjaGVkID0gZmlsdGVyLSZndDtyYW5nZV9taW4gJmx0Oz0gd3N1bSAmYW1wOyZhbXA7CiYjNDM7CQkJd3N1bSAmbHQ7PSBmaWx0ZXItJmd0O3JhbmdlX21heDsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0zNDQ5LDcgJiM0MzszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cykKIHsKIAlpZiAodXNlX3Byb2JlX2hpdHMpCi0JCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTsKJiM0MzsJCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7CiAJaWYgKGxhc3QpCiAJCXJldHVybiByLSZndDtsYXN0X25yX2FjY2Vzc2VzOwogCXJldHVybiByLSZndDtucl9hY2Nlc3NlczsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jCmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiAJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAotCQkJCQkJCWN0eCksIG1heF93c3VtKTsKJiM0MzsJCQkJCQkJZmFsc2UsIGN0eCksIG1heF93c3VtKTsKIAkJfQogCX0KIAlyZXR1cm4gbWF4X3dzdW07CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKaW5kZXggZDliODFkN2I1OTEwZS4uZDlkZDRlZTA0NDJjNyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwpAQCAtNTM0LDcgJiM0Mzs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7CiAJYm9vbCBhbGxvdzsKIAljaGFyICptZW1jZ19wYXRoOwogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7Ci0Jc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluOwomIzQzOwl1bnNpZ25lZCBsb25nIHJhbmdlX21heDsKIAlpbnQgdGFyZ2V0X2lkeDsKIH07CiAKQEAgLTU4OCw2ICYjNDM7NTg5LDEwIEBAIGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7CiAJCS50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULAogCQkubmFtZSA9ICYjMzQ7dGFyZ2V0JiMzNDssCiAJfSwKJiM0MzsJewomIzQzOwkJLnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sCiYjNDM7CQkubmFtZSA9ICYjMzQ7cHJvYmVfaGl0c193c3VtJiMzNDssCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC03NzgsNyAmIzQzOzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbik7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21pbik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTc4Niw3ICYjNDM7NzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWluKTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21pbik7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC03OTcsNyAmIzQzOzgwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1heCk7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21heCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTgwNSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21heCk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC0yODM1LDEyICYjNDM7Mjg0MCwyMSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwKIAkJfSBlbHNlIGlmIChmaWx0ZXItJmd0O3R5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7CiAJCQlmaWx0ZXItJmd0O3RhcmdldF9pZHggPSBzeXNmc19maWx0ZXItJmd0O3RhcmdldF9pZHg7CiAJCX0gZWxzZSBpZiAoZmlsdGVyLSZndDt0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHsKLQkJCWlmIChzeXNmc19maWx0ZXItJmd0O3N6X3JhbmdlLm1pbiAmZ3Q7Ci0JCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KSB7CiYjNDM7CQkJaWYgKHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluICZndDsKJiM0MzsJCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4KSB7CiYjNDM7CQkJCWRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCQlmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbiA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluOwomIzQzOwkJCWZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXg7CiYjNDM7CQl9IGVsc2UgaWYgKGZpbHRlci0mZ3Q7dHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHsKJiM0MzsJCQlpZiAoc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9taW4gJmd0OwomIzQzOwkJCQkJc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXgpIHsKIAkJCQlkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJZmlsdGVyLSZndDtzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2U7CiYjNDM7CQkJZmlsdGVyLSZndDtyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItJmd0O3JhbmdlX21pbjsKJiM0MzsJCQlmaWx0ZXItJmd0O3JhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4OwogCQl9CiAKIAkJZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCA5YTM4ZGM4OWExNTZlLi40YWVjZjM0ZTM5YmUyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTcwNCw3ICYjNDM7NzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCQkJX19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7CiAJCQlpZiAocmV0dXJuX21heF93c3VtKQogCQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKLQkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiYjNDM7CQkJCQkJCWZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7CiAJCX0KIAkJaWYgKG1tKQogCQkJbW1wdXQobW0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTQ0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlIHBhdGNoJiMzOTtzIHJpc2sgYW5kIGlkZW50aWZ5IHRoZSBtb3N0IHByb21pc2luZyBhcmVhcyBmb3IgdGFyZ2V0ZWQgZnV6emluZywgYWxvbmcgd2l0aCBhbnkgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQuIFRoZSBmaWxlIGxpc3QgdGVsbHMgdGhlIHN0b3J5OiBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgKGAucnN0YCBmaWxlcyksIGhlYWRlciBtb2RpZmljYXRpb25zIChgZGFtb24uaGApLCBhbmQgY29yZSBmdW5jdGlvbmFsaXR5IGNoYW5nZXMgYWNyb3NzIHNldmVyYWwgYC5jYCBmaWxlcyB3aXRoaW4gdGhlIGBtbS9kYW1vbmAgZGlyZWN0b3J5LiBUaGlzIHN1Z2dlc3RzIGEgc2lnbmlmaWNhbnQgYWx0ZXJhdGlvbiB0byB0aGUgREFNT04gc3Vic3lzdGVtJiMzOTtzIGJlaGF2aW9yLgoKU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGU6IGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gICgmIzM0O3Byb2JlX2hpdHNfd3N1bSYjMzQ7KS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSBtb2RpZmljYXRpb25zIHRvIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIGZ1bmN0aW9uLCBhZGRpbmcgYSBib29sZWFuIGFyZ3VtZW50IGBtdmAgd2hpY2ggaXMgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBpcyBub3cgdXNlZCBieSBzZXZlcmFsIGZ1bmN0aW9uczogYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKClgLCBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoKWAsIGBkYW1vc19maWx0ZXJfbWF0Y2goKWAsIGFuZCBzeXNmcyBmaWx0ZXIgaGFuZGxpbmcuIFRoaXMgc3VnZ2VzdHMgdGhlcmUgYXJlIG5ldyB3YXlzIHRvIGNvbnRyb2wgdGhlIGZpbHRlciYjMzk7cyBiZWhhdmlvci4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgZmlsdGVyIGRvZXMsIGluIHBhcnRpY3VsYXIgaG93IHRoZSBtb3Zpbmcgc3VtIGlzIGltcGxlbWVudGVkIGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGV4aXN0aW5nIGZpbHRlciBzeXN0ZW0uIFRoaXMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIERBTU9OIGNvZGUgYW5kIEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4aXN0aW5nIERBTU9OIGZlYXR1cmVzIGFuZCBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gVXNpbmcgYGdyZXBwZXJgIG9yIGRpZ2dpbmcgaW50byB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBpbXBhY3QgbXkgZnV6emluZyBzZXR1cCDigJMgZm9yIGV4YW1wbGUsIGRlYnVnIG9wdGlvbnMsIHRyYWNpbmcsIG9yIGxvZ2dpbmcgd2hpY2ggd291bGQgYmUgYmVuZWZpY2lhbCBkdXJpbmcgdGhlIGZ1enppbmcgc3RhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWc6NjpcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTctXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZzoxNjpcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTc6XHRkZXBlbmRzIG9uIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTE4LVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxOTpcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxubW0vZGFtb24vS2NvbmZpZzoyMDpcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG5tbS9kYW1vbi9LY29uZmlnLTIxLVx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjI4Olx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy0yOS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTMwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzozMTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjQwOlx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG5tbS9kYW1vbi9LY29uZmlnLTQxLVx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG5tbS9kYW1vbi9LY29uZmlnOjQyOlx0ZGVmYXVsdCBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy00My1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NDQ6XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDUtXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0OTpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy01MC1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo1MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNTItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjUzOlx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTU0LVx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnOjU3Olx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTU5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWctNjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjYxOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy02Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWc6Njk6XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo3MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjcxOlx0ZGVmYXVsdCBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy03Mi1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NzM6XHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxubW0vZGFtb24vS2NvbmZpZy03NC1cdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6Nzg6XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTc5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWctODAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjgxOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXG5tbS9kYW1vbi9LY29uZmlnLTgyLVxuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnOjg5Olx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo5MDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctOTEtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjkyOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcbm1tL2RhbW9uL0tjb25maWc6OTM6XHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cbm1tL2RhbW9uL0tjb25maWctOTQtXHQgIHRob3NlLlxuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWc6MTAxOlx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTAzLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyBzdWJzeXN0ZW0uICBJdCB0cmllcyB0b1xubW0vZGFtb24vS2NvbmZpZy0xMDUtXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZzoxMDk6XHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTEwOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy0xMTEtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIGFjY2VzcyBtb25pdG9yaW5nIHN0YXRpc3RpY3Mgc3Vic3lzdGVtLlxubW0vZGFtb24vS2NvbmZpZzoxMTM6XHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XG5tbS9kYW1vbi9LY29uZmlnLTExNC1cdCAgbWV0cmljcy5cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnOjExNzpcdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMTg6XHRkZXBlbmRzIG9uIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTE5Olx0ZGVmYXVsdCBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEyMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTIxOlx0ICBXaGV0aGVyIHRvIGVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHQuICBVc2VycyBjYW4gZGlzYWJsZSBpdCBpblxubW0vZGFtb24vS2NvbmZpZy0xMjItXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJiMzOTtlbmFibGVkJiMzOTsgcGFyYW1ldGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRXhhbWluaW5nIHRoZSBEQU1PTiBNYWtlZmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgTWFrZWZpbGVgIGxvY2F0ZWQgaW4gYG1tL2RhbW9uYC4gTXkgZ29hbCBpcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgREFNT04gKER5bmFtaWMgQWNjZXNzIE1vbml0b3JpbmcpIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIGFuZCBidWlsdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggc291cmNlIGZpbGVzIGFyZSBpbmNsdWRlZCBiYXNlZCBvbiB2YXJpb3VzIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZGVidWdnaW5nLCBjdXN0b21pemF0aW9uLCBhbmQgZW5zdXJpbmcgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBsaW5rZWQgaW4gdGhlIGZpbmFsIGtlcm5lbCBpbWFnZSwgZXNwZWNpYWxseSBpZiBJJiMzOTttIHRhcmdldGluZyBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIG9yIHVzZSBjYXNlLiBJJiMzOTttIGhvcGluZyB0aGlzIGBNYWtlZmlsZWAgd2lsbCBxdWlja2x5IHJldmVhbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBidWlsZCBmbGFncyBpbnZvbHZlZCwgZ2l2aW5nIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBEQU1PTiYjMzk7cyBhcmNoaXRlY3R1cmUgYXQgYSBidWlsZCBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDY3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIEZ1enppbmcgUmVhY2hhYmlsaXR5IGFuZCBGb2N1cyBTeW1ib2wgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICphY3R1YWxseSogcmVhY2ggREFNT04gdGhyb3VnaCBmdXp6aW5nPyBUaGUgYW5zd2VyIGxvb2tzIHByb21pc2luZy4gREFNT04mIzM5O3Mgc3lzZnMgaW50ZXJmYWNlIGlzIGV4cG9zZWQgYXQgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2Agd2hlbiBgQ09ORklHX0RBTU9OX1NZU0ZTPXlgLCBhbmQgdGhhdCYjMzk7cyBlYXNpbHkgYWNjZXNzaWJsZSBldmVuIGluIGEgUUVNVS1iYXNlZCBzZXR1cC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBEQU1PUyBmaWx0ZXIgbG9naWMsIGluY2x1ZGluZyBwYXJzaW5nIHdpdGhpbiBzeXNmcywgY29yZSBtYXRjaGluZyBsb2dpYywgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpYCBhbmQgaXRzIGNhbGwgc2l0ZXMuIEdpdmVuIHRoYXQgREFNT04gaXMgcGFydCBvZiB0aGUgTU0gc3Vic3lzdGVtLCBhbmQgd2UmIzM5O3JlIGludGVyYWN0aW5nIHdpdGggc3lzZnMsIGl0JiMzOTtzIGRlZmluaXRlbHkgd2l0aGluIHJlYWNoIGZvciBmdXp6aW5nLiBUaGUgc3Vic3lzdGVtIGlzIE1NL0RBTU9OIGFuZCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7ID0gdHJ1ZS4KCk5vdywgd2hpY2ggc3ltYm9scyBzaG91bGQgd2UgdGFyZ2V0PyBMZXQmIzM5O3MgaWRlbnRpZnkgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zLiBJbiBgbW0vZGFtb24vY29yZS5jYCwgd2UmIzM5O3ZlIGdvdDogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfZm9yX29wc2AsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AsIGBkYW1vc19maWx0ZXJfbWF0Y2hgICh3aGljaCBpcyBzdGF0aWMsIHNvIHdlIG5lZWQgdG8gY2hlY2sgY2FsbGVycyB0byB1bmRlcnN0YW5kIGl0cyBicm9hZGVyIHJlYWNoKSwgYW5kIGBkYW1vbl9tZXJnZV9zY29yZWAuICBPdmVyIGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIHJlc3BlY3RpdmVseSwgYXJlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMsIG9yLCBhdCBsZWFzdCwgdGhlaXIgY2FsbGVycy4gRmluYWxseSwgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHdlJiMzOTt2ZSBnb3QgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AsIGBtaW5fc3RvcmVgLCBgbWluX3Nob3dgLCBgbWF4X3N0b3JlYCwgYW5kIGBtYXhfc2hvd2AuCgpJIHNob3VsZCBwcm9iYWJseSBkaXZlIGRlZXBlciBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDI1MDAtMjYwMCwgdG8gdW5kZXJzdGFuZCBob3cgYGRhbW9zX2ZpbHRlcl9tYXRjaGAgaXMgY2FsbGVkLiBUaGF0JiMzOTtsbCBoZWxwIGNsYXJpZnkgaXRzIHJvbGUgYW5kIHByaW9yaXRpemUgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgYXJlIG1vc3QgbGlrZWx5IHRvIHByb3ZpZGUgZ29vZCBjb3ZlcmFnZSB0aHJvdWdoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1MDU6XHRcdGlmIChzel9hcHBsaWVkKVxuMjUwNjpcdFx0XHRzLVx1MDAzZXN0YXQubnJfYXBwbGllZCYjNDM7JiM0Mzs7XG4yNTA3Olx0XHRzLVx1MDAzZXN0YXQuc3pfYXBwbGllZCAmIzQzOz0gc3pfYXBwbGllZDtcbjI1MDg6XHRcdHMtXHUwMDNlc3RhdC5zel9vcHNfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gc3pfb3BzX2ZpbHRlcl9wYXNzZWQ7XG4yNTA5Olx0fVxuMjUxMDpcdFxuMjUxMTpcdHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNTEyOlx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcbjI1MTM6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjUxNDpcdHtcbjI1MTU6XHRcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuMjUxNjpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGk7XG4yNTE3Olx0XHRpbnQgdGFyZ2V0X2lkeCA9IDA7XG4yNTE4Olx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHdzdW07XG4yNTE5Olx0XG4yNTIwOlx0XHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4yNTIxOlx0XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbjI1MjI6XHRcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHRpLCBjdHgpIHtcbjI1MjM6XHRcdFx0XHRpZiAodGkgPT0gdClcbjI1MjQ6XHRcdFx0XHRcdGJyZWFrO1xuMjUyNTpcdFx0XHRcdHRhcmdldF9pZHgmIzQzOyYjNDM7O1xuMjUyNjpcdFx0XHR9XG4yNTI3Olx0XHRcdG1hdGNoZWQgPSB0YXJnZXRfaWR4ID09IGZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuMjUyODpcdFx0XHRicmVhaztcbjI1Mjk6XHRcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcbjI1MzA6XHRcdFx0c3RhcnQgPSBBTElHTl9ET1dOKGZpbHRlci1cdTAwM2VhZGRyX3JhbmdlLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTtcbjI1MzE6XHRcdFx0ZW5kID0gQUxJR05fRE9XTihmaWx0ZXItXHUwMDNlYWRkcl9yYW5nZS5lbmQsIG1pbl9yZWdpb25fc3opO1xuMjUzMjpcdFxuMjUzMzpcdFx0XHQvKiBpbnNpZGUgdGhlIHJhbmdlICovXG4yNTM0Olx0XHRcdGlmIChzdGFydCBcdTAwM2M9IHItXHUwMDNlYXIuc3RhcnQgXHUwMDI2XHUwMDI2IHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gZW5kKSB7XG4yNTM1Olx0XHRcdFx0bWF0Y2hlZCA9IHRydWU7XG4yNTM2Olx0XHRcdFx0YnJlYWs7XG4yNTM3Olx0XHRcdH1cbjI1Mzg6XHRcdFx0Lyogb3V0c2lkZSBvZiB0aGUgcmFuZ2UgKi9cbjI1Mzk6XHRcdFx0aWYgKHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gc3RhcnQgfHwgZW5kIFx1MDAzYz0gci1cdTAwM2Vhci5zdGFydCkge1xuMjU0MDpcdFx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbjI1NDE6XHRcdFx0XHRicmVhaztcbjI1NDI6XHRcdFx0fVxuMjU0MzpcdFx0XHQvKiBzdGFydCBiZWZvcmUgdGhlIHJhbmdlIGFuZCBvdmVybGFwICovXG4yNTQ0Olx0XHRcdGlmIChyLVx1MDAzZWFyLnN0YXJ0IFx1MDAzYyBzdGFydCkge1xuMjU0NTpcdFx0XHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzdGFydCAtIHItXHUwMDNlYXIuc3RhcnQpO1xuMjU0NjpcdFx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbjI1NDc6XHRcdFx0XHRicmVhaztcbjI1NDg6XHRcdFx0fVxuMjU0OTpcdFx0XHQvKiBzdGFydCBpbnNpZGUgdGhlIHJhbmdlICovXG4yNTUwOlx0XHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLVx1MDAzZWFyLnN0YXJ0KTtcbjI1NTE6XHRcdFx0bWF0Y2hlZCA9IHRydWU7XG4yNTUyOlx0XHRcdGJyZWFrO1xuMjU1MzpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4yNTU0Olx0XHRcdHdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7XG4yNTU1Olx0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzYz0gd3N1bSBcdTAwMjZcdTAwMjZcbjI1NTY6XHRcdFx0XHR3c3VtIFx1MDAzYz0gZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbjI1NTc6XHRcdFx0YnJlYWs7XG4yNTU4Olx0XHRkZWZhdWx0OlxuMjU1OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yNTYwOlx0XHR9XG4yNTYxOlx0XG4yNTYyOlx0XHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4yNTYzOlx0fVxuMjU2NDpcdFxuMjU2NTpcdHN0YXRpYyBib29sIGRhbW9zX2NvcmVfZmlsdGVyX291dChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNTY2Olx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcbjI1Njc6XHR7XG4yNTY4Olx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG4yNTY5Olx0XG4yNTcwOlx0XHRzLVx1MDAzZWNvcmVfZmlsdGVyc19hbGxvd2VkID0gZmFsc2U7XG4yNTcxOlx0XHRkYW1vc19mb3JfZWFjaF9jb3JlX2ZpbHRlcihmaWx0ZXIsIHMpIHtcbjI1NzI6XHRcdFx0aWYgKGRhbW9zX2ZpbHRlcl9tYXRjaChjdHgsIHQsIHIsIGZpbHRlciwgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4yNTczOlx0XHRcdFx0aWYgKGZpbHRlci1cdTAwM2VhbGxvdylcbjI1NzQ6XHRcdFx0XHRcdHMtXHUwMDNlY29yZV9maWx0ZXJzX2FsbG93ZWQgPSB0cnVlO1xuMjU3NTpcdFx0XHRcdHJldHVybiAhZmlsdGVyLVx1MDAzZWFsbG93O1xuMjU3NjpcdFx0XHR9XG4yNTc3Olx0XHR9XG4yNTc4Olx0XHRyZXR1cm4gcy1cdTAwM2Vjb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7XG4yNTc5Olx0fVxuMjU4MDpcdFxuMjU4MTpcdC8qXG4yNTgyOlx0ICogZGFtb3Nfd2Fsa19jYWxsX3dhbGsoKSAtIENhbGwgXHUwMDI2ZGFtb3Nfd2Fsa19jb250cm9sLVx1MDAzZXdhbGtfZm4uXG4yNTgzOlx0ICogQGN0eDpcdFRoZSBjb250ZXh0IG9mIFx1MDAyNmRhbW9uX2N0eC1cdTAwM2V3YWxrX2NvbnRyb2wuXG4yNTg0Olx0ICogQHQ6XHRcdFRoZSBtb25pdG9yaW5nIHRhcmdldCBvZiBAciB0aGF0IEBzIHdpbGwgYmUgYXBwbGllZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIERhbW9zIEZpbHRlcmluZyBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmaWx0ZXJpbmcgd29ya3Mgd2l0aGluIHRoZSBgZGFtb3NgIGZyYW1ld29yay4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgZGF0YSBpcyBiZWluZyBmaWx0ZXJlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gYGRhbW9zX2FwcGx5X3NjaGVtZWAgYmVjYXVzZSB0aGF0IGxvb2tzIGxpa2UgYSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGFwcGx5aW5nIHRoZSBmaWx0ZXJpbmcgcnVsZXMuIEFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBkYW1vc19jb3JlX2ZpbHRlcl9vdXRgIG9yIGBkYW1vc19maWx0ZXJfbWF0Y2hgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZSBhY3R1YWwgZmlsdGVyaW5nIGRlY2lzaW9ucy4gVHJhY2luZyB0aG9zZSBjYWxscyBhbmQgd2hlcmUgdGhleSYjMzk7cmUgdXNlZCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIHRoZSBvdmVyYWxsIGZpbHRlcmluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29yZV9maWx0ZXJfb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI1MTE9c3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjU2NC1cbm1tL2RhbW9uL2NvcmUuYzoyNTY1OnN0YXRpYyBib29sIGRhbW9zX2NvcmVfZmlsdGVyX291dChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjU2Ni1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjk5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzQ1LVx0XHR9XG5tbS9kYW1vbi9jb3JlLmM6Mjc0NjpcdFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcbm1tL2RhbW9uL2NvcmUuYy0yNzQ3LVx0XHRcdHJldHVybjtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzQ5LVx0XHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MzM1MDpcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxubW0vZGFtb24vY29yZS5jLTMzNTEtXHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLiBJIHNlZSBhIHByZXR0eSBjb25jZW50cmF0ZWQgYXJlYSBvZiBtb2RpZmljYXRpb24sIHByaW1hcmlseSBpbiB0aGUgREFNT04gY29yZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggc3lzZnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQ6CgoqICAgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfZm9yX29wc2AsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AsIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBhbmQgYGRhbW9uX21lcmdlX3Njb3JlYCwgYWxsIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBoZWFydCBvZiB0aGUgREFNT04gb3BlcmF0aW9uLgoqICAgYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AgYW5kIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgIGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgIHJlc3BlY3RpdmVseS4gSSYjMzk7bSBndWVzc2luZyB0aGVzZSBoYW5kbGUgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBwcm9iZXMgdG8gcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzc2VzLgoqICAgYG1pbl9zaG93YCwgYG1pbl9zdG9yZWAsIGBtYXhfc2hvd2AsIGBtYXhfc3RvcmVgIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gU3lzZnMgaXMgaG93IHdlIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCwgc28gdGhlc2UgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgdXNlciBjb250cm9scyB0aGUgREFNT04gZnVuY3Rpb25hbGl0eS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBkYW1vc19maWx0ZXJfZm9yX29wc2AgZnVuY3Rpb24gaW4gYGNvcmUuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBmaWx0ZXJpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbXBhY3Qgd2hhdCBvcGVyYXRpb25zIHRoZSBmaWx0ZXIgaXMgY29uc2lkZXJpbmcgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2ZpbHRlcl9mb3Jfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTYzND1zdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjQ5LS8qKlxubW0vZGFtb24vY29yZS5jOjY1MDogKiBkYW1vc19maWx0ZXJfZm9yX29wcygpIC0gUmV0dXJuIGlmIHRoZSBmaWx0ZXIgaXMgb3BzLWhhbmRsZWQgb25lLlxubW0vZGFtb24vY29yZS5jLTY1MS0gKiBAdHlwZTpcdHR5cGUgb2YgdGhlIGZpbHRlci5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjU1LSAqL1xubW0vZGFtb24vY29yZS5jOjY1Njpib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSlcbm1tL2RhbW9uL2NvcmUuYy02NTcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz02Njk9dm9pZCBkYW1vc19hZGRfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy02NzAte1xubW0vZGFtb24vY29yZS5jOjY3MTpcdGlmIChkYW1vc19maWx0ZXJfZm9yX29wcyhmLVx1MDAzZXR5cGUpKVxubW0vZGFtb24vY29yZS5jLTY3Mi1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZmLVx1MDAzZWxpc3QsIFx1MDAyNnMtXHUwMDNlb3BzX2ZpbHRlcnMpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02MTU9c3RhdGljIGJvb2wgZGFtb3Nfc3lzZnNfc2NoZW1lX2ZpbHRlcl92YWxpZF90eXBlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MjItXHRjYXNlIERBTU9TX1NZU0ZTX0ZJTFRFUl9IQU5ETEVfTEFZRVJfQ09SRTpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MjM6XHRcdHJldHVybiAhZGFtb3NfZmlsdGVyX2Zvcl9vcHModHlwZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjI0LVx0Y2FzZSBEQU1PU19TWVNGU19GSUxURVJfSEFORExFX0xBWUVSX09QUzpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MjU6XHRcdHJldHVybiBkYW1vc19maWx0ZXJfZm9yX29wcyh0eXBlKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MjYtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk0OQoJCQkJCQkJb3V0cHV0OiAyMzYKCQkJCQkJCXRob3VnaHRzOiA3NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUHJvYmUgSGl0cyBXZWlnaHRlZCBTdW0gRmlsdGVyIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QuIEkmIzM5O3ZlIGdvdCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fUEFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9WQUREUmAuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZXNlIGFnYWluc3QgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlIGl0c2VsZiB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIExvb2tzIGxpa2UgdGhvc2UgYXJlIGFsbCB0aGVyZSwgYW5kIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAgY29ycmVjdGx5IGRlcGVuZCBvbiBgREFNT04gJmFtcDsmYW1wOyBNTVVgLCBhbmQgYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTiAmYW1wOyZhbXA7IFNZU0ZTYC4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hpY2ggZmlsZXMgYXJlIGFjdHVhbGx5ICp0b3VjaGVkKiBieSB0aGlzIHBhdGNoLiBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIEtjb25maWcgZGVwZW5kZW5jeSBjaGVja3MsIGFzIHRoZXNlIGFyZSBidWlsdCB3aXRoIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fVkFERFJgLCByZXNwZWN0aXZlbHkuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5LCBub24tdWJpcXVpdG91cyBzeW1ib2xzIGltcGFjdGVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRob3NlIHNwZWNpZmljIHRvIHRoaXMgZmVhdHVyZTogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBgZGFtb3NfZmlsdGVyX2Zvcl9vcHNgLCBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCwgYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AsIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX21lcmdlX3Njb3JlYC4gSSYjMzk7bSBjb25maWRlbnQgdGhvc2Ugc3ltYm9scyBzaG91bGQgYmUgc3BlY2lmaWMgdG8gREFNT04gYW5kIG5vdCBnZW5lcmljIE1NIGZ1bmN0aW9ucywgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGV5IGV4aXN0IGFuZCBhcmUgbm9uLXViaXF1aXRvdXMuIFRoZXkgYXJlLCBhbmQgdGhleSBhcmUuCgpOb3csIGxldCYjMzk7cyBhc3NlbWJsZSB0aGUgcmF0aW9uYWxlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgKCYjMzQ7cHJvYmVfaGl0c193c3VtJiMzNDspIGZpbHRlciB0byBEQU1PTi9EQU1PUyBzY2hlbWVzLiBUaGlzIGFsbG93cyBmaWx0ZXJpbmcgbWVtb3J5IHJlZ2lvbnMgYmFzZWQgb24gdGhlaXIgcHJvYmUgaGl0IHdlaWdodGVkIHN1bSByYW5nZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG91Y2ggREFNT04mIzM5O3MgY29yZSBmaWx0ZXJpbmcgbG9naWMgKGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBgZGFtb3NfZmlsdGVyX2Zvcl9vcHNgLCBhbmQgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWApLCB0aGUgc3lzZnMgc2NoZW1lIGZpbHRlciBpbmdlc3Rpb24gdmlhIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnNgLCBhbmQgc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIGZvciBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLiBUaGVzZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgbWFraW5nIHRoZW0gdmFsaWQgdGFyZ2V0cy4gU28gdGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXJlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fVkFERFJgLgoKU2VlbXMgbGlrZSBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9wcm9iZV9oaXRzX3dzdW0mIzM0OywKICAgICYjMzQ7ZGFtb3NfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9mb3Jfb3BzJiMzNDssCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9maWx0ZXJfYXJnJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9wYV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX21lcmdlX3Njb3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSAvICYjMzk7cHJvYmVfaGl0c193c3VtJiMzOTspIGluIERBTU9OLCB1cGRhdGluZyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMsIHN5c2ZzIGNvbmZpZ3VyYXRpb24gaGFuZGxpbmcsIGFuZCBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBjYWxjdWxhdGlvbnMgYWNyb3NzIERBTU9OIGNvcmUsIHBhZGRyLCBhbmQgdmFkZHIgb3BlcmF0aW9ucy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19maWx0ZXJfZm9yX29wcyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9zY29yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gLyAmIzM5O3Byb2JlX2hpdHNfd3N1bSYjMzk7KSBpbiBEQU1PTiwgdXBkYXRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBzeXNmcyBjb25maWd1cmF0aW9uIGhhbmRsaW5nLCBhbmQgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb25zIGFjcm9zcyBEQU1PTiBjb3JlLCBwYWRkciwgYW5kIHZhZGRyIG9wZXJhdGlvbnMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgZmlsdGVyIHR5cGUgZm9yIERBTU9OIHNjaGVtZXMsIGV4dGVuZGluZyBzeXNmcyBhdHRyaWJ1dGVzIChgbWluYCBhbmQgYG1heGApIGFuZCBjb3JlIGZpbHRlciBtYXRjaGluZyB0byB1c2UgdGhlIHByb2JlIGhpdHMgd2VpZ2h0ZWQgbW92aW5nIHN1bS4gXG5cbi0gTWVtb3J5IEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBTeXNmcyBzY2hlbWUgZmlsdGVyIHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBlbnN1cmluZyBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEluIERBTU9OIGNvcmUsIGZpbHRlciBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdXBvbiBjcmVhdGlvbiBhbmQgZmlsdGVyIGFyZ3VtZW50cyBjb21taXQuXG4tIFVzZXItc3BhY2UgRGF0YSBUcmFuc2ZlcjogU3lzZnMgb3V0cHV0IHVzZXMgZm9ybWF0dGVkIHN0cmluZyBlbWlzc2lvbnMgdmlhIGBzeXNmc19lbWl0KClgLCB3aXRoIG5vIHJhdyBzdHJ1Y3QgY29waWVzIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuXG4tIFZhcmlhYmxlcyBhbmQgQnJhbmNoaW5nOiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gYW5kIGZpbHRlciBtYXRjaGluZyAoYHN1bWAsIGBpYCwgYHdzdW1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIG9yIGxvZ2ljIGlzc3VlcyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgbWVjaGFuaXNtcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjOTAwMWJkOTlmOWY3NjZiOTZkYWRmNWU3OTNkZTEwYWY3NjBkYjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxNToyMjozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKQEAgLTU1MSw2ICYjNDM7NTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlCiBmaWx0ZXIuICBSZWZlciB0byA6cmVmOmB0aGUgZGVzaWduIGRvYyAmbHQ7ZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnMmZ3Q7YCBmb3IKIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLgogCiYjNDM7Rm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlCiYjNDM7aGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcywKJiM0MztyZXNwZWN0aXZlbHkuCiYjNDM7CiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnkKIHdyaXRpbmcgdGhlIHBhdGggb2YgdGhlIG1lbW9yeSBjZ3JvdXAgZnJvbSB0aGUgY2dyb3VwcyBtb3VudCBwb2ludCB0bwogYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdAppbmRleCBhYWM4NGRlMjYxYWE4Li44ZTk4MGRkZTM2MmRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CkBAIC04MjIsNiAmIzQzOzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIGFkZHJlc3MgcmFuZ2UuCiAgICAgLSB0YXJnZXQKICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuCiYjNDM7ICAgIC0gcHJvYmVfaGl0c193c3VtCiYjNDM7ICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlCiYjNDM7ICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtICZsdDtkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nJmd0O2AgdmFsdWUuCiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LgogICAgIC0gYW5vbgogICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBjb250YWluaW5nIGRhdGEgdGhhdCBub3Qgc3RvcmVkIGluIGZpbGVzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDg3MWQyNmFkZjZhZTUuLjRhMzZmMzQ0YmJjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTM5OSwxNCAmIzQzOzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7CiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6CVVubWFwcGVkIHBhZ2VzLgogICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CUFkZHJlc3MgcmFuZ2UuCiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOglEYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC4KJiM0MzsgKiBAREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOglwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS4KICAqIEBOUl9EQU1PU19GSUxURVJfVFlQRVM6CU51bWJlciBvZiBmaWx0ZXIgdHlwZXMuCiAgKgotICogQWxsIHR5cGVzIGV4Y2VwdCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kICZhbXA7REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUCi0gKiBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWUKLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LAotICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkCi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZAotICogYXMgJiMzOTt0cmllZCYjMzk7LgomIzQzOyAqIEFsbCB0eXBlcyBleGNlcHQgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSLCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmQKJiM0MzsgKiAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdAomIzQzOyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZAomIzQzOyAqIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kCiYjNDM7ICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmUKJiM0MzsgKiB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4KICAqCiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZwogICogJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4KQEAgLTQyMCw2ICYjNDM7NDIxLDcgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7CiAJREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsCiAJREFNT1NfRklMVEVSX1RZUEVfQUREUiwKIAlEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsCiYjNDM7CURBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSwKIAlOUl9EQU1PU19GSUxURVJfVFlQRVMsCiB9OwogCkBAIC00MzQsNiAmIzQzOzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgewogICoJCSZhbXA7ZGFtb25fY3R4LSZndDthZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzCiAgKgkJREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULgogICogQHN6X3JhbmdlOglTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuCiYjNDM7ICogQHJhbmdlX21pbjoJTWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiYjNDM7ICogQHJhbmdlX21heDoJTWF4aW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiAgKgogICogQmVmb3JlIGFwcGx5aW5nIHRoZSAmYW1wO2RhbW9zLSZndDthY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaAogICogYnl0ZSBvZiB0aGUgcmVnaW9uIG1hdGNoZXMgdG8gdGhpcyBnaXZlbiBjb25kaXRpb24gYW5kIGF2b2lkIGFwcGx5aW5nIHRoZQpAQCAtNDUwLDYgJiM0Mzs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7CiAJCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7CiAJCWludCB0YXJnZXRfaWR4OwogCQlzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9taW47CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7CiYjNDM7CQl9OwogCX07CiAvKiBwcml2YXRlOiAqLwogCS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCkBAIC0xMDY1LDcgJiM0MzsxMDczLDcgQEAgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCk7CiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KTsKLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAomIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogCiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcywKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC00NjksMTEgJiM0Mzs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKICAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi4KICAqIEByOgkJcmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLgogICogQGxhc3Q6CWlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuCiYjNDM7ICogQG12OgkJdXNlIG1vdmluZyBzdW0uCiAgKiBAY3R4Ogljb250ZXh0IG9mICZhbXA7ci4KICAqCiAgKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLgogICovCi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKJiM0Mzt1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdiwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewogCXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CkBAIC00ODMsNiAmIzQzOzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAogCWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHsKIAkJaWYgKGxhc3QpCiAJCQlzdW0gJiM0Mzs9IHItJmd0O2xhc3RfcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS0mZ3Q7d2VpZ2h0OwomIzQzOwkJZWxzZSBpZiAobXYpCiYjNDM7CQkJc3VtICYjNDM7PSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkmIzQzOyYjNDM7LCByLCBjdHgpICoKJiM0MzsJCQkJcHJvYmUtJmd0O3dlaWdodDsKIAkJZWxzZQogCQkJc3VtICYjNDM7PSByLSZndDtwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLSZndDt3ZWlnaHQ7CiAJfQpAQCAtNjU0LDYgJiM0Mzs2NTgsNyBAQCBib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSkKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CiAJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6CiYjNDM7CWNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOgogCQlyZXR1cm4gZmFsc2U7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMzI4LDYgJiM0MzsxMzMzLDEwIEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKAogCWNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRToKIAkJZHN0LSZndDtzel9yYW5nZSA9IHNyYy0mZ3Q7c3pfcmFuZ2U7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCWRzdC0mZ3Q7cmFuZ2VfbWluID0gc3JjLSZndDtyYW5nZV9taW47CiYjNDM7CQlkc3QtJmd0O3JhbmdlX21heCA9IHNyYy0mZ3Q7cmFuZ2VfbWF4OwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMjUwNiw3ICYjNDM7MjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiAJc3RydWN0IGRhbW9uX3RhcmdldCAqdGk7CiAJaW50IHRhcmdldF9pZHggPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtOwogCiAJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDoKQEAgLTI1NDEsNiAmIzQzOzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItJmd0O2FyLnN0YXJ0KTsKIAkJbWF0Y2hlZCA9IHRydWU7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCXdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7CiYjNDM7CQltYXRjaGVkID0gZmlsdGVyLSZndDtyYW5nZV9taW4gJmx0Oz0gd3N1bSAmYW1wOyZhbXA7CiYjNDM7CQkJd3N1bSAmbHQ7PSBmaWx0ZXItJmd0O3JhbmdlX21heDsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0zNDQ5LDcgJiM0MzszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cykKIHsKIAlpZiAodXNlX3Byb2JlX2hpdHMpCi0JCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTsKJiM0MzsJCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7CiAJaWYgKGxhc3QpCiAJCXJldHVybiByLSZndDtsYXN0X25yX2FjY2Vzc2VzOwogCXJldHVybiByLSZndDtucl9hY2Nlc3NlczsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jCmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiAJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAotCQkJCQkJCWN0eCksIG1heF93c3VtKTsKJiM0MzsJCQkJCQkJZmFsc2UsIGN0eCksIG1heF93c3VtKTsKIAkJfQogCX0KIAlyZXR1cm4gbWF4X3dzdW07CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKaW5kZXggZDliODFkN2I1OTEwZS4uZDlkZDRlZTA0NDJjNyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwpAQCAtNTM0LDcgJiM0Mzs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7CiAJYm9vbCBhbGxvdzsKIAljaGFyICptZW1jZ19wYXRoOwogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7Ci0Jc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluOwomIzQzOwl1bnNpZ25lZCBsb25nIHJhbmdlX21heDsKIAlpbnQgdGFyZ2V0X2lkeDsKIH07CiAKQEAgLTU4OCw2ICYjNDM7NTg5LDEwIEBAIGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7CiAJCS50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULAogCQkubmFtZSA9ICYjMzQ7dGFyZ2V0JiMzNDssCiAJfSwKJiM0MzsJewomIzQzOwkJLnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sCiYjNDM7CQkubmFtZSA9ICYjMzQ7cHJvYmVfaGl0c193c3VtJiMzNDssCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC03NzgsNyAmIzQzOzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbik7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21pbik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTc4Niw3ICYjNDM7NzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWluKTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21pbik7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC03OTcsNyAmIzQzOzgwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1heCk7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21heCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTgwNSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21heCk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC0yODM1LDEyICYjNDM7Mjg0MCwyMSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwKIAkJfSBlbHNlIGlmIChmaWx0ZXItJmd0O3R5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7CiAJCQlmaWx0ZXItJmd0O3RhcmdldF9pZHggPSBzeXNmc19maWx0ZXItJmd0O3RhcmdldF9pZHg7CiAJCX0gZWxzZSBpZiAoZmlsdGVyLSZndDt0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHsKLQkJCWlmIChzeXNmc19maWx0ZXItJmd0O3N6X3JhbmdlLm1pbiAmZ3Q7Ci0JCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KSB7CiYjNDM7CQkJaWYgKHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluICZndDsKJiM0MzsJCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4KSB7CiYjNDM7CQkJCWRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCQlmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbiA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluOwomIzQzOwkJCWZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXg7CiYjNDM7CQl9IGVsc2UgaWYgKGZpbHRlci0mZ3Q7dHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHsKJiM0MzsJCQlpZiAoc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9taW4gJmd0OwomIzQzOwkJCQkJc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXgpIHsKIAkJCQlkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJZmlsdGVyLSZndDtzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2U7CiYjNDM7CQkJZmlsdGVyLSZndDtyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItJmd0O3JhbmdlX21pbjsKJiM0MzsJCQlmaWx0ZXItJmd0O3JhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4OwogCQl9CiAKIAkJZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCA5YTM4ZGM4OWExNTZlLi40YWVjZjM0ZTM5YmUyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTcwNCw3ICYjNDM7NzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCQkJX19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7CiAJCQlpZiAocmV0dXJuX21heF93c3VtKQogCQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKLQkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiYjNDM7CQkJCQkJCWZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7CiAJCX0KIAkJaWYgKG1tKQogCQkJbW1wdXQobW0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIGluIGEgREFNT04gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgaW4gYGluY2x1ZGUvbGludXgvZGFtb24uaGAuIFRoYXQmIzM5O3MgYSBuZXcgZmlsdGVyIHR5cGUuIE1vcmUgaW1wb3J0YW50bHksIHRoZSBgc3RydWN0IGRhbW9zX2ZpbHRlcmAgdW5pb24gaXMgbW9kaWZpZWQuIEkgc2VlIGEgYGNoYXIgKm1lbWNnX3BhdGhgLCBgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VgLCBgaW50IHRhcmdldF9pZHhgLCBhbmQgdGhlbiBgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2VgLiBCdXQgd2FpdC4uLnRoYXQgdW5pb24gaGFzIGJlZW4gbW9kaWZpZWQsIGl0IHNlZW1zIHRoYXQgYHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlYCBpcyBubyBsb25nZXIgdGhlcmUgYW5kIGluc3RlYWQgd2UgaGF2ZSBgdW5zaWduZWQgbG9uZyByYW5nZV9taW47IHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O2AuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZWAgZGVmaW5pdGlvbiwgc28gSSYjMzk7bGwgZ3JlcCBmb3IgaXQgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZy4KCk5leHQsIGxvb2tpbmcgYXQgYG1tL2RhbW9uL2NvcmUuY2AsIEkgc2VlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIHdpdGggYSBuZXcgYG12YCBwYXJhbWV0ZXIuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGhhbmRsaW5nIGl0IGNvcnJlY3RseSBpbiBpdHMgdGhyZWUgZGlzdGluY3QgYnJhbmNoZXMgb2YgYGRhbW9uX2Zvcl9lYWNoX3Byb2JlYC4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gSSBzZWUgYSBuZXcgZW50cnkgaW4gYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzYCBmb3IgdGhlIG5ldyBgUFJPQkVfSElUU19XU1VNYCBjYXNlIHdoaWNoIHJldHVybnMgYGZhbHNlYC4gVGhlbiB0aGVyZSYjMzk7cyBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgIHRoYXQgYXBwZWFycyB0byBoYW5kbGUgdGhlIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCBhc3NpZ25tZW50cyB3aGljaCBpcyBjb3JyZWN0IGdpdmVuIHRoZSBuZXcgc3RydWN0LiBJbiBgZGFtb3NfZmlsdGVyX21hdGNoYCwgdGhlIGxvZ2ljIGZvciB0aGUgbmV3IGZpbHRlciB0eXBlIHNlZW1zIHNvdW5kLiBJdCYjMzk7cyBjYWxsaW5nIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gICh3aGljaCBzaG91bGQgbm93IGJlIGNvcnJlY3RseSBpbXBsZW1lbnRlZCBnaXZlbiB0aGUgY2hhbmdlKSwgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIHJhbmdlLiBUaGUgY2FsbGVycyBvZiBgZGFtb25fcHJvYmVfaGl0c193c3VtYCBoYXZlIGFsc28gYmVlbiB1cGRhdGVkLCB3aGljaCBpcyBnb29kLgoKRmluYWxseSwgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHRoZSByZW1vdmFsIG9mIGBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZWAgYW5kIHRoZSBkaXJlY3QgaW5jbHVzaW9uIG9mIGB1bnNpZ25lZCBsb25nIHJhbmdlX21pbjsgdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7YCBpbiBgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGNvbmZpcm1zIG15IGluaXRpYWwgb2JzZXJ2YXRpb24uIFRoZSBzdWJzZXF1ZW50IHVwZGF0ZXMgdG8gdGhlIHN5c2ZzIHNob3cvc3RvcmUgZnVuY3Rpb25zIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCBzZWVtIGxvZ2ljYWwgZ2l2ZW4gdGhpcyBjaGFuZ2UuCgpOb3csIHRvIGJlIHJlYWxseSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGJyb2FkZXIgY29udGV4dC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFyb3VuZCB0aGUgREFNT04gc3lzZnMsIGhvdyB0aGUgZmlsdGVycyBhcmUgY3JlYXRlZCwgYW5kIHBhcnRpY3VsYXJseSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHBsYWNlIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBzbmVhayBpbi4gSSBuZWVkIHRvIGxlYXZlIG5vIHN0b25lIHVudHVybmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9uZXdfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJlcChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzAtXG5tbS9kYW1vbi9jb3JlLmM6MTcxOnN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxubW0vZGFtb24vY29yZS5jLTE3Mi1cdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgxNT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODMyLVxubW0vZGFtb24vY29yZS5jOjE4MzM6XHRcdG5ld19maWx0ZXIgPSBkYW1vbl9uZXdfZmlsdGVyKHNyY19maWx0ZXItXHUwMDNldHlwZSxcbm1tL2RhbW9uL2NvcmUuYy0xODM0LVx0XHRcdFx0c3JjX2ZpbHRlci1cdTAwM2VtYXRjaGluZywgc3JjX2ZpbHRlci1cdTAwM2VhbGxvdyk7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMTk5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDgtXG5tbS9kYW1vbi9zeXNmcy5jOjIyMDk6XHRcdGZpbHRlciA9IGRhbW9uX25ld19maWx0ZXIoc3lzX2ZpbHRlci1cdTAwM2V0eXBlLFxubW0vZGFtb24vc3lzZnMuYy0yMjEwLVx0XHRcdFx0c3lzX2ZpbHRlci1cdTAwM2VtYXRjaGluZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkzMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIHRoZSBOZXcgRmlsdGVyJiMzOTtzIEludGVncmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBjaXJjbGUgYmFjayBhbmQgZ2l2ZSBgZGFtb3NfbmV3X2ZpbHRlcmAgYSB0aG9yb3VnaCBnb2luZy1vdmVyLiBJIGtub3cgd2UmIzM5O3ZlIHRlc3RlZCB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzLCBhbmQgdGhlIHByZWxpbWluYXJ5IHJlc3VsdHMgbG9va2VkIHByb21pc2luZy4gQnV0LCBiZWZvcmUgd2UgZnVsbHkgaW50ZWdyYXRlIHRoaXMgaW50byB0aGUgcGlwZWxpbmUsIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGludGVyYWN0aW9ucyBvciBlZGdlIGNhc2VzIHdoZW4gaXQmIzM5O3MgY29tYmluZWQgd2l0aCB0aGUgZXhpc3RpbmcgbG9naWMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHRvbyDigJMgZG9lcyBpdCBpbnRyb2R1Y2UgYW55IG5vdGljZWFibGUgYm90dGxlbmVja3Mgb3IgbWVtb3J5IGxlYWtzPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0cyBvdXRwdXQgaXMgY29uc2lzdGVudCBhbmQgcmVsaWFibGUgdW5kZXIgdmFyeWluZyBkYXRhIGxvYWRzIGFuZCBjb25kaXRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgZW5zdXJlIHRoaXMgZmlsdGVyIHBsYXlzIG5pY2VseSB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW07IHRoaXMgaXMgcGFydGljdWxhcmx5IGNydWNpYWwgbm93LCBjb25zaWRlcmluZyB0aGUgZGVhZGxpbmUuIE5vIGxvb3NlIGVuZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX25ld19maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NTQzPWludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy02MzMtXG5tbS9kYW1vbi9jb3JlLmM6NjM0OnN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX25ld19maWx0ZXIoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlLFxubW0vZGFtb24vY29yZS5jLTYzNS1cdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTM1ND1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9jb3JlX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzcwLVxubW0vZGFtb24vY29yZS5jOjEzNzE6XHRcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxubW0vZGFtb24vY29yZS5jLTEzNzItXHRcdFx0XHRzcmNfZmlsdGVyLVx1MDAzZXR5cGUsIHNyY19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vY29yZS5jPTEzODI9c3RhdGljIGludCBkYW1vc19jb21taXRfb3BzX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzk4LVxubW0vZGFtb24vY29yZS5jOjEzOTk6XHRcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxubW0vZGFtb24vY29yZS5jLTE0MDAtXHRcdFx0XHRzcmNfZmlsdGVyLVx1MDAzZXR5cGUsIHNyY19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNTctXHQvKiBkaXNhbGxvdyBwcmlvcml0aXppbmcgbm90LXlvdW5nIHBhZ2VzICovXG5tbS9kYW1vbi9scnVfc29ydC5jOjI1ODpcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfWU9VTkcsIGZhbHNlLCBmYWxzZSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTI1OS1cdGlmICghZmlsdGVyKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjYzLVx0LyogZGlzYWJsbG93IGRlLXByaW9yaXRpemluZyB5b3VuZyBwYWdlcyAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyNjQ6XHRmaWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HLCB0cnVlLCBmYWxzZSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTI2NS1cdGlmICghZmlsdGVyKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MjM5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI1Ni1cdGlmIChpbnN0YWxsX3lvdW5nX2ZpbHRlcikge1xubW0vZGFtb24vcGFkZHIuYzoyNTc6XHRcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoXG5tbS9kYW1vbi9wYWRkci5jLTI1OC1cdFx0XHRcdERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HLCB0cnVlLCBmYWxzZSk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNTEtXHRpZiAoc2tpcF9hbm9uKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjUyOlx0XHRmaWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX0FOT04sIHRydWUsIGZhbHNlKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNTMtXHRcdGlmICghZmlsdGVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODA5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE3LVx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MTg6XHRcdFx0ZGFtb3NfbmV3X2ZpbHRlcihzeXNmc19maWx0ZXItXHUwMDNldHlwZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE5LVx0XHRcdFx0XHRzeXNmc19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc5MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X25ld19maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03OTMtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Nzk0Olx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzk1LVx0aWYgKCFmaWx0ZXIpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1NzA9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU3NS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTc2Olx0ZiA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQUREUiwgdHJ1ZSwgZmFsc2UpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NzctXHRpZiAoIWYpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE2Nzk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2OTQtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTY5NTpcdHRhcmdldF9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCwgdHJ1ZSwgdHJ1ZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY5Ni1cdGlmICghdGFyZ2V0X2ZpbHRlcilcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyMS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzIyOlx0YW5vbl9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX0FOT04sIHRydWUsIHRydWUpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3MjMtXHRpZiAoIWFub25fZmlsdGVyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgYXBwcm9hY2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGBkYW1vc19uZXdfZmlsdGVyYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIHNob3VsZCBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZpbHRlciBpcyBiZWluZyBjcmVhdGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgbWFpbiBEQU1PTiBsb29wLCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgbW9kaWZ5aW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgZWRnZSBjYXNlcyBoZXJlLiBJJiMzOTtsbCBwcm9iYWJseSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIGZpbHRlciBjcmVhdGlvbiB0byBpdHMgdXNlIGluIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZy4KCkFuZCBuZXh0LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdGhlIHN5c2ZzIGlzIGFsbG9jYXRpbmcgc3BhY2UgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZSBmaWx0ZXJzIGFyZSBleHBvc2VkIHRocm91Z2ggc3lzZnMuIEkgd2FudCB0byBjaGVjayBmb3IgcmFjZSBjb25kaXRpb25zLiBQZXJoYXBzLCBJIHdpbGwgbmVlZCB0byB0aGluayBob3cgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggREFNT04gdmlhIHN5c2ZzLiBJIHdpbGwgbmVlZCB0byBsb29rIGZvciBhbGxvY2F0aW9uIHNpemUgbGltaXRzIGFuZCBob3cgdGhlc2UgbGltaXRzIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gZ2V0IGEgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gQW55IGluZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IG9yIHVuYm91bmRlZCBhbGxvY2F0aW9ucyBjb3VsZCBjYXVzZSBzZXJpb3VzIGlzc3Vlcywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHByb2JsZW1zIHRoZXJlLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhlc2Ugc3lzZnMgYXR0cmlidXRlcyB0aWUgaW50byB0aGUgYGRhbW9zX25ld19maWx0ZXJgIGZ1bmN0aW9uIGFuZCB0aGUgb3ZlcmFsbCBEQU1PTiBzY2hlbWUgbWFuYWdlbWVudC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBjb25jdXJyZW50IGFjY2VzcyBhbmQgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRoZXNlIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MzA6XHRcdH1cbiA2MzE6XHRcdHJldHVybiAwO1xuIDYzMjpcdH1cbiA2MzM6XHRcbiA2MzQ6XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcbiA2MzU6XHRcdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbiA2MzY6XHR7XG4gNjM3Olx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG4gNjM4Olx0XG4gNjM5Olx0XHRmaWx0ZXIgPSBrbWFsbG9jX29iaigqZmlsdGVyKTtcbiA2NDA6XHRcdGlmICghZmlsdGVyKVxuIDY0MTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA2NDI6XHRcdGZpbHRlci1cdTAwM2V0eXBlID0gdHlwZTtcbiA2NDM6XHRcdGZpbHRlci1cdTAwM2VtYXRjaGluZyA9IG1hdGNoaW5nO1xuIDY0NDpcdFx0ZmlsdGVyLVx1MDAzZWFsbG93ID0gYWxsb3c7XG4gNjQ1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmaWx0ZXItXHUwMDNlbGlzdCk7XG4gNjQ2Olx0XHRyZXR1cm4gZmlsdGVyO1xuIDY0NzpcdH1cbiA2NDg6XHRcbiA2NDk6XHQvKipcbiA2NTA6XHQgKiBkYW1vc19maWx0ZXJfZm9yX29wcygpIC0gUmV0dXJuIGlmIHRoZSBmaWx0ZXIgaXMgb3BzLWhhbmRsZWQgb25lLlxuIDY1MTpcdCAqIEB0eXBlOlx0dHlwZSBvZiB0aGUgZmlsdGVyLlxuIDY1MjpcdCAqXG4gNjUzOlx0ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBmaWx0ZXIgb2YgQHR5cGUgbmVlZHMgdG8gYmUgaGFuZGxlZCBieSBvcHMgbGF5ZXIsIGZhbHNlXG4gNjU0Olx0ICogb3RoZXJ3aXNlLlxuIDY1NTpcdCAqL1xuIDY1NjpcdGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuIDY1NzpcdHtcbiA2NTg6XHRcdHN3aXRjaCAodHlwZSkge1xuIDY1OTpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxuIDY2MDpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG4gNjYxOlx0XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbiA2NjI6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDY2MzpcdFx0ZGVmYXVsdDpcbiA2NjQ6XHRcdFx0YnJlYWs7XG4gNjY1Olx0XHR9XG4gNjY2Olx0XHRyZXR1cm4gdHJ1ZTtcbiA2Njc6XHR9XG4gNjY4Olx0XG4gNjY5Olx0dm9pZCBkYW1vc19hZGRfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBEQU1PTiYjMzk7cyBTeXNmcyBJbnRlcmZhY2UqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBmb2N1c2luZyBvbiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIGZyYW1ld29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHNvbGlkIG9uIGhvdyBpdCYjMzk7cyBpbnRlcmZhY2luZyB3aXRoIHRoZSBzeXN0ZW0gdGhyb3VnaCBgc3lzZnNgLiBXZSBuZWVkIHRvIHZlcmlmeSB0aGUgYWxsb2NhdGlvbiBhbmQgdXNlIG9mIHRoZSBgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcmAgc3RydWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoYXQmIzM5O3MgaGFuZGxlZCwgd2hpY2ggb2YgY291cnNlLCBsZWFkcyBtZSB0byB0aGUgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgZmlsZS4gVGltZSB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiBmaWx0ZXJpbmcgREFNT04mIzM5O3Mgb3BlcmF0aW9ucyBpcyBzb3VuZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyOT1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDI6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My1cdFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MzA9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19hZGRfZGlycyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTQ2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZmlsdGVyczsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5NDc6XHRcdGZpbHRlciA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTQ4LVx0XHRcdFx0ZmlsdGVycy1cdTAwM2VoYW5kbGVfbGF5ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkRpdmluZyBpbnRvIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jYCB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZXNvdXJjZXMgZm9yIG1hbmFnaW5nIERBTU9OJiMzOTtzIHN5c2ZzIHNjaGVtZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGZpbHRlcmluZy4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBwb2ludHMgb2YgY29udGVudGlvbiBoZXJlLCBjb25zaWRlcmluZyB0aGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBwcm9jZXNzZWQsIHBhcnNlZCwgYW5kIGFwcGxpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiB3b3Jrczogd2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQgKGlmIGFueSksIHdoYXQgdGhlIG1lbW9yeSBmb290cHJpbnQgaXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgaXMgZm91bmRhdGlvbmFsIGNvZGUgYW5kIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpdCBiYWNrd2FyZHMgYW5kIGZvcndhcmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0fTtcbiA1NDE6XHRcbiA1NDI6XHRzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXG4gNTQzOlx0XHRcdGVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciBsYXllcilcbiA1NDQ6XHR7XG4gNTQ1Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyO1xuIDU0NjpcdFxuIDU0NzpcdFx0ZmlsdGVyID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIpO1xuIDU0ODpcdFx0aWYgKGZpbHRlcilcbiA1NDk6XHRcdFx0ZmlsdGVyLVx1MDAzZWhhbmRsZV9sYXllciA9IGxheWVyO1xuIDU1MDpcdFx0cmV0dXJuIGZpbHRlcjtcbiA1NTE6XHR9XG4gNTUyOlx0XG4gNTUzOlx0c3RydWN0IGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWUge1xuIDU1NDpcdFx0ZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlO1xuIDU1NTpcdFx0Y2hhciAqbmFtZTtcbiA1NTY6XHR9O1xuIDU1NzpcdFxuIDU1ODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZVxuIDU1OTpcdGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XG4gNTYwOlx0XHR7XG4gNTYxOlx0XHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfQU5PTixcbiA1NjI6XHRcdFx0Lm5hbWUgPSBcJiMzNDthbm9uXCYjMzQ7LFxuIDU2MzpcdFx0fSxcbiA1NjQ6XHRcdHtcbiA1NjU6XHRcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9BQ1RJVkUsXG4gNTY2Olx0XHRcdC5uYW1lID0gXCYjMzQ7YWN0aXZlXCYjMzQ7LFxuIDU2NzpcdFx0fSxcbiA1Njg6XHRcdHtcbiA1Njk6XHRcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRyxcbiA1NzA6XHRcdFx0Lm5hbWUgPSBcJiMzNDttZW1jZ1wmIzM0OyxcbiA1NzE6XHRcdH0sXG4gNTcyOlx0XHR7XG4gNTczOlx0XHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfWU9VTkcsXG4gNTc0Olx0XHRcdC5uYW1lID0gXCYjMzQ7eW91bmdcJiMzNDssXG4gNTc1Olx0XHR9LFxuIDU3NjpcdFx0e1xuIDU3NzpcdFx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUsXG4gNTc4Olx0XHRcdC5uYW1lID0gXCYjMzQ7aHVnZXBhZ2Vfc2l6ZVwmIzM0OyxcbiA1Nzk6XHRcdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODI0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGFtb24gc3lzZnMgU2NoZW1lIEZpbHRlciBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jYCBmdW5jdGlvbiB3b3Jrcy4gSXQgdXRpbGl6ZXMgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMga2V5LiBUaGlzIG1lYW5zIHRoYXQgYm90aCBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgd2l0aGluIHRoZSBhbGxvY2F0ZWQgZmlsdGVyIHN0cnVjdHVyZSBhcmUgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGJlY2F1c2UgbGF0ZXIsIHdoZW4gdGhlIHN5c2ZzIGludGVyZmFjZSBpcyBhY2Nlc3NlZCBhbmQgd2UgcmVhZCBlaXRoZXIgYG1pbl9zaG93YCBvciBgbWF4X3Nob3dgLCB0aGUgc3lzdGVtIGlzIGdvaW5nIHRvIG91dHB1dCB0aGUgY3VycmVudCB2YWx1ZXMgb2YgYGZpbHRlci0mZ3Q7cmFuZ2VfbWluYCBhbmQgYGZpbHRlci0mZ3Q7cmFuZ2VfbWF4YC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgdmFsdWVzICphcmUqIGF0IGFueSBnaXZlbiB0aW1lLCBwYXJ0aWN1bGFybHkgd2hlbiBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCBpcyBjYWxsZWQuIFRoYXQgY2FsbCBpcyBjcml0aWNhbDsgaXQmIzM5O3Mgd2hlcmUgdGhlIGZpbHRlcnMgYXJlIGxpa2VseSBwb3B1bGF0ZWQuIFRpbWUgdG8ganVtcCBvdmVyIHRvIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBsaW5lcyAyODM1IHRocm91Z2ggMjg2NS4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgbGlmZWN5Y2xlIGFuZCBob3cgdGhlc2UgcmFuZ2VzIGFyZSBhY3R1YWxseSBzZXQsIGFuZCB3aGF0IHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZS4gVGhlIGluaXRpYWxpemF0aW9uIGlzIHplcm8sIGJ1dCB0aGF0IHdvbiYjMzk7dCBuZWNlc3NhcmlseSB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MzU6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZWFkZHJfcmFuZ2Uuc3RhcnQpIHtcbjI4MzY6XHRcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG4yODM3Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI4Mzg6XHRcdFx0XHR9XG4yODM5Olx0XHRcdFx0ZmlsdGVyLVx1MDAzZWFkZHJfcmFuZ2UgPSBzeXNmc19maWx0ZXItXHUwMDNlYWRkcl9yYW5nZTtcbjI4NDA6XHRcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbjI4NDE6XHRcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuMjg0MjpcdFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbjI4NDM6XHRcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbjI4NDQ6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuMjg0NTpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbjI4NDY6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg0NzpcdFx0XHRcdH1cbjI4NDg6XHRcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbjI4NDk6XHRcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbjI4NTA6XHRcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcbjI4NTE6XHRcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbjI4NTI6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuMjg1MzpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbjI4NTQ6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg1NTpcdFx0XHRcdH1cbjI4NTY6XHRcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbjI4NTc6XHRcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbjI4NTg6XHRcdFx0fVxuMjg1OTpcdFxuMjg2MDpcdFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbjI4NjE6XHRcdH1cbjI4NjI6XHRcdHJldHVybiAwO1xuMjg2MzpcdH1cbjI4NjQ6XHRcbjI4NjU6XHRzdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbjI4NjY6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpzeXNmc19nb2FscyxcbjI4Njc6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbjI4Njg6XHR7XG4yODY5Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbjI4NzA6XHRcdGludCBpLCBlcnI7XG4yODcxOlx0XG4yODcyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNmc19nb2Fscy1cdTAwM2VucjsgaSYjNDM7JiM0MzspIHtcbjI4NzM6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKnN5c2ZzX2dvYWwgPVxuMjg3NDpcdFx0XHRcdHN5c2ZzX2dvYWxzLVx1MDAzZWdvYWxzX2FycltpXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgaW1wbGVtZW50YXRpb24gYW5kIGhvdyB0aGUgcHJvYmUgaGl0cyBtb3Zpbmcgc3VtIG9wZXJhdGVzOgoKKipEZWVwIERpdmUgaW50byBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1lY2hhbmlzbSBiZWhpbmQgdGhlIHByb2JlIGhpdHMgbW92aW5nIHN1bS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgd29ya3MgYmVjYXVzZSBhbnkgZWZmaWNpZW5jeSBnYWlucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgd2l0aGluIHRoaXMgYXJlIGNydWNpYWwgZm9yIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIEkmIzM5O20gdHJ5aW5nIHRvIGFjaGlldmUuIEkgc2hvdWxkIGZpcnN0IHZlcmlmeSB0aGUgY29yZSBsb2dpYywgbWFraW5nIHN1cmUgdGhlIGF2ZXJhZ2luZyBpcyBkb25lIGNvcnJlY3RseSBhbmQgdGhhdCB0aGUgd2luZG93IHNpemUgaXMgZWZmZWN0aXZlbHkgdXRpbGl6ZWQuIEFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGhlcmUgY2FuIGludHJvZHVjZSBlcnJvcnMgaW4gdGhlIG91dHB1dCB3aGljaCBkaXJlY3RseSBpbXBhY3RzIGRvd25zdHJlYW0gY29tcHV0YXRpb25zIG9yIGRlY2lzaW9uLW1ha2luZy4gSSYjMzk7bGwgbWV0aWN1bG91c2x5IGNoZWNrIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhleSBoYW5kbGUgdXBkYXRlcy4gSSB3aWxsIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdG8gY29uZmlybSBob3cgdXBkYXRlcyBhcmUgc3luY2hyb25pemVkLCBlc3BlY2lhbGx5IGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcHJvYmVfaGl0c19tdnN1bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMjU9dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0OC1cbm1tL2RhbW9uL2NvcmUuYzozNDk6dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmMtMzUwLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jPTQ3Nz11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDg3LVx0XHRlbHNlIGlmIChtdilcbm1tL2RhbW9uL2NvcmUuYzo0ODg6XHRcdFx0c3VtICYjNDM7PSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkmIzQzOyYjNDM7LCByLCBjdHgpICpcbm1tL2RhbW9uL2NvcmUuYy00ODktXHRcdFx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2Jlcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEzLVx0XHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XHRcdFx0XHRkYW1vbl9wcm9iZV9oaXRzX212c3VtKGksIHJlZ2lvbiwgY3R4KSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVx0XHRpZiAoIXN5c19wcm9iZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBQcm9iZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgZnVuY3Rpb24gaW4gdGhlIERBTU9OIGNvcmUgaXMgd29ya2luZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG1tL2RhbW9uL2NvcmUuY2AuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW92aW5nIHN1bS1iYXNlZCBoaXQgY291bnRlciB0aGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIGF0IGxlYXN0LCBhIHNpZ25pZmljYW50IHBhcnQgb2YgaXQpIGhhcHBlbnMgaW4gREFNT04mIzM5O3MgcHJvYmluZyBtZXRob2RvbG9neS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLCBob3cgaXTigJlzIHRyaWdnZXJlZCwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcHJvYmUgYWNjdXJhY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDU6XHRcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZW5yX2FjY2Vzc2VzLCByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsXG4gMzQ2Olx0XHRcdFx0bGVmdF93aW5kb3dfYnApO1xuIDM0NzpcdH1cbiAzNDg6XHRcbiAzNDk6XHR1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAzNTA6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIDM1MTpcdHtcbiAzNTI6XHRcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsLCBhZ2dyX2ludGVydmFsO1xuIDM1MzpcdFx0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XG4gMzU0Olx0XG4gMzU1Olx0XHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxO1xuIDM1NjpcdFx0YWdncl9pbnRlcnZhbCA9ICBjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA/IDogMTtcbiAzNTc6XHRcdHdpbmRvd19sZW4gPSBhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsO1xuIDM1ODpcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxuIDM1OTpcdFx0XHRcdFx0Y3R4LVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzKSlcbiAzNjA6XHRcdFx0bGVmdF93aW5kb3cgPSAwO1xuIDM2MTpcdFx0ZWxzZVxuIDM2MjpcdFx0XHRsZWZ0X3dpbmRvdyA9IGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyAtXG4gMzYzOlx0XHRcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzO1xuIDM2NDpcdFx0bGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTtcbiAzNjU6XHRcbiAzNjY6XHRcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcbiAzNjc6XHRcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF07XG4gMzY4Olx0XG4gMzY5Olx0XHRyZXR1cm4gZGFtb25fbXZzdW0oci1cdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXG4gMzcwOlx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xuIDM3MTpcdH1cbiAzNzI6XHRcbiAzNzM6XHQjaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxuIDM3NDpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIDM3NTpcdHtcbiAzNzY6XHRcdFdBUk5fT05DRShzdGFydCBcdTAwM2U9IGVuZCwgXCYjMzQ7c3RhcnQgJWx1IFx1MDAzZT0gZW5kICVsdVxcblwmIzM0Oywgc3RhcnQsIGVuZCk7XG4gMzc3Olx0fVxuIDM3ODpcdCNlbHNlXG4gMzc5Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gMzgwOlx0e1xuIDM4MTpcdH1cbiAzODI6XHQjZW5kaWZcbiAzODM6XHRcbiAzODQ6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQzNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBGaWx0ZXIgQXJndW1lbnQgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBnZXQgZ3JhbnVsYXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgZmlsdGVyIGFyZ3VtZW50cywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGFyZ3VtZW50IGlzIGFjdHVhbGx5ICpjb21taXR0ZWQqIG9yICpjb3BpZWQqIHdpdGhpbiB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIHRyYWNpbmcgaXRzIHByb3BhZ2F0aW9uIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBJIG5lZWQgdG8ga25vdyB0aGUgZXhhY3QgcG9pbnRzIG9mIGludGVyYWN0aW9uLCBzbyBJIGNhbiBiZXR0ZXIgZGlhZ25vc2UgYW55IGlzc3VlcyBvciBvcHRpbWl6ZSByZWxhdGVkIHByb2Nlc3Nlcy4gSSYjMzk7bGwgbGlrZWx5IGJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIGNhbGxzLCBhc3NpZ25tZW50cywgb3IgbWVtb3J5IG1hbmlwdWxhdGlvbnMgaW52b2x2aW5nIHRoaXMgc3BlY2lmaWMgdmFyaWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2NvbW1pdF9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTMwOD1zdGF0aWMgc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbnRoX29wc19maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTMxOS1cbm1tL2RhbW9uL2NvcmUuYzoxMzIwOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKFxubW0vZGFtb24vY29yZS5jLTEzMjEtXHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzQ0LVxubW0vZGFtb24vY29yZS5jOjEzNDU6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcihcbm1tL2RhbW9uL2NvcmUuYy0xMzQ2LVx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vc19maWx0ZXIgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM1MC1cdGRzdC1cdTAwM2VhbGxvdyA9IHNyYy1cdTAwM2VhbGxvdztcbm1tL2RhbW9uL2NvcmUuYzoxMzUxOlx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEzNTItfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzU0PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEzNjEtXHRcdGlmIChzcmNfZmlsdGVyKVxubW0vZGFtb24vY29yZS5jOjEzNjI6XHRcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3RfZmlsdGVyLCBzcmNfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xMzYzLVx0XHRlbHNlXG4tLVxubW0vZGFtb24vY29yZS5jLTEzNzUtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTM3NjpcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmMtMTM3Ny1cdFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzgyPXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM4OS1cdFx0aWYgKHNyY19maWx0ZXIpXG5tbS9kYW1vbi9jb3JlLmM6MTM5MDpcdFx0XHRkYW1vc19jb21taXRfZmlsdGVyKGRzdF9maWx0ZXIsIHNyY19maWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEzOTEtXHRcdGVsc2Vcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQwMy1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxNDA0Olx0XHRkYW1vc19jb21taXRfZmlsdGVyX2FyZyhuZXdfZmlsdGVyLCBzcmNfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDA1LVx0XHRkYW1vc19hZGRfZmlsdGVyKGRzdCwgbmV3X2ZpbHRlcik7XG4tLVxubW0vZGFtb24vY29yZS5jPTE0ODg9c3RhdGljIGludCBkYW1vc19jb21taXRfZGVzdHMoc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKmRzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTUxOC1cbm1tL2RhbW9uL2NvcmUuYzoxNTE5OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE1MjAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTQ1PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTU2My1cbm1tL2RhbW9uL2NvcmUuYzoxNTY0Olx0ZXJyID0gZGFtb3NfY29tbWl0X2ZpbHRlcnMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE1NjUtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTE4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTIwLXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTIxOlx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTEyMi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldHlwZSwgc3JjLVx1MDAzZXR5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCBpbiB0aGUgREFNT04gQ29yZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIERBTU9OIGNvcmUgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBvdXQgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgYW4gYXJndW1lbnQgcmVsYXRlZCB0byBmaWx0ZXJpbmcgY29tbWl0cywgbGlrZWx5IHVzZWQgd2hlbiBEQU1PTiBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1lbW9yeSByZWdpb25zIHRvIGFjdCB1cG9uLiBJdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXNwZWN0IG9mIGNvbW1pdCBiZWhhdmlvciwgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IHdvcmtzIGJlY2F1c2UgaXQmIzM5O3Mga2V5IHRvIGVpdGhlciBwZXJmb3JtYW5jZSB0dW5pbmcgb3IgZGVidWdnaW5nIGEgYmVoYXZpb3IgaW4gYSBkYW1vbi1yZWxhdGVkIGNvbnRleHQuIElzIGl0IGEgYml0bWFzaz8gQSBmbGFnPyBEb2VzIGl0IHJlbGF0ZSB0byBhIGNvbW1pdCB0aHJlc2hvbGQ/IEEgc3BlY2lmaWMgdHlwZSBvZiBjb21taXQgb3BlcmF0aW9uPyBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBlY29zeXN0ZW0uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaGluZCB0aGUgc2NlbmVzIHJlZ2FyZGluZyBob3cgdGhpcyBwYXJhbWV0ZXIgZ3VpZGVzIHRoZSBjb21taXQgbG9naWMgc28gSSBjYW4gc29sdmUgdGhlIGlzc3VlIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG4xMzIxOlx0XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxuMTMyMjpcdHtcbjEzMjM6XHRcdHN3aXRjaCAoZHN0LVx1MDAzZXR5cGUpIHtcbjEzMjQ6XHRcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XG4xMzI1Olx0XHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbjEzMjY6XHRcdFx0YnJlYWs7XG4xMzI3Olx0XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4xMzI4Olx0XHRcdGRzdC1cdTAwM2VhZGRyX3JhbmdlID0gc3JjLVx1MDAzZWFkZHJfcmFuZ2U7XG4xMzI5Olx0XHRcdGJyZWFrO1xuMTMzMDpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG4xMzMxOlx0XHRcdGRzdC1cdTAwM2V0YXJnZXRfaWR4ID0gc3JjLVx1MDAzZXRhcmdldF9pZHg7XG4xMzMyOlx0XHRcdGJyZWFrO1xuMTMzMzpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFOlxuMTMzNDpcdFx0XHRkc3QtXHUwMDNlc3pfcmFuZ2UgPSBzcmMtXHUwMDNlc3pfcmFuZ2U7XG4xMzM1Olx0XHRcdGJyZWFrO1xuMTMzNjpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4xMzM3Olx0XHRcdGRzdC1cdTAwM2VyYW5nZV9taW4gPSBzcmMtXHUwMDNlcmFuZ2VfbWluO1xuMTMzODpcdFx0XHRkc3QtXHUwMDNlcmFuZ2VfbWF4ID0gc3JjLVx1MDAzZXJhbmdlX21heDtcbjEzMzk6XHRcdFx0YnJlYWs7XG4xMzQwOlx0XHRkZWZhdWx0OlxuMTM0MTpcdFx0XHRicmVhaztcbjEzNDI6XHRcdH1cbjEzNDM6XHR9XG4xMzQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIERBTU9OIEZpbHRlciBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBzdHJ1Y3QgZGFtb3NfZmlsdGVyYCBkZWZpbml0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBEQU1PTiBmaWx0ZXIgaW1wbGVtZW50YXRpb24gaW4gdGhlIGtlcm5lbD8mIzM0OyBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IHRoZSBmaWx0ZXJpbmcgbWVjaGFuaXNtIGlzIHN0cnVjdHVyZWQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayBmb3IgYW55IHJlY2VudCBtb2RpZmljYXRpb25zIG9yIGVuaGFuY2VtZW50cy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBmaWVsZHMsIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGggREFNT04mIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWNjZXNzIHRyYWNraW5nLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgZmlsdGVyaW5nIGNyaXRlcmlhLCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZSBmaWx0ZXJpbmcgbG9naWMsIGFuZCBhbnkgbWVjaGFuaXNtcyBmb3IgZHluYW1pYyBhZGp1c3RtZW50IG9yIGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGZpbHRlciYjMzk7cyBpbnRlcm5hbHMgd2lsbCBiZSBrZXkgdG8gb3B0aW1pemluZyBEQU1PTiYjMzk7cyBiZWhhdmlvciBpbiBjb21wbGV4IHNjZW5hcmlvcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQ1Olx0ICogZGFtb25fb3BlcmF0aW9ucyBhbmQgdGhlIHR5cGUuICBSZWZlciB0byBcdTAwMjZlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIGZvciBtb3JlXG4gNDQ2Olx0ICogZGV0YWlscy5cbiA0NDc6XHQgKi9cbiA0NDg6XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcbiA0NDk6XHRcdGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZTtcbiA0NTA6XHRcdGJvb2wgbWF0Y2hpbmc7XG4gNDUxOlx0XHRib29sIGFsbG93O1xuIDQ1MjpcdFx0dW5pb24ge1xuIDQ1MzpcdFx0XHR1NjQgbWVtY2dfaWQ7XG4gNDU0Olx0XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4gNDU1Olx0XHRcdGludCB0YXJnZXRfaWR4O1xuIDQ1NjpcdFx0XHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbiA0NTc6XHRcdFx0c3RydWN0IHtcbiA0NTg6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHJhbmdlX21pbjtcbiA0NTk6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHJhbmdlX21heDtcbiA0NjA6XHRcdFx0fTtcbiA0NjE6XHRcdH07XG4gNDYyOlx0LyogcHJpdmF0ZTogKi9cbiA0NjM6XHRcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gNDY0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gNDY1Olx0fTtcbiA0NjY6XHRcbiA0Njc6XHRzdHJ1Y3QgZGFtb25fY3R4O1xuIDQ2ODpcdHN0cnVjdCBkYW1vcztcbiA0Njk6XHRcbiA0NzA6XHQvKipcbiA0NzE6XHQgKiBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIC0gQ29udHJvbCBkYW1vc193YWxrKCkuXG4gNDcyOlx0ICpcbiA0NzM6XHQgKiBAd2Fsa19mbjpcdEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBiYWNrIGZvciBlYWNoIHJlZ2lvbi5cbiA0NzQ6XHQgKiBAZGF0YTpcdERhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB3YWxrIGZ1bmN0aW9ucy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MzEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgY29uc2Npb3VzbmVzczoKCioqRGlnZ2luZyBpbnRvIFByb2JlIEhpdCBUcmFja2luZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aG9zZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIOKAkyBgZGFtb25fZm9yX2VhY2hfcHJvYmVgLCBgci0mZ3Q7cHJvYmVfaGl0c2AsIGFuZCBgci0mZ3Q7bGFzdF9wcm9iZV9oaXRzYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBtZW1vcnkgaGFuZGxpbmcgaXMgc291bmQsIGFuZCB0aGVyZSBhcmUgbm8gc25lYWt5IGlzc3VlcyBsdXJraW5nIHRoZXJlLgoKU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIGV4YWN0bHkgKmhvdyogdGhlc2UgYHByb2JlX2hpdHNgIGZpZWxkcyBhcmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gdHJhY2UgYmFjayB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3Qgc2VxdWVuY2UuIEdvdHRhIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgYmVmb3JlIGFueXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2JlX2hpdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDgtXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTM1MC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjYtXHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXG5tbS9kYW1vbi9jb3JlLmM6MzY3Olx0XHRyZXR1cm4gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcbm1tL2RhbW9uL2NvcmUuYy0zNjgtXG5tbS9kYW1vbi9jb3JlLmM6MzY5Olx0cmV0dXJuIGRhbW9uX212c3VtKHItXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxubW0vZGFtb24vY29yZS5jOjM3MDpcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XG5tbS9kYW1vbi9jb3JlLmMtMzcxLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzg5PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NDAzOlx0XHRyZWdpb24tXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6NDA0Olx0XHRyZWdpb24tXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy00MDUtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTQ2Mj1zdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NjgtLyoqXG5tbS9kYW1vbi9jb3JlLmM6NDY5OiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbm1tL2RhbW9uL2NvcmUuYy00NzAtICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc2LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3Nzp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbm1tL2RhbW9uL2NvcmUuYy00NzgtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDg1LVx0XHRpZiAobGFzdClcbm1tL2RhbW9uL2NvcmUuYzo0ODY6XHRcdFx0c3VtICYjNDM7PSByLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmMtNDg3LVx0XHRlbHNlIGlmIChtdilcbm1tL2RhbW9uL2NvcmUuYzo0ODg6XHRcdFx0c3VtICYjNDM7PSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkmIzQzOyYjNDM7LCByLCBjdHgpICpcbm1tL2RhbW9uL2NvcmUuYy00ODktXHRcdFx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmMtNDkwLVx0XHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6NDkxOlx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2Vwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbm1tL2RhbW9uL2NvcmUuYy00OTItXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMDg9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDE0LVxubW0vZGFtb24vY29yZS5jOjEwMTU6c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0xMDE2LVx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMjItXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYzoxMDIzOlx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbm1tL2RhbW9uL2NvcmUuYzoxMDI0Olx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0xMDI1LVx0XHRpZiAoIWFnZ3JlZ2F0aW5nKVxubW0vZGFtb24vY29yZS5jOjEwMjY6XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxubW0vZGFtb24vY29yZS5jOjEwMjc6XHRcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxubW0vZGFtb24vY29yZS5jLTEwMjgtXHRcdFx0XHRcdG5ld19hdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTAyOS1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjEwMzA6XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMDMxLVx0XHRpJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTAzNT1zdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAzOC17XG5tbS9kYW1vbi9jb3JlLmM6MTAzOTpcdGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZywgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0xMDQwLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNDM2PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0MzgtXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcbm1tL2RhbW9uL2NvcmUuYzoxNDM5Olx0dW5zaWduZWQgY2hhciBtYXhfcHJvYmVfaGl0cztcbm1tL2RhbW9uL2NvcmUuYy0xNDQwLVx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ1Ny1cdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXG5tbS9kYW1vbi9jb3JlLmM6MTQ1ODpcdG1heF9wcm9iZV9oaXRzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjdHgtXHUwMDNlYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTE0NTktXHR3c3VtID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xNDYwLVx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xubW0vZGFtb24vY29yZS5jOjE0NjE6XHRcdGlmIChwcm9iZS1cdTAwM2V3ZWlnaHQgXHUwMDNlIFVJTlRfTUFYIC8gbWF4X3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmMtMTQ2Mi1cdFx0XHRyZXR1cm4gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmM6MTQ2MzpcdFx0d3N1bV90b19hZGQgPSBwcm9iZS1cdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcbm1tL2RhbW9uL2NvcmUuYy0xNDY0LVx0XHRpZiAoVUlOVF9NQVggLSB3c3VtIFx1MDAzYyB3c3VtX3RvX2FkZClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjMwMj1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMyNS1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIzMjY6XHRcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IHItXHUwMDNlcHJvYmVfaGl0c1tpXTtcbm1tL2RhbW9uL2NvcmUuYzoyMzI3Olx0XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0yMzI4LVx0XHRcdH1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjUxMT1zdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNTUzLVx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG5tbS9kYW1vbi9jb3JlLmM6MjU1NDpcdFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0yNTU1LVx0XHRtYXRjaGVkID0gZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2M9IHdzdW0gXHUwMDI2XHUwMDI2XG4tLVxubW0vZGFtb24vY29yZS5jPTM0NDQ9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ1NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KVxubW0vZGFtb24vY29yZS5jOjM0NTY6XHRcdGwtXHUwMDNlcHJvYmVfaGl0c1tpXSA9IChsLVx1MDAzZXByb2JlX2hpdHNbaV0gKiBzel9sICYjNDM7IHItXHUwMDNlcHJvYmVfaGl0c1tpXVxubW0vZGFtb24vY29yZS5jLTM0NTctXHRcdFx0XHQqIHN6X3IpIC8gKHN6X2wgJiM0Mzsgc3pfcik7XG4tLVxubW0vZGFtb24vY29yZS5jPTM0NjI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5tbS9kYW1vbi9jb3JlLmM6MzQ2MzpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxubW0vZGFtb24vY29yZS5jLTM0NjQte1xubW0vZGFtb24vY29yZS5jOjM0NjU6XHRpZiAodXNlX3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmM6MzQ2NjpcdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBmYWxzZSwgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNDY3LVx0aWYgKGxhc3QpXG4tLVxubW0vZGFtb24vY29yZS5jPTM0Nzk9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0ODItXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xubW0vZGFtb24vY29yZS5jOjM0ODM6XHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNDg0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDg3LVxubW0vZGFtb24vY29yZS5jOjM0ODg6XHRcdHNjb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgZmFsc2UsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xubW0vZGFtb24vY29yZS5jOjM0ODk6XHRcdGxhc3Rfc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCB0cnVlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcbm1tL2RhbW9uL2NvcmUuYy0zNDkwLVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNTA0LVx0XHRkaWZmID0gYWJzX2RpZmYoc2NvcmUsIGRhbW9uX21lcmdlX3Njb3JlKHByZXYsIGZhbHNlLCBjdHgsXG5tbS9kYW1vbi9jb3JlLmM6MzUwNTpcdFx0XHRcdFx0dXNlX3Byb2JlX2hpdHMpKTtcbm1tL2RhbW9uL2NvcmUuYy0zNTA2LVx0XHRpZiAoZGlmZiBcdTAwM2UgdGhyZXMpXG4tLVxubW0vZGFtb24vY29yZS5jPTM1ODQ9c3RhdGljIGludCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzU5OS1cdC8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqL1xubW0vZGFtb24vY29yZS5jOjM2MDA6XHRtZW1jcHkobmV3LVx1MDAzZXByb2JlX2hpdHMsIHItXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXHUwMDNlcHJvYmVfaGl0cykpO1xubW0vZGFtb24vY29yZS5jOjM2MDE6XHRtZW1jcHkobmV3LVx1MDAzZWxhc3RfcHJvYmVfaGl0cywgci1cdTAwM2VsYXN0X3Byb2JlX2hpdHMsXG5tbS9kYW1vbi9jb3JlLmM6MzYwMjpcdFx0XHRzaXplb2Yoci1cdTAwM2VsYXN0X3Byb2JlX2hpdHMpKTtcbm1tL2RhbW9uL2NvcmUuYy0zNjAzLVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTc2PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE5Ny1cdFx0XHRcdGlmIChkYW1vbl9wYV9maWx0ZXJfcGFzcyhwYSwgZm9saW8sIHApKVxubW0vZGFtb24vcGFkZHIuYzoxOTg6XHRcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSYjNDM7JiM0Mzs7XG5tbS9kYW1vbi9wYWRkci5jLTE5OS1cdFx0XHRcdGkmIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjAzLVx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG5tbS9kYW1vbi9wYWRkci5jOjIwNDpcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbm1tL2RhbW9uL3BhZGRyLmMtMjA1LVx0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDA9c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcHJvYmVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5LVx0XHRfX0FUVFJfUk9fTU9ERShoaXRzLCAwNDAwKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI6XHRcdTAwMjZkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01My1cdE5VTEwsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2Jlcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEzLVx0XHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XHRcdFx0XHRkYW1vbl9wcm9iZV9oaXRzX212c3VtKGksIHJlZ2lvbiwgY3R4KSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVx0XHRpZiAoIXN5c19wcm9iZSkge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01NTk9ZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTkzLVx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1OTQ6XHRcdC5uYW1lID0gXCYjMzQ7cHJvYmVfaGl0c193c3VtXCYjMzQ7LFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5NS1cdH0sXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE0MD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2F0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU0LVx0ci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gMTU7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU1Olx0ci1cdTAwM2Vwcm9iZV9oaXRzWzBdID0gNztcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTY6XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSA9IDM7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU3LVx0ci1cdTAwM2VhZ2UgPSAxMDtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgcl9uZXctXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTczOlx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlcHJvYmVfaGl0c1swXSwgcl9uZXctXHUwMDNlcHJvYmVfaGl0c1swXSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTc0Olx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdLCByX25ldy1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0pO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3NS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgcl9uZXctXHUwMDNlYWdlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTgxPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTk1LVx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IDEwO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE5NjpcdHItXHUwMDNlcHJvYmVfaGl0c1swXSA9IDY7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTk3LVx0ci1cdTAwM2VhZ2UgPSA5O1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMDQtXHRyMi1cdTAwM2Vucl9hY2Nlc3NlcyA9IDIwO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjIwNTpcdHIyLVx1MDAzZXByb2JlX2hpdHNbMF0gPSAxNDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMDYtXHRyMi1cdTAwM2VhZ2UgPSAyMTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjEyLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXMsIDE2dSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjEzOlx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlcHJvYmVfaGl0c1swXSwgMTEpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIxNC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMTd1KTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTUxND1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MzgtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTUzOTpcdC8qIE1vcmUgc2FtcGxlcyBjb3VsZCBvdmVyZmxvdyB0aGUgcHJvYmVfaGl0cyBjb3VudGVycy4gKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTQwLVx0Y3R4LVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAyNTY7XG4tLVxubW0vZGFtb24vdmFkZHIuYz01ODE9c3RhdGljIHZvaWQgZGFtb25fdmFfcHJvYmVfZm9saW8oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTkwLVx0XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIpKVxubW0vZGFtb24vdmFkZHIuYzo1OTE6XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldJiM0MzsmIzQzOztcbm1tL2RhbW9uL3ZhZGRyLmMtNTkyLVx0XHRpJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi92YWRkci5jPTY5MD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03MDUtXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbm1tL2RhbW9uL3ZhZGRyLmM6NzA2Olx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxubW0vZGFtb24vdmFkZHIuYy03MDctXHRcdFx0XHRcdFx0XHRmYWxzZSwgY3R4KSwgbWF4X3dzdW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY4NQoJCQkJCQkJb3V0cHV0OiAyNDAKCQkJCQkJCXRob3VnaHRzOiAxMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IERBTU9OIFByb2JlIEhpdHMgV2VpZ2h0ZWQgU3VtIEZpbHRlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTi4gRmlyc3QsIGxldCYjMzk7cyByZWNhcCB3aGF0IHRoZSBwYXRjaCAqZG9lcyo6IGl0IGludHJvZHVjZXMgYSBuZXcgZmlsdGVyIHR5cGUgZm9yIERBTU9OICh0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvcikgdGhhdCB1c2VzIGEgJiMzNDtwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSYjMzQ7LiBUaGlzIGludm9sdmVzIGFkZGluZyBuZXcgZmllbGRzIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIHRvIGZpbHRlciBzdHJ1Y3R1cmVzLCB1cGRhdGluZyBzeXNmcyBpbnRlcmZhY2VzIGZvciBjb25maWd1cmF0aW9uLCBhbmQgaW50cm9kdWNpbmcgYSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gaW4gdGhlIG1hdGNoaW5nIGxvZ2ljLiBFc3NlbnRpYWxseSwgaXQgYWxsb3dzIGZpbHRlcmluZyBiYXNlZCBvbiBhIHJhbmdlIG9mIHdlaWdodGVkIHByb2JlIGhpdCBjb3VudHMuCgpOb3csIGNyaXRpY2FsbHksIEkgbmVlZCB0byBldmFsdWF0ZSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZWNvbWUgYW4gaXNzdWUuCgoxLiAgKipVc2VyLVNwYWNlIEV4cG9zdXJlOioqIFRoZSBwYXRjaCB1c2VzIHN5c2ZzIHRvIGV4cG9zZSBmaWx0ZXIgcGFyYW1ldGVycy4gTXkgZmlyc3QgY29uY2VybiBpcyBhbHdheXMgYWJvdXQgd2hhdCYjMzk7cyBzZW50IHRvIHVzZXIgc3BhY2UuIEFyZSB3ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeT8gSGVyZSwgdGhlIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCB2YWx1ZXMgYXJlIHNob3duIHZpYSBgc3lzZnNfZW1pdGAsIGJ1dCB0aGUgYHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIFRoaXMgaW5jbHVkZXMgdGhlIG5ldyBmaWVsZHMuIFRoZSBgc3RydWN0IGRhbW9zX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IHRvby4gU28sIHRoZSBkYXRhIGV4cG9zZWQgdG8gdXNlciBzcGFjZSAqc2hvdWxkKiBiZSBzYWZlLiBObyBsZWFrcy4KCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljICZhbXA7IFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIERvZXMgdGhlIGNvZGUgaGF2ZSBicmFuY2hpbmcgb3IgZGVjaXNpb24tbWFraW5nIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBXaXRoaW4gdGhlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIGFuZCBgZGFtb3NfZmlsdGVyX21hdGNoYCBmdW5jdGlvbnMsIGFsbCB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBhcmUgZGVmaW5pdGVseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyB1c2VkLiBgci0mZ3Q7cHJvYmVfaGl0c2AgYW5kIGByLSZndDtsYXN0X3Byb2JlX2hpdHNgIGFyZSBoYW5kbGVkIHNhZmVseSBpbiBgZGFtb25fbmV3X3JlZ2lvbmAuIFRoZSBmaWx0ZXJzIGFyZSBjb25maWd1cmVkIHdpdGggYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIHZhbHVlcywgYW5kIHRoZSBgd3N1bWAgaXMgdGhlbiBjb3JyZWN0bHkgYXNzaWduZWQuIFRoaXMgaXMgYSB2ZXJ5IGNsZWFuIGluaXRpYWxpemF0aW9uIGFuZCB1c2Ugb2YgdmFsdWVzLiBObyB1bmluaXRpYWxpemVkIHJlYWRzLgoKMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogQXJlIHRoZXJlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQgbGF0ZXI/IE5vdCBpbiB0aGlzIHBhdGNoLiBUaGUgc3RydWN0dXJlcyBhbmQgZmlsdGVycyBhcmUgc2ltcGxlLCBhbmQgdGhleSYjMzk7cmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgZHVyaW5nIGFsbG9jYXRpb24gb3IgY29uZmlndXJhdGlvbi4KCjQuICAqKkJvdW5kcyBDaGVja2luZyBhbmQgTWVtb3J5IFNhZmV0eToqKiBBcmUgdGhlcmUgYW55IHBsYWNlcyB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgbGVhZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uPyBUaGUgYGRhbW9uX2Zvcl9lYWNoX3Byb2JlYCBsb29wIGl0ZXJhdGVzIHRocm91Z2ggcHJvYmVzIGluIGBjdHhgLCBhbmQgdGhlIHByb2JlIGNvdW50IGlzIGxpbWl0ZWQgdG8gYERBTU9OX01BWF9QUk9CRVNgLiBUaGUgbG9vcCBpbmRleCBgaWAgaXMgcHJvcGVybHkgbWFuYWdlZCwgc28gdGhpcyBzZWVtcyBzYWZlLgoKKipEb3VibGUgQ2hlY2sgYW5kIENvbmNsdXNpb246KioKCkkmIzM5O3ZlIGdvbmUgdGhyb3VnaCBlYWNoIG9mIHRoZSBwb3RlbnRpYWwgaXNzdWVzLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdDoKCiogICBObyBkYXRhIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uCiogICBObyBjb250cm9sIGZsb3cgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgcmVhZHMuCiogICBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBzYWZldHkgdG9vbHMgKGxpa2UgTE9DS0RFUCkgY292ZXIgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIHJpc2tzLiBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZSB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gTm93LCBJIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHRvb2wgY2FsbCB0byByZWZsZWN0IHRoaXMgY29uY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgZmlsdGVyIHR5cGUgZm9yIERBTU9OIHNjaGVtZXMsIGV4dGVuZGluZyBzeXNmcyBhdHRyaWJ1dGVzIChgbWluYCBhbmQgYG1heGApIGFuZCBjb3JlIGZpbHRlciBtYXRjaGluZyB0byB1c2UgdGhlIHByb2JlIGhpdHMgd2VpZ2h0ZWQgbW92aW5nIHN1bS4gXG5cbi0gTWVtb3J5IEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBTeXNmcyBzY2hlbWUgZmlsdGVyIHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBlbnN1cmluZyBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEluIERBTU9OIGNvcmUsIGZpbHRlciBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdXBvbiBjcmVhdGlvbiBhbmQgZmlsdGVyIGFyZ3VtZW50cyBjb21taXQuXG4tIFVzZXItc3BhY2UgRGF0YSBUcmFuc2ZlcjogU3lzZnMgb3V0cHV0IHVzZXMgZm9ybWF0dGVkIHN0cmluZyBlbWlzc2lvbnMgdmlhIGBzeXNmc19lbWl0KClgLCB3aXRoIG5vIHJhdyBzdHJ1Y3QgY29waWVzIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuXG4tIFZhcmlhYmxlcyBhbmQgQnJhbmNoaW5nOiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gYW5kIGZpbHRlciBtYXRjaGluZyAoYHN1bWAsIGBpYCwgYHdzdW1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIG9yIGxvZ2ljIGlzc3VlcyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgbWVjaGFuaXNtcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGZpbHRlciB0eXBlIGZvciBEQU1PTiBzY2hlbWVzLCBleHRlbmRpbmcgc3lzZnMgYXR0cmlidXRlcyAoYG1pbmAgYW5kIGBtYXhgKSBhbmQgY29yZSBmaWx0ZXIgbWF0Y2hpbmcgdG8gdXNlIHRoZSBwcm9iZSBoaXRzIHdlaWdodGVkIG1vdmluZyBzdW0uIFxuXG4tIE1lbW9yeSBBbGxvY2F0aW9uIFx1MDAyNiBJbml0aWFsaXphdGlvbjogU3lzZnMgc2NoZW1lIGZpbHRlciBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBJbiBEQU1PTiBjb3JlLCBmaWx0ZXIgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHVwb24gY3JlYXRpb24gYW5kIGZpbHRlciBhcmd1bWVudHMgY29tbWl0LlxuLSBVc2VyLXNwYWNlIERhdGEgVHJhbnNmZXI6IFN5c2ZzIG91dHB1dCB1c2VzIGZvcm1hdHRlZCBzdHJpbmcgZW1pc3Npb25zIHZpYSBgc3lzZnNfZW1pdCgpYCwgd2l0aCBubyByYXcgc3RydWN0IGNvcGllcyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLlxuLSBWYXJpYWJsZXMgYW5kIEJyYW5jaGluZzogQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgd2VpZ2h0ZWQgc3VtIGNhbGN1bGF0aW9uIGFuZCBmaWx0ZXIgbWF0Y2hpbmcgKGBzdW1gLCBgaWAsIGB3c3VtYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIG1lY2hhbmlzbXMgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIyOjM1LjI4OTgzODEwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNTYwMDc0NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9zX2ZpbHRlcl9mb3Jfb3BzXCIsXG4gICAgXCJkYW1vc19jb21taXRfZmlsdGVyX2FyZ1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fbWVyZ2Vfc2NvcmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGZpbHRlciB0eXBlIGZvciBEQU1PTiBzY2hlbWVzLCBleHRlbmRpbmcgc3lzZnMgYXR0cmlidXRlcyAoYG1pbmAgYW5kIGBtYXhgKSBhbmQgY29yZSBmaWx0ZXIgbWF0Y2hpbmcgdG8gdXNlIHRoZSBwcm9iZSBoaXRzIHdlaWdodGVkIG1vdmluZyBzdW0uIFxcblxcbi0gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogU3lzZnMgc2NoZW1lIGZpbHRlciBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBJbiBEQU1PTiBjb3JlLCBmaWx0ZXIgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHVwb24gY3JlYXRpb24gYW5kIGZpbHRlciBhcmd1bWVudHMgY29tbWl0Llxcbi0gVXNlci1zcGFjZSBEYXRhIFRyYW5zZmVyOiBTeXNmcyBvdXRwdXQgdXNlcyBmb3JtYXR0ZWQgc3RyaW5nIGVtaXNzaW9ucyB2aWEgYHN5c2ZzX2VtaXQoKWAsIHdpdGggbm8gcmF3IHN0cnVjdCBjb3BpZXMgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4tIFZhcmlhYmxlcyBhbmQgQnJhbmNoaW5nOiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gYW5kIGZpbHRlciBtYXRjaGluZyAoYHN1bWAsIGBpYCwgYHdzdW1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3IgbG9naWMgaXNzdWVzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBtZWNoYW5pc21zIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSAvICdwcm9iZV9oaXRzX3dzdW0nKSBpbiBEQU1PTiwgdXBkYXRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBzeXNmcyBjb25maWd1cmF0aW9uIGhhbmRsaW5nLCBhbmQgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb25zIGFjcm9zcyBEQU1PTiBjb3JlLCBwYWRkciwgYW5kIHZhZGRyIG9wZXJhdGlvbnMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjozNS4yODk4NDM3ODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTQzMjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZjOTAwMWJkOTlmOWY3NjZiOTZkYWRmNWU3OTNkZTEwYWY3NjBkYjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTU6MjI6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbmluZGV4IDAyM2M2MzM0MDI0ZjguLmQzZTM3NDAwMzY3YmQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbkBAIC01NTEsNiArNTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlXFxuIGZpbHRlci4gIFJlZmVyIHRvIDpyZWY6YHRoZSBkZXNpZ24gZG9jIFxcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVyc1xcdTAwM2VgIGZvclxcbiBhdmFpbGFibGUgdHlwZSBuYW1lcywgdGhlaXIgbWVhbmluZyBhbmQgb24gd2hhdCBsYXllciB0aG9zZSBhcmUgaGFuZGxlZC5cXG4gXFxuK0ZvciBgYHByb2JlX2hpdHNfd3N1bWBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBwcm9iZVxcbitoaXRzIHdlaWdodGVkIHN1bSB2YWx1ZSBmb3IgdGhlIGZpbHRlciB0byBgYG1pbmBgIGFuZCBgYG1heGBgIGZpbGVzLFxcbityZXNwZWN0aXZlbHkuXFxuK1xcbiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnlcXG4gd3JpdGluZyB0aGUgcGF0aCBvZiB0aGUgbWVtb3J5IGNncm91cCBmcm9tIHRoZSBjZ3JvdXBzIG1vdW50IHBvaW50IHRvXFxuIGBgbWVtY2dfcGF0aGBgIGZpbGUuICBGb3IgYGBhZGRyYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBzdGFydCBhbmQgZW5kXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxcbmluZGV4IGFhYzg0ZGUyNjFhYTguLjhlOTgwZGRlMzYyZGUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuQEAgLTgyMiw2ICs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLlxcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIGFkZHJlc3MgcmFuZ2UuXFxuICAgICAtIHRhcmdldFxcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LlxcbisgICAgLSBwcm9iZV9oaXRzX3dzdW1cXG4rICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlXFxuKyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSBcXHUwMDNjZGFtb25fZGVzaWduX2F0dHJzX29ubHlfbW9uaXRvcmluZ1xcdTAwM2VgIHZhbHVlLlxcbiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LlxcbiAgICAgLSBhbm9uXFxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgY29udGFpbmluZyBkYXRhIHRoYXQgbm90IHN0b3JlZCBpbiBmaWxlcy5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXFxuaW5kZXggODcxZDI2YWRmNmFlNS4uNGEzNmYzNDRiYmM3YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtMzk5LDE0ICszOTksMTUgQEAgc3RydWN0IGRhbW9zX3N0YXQge1xcbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6XFx0VW5tYXBwZWQgcGFnZXMuXFxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxcdEFkZHJlc3MgcmFuZ2UuXFxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XFx0RGF0YSBBY2Nlc3MgTW9uaXRvcmluZyB0YXJnZXQuXFxuKyAqIEBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XFx0cHJvYmVfaGl0cyB3ZWlnaHRlZCBzdW0gcmFuZ2UuXFxuICAqIEBOUl9EQU1PU19GSUxURVJfVFlQRVM6XFx0TnVtYmVyIG9mIGZpbHRlciB0eXBlcy5cXG4gICpcXG4tICogQWxsIHR5cGVzIGV4Y2VwdCBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVFxcbi0gKiBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyBcXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZVxcbi0gKiBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZCBhcyAndHJpZWQnLiAgSW4gY29udHJhc3QsXFxuLSAqIFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWRcXG4tICogYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWRcXG4tICogYXMgJ3RyaWVkJy5cXG4rICogQWxsIHR5cGVzIGV4Y2VwdCBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiwgXFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmRcXG4rICogXFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyBcXHUwMDI2c3RydWN0XFxuKyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZFxcbisgKiBhcyAndHJpZWQnLiAgSW4gY29udHJhc3QsIFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZFxcbisgKiBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlXFxuKyAqIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQgYXMgJ3RyaWVkJy5cXG4gICpcXG4gICogU3VwcG9ydCBmb3IgdGhlIG9wZXJhdGlvbnMtaGFuZGxlZCBmaWx0ZXJzIGRlcGVuZHMgb24gdGhlIHJ1bm5pbmdcXG4gICogXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLlxcbkBAIC00MjAsNiArNDIxLDcgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XFxuIFxcdERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVELFxcbiBcXHREQU1PU19GSUxURVJfVFlQRV9BRERSLFxcbiBcXHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsXFxuK1xcdERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcXG4gXFx0TlJfREFNT1NfRklMVEVSX1RZUEVTLFxcbiB9O1xcbiBcXG5AQCAtNDM0LDYgKzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xcbiAgKlxcdFxcdFxcdTAwMjZkYW1vbl9jdHgtXFx1MDAzZWFkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXNcXG4gICpcXHRcXHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuXFxuICAqIEBzel9yYW5nZTpcXHRTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuXFxuKyAqIEByYW5nZV9taW46XFx0TWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXFxuKyAqIEByYW5nZV9tYXg6XFx0TWF4aW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXFxuICAqXFxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXFx1MDAyNmRhbW9zLVxcdTAwM2VhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaFxcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXFxuQEAgLTQ1MCw2ICs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7XFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XFxuIFxcdFxcdGludCB0YXJnZXRfaWR4O1xcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O1xcbitcXHRcXHR9O1xcbiBcXHR9O1xcbiAvKiBwcml2YXRlOiAqL1xcbiBcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbkBAIC0xMDY1LDcgKzEwNzMsNyBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4gdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4gXFxuIGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC00NjksMTEgKzQ2OSwxMiBAQCBzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXFxuICAqIEByOlxcdFxcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cXG4gICogQGxhc3Q6XFx0aWYgdGhlIHJlcXVlc3QgaXMgZm9yIGxhc3Qtd2luZG93IGFnZ3JlZ2F0ZWQgcHJvYmUgaGl0cy5cXG4rICogQG12OlxcdFxcdHVzZSBtb3Zpbmcgc3VtLlxcbiAgKiBAY3R4OlxcdGNvbnRleHQgb2YgXFx1MDAyNnIuXFxuICAqXFxuICAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXFxuICAqL1xcbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4rdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbkBAIC00ODMsNiArNDg0LDkgQEAgdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcXG4gXFx0XFx0aWYgKGxhc3QpXFxuIFxcdFxcdFxcdHN1bSArPSByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSsrXSAqIHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuK1xcdFxcdGVsc2UgaWYgKG12KVxcbitcXHRcXHRcXHRzdW0gKz0gZGFtb25fcHJvYmVfaGl0c19tdnN1bShpKyssIHIsIGN0eCkgKlxcbitcXHRcXHRcXHRcXHRwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHN1bSArPSByLVxcdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbiBcXHR9XFxuQEAgLTY1NCw2ICs2NTgsNyBAQCBib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSlcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuIFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcXG4gXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XFxuK1xcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xMzI4LDYgKzEzMzMsMTAgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXFxuIFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcXG4gXFx0XFx0ZHN0LVxcdTAwM2Vzel9yYW5nZSA9IHNyYy1cXHUwMDNlc3pfcmFuZ2U7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcXG4rXFx0XFx0ZHN0LVxcdTAwM2VyYW5nZV9taW4gPSBzcmMtXFx1MDAzZXJhbmdlX21pbjtcXG4rXFx0XFx0ZHN0LVxcdTAwM2VyYW5nZV9tYXggPSBzcmMtXFx1MDAzZXJhbmdlX21heDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTI1MDYsNyArMjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuIFxcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aTtcXG4gXFx0aW50IHRhcmdldF9pZHggPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgd3N1bTtcXG4gXFxuIFxcdHN3aXRjaCAoZmlsdGVyLVxcdTAwM2V0eXBlKSB7XFxuIFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlxcbkBAIC0yNTQxLDYgKzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0XFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItXFx1MDAzZWFyLnN0YXJ0KTtcXG4gXFx0XFx0bWF0Y2hlZCA9IHRydWU7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcXG4rXFx0XFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcXG4rXFx0XFx0bWF0Y2hlZCA9IGZpbHRlci1cXHUwMDNlcmFuZ2VfbWluIFxcdTAwM2M9IHdzdW0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0d3N1bSBcXHUwMDNjPSBmaWx0ZXItXFx1MDAzZXJhbmdlX21heDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbkBAIC0zNDQ5LDcgKzM0NjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxcbiB7XFxuIFxcdGlmICh1c2VfcHJvYmVfaGl0cylcXG4tXFx0XFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xcbitcXHRcXHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGZhbHNlLCBjdHgpO1xcbiBcXHRpZiAobGFzdClcXG4gXFx0XFx0cmV0dXJuIHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XFxuIFxcdHJldHVybiByLVxcdTAwM2Vucl9hY2Nlc3NlcztcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcXG5pbmRleCBkN2M4MTgyOTQ0NWJhLi5iOGY0ZDI4MTY1ZGQ3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXFxuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdFxcdGlmIChyZXR1cm5fbWF4X3dzdW0pXFxuIFxcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRmYWxzZSwgY3R4KSwgbWF4X3dzdW0pO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0cmV0dXJuIG1heF93c3VtO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcXG5pbmRleCBkOWI4MWQ3YjU5MTBlLi5kOWRkNGVlMDQ0MmM3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbkBAIC01MzQsNyArNTM0LDggQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xcbiBcXHRib29sIGFsbG93O1xcbiBcXHRjaGFyICptZW1jZ19wYXRoO1xcbiBcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xcbi1cXHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcXG4rXFx0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XFxuK1xcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O1xcbiBcXHRpbnQgdGFyZ2V0X2lkeDtcXG4gfTtcXG4gXFxuQEAgLTU4OCw2ICs1ODksMTAgQEAgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcXG4gXFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsXFxuIFxcdFxcdC5uYW1lID0gXFxcInRhcmdldFxcXCIsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sXFxuK1xcdFxcdC5uYW1lID0gXFxcInByb2JlX2hpdHNfd3N1bVxcXCIsXFxuK1xcdH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuQEAgLTc3OCw3ICs3ODMsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxuIFxcbi1cXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWluKTtcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWx1XFxcXG5cXFwiLCBmaWx0ZXItXFx1MDAzZXJhbmdlX21pbik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5AQCAtNzg2LDcgKzc5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxuIFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG4tXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWluKTtcXG4rXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlcmFuZ2VfbWluKTtcXG4gXFxuIFxcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcXG4gfVxcbkBAIC03OTcsNyArODAyLDcgQEAgc3RhdGljIHNzaXplX3QgbWF4X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG4gXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbiBcXG4tXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWx1XFxcXG5cXFwiLCBmaWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1heCk7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuQEAgLTgwNSw3ICs4MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxuLVxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1heCk7XFxuK1xcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZXJhbmdlX21heCk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7XFxuIH1cXG5AQCAtMjgzNSwxMiArMjg0MCwyMSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcXG4gXFx0XFx0fSBlbHNlIGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7XFxuIFxcdFxcdFxcdGZpbHRlci1cXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNldGFyZ2V0X2lkeDtcXG4gXFx0XFx0fSBlbHNlIGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRSkge1xcbi1cXHRcXHRcXHRpZiAoc3lzZnNfZmlsdGVyLVxcdTAwM2Vzel9yYW5nZS5taW4gXFx1MDAzZVxcbi1cXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1heCkge1xcbitcXHRcXHRcXHRpZiAoc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9taW4gXFx1MDAzZVxcbitcXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21heCkge1xcbitcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1pbiA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluO1xcbitcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1heCA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4O1xcbitcXHRcXHR9IGVsc2UgaWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcXG4rXFx0XFx0XFx0aWYgKHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluIFxcdTAwM2VcXG4rXFx0XFx0XFx0XFx0XFx0c3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXgpIHtcXG4gXFx0XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2Vzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlc3pfcmFuZ2U7XFxuK1xcdFxcdFxcdGZpbHRlci1cXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9taW47XFxuK1xcdFxcdFxcdGZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXg7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGRhbW9zX2FkZF9maWx0ZXIoc2NoZW1lLCBmaWx0ZXIpO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xcbmluZGV4IDlhMzhkYzg5YTE1NmUuLjRhZWNmMzRlMzliZTIgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5AQCAtNzA0LDcgKzcwNCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4gXFx0XFx0XFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XFxuIFxcdFxcdFxcdGlmIChyZXR1cm5fbWF4X3dzdW0pXFxuIFxcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRmYWxzZSwgY3R4KSwgbWF4X3dzdW0pO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChtbSlcXG4gXFx0XFx0XFx0bW1wdXQobW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjozNS44NDYxNzAyOTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1Mzg5ODEwNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9zX2ZpbHRlcl9mb3Jfb3BzXCIsXG4gICAgXCJkYW1vc19jb21taXRfZmlsdGVyX2FyZ1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fbWVyZ2Vfc2NvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gLyAncHJvYmVfaGl0c193c3VtJykgaW4gREFNT04sIHVwZGF0aW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYywgc3lzZnMgY29uZmlndXJhdGlvbiBoYW5kbGluZywgYW5kIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbGN1bGF0aW9ucyBhY3Jvc3MgREFNT04gY29yZSwgcGFkZHIsIGFuZCB2YWRkciBvcGVyYXRpb25zLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYzkwMDFiZDk5ZjlmNzY2Yjk2ZGFkZjVlNzkzZGUxMGFmNzYwZGI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTU6MjI6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCAwMjNjNjMzNDAyNGY4Li5kM2UzNzQwMDM2N2JkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5AQCAtNTUxLDYgKzU1MSwxMCBAQCBhbmQgYGBkYW1vbl90YXJnZXRfaWR4YGAuICBUbyBgYHR5cGVgYCBmaWxlLCB5b3UgY2FuIHdyaXRlIHRoZSB0eXBlIG9mIHRoZVxuIGZpbHRlci4gIFJlZmVyIHRvIDpyZWY6YHRoZSBkZXNpZ24gZG9jIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc19maWx0ZXJzXHUwMDNlYCBmb3JcbiBhdmFpbGFibGUgdHlwZSBuYW1lcywgdGhlaXIgbWVhbmluZyBhbmQgb24gd2hhdCBsYXllciB0aG9zZSBhcmUgaGFuZGxlZC5cbiBcbitGb3IgYGBwcm9iZV9oaXRzX3dzdW1gYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gcHJvYmVcbitoaXRzIHdlaWdodGVkIHN1bSB2YWx1ZSBmb3IgdGhlIGZpbHRlciB0byBgYG1pbmBgIGFuZCBgYG1heGBgIGZpbGVzLFxuK3Jlc3BlY3RpdmVseS5cbitcbiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnlcbiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG9cbiBgYG1lbWNnX3BhdGhgYCBmaWxlLiAgRm9yIGBgYWRkcmBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgc3RhcnQgYW5kIGVuZFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtODIyLDYgKzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBiZWxvbmdpbmcgdG8gYSBnaXZlbiBhZGRyZXNzIHJhbmdlLlxuICAgICAtIHRhcmdldFxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuXG4rICAgIC0gcHJvYmVfaGl0c193c3VtXG4rICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlXG4rICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtIFx1MDAzY2RhbW9uX2Rlc2lnbl9hdHRyc19vbmx5X21vbml0b3JpbmdcdTAwM2VgIHZhbHVlLlxuIC0gT3BlcmF0aW9ucyBsYXllciBoYW5kbGVkLCBzdXBwb3J0ZWQgYnkgb25seSBgYHBhZGRyYGAgb3BlcmF0aW9ucyBzZXQuXG4gICAgIC0gYW5vblxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgY29udGFpbmluZyBkYXRhIHRoYXQgbm90IHN0b3JlZCBpbiBmaWxlcy5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDg3MWQyNmFkZjZhZTUuLjRhMzZmMzQ0YmJjN2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTM5OSwxNCArMzk5LDE1IEBAIHN0cnVjdCBkYW1vc19zdGF0IHtcbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6XHRVbm1hcHBlZCBwYWdlcy5cbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfQUREUjpcdEFkZHJlc3MgcmFuZ2UuXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcdERhdGEgQWNjZXNzIE1vbml0b3JpbmcgdGFyZ2V0LlxuKyAqIEBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XHRwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS5cbiAgKiBATlJfREFNT1NfRklMVEVSX1RZUEVTOlx0TnVtYmVyIG9mIGZpbHRlciB0eXBlcy5cbiAgKlxuLSAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUXG4tICogYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZVxuLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICd0cmllZCcuICBJbiBjb250cmFzdCxcbi0gKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZFxuLSAqIGJ5IHRoZSBjb3JlIGxheWVyIGJlZm9yZSB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkXG4tICogYXMgJ3RyaWVkJy5cbisgKiBBbGwgdHlwZXMgZXhjZXB0IFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIsIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmRcbisgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0XG4rICogZGFtb25fb3BlcmF0aW9ucyBhcyBhIHBhcnQgb2Ygc2NoZW1lIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkXG4rICogYXMgJ3RyaWVkJy4gIEluIGNvbnRyYXN0LCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZFxuKyAqIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjb3JlIGxheWVyIGJlZm9yZVxuKyAqIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQgYXMgJ3RyaWVkJy5cbiAgKlxuICAqIFN1cHBvcnQgZm9yIHRoZSBvcGVyYXRpb25zLWhhbmRsZWQgZmlsdGVycyBkZXBlbmRzIG9uIHRoZSBydW5uaW5nXG4gICogXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuXG5AQCAtNDIwLDYgKzQyMSw3IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuIFx0REFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsXG4gXHREQU1PU19GSUxURVJfVFlQRV9BRERSLFxuIFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuK1x0REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxuIFx0TlJfREFNT1NfRklMVEVSX1RZUEVTLFxuIH07XG4gXG5AQCAtNDM0LDYgKzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuICAqXHRcdFx1MDAyNmRhbW9uX2N0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzXG4gICpcdFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULlxuICAqIEBzel9yYW5nZTpcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cbisgKiBAcmFuZ2VfbWluOlx0TWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXG4rICogQHJhbmdlX21heDpcdE1heGltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLlxuICAqXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcdTAwMjZkYW1vcy1cdTAwM2VhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaFxuICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGVcbkBAIC00NTAsNiArNDU0LDEwIEBAIHN0cnVjdCBkYW1vc19maWx0ZXIge1xuIFx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xuIFx0XHRpbnQgdGFyZ2V0X2lkeDtcbiBcdFx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4rXHRcdFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4rXHRcdH07XG4gXHR9O1xuIC8qIHByaXZhdGU6ICovXG4gXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuQEAgLTEwNjUsNyArMTA3Myw3IEBAIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIHVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuK3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIFxuIGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ1Y2IzNjcwMTlhZS4uZDlkNTZmNGJlMWE5NyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtNDY5LDExICs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4gICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbiAgKiBAbGFzdDpcdGlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuXG4rICogQG12Olx0XHR1c2UgbW92aW5nIHN1bS5cbiAgKiBAY3R4Olx0Y29udGV4dCBvZiBcdTAwMjZyLlxuICAqXG4gICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi5cbiAgKi9cbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG5AQCAtNDgzLDYgKzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuIFx0XHRpZiAobGFzdClcbiBcdFx0XHRzdW0gKz0gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSsrXSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbitcdFx0ZWxzZSBpZiAobXYpXG4rXHRcdFx0c3VtICs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSsrLCByLCBjdHgpICpcbitcdFx0XHRcdHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHN1bSArPSByLVx1MDAzZXByb2JlX2hpdHNbaSsrXSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdH1cbkBAIC02NTQsNiArNjU4LDcgQEAgYm9vbCBkYW1vc19maWx0ZXJfZm9yX29wcyhlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUpXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlxuK1x0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTEzMjgsNiArMTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcbiBcdFx0ZHN0LVx1MDAzZXN6X3JhbmdlID0gc3JjLVx1MDAzZXN6X3JhbmdlO1xuIFx0XHRicmVhaztcbitcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuK1x0XHRkc3QtXHUwMDNlcmFuZ2VfbWluID0gc3JjLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0ZHN0LVx1MDAzZXJhbmdlX21heCA9IHNyYy1cdTAwM2VyYW5nZV9tYXg7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjUwNiw3ICsyNTE1LDcgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuIFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGk7XG4gXHRpbnQgdGFyZ2V0X2lkeCA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHdzdW07XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbkBAIC0yNTQxLDYgKzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItXHUwMDNlYXIuc3RhcnQpO1xuIFx0XHRtYXRjaGVkID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbitcdFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcbitcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VyYW5nZV9taW4gXHUwMDNjPSB3c3VtIFx1MDAyNlx1MDAyNlxuK1x0XHRcdHdzdW0gXHUwMDNjPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0zNDQ5LDcgKzM0NjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxuIHtcbiBcdGlmICh1c2VfcHJvYmVfaGl0cylcbi1cdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xuK1x0XHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGZhbHNlLCBjdHgpO1xuIFx0aWYgKGxhc3QpXG4gXHRcdHJldHVybiByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XG4gXHRyZXR1cm4gci1cdTAwM2Vucl9hY2Nlc3NlcztcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggZDdjODE4Mjk0NDViYS4uYjhmNGQyODE2NWRkNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0fVxuIFx0cmV0dXJuIG1heF93c3VtO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggZDliODFkN2I1OTEwZS4uZDlkZDRlZTA0NDJjNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5AQCAtNTM0LDcgKzUzNCw4IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcbiBcdGJvb2wgYWxsb3c7XG4gXHRjaGFyICptZW1jZ19wYXRoO1xuIFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbi1cdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuK1x0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4rXHR1bnNpZ25lZCBsb25nIHJhbmdlX21heDtcbiBcdGludCB0YXJnZXRfaWR4O1xuIH07XG4gXG5AQCAtNTg4LDYgKzU4OSwxMCBAQCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0ge1xuIFx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcbiBcdFx0Lm5hbWUgPSBcInRhcmdldFwiLFxuIFx0fSxcbitcdHtcbitcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sXG4rXHRcdC5uYW1lID0gXCJwcm9iZV9oaXRzX3dzdW1cIixcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtNzc4LDcgKzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbiBcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbik7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2VyYW5nZV9taW4pO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtNzg2LDcgKzc5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuLVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbik7XG4rXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtNzk3LDcgKzgwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbiBcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtODA1LDcgKzgxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuLVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4rXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4KTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtMjgzNSwxMiArMjg0MCwyMSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbiBcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuIFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbi1cdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbiBcdTAwM2Vcbi1cdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCkge1xuK1x0XHRcdGlmIChzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzZVxuK1x0XHRcdFx0XHRzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4KSB7XG4rXHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuK1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXggPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkge1xuK1x0XHRcdGlmIChzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzZVxuK1x0XHRcdFx0XHRzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4KSB7XG4gXHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZTtcbitcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbiBcdFx0fVxuIFxuIFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggOWEzOGRjODlhMTU2ZS4uNGFlY2YzNGUzOWJlMiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC03MDQsNyArNzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpO1xuIFx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4gXHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG4tXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4rXHRcdFx0XHRcdFx0XHRmYWxzZSwgY3R4KSwgbWF4X3dzdW0pO1xuIFx0XHR9XG4gXHRcdGlmIChtbSlcbiBcdFx0XHRtbXB1dChtbSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjozNS44NDYxNzE3MzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzk3NzQzMjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIERBTU9OIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHRoZSBwYXRjaCdzIHJpc2sgYW5kIGlkZW50aWZ5IHRoZSBtb3N0IHByb21pc2luZyBhcmVhcyBmb3IgdGFyZ2V0ZWQgZnV6emluZywgYWxvbmcgd2l0aCBhbnkgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBjaGFuZ2VkLiBUaGUgZmlsZSBsaXN0IHRlbGxzIHRoZSBzdG9yeTogZG9jdW1lbnRhdGlvbiB1cGRhdGVzIChgLnJzdGAgZmlsZXMpLCBoZWFkZXIgbW9kaWZpY2F0aW9ucyAoYGRhbW9uLmhgKSwgYW5kIGNvcmUgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGAuY2AgZmlsZXMgd2l0aGluIHRoZSBgbW0vZGFtb25gIGRpcmVjdG9yeS4gVGhpcyBzdWdnZXN0cyBhIHNpZ25pZmljYW50IGFsdGVyYXRpb24gdG8gdGhlIERBTU9OIHN1YnN5c3RlbSdzIGJlaGF2aW9yLlxuXG5TcGVjaWZpY2FsbHksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZTogYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgKFwicHJvYmVfaGl0c193c3VtXCIpLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAgZnVuY3Rpb24sIGFkZGluZyBhIGJvb2xlYW4gYXJndW1lbnQgYG12YCB3aGljaCBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIGlzIG5vdyB1c2VkIGJ5IHNldmVyYWwgZnVuY3Rpb25zOiBgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoKWAsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZygpYCwgYGRhbW9zX2ZpbHRlcl9tYXRjaCgpYCwgYW5kIHN5c2ZzIGZpbHRlciBoYW5kbGluZy4gVGhpcyBzdWdnZXN0cyB0aGVyZSBhcmUgbmV3IHdheXMgdG8gY29udHJvbCB0aGUgZmlsdGVyJ3MgYmVoYXZpb3IuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbmV3IGZpbHRlciBkb2VzLCBpbiBwYXJ0aWN1bGFyIGhvdyB0aGUgbW92aW5nIHN1bSBpcyBpbXBsZW1lbnRlZCBhbmQgaW50ZWdyYXRlZCBpbnRvIHRoZSBleGlzdGluZyBmaWx0ZXIgc3lzdGVtLiBUaGlzIGlzIGEgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgREFNT04gY29kZSBhbmQgS2NvbmZpZyBvcHRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhpc3RpbmcgREFNT04gZmVhdHVyZXMgYW5kIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBVc2luZyBgZ3JlcHBlcmAgb3IgZGlnZ2luZyBpbnRvIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaW1wYWN0IG15IGZ1enppbmcgc2V0dXAg4oCTIGZvciBleGFtcGxlLCBkZWJ1ZyBvcHRpb25zLCB0cmFjaW5nLCBvciBsb2dnaW5nIHdoaWNoIHdvdWxkIGJlIGJlbmVmaWNpYWwgZHVyaW5nIHRoZSBmdXp6aW5nIHN0YWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTQ0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjI6MzkuNjQzOTE3MzYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg0NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnOjY6XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNy1cXHRoZWxwXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWc6MTY6XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxNzpcXHRkZXBlbmRzIG9uIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy0xOC1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxOTpcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG5tbS9kYW1vbi9LY29uZmlnOjIwOlxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxubW0vZGFtb24vS2NvbmZpZy0yMS1cXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZzoyODpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG5tbS9kYW1vbi9LY29uZmlnLTI5LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZy0zMC1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzozMTpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctMzItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo0MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL2RhbW9uL0tjb25maWctNDEtXFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxubW0vZGFtb24vS2NvbmZpZzo0MjpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy00My1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo0NDpcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTQ1LVxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo0OTpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL2RhbW9uL0tjb25maWctNTAtXFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxubW0vZGFtb24vS2NvbmZpZzo1MTpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy01Mi1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo1MzpcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTU0LVxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZzo1NzpcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZzo1ODpcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG5tbS9kYW1vbi9LY29uZmlnLTU5LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZy02MC1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo2MTpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy02Mi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnOjY5OlxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjcwOlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnOjcxOlxcdGRlZmF1bHQgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTcyLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjczOlxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxubW0vZGFtb24vS2NvbmZpZy03NC1cXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZzo3ODpcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG5tbS9kYW1vbi9LY29uZmlnLTc5LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxubW0vZGFtb24vS2NvbmZpZy04MC1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo4MTpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTgyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZzo4OTpcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjkwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTkxLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjkyOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXFxubW0vZGFtb24vS2NvbmZpZzo5MzpcXHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cXG5tbS9kYW1vbi9LY29uZmlnLTk0LVxcdCAgdGhvc2UuXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWc6MTAxOlxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMDI6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctMTAzLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjEwNDpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyBzdWJzeXN0ZW0uICBJdCB0cmllcyB0b1xcbm1tL2RhbW9uL0tjb25maWctMTA1LVxcdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZzoxMDk6XFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjExMDpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy0xMTEtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTEyOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIGFjY2VzcyBtb25pdG9yaW5nIHN0YXRpc3RpY3Mgc3Vic3lzdGVtLlxcbm1tL2RhbW9uL0tjb25maWc6MTEzOlxcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcXG5tbS9kYW1vbi9LY29uZmlnLTExNC1cXHQgIG1ldHJpY3MuXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZzoxMTc6XFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjExODpcXHRkZXBlbmRzIG9uIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnOjExOTpcXHRkZWZhdWx0IERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEyMC1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMjE6XFx0ICBXaGV0aGVyIHRvIGVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHQuICBVc2VycyBjYW4gZGlzYWJsZSBpdCBpblxcbm1tL2RhbW9uL0tjb25maWctMTIyLVxcdCAgYm9vdCBvciBydW50aW1lIHVzaW5nIGl0cyAnZW5hYmxlZCcgcGFyYW1ldGVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjozOS42ODk2MDc0ODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ0NjEwODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRXhhbWluaW5nIHRoZSBEQU1PTiBNYWtlZmlsZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYE1ha2VmaWxlYCBsb2NhdGVkIGluIGBtbS9kYW1vbmAuIE15IGdvYWwgaXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIERBTU9OIChEeW5hbWljIEFjY2VzcyBNb25pdG9yaW5nKSBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCBhbmQgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgaW5jbHVkZWQgYmFzZWQgb24gdmFyaW91cyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZywgY3VzdG9taXphdGlvbiwgYW5kIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgbGlua2VkIGluIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UsIGVzcGVjaWFsbHkgaWYgSSdtIHRhcmdldGluZyBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIG9yIHVzZSBjYXNlLiBJJ20gaG9waW5nIHRoaXMgYE1ha2VmaWxlYCB3aWxsIHF1aWNrbHkgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGJ1aWxkIGZsYWdzIGludm9sdmVkLCBnaXZpbmcgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIERBTU9OJ3MgYXJjaGl0ZWN0dXJlIGF0IGEgYnVpbGQgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjo0Mi4zMzQyMjAxMDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMjo0Mi4zMzQyOTY3OTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTY3MDYzOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIEZ1enppbmcgUmVhY2hhYmlsaXR5IGFuZCBGb2N1cyBTeW1ib2wgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSAqYWN0dWFsbHkqIHJlYWNoIERBTU9OIHRocm91Z2ggZnV6emluZz8gVGhlIGFuc3dlciBsb29rcyBwcm9taXNpbmcuIERBTU9OJ3Mgc3lzZnMgaW50ZXJmYWNlIGlzIGV4cG9zZWQgYXQgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2Agd2hlbiBgQ09ORklHX0RBTU9OX1NZU0ZTPXlgLCBhbmQgdGhhdCdzIGVhc2lseSBhY2Nlc3NpYmxlIGV2ZW4gaW4gYSBRRU1VLWJhc2VkIHNldHVwLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IERBTU9TIGZpbHRlciBsb2dpYywgaW5jbHVkaW5nIHBhcnNpbmcgd2l0aGluIHN5c2ZzLCBjb3JlIG1hdGNoaW5nIGxvZ2ljLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgZGFtb25fcHJvYmVfaGl0c193c3VtKClgIGFuZCBpdHMgY2FsbCBzaXRlcy4gR2l2ZW4gdGhhdCBEQU1PTiBpcyBwYXJ0IG9mIHRoZSBNTSBzdWJzeXN0ZW0sIGFuZCB3ZSdyZSBpbnRlcmFjdGluZyB3aXRoIHN5c2ZzLCBpdCdzIGRlZmluaXRlbHkgd2l0aGluIHJlYWNoIGZvciBmdXp6aW5nLiBUaGUgc3Vic3lzdGVtIGlzIE1NL0RBTU9OIGFuZCBcIldvcnRoRnV6emluZ1wiID0gdHJ1ZS5cblxuTm93LCB3aGljaCBzeW1ib2xzIHNob3VsZCB3ZSB0YXJnZXQ/IExldCdzIGlkZW50aWZ5IHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucy4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIHdlJ3ZlIGdvdDogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfZm9yX29wc2AsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AsIGBkYW1vc19maWx0ZXJfbWF0Y2hgICh3aGljaCBpcyBzdGF0aWMsIHNvIHdlIG5lZWQgdG8gY2hlY2sgY2FsbGVycyB0byB1bmRlcnN0YW5kIGl0cyBicm9hZGVyIHJlYWNoKSwgYW5kIGBkYW1vbl9tZXJnZV9zY29yZWAuICBPdmVyIGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIHJlc3BlY3RpdmVseSwgYXJlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMsIG9yLCBhdCBsZWFzdCwgdGhlaXIgY2FsbGVycy4gRmluYWxseSwgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHdlJ3ZlIGdvdCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCwgYG1pbl9zdG9yZWAsIGBtaW5fc2hvd2AsIGBtYXhfc3RvcmVgLCBhbmQgYG1heF9zaG93YC5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBkZWVwZXIgaW50byBgbW0vZGFtb24vY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAyNTAwLTI2MDAsIHRvIHVuZGVyc3RhbmQgaG93IGBkYW1vc19maWx0ZXJfbWF0Y2hgIGlzIGNhbGxlZC4gVGhhdCdsbCBoZWxwIGNsYXJpZnkgaXRzIHJvbGUgYW5kIHByaW9yaXRpemUgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgYXJlIG1vc3QgbGlrZWx5IHRvIHByb3ZpZGUgZ29vZCBjb3ZlcmFnZSB0aHJvdWdoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjI6NDcuOTAxMzYyNTM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTA1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTA1OlxcdFxcdGlmIChzel9hcHBsaWVkKVxcbjI1MDY6XFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5ucl9hcHBsaWVkKys7XFxuMjUwNzpcXHRcXHRzLVxcdTAwM2VzdGF0LnN6X2FwcGxpZWQgKz0gc3pfYXBwbGllZDtcXG4yNTA4OlxcdFxcdHMtXFx1MDAzZXN0YXQuc3pfb3BzX2ZpbHRlcl9wYXNzZWQgKz0gc3pfb3BzX2ZpbHRlcl9wYXNzZWQ7XFxuMjUwOTpcXHR9XFxuMjUxMDpcXHRcXG4yNTExOlxcdHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjUxMjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuMjUxMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuMjUxNDpcXHR7XFxuMjUxNTpcXHRcXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcXG4yNTE2OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xcbjI1MTc6XFx0XFx0aW50IHRhcmdldF9pZHggPSAwO1xcbjI1MTg6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtO1xcbjI1MTk6XFx0XFxuMjUyMDpcXHRcXHRzd2l0Y2ggKGZpbHRlci1cXHUwMDNldHlwZSkge1xcbjI1MjE6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XFxuMjUyMjpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodGksIGN0eCkge1xcbjI1MjM6XFx0XFx0XFx0XFx0aWYgKHRpID09IHQpXFxuMjUyNDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNTI1OlxcdFxcdFxcdFxcdHRhcmdldF9pZHgrKztcXG4yNTI2OlxcdFxcdFxcdH1cXG4yNTI3OlxcdFxcdFxcdG1hdGNoZWQgPSB0YXJnZXRfaWR4ID09IGZpbHRlci1cXHUwMDNldGFyZ2V0X2lkeDtcXG4yNTI4OlxcdFxcdFxcdGJyZWFrO1xcbjI1Mjk6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxcbjI1MzA6XFx0XFx0XFx0c3RhcnQgPSBBTElHTl9ET1dOKGZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZS5zdGFydCwgbWluX3JlZ2lvbl9zeik7XFxuMjUzMTpcXHRcXHRcXHRlbmQgPSBBTElHTl9ET1dOKGZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZS5lbmQsIG1pbl9yZWdpb25fc3opO1xcbjI1MzI6XFx0XFxuMjUzMzpcXHRcXHRcXHQvKiBpbnNpZGUgdGhlIHJhbmdlICovXFxuMjUzNDpcXHRcXHRcXHRpZiAoc3RhcnQgXFx1MDAzYz0gci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAyNlxcdTAwMjYgci1cXHUwMDNlYXIuZW5kIFxcdTAwM2M9IGVuZCkge1xcbjI1MzU6XFx0XFx0XFx0XFx0bWF0Y2hlZCA9IHRydWU7XFxuMjUzNjpcXHRcXHRcXHRcXHRicmVhaztcXG4yNTM3OlxcdFxcdFxcdH1cXG4yNTM4OlxcdFxcdFxcdC8qIG91dHNpZGUgb2YgdGhlIHJhbmdlICovXFxuMjUzOTpcXHRcXHRcXHRpZiAoci1cXHUwMDNlYXIuZW5kIFxcdTAwM2M9IHN0YXJ0IHx8IGVuZCBcXHUwMDNjPSByLVxcdTAwM2Vhci5zdGFydCkge1xcbjI1NDA6XFx0XFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbjI1NDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjU0MjpcXHRcXHRcXHR9XFxuMjU0MzpcXHRcXHRcXHQvKiBzdGFydCBiZWZvcmUgdGhlIHJhbmdlIGFuZCBvdmVybGFwICovXFxuMjU0NDpcXHRcXHRcXHRpZiAoci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzYyBzdGFydCkge1xcbjI1NDU6XFx0XFx0XFx0XFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN0YXJ0IC0gci1cXHUwMDNlYXIuc3RhcnQpO1xcbjI1NDY6XFx0XFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbjI1NDc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjU0ODpcXHRcXHRcXHR9XFxuMjU0OTpcXHRcXHRcXHQvKiBzdGFydCBpbnNpZGUgdGhlIHJhbmdlICovXFxuMjU1MDpcXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgZW5kIC0gci1cXHUwMDNlYXIuc3RhcnQpO1xcbjI1NTE6XFx0XFx0XFx0bWF0Y2hlZCA9IHRydWU7XFxuMjU1MjpcXHRcXHRcXHRicmVhaztcXG4yNTUzOlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxcbjI1NTQ6XFx0XFx0XFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcXG4yNTU1OlxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZXJhbmdlX21pbiBcXHUwMDNjPSB3c3VtIFxcdTAwMjZcXHUwMDI2XFxuMjU1NjpcXHRcXHRcXHRcXHR3c3VtIFxcdTAwM2M9IGZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4O1xcbjI1NTc6XFx0XFx0XFx0YnJlYWs7XFxuMjU1ODpcXHRcXHRkZWZhdWx0OlxcbjI1NTk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjI1NjA6XFx0XFx0fVxcbjI1NjE6XFx0XFxuMjU2MjpcXHRcXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXFx1MDAzZW1hdGNoaW5nO1xcbjI1NjM6XFx0fVxcbjI1NjQ6XFx0XFxuMjU2NTpcXHRzdGF0aWMgYm9vbCBkYW1vc19jb3JlX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI1NjY6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbjI1Njc6XFx0e1xcbjI1Njg6XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbjI1Njk6XFx0XFxuMjU3MDpcXHRcXHRzLVxcdTAwM2Vjb3JlX2ZpbHRlcnNfYWxsb3dlZCA9IGZhbHNlO1xcbjI1NzE6XFx0XFx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXIoZmlsdGVyLCBzKSB7XFxuMjU3MjpcXHRcXHRcXHRpZiAoZGFtb3NfZmlsdGVyX21hdGNoKGN0eCwgdCwgciwgZmlsdGVyLCBjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxuMjU3MzpcXHRcXHRcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VhbGxvdylcXG4yNTc0OlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZWNvcmVfZmlsdGVyc19hbGxvd2VkID0gdHJ1ZTtcXG4yNTc1OlxcdFxcdFxcdFxcdHJldHVybiAhZmlsdGVyLVxcdTAwM2VhbGxvdztcXG4yNTc2OlxcdFxcdFxcdH1cXG4yNTc3OlxcdFxcdH1cXG4yNTc4OlxcdFxcdHJldHVybiBzLVxcdTAwM2Vjb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7XFxuMjU3OTpcXHR9XFxuMjU4MDpcXHRcXG4yNTgxOlxcdC8qXFxuMjU4MjpcXHQgKiBkYW1vc193YWxrX2NhbGxfd2FsaygpIC0gQ2FsbCBcXHUwMDI2ZGFtb3Nfd2Fsa19jb250cm9sLVxcdTAwM2V3YWxrX2ZuLlxcbjI1ODM6XFx0ICogQGN0eDpcXHRUaGUgY29udGV4dCBvZiBcXHUwMDI2ZGFtb25fY3R4LVxcdTAwM2V3YWxrX2NvbnRyb2wuXFxuMjU4NDpcXHQgKiBAdDpcXHRcXHRUaGUgbW9uaXRvcmluZyB0YXJnZXQgb2YgQHIgdGhhdCBAcyB3aWxsIGJlIGFwcGxpZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIyOjQ3LjkwMTUzNDI3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjQ4ODI1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIERhbW9zIEZpbHRlcmluZyBMb2dpYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZpbHRlcmluZyB3b3JrcyB3aXRoaW4gdGhlIGBkYW1vc2AgZnJhbWV3b3JrLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGhvdyBkYXRhIGlzIGJlaW5nIGZpbHRlcmVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGBkYW1vc19hcHBseV9zY2hlbWVgIGJlY2F1c2UgdGhhdCBsb29rcyBsaWtlIGEgbGlrZWx5IGVudHJ5IHBvaW50IGZvciBhcHBseWluZyB0aGUgZmlsdGVyaW5nIHJ1bGVzLiBBZGRpdGlvbmFsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZGFtb3NfY29yZV9maWx0ZXJfb3V0YCBvciBgZGFtb3NfZmlsdGVyX21hdGNoYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGUgYWN0dWFsIGZpbHRlcmluZyBkZWNpc2lvbnMuIFRyYWNpbmcgdGhvc2UgY2FsbHMgYW5kIHdoZXJlIHRoZXkncmUgdXNlZCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIHRoZSBvdmVyYWxsIGZpbHRlcmluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIyOjQ5Ljg2NjQxOTk2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2OTk0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfY29yZV9maWx0ZXJfb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNTExPXN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjU2NC1cXG5tbS9kYW1vbi9jb3JlLmM6MjU2NTpzdGF0aWMgYm9vbCBkYW1vc19jb3JlX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0yNTY2LVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjk5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NDUtXFx0XFx0fVxcbm1tL2RhbW9uL2NvcmUuYzoyNzQ2OlxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxubW0vZGFtb24vY29yZS5jLTI3NDctXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzMDQ9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzQ5LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL2NvcmUuYzozMzUwOlxcdFxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxubW0vZGFtb24vY29yZS5jLTMzNTEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIyOjQ5LjkxMTEyNjYwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Njk5MDg1ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBnZXQgYSBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEkgc2VlIGEgcHJldHR5IGNvbmNlbnRyYXRlZCBhcmVhIG9mIG1vZGlmaWNhdGlvbiwgcHJpbWFyaWx5IGluIHRoZSBEQU1PTiBjb3JlIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBzeXNmcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbG9vayBhdDpcblxuKiAgIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb3NfZmlsdGVyX2Zvcl9vcHNgLCBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgLCBgZGFtb3NfZmlsdGVyX21hdGNoYCwgYW5kIGBkYW1vbl9tZXJnZV9zY29yZWAsIGFsbCBpbiBgbW0vZGFtb24vY29yZS5jYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgaGVhcnQgb2YgdGhlIERBTU9OIG9wZXJhdGlvbi5cbiogICBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AgcmVzcGVjdGl2ZWx5LiBJJ20gZ3Vlc3NpbmcgdGhlc2UgaGFuZGxlIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgcHJvYmVzIHRvIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Nlcy5cbiogICBgbWluX3Nob3dgLCBgbWluX3N0b3JlYCwgYG1heF9zaG93YCwgYG1heF9zdG9yZWAgYW5kIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnNgIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBTeXNmcyBpcyBob3cgd2UgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsLCBzbyB0aGVzZSBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB1c2VyIGNvbnRyb2xzIHRoZSBEQU1PTiBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGF0IGBkYW1vc19maWx0ZXJfZm9yX29wc2AgZnVuY3Rpb24gaW4gYGNvcmUuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBmaWx0ZXJpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbXBhY3Qgd2hhdCBvcGVyYXRpb25zIHRoZSBmaWx0ZXIgaXMgY29uc2lkZXJpbmcgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIyOjU0LjYxMDIxNTQ0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMzI2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfZmlsdGVyX2Zvcl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTYzND1zdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02NDktLyoqXFxubW0vZGFtb24vY29yZS5jOjY1MDogKiBkYW1vc19maWx0ZXJfZm9yX29wcygpIC0gUmV0dXJuIGlmIHRoZSBmaWx0ZXIgaXMgb3BzLWhhbmRsZWQgb25lLlxcbm1tL2RhbW9uL2NvcmUuYy02NTEtICogQHR5cGU6XFx0dHlwZSBvZiB0aGUgZmlsdGVyLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTY1NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NjU2OmJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxcbm1tL2RhbW9uL2NvcmUuYy02NTcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTY2OT12b2lkIGRhbW9zX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy02NzAte1xcbm1tL2RhbW9uL2NvcmUuYzo2NzE6XFx0aWYgKGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGYtXFx1MDAzZXR5cGUpKVxcbm1tL2RhbW9uL2NvcmUuYy02NzItXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Zi1cXHUwMDNlbGlzdCwgXFx1MDAyNnMtXFx1MDAzZW9wc19maWx0ZXJzKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02MTU9c3RhdGljIGJvb2wgZGFtb3Nfc3lzZnNfc2NoZW1lX2ZpbHRlcl92YWxpZF90eXBlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYyMi1cXHRjYXNlIERBTU9TX1NZU0ZTX0ZJTFRFUl9IQU5ETEVfTEFZRVJfQ09SRTpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjIzOlxcdFxcdHJldHVybiAhZGFtb3NfZmlsdGVyX2Zvcl9vcHModHlwZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYyNC1cXHRjYXNlIERBTU9TX1NZU0ZTX0ZJTFRFUl9IQU5ETEVfTEFZRVJfT1BTOlxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MjU6XFx0XFx0cmV0dXJuIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKHR5cGUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MjYtXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjI6NTQuNjU3NTU0MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ5MjkzOTQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBQcm9iZSBIaXRzIFdlaWdodGVkIFN1bSBGaWx0ZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QuIEkndmUgZ290IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYC4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlc2UgYWdhaW5zdCB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUgaXRzZWxmIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBMb29rcyBsaWtlIHRob3NlIGFyZSBhbGwgdGhlcmUsIGFuZCBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgIGNvcnJlY3RseSBkZXBlbmQgb24gYERBTU9OIFx1MDAyNlx1MDAyNiBNTVVgLCBhbmQgYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNgLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgd2hpY2ggZmlsZXMgYXJlIGFjdHVhbGx5ICp0b3VjaGVkKiBieSB0aGlzIHBhdGNoLiBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIEtjb25maWcgZGVwZW5kZW5jeSBjaGVja3MsIGFzIHRoZXNlIGFyZSBidWlsdCB3aXRoIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fVkFERFJgLCByZXNwZWN0aXZlbHkuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSwgbm9uLXViaXF1aXRvdXMgc3ltYm9scyBpbXBhY3RlZC4gSSdtIGZvY3VzaW5nIG9uIHRob3NlIHNwZWNpZmljIHRvIHRoaXMgZmVhdHVyZTogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBgZGFtb3NfZmlsdGVyX2Zvcl9vcHNgLCBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCwgYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AsIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX21lcmdlX3Njb3JlYC4gSSdtIGNvbmZpZGVudCB0aG9zZSBzeW1ib2xzIHNob3VsZCBiZSBzcGVjaWZpYyB0byBEQU1PTiBhbmQgbm90IGdlbmVyaWMgTU0gZnVuY3Rpb25zLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhleSBleGlzdCBhbmQgYXJlIG5vbi11YmlxdWl0b3VzLiBUaGV5IGFyZSwgYW5kIHRoZXkgYXJlLlxuXG5Ob3csIGxldCdzIGFzc2VtYmxlIHRoZSByYXRpb25hbGUuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCAoXCJwcm9iZV9oaXRzX3dzdW1cIikgZmlsdGVyIHRvIERBTU9OL0RBTU9TIHNjaGVtZXMuIFRoaXMgYWxsb3dzIGZpbHRlcmluZyBtZW1vcnkgcmVnaW9ucyBiYXNlZCBvbiB0aGVpciBwcm9iZSBoaXQgd2VpZ2h0ZWQgc3VtIHJhbmdlLiBUaGUgbW9kaWZpY2F0aW9ucyB0b3VjaCBEQU1PTidzIGNvcmUgZmlsdGVyaW5nIGxvZ2ljIChgZGFtb3NfZmlsdGVyX21hdGNoYCwgYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzYCwgYW5kIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gKSwgdGhlIHN5c2ZzIHNjaGVtZSBmaWx0ZXIgaW5nZXN0aW9uIHZpYSBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCwgYW5kIHNjaGVtZSBhcHBsaWNhdGlvbiBsb2dpYyBmb3IgYm90aCBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy4gVGhlc2UgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIHZhbGlkIHRhcmdldHMuIFNvIHRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1ZBRERSYC5cblxuU2VlbXMgbGlrZSBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk0OSwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MDEuMTUwNDk3NzU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0ODAwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9zX2ZpbHRlcl9mb3Jfb3BzXCIsXG4gICAgXCJkYW1vc19jb21taXRfZmlsdGVyX2FyZ1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fbWVyZ2Vfc2NvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gLyAncHJvYmVfaGl0c193c3VtJykgaW4gREFNT04sIHVwZGF0aW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYywgc3lzZnMgY29uZmlndXJhdGlvbiBoYW5kbGluZywgYW5kIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbGN1bGF0aW9ucyBhY3Jvc3MgREFNT04gY29yZSwgcGFkZHIsIGFuZCB2YWRkciBvcGVyYXRpb25zLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3Byb2JlX2hpdHNfd3N1bVwiLFxuICAgIFwiZGFtb3NfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vc19maWx0ZXJfZm9yX29wc1wiLFxuICAgIFwiZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc1wiLFxuICAgIFwiZGFtb25fcGFfYXBwbHlfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX21lcmdlX3Njb3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZSAoREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNIC8gJ3Byb2JlX2hpdHNfd3N1bScpIGluIERBTU9OLCB1cGRhdGluZyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMsIHN5c2ZzIGNvbmZpZ3VyYXRpb24gaGFuZGxpbmcsIGFuZCBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBjYWxjdWxhdGlvbnMgYWNyb3NzIERBTU9OIGNvcmUsIHBhZGRyLCBhbmQgdmFkZHIgb3BlcmF0aW9ucy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjAxLjIzNTk4NTI4NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTM5MDY5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzowMS4yMzY2MTU1MTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NjYxMzI3MDY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgZmlsdGVyIHR5cGUgZm9yIERBTU9OIHNjaGVtZXMsIGV4dGVuZGluZyBzeXNmcyBhdHRyaWJ1dGVzIChgbWluYCBhbmQgYG1heGApIGFuZCBjb3JlIGZpbHRlciBtYXRjaGluZyB0byB1c2UgdGhlIHByb2JlIGhpdHMgd2VpZ2h0ZWQgbW92aW5nIHN1bS4gXFxuXFxuLSBNZW1vcnkgQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBTeXNmcyBzY2hlbWUgZmlsdGVyIHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBlbnN1cmluZyBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEluIERBTU9OIGNvcmUsIGZpbHRlciBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdXBvbiBjcmVhdGlvbiBhbmQgZmlsdGVyIGFyZ3VtZW50cyBjb21taXQuXFxuLSBVc2VyLXNwYWNlIERhdGEgVHJhbnNmZXI6IFN5c2ZzIG91dHB1dCB1c2VzIGZvcm1hdHRlZCBzdHJpbmcgZW1pc3Npb25zIHZpYSBgc3lzZnNfZW1pdCgpYCwgd2l0aCBubyByYXcgc3RydWN0IGNvcGllcyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLlxcbi0gVmFyaWFibGVzIGFuZCBCcmFuY2hpbmc6IEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhlIHdlaWdodGVkIHN1bSBjYWxjdWxhdGlvbiBhbmQgZmlsdGVyIG1hdGNoaW5nIChgc3VtYCwgYGlgLCBgd3N1bWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIG1lY2hhbmlzbXMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmM5MDAxYmQ5OWY5Zjc2NmI5NmRhZGY1ZTc5M2RlMTBhZjc2MGRiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDE1OjIyOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTU1MSw2ICs1NTEsMTAgQEAgYW5kIGBgZGFtb25fdGFyZ2V0X2lkeGBgLiAgVG8gYGB0eXBlYGAgZmlsZSwgeW91IGNhbiB3cml0ZSB0aGUgdHlwZSBvZiB0aGVcbiBmaWx0ZXIuICBSZWZlciB0byA6cmVmOmB0aGUgZGVzaWduIGRvYyBcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVyc1x1MDAzZWAgZm9yXG4gYXZhaWxhYmxlIHR5cGUgbmFtZXMsIHRoZWlyIG1lYW5pbmcgYW5kIG9uIHdoYXQgbGF5ZXIgdGhvc2UgYXJlIGhhbmRsZWQuXG4gXG4rRm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlXG4raGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcyxcbityZXNwZWN0aXZlbHkuXG4rXG4gRm9yIGBgbWVtY2dgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1lbW9yeSBjZ3JvdXAgb2YgdGhlIGludGVyZXN0IGJ5XG4gd3JpdGluZyB0aGUgcGF0aCBvZiB0aGUgbWVtb3J5IGNncm91cCBmcm9tIHRoZSBjZ3JvdXBzIG1vdW50IHBvaW50IHRvXG4gYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmRcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbmluZGV4IGFhYzg0ZGUyNjFhYTguLjhlOTgwZGRlMzYyZGUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTgyMiw2ICs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gYWRkcmVzcyByYW5nZS5cbiAgICAgLSB0YXJnZXRcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LlxuKyAgICAtIHByb2JlX2hpdHNfd3N1bVxuKyAgICAgICAgLSBNYXRjaGVzIHRvIG1vbml0b3JpbmcgcmVnaW9ucyBoYXZpbmcgYSBnaXZlbiByYW5nZSBvZiA6cmVmOmBwcm9iZVxuKyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSBcdTAwM2NkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nXHUwMDNlYCB2YWx1ZS5cbiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LlxuICAgICAtIGFub25cbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IG5vdCBzdG9yZWQgaW4gZmlsZXMuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0zOTksMTQgKzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7XG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVEOlx0VW5tYXBwZWQgcGFnZXMuXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XHRBZGRyZXNzIHJhbmdlLlxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XHREYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC5cbisgKiBAREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlx0cHJvYmVfaGl0cyB3ZWlnaHRlZCBzdW0gcmFuZ2UuXG4gICogQE5SX0RBTU9TX0ZJTFRFUl9UWVBFUzpcdE51bWJlciBvZiBmaWx0ZXIgdHlwZXMuXG4gICpcbi0gKiBBbGwgdHlwZXMgZXhjZXB0IFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVFxuLSAqIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWVcbi0gKiBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZCBhcyAndHJpZWQnLiAgSW4gY29udHJhc3QsXG4tICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWRcbi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZFxuLSAqIGFzICd0cmllZCcuXG4rICogQWxsIHR5cGVzIGV4Y2VwdCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSLCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgYW5kXG4rICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdFxuKyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZFxuKyAqIGFzICd0cmllZCcuICBJbiBjb250cmFzdCwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmRcbisgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmVcbisgKiB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkIGFzICd0cmllZCcuXG4gICpcbiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZ1xuICAqIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLlxuQEAgLTQyMCw2ICs0MjEsNyBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHtcbiBcdERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVELFxuIFx0REFNT1NfRklMVEVSX1RZUEVfQUREUixcbiBcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcbitcdERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcbiBcdE5SX0RBTU9TX0ZJTFRFUl9UWVBFUyxcbiB9O1xuIFxuQEAgLTQzNCw2ICs0MzYsOCBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHtcbiAgKlx0XHRcdTAwMjZkYW1vbl9jdHgtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpc1xuICAqXHRcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC5cbiAgKiBAc3pfcmFuZ2U6XHRTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuXG4rICogQHJhbmdlX21pbjpcdE1pbmltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLlxuKyAqIEByYW5nZV9tYXg6XHRNYXhpbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDUwLDYgKzQ1NCwxMCBAQCBzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcbiBcdFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbiBcdFx0aW50IHRhcmdldF9pZHg7XG4gXHRcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O1xuK1x0XHR9O1xuIFx0fTtcbiAvKiBwcml2YXRlOiAqL1xuIFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbkBAIC0xMDY1LDcgKzEwNzMsNyBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiBcbiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NWNiMzY3MDE5YWUuLmQ5ZDU2ZjRiZTFhOTcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTQ2OSwxMSArNDY5LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxuICAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG4gICogQGxhc3Q6XHRpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLlxuKyAqIEBtdjpcdFx0dXNlIG1vdmluZyBzdW0uXG4gICogQGN0eDpcdGNvbnRleHQgb2YgXHUwMDI2ci5cbiAgKlxuICAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXG4gICovXG4tdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4rdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xuQEAgLTQ4Myw2ICs0ODQsOSBAQCB1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiBcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbiBcdFx0aWYgKGxhc3QpXG4gXHRcdFx0c3VtICs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4rXHRcdGVsc2UgaWYgKG12KVxuK1x0XHRcdHN1bSArPSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkrKywgciwgY3R4KSAqXG4rXHRcdFx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHRcdGVsc2VcbiBcdFx0XHRzdW0gKz0gci1cdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHR9XG5AQCAtNjU0LDYgKzY1OCw3IEBAIGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuIFx0c3dpdGNoICh0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbitcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbkBAIC0xMzI4LDYgKzEzMzMsMTAgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkU6XG4gXHRcdGRzdC1cdTAwM2Vzel9yYW5nZSA9IHNyYy1cdTAwM2Vzel9yYW5nZTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbitcdFx0ZHN0LVx1MDAzZXJhbmdlX21pbiA9IHNyYy1cdTAwM2VyYW5nZV9taW47XG4rXHRcdGRzdC1cdTAwM2VyYW5nZV9tYXggPSBzcmMtXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1MDYsNyArMjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xuIFx0aW50IHRhcmdldF9pZHggPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtO1xuIFxuIFx0c3dpdGNoIChmaWx0ZXItXHUwMDNldHlwZSkge1xuIFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG5AQCAtMjU0MSw2ICsyNTUwLDExIEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLVx1MDAzZWFyLnN0YXJ0KTtcbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4rXHRcdHdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7XG4rXHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzYz0gd3N1bSBcdTAwMjZcdTAwMjZcbitcdFx0XHR3c3VtIFx1MDAzYz0gZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtMzQ0OSw3ICszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcbiB7XG4gXHRpZiAodXNlX3Byb2JlX2hpdHMpXG4tXHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcbitcdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBmYWxzZSwgY3R4KTtcbiBcdGlmIChsYXN0KVxuIFx0XHRyZXR1cm4gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xuIFx0cmV0dXJuIHItXHUwMDNlbnJfYWNjZXNzZXM7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbiBcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbi1cdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbitcdFx0XHRcdFx0XHRcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiBtYXhfd3N1bTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbmluZGV4IGQ5YjgxZDdiNTkxMGUuLmQ5ZGQ0ZWUwNDQyYzcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTUzNCw3ICs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XG4gXHRib29sIGFsbG93O1xuIFx0Y2hhciAqbWVtY2dfcGF0aDtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4tXHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbitcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuK1x0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4gXHRpbnQgdGFyZ2V0X2lkeDtcbiB9O1xuIFxuQEAgLTU4OCw2ICs1ODksMTAgQEAgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbiBcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsXG4gXHRcdC5uYW1lID0gXCJ0YXJnZXRcIixcbiBcdH0sXG4rXHR7XG4rXHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxuK1x0XHQubmFtZSA9IFwicHJvYmVfaGl0c193c3VtXCIsXG4rXHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc3OCw3ICs3ODMsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsdVxcblwiLCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc4Niw3ICs3OTEsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuK1x0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXJhbmdlX21pbik7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7XG4gfVxuQEAgLTc5Nyw3ICs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsdVxcblwiLCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4KTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTgwNSw3ICs4MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuK1x0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXJhbmdlX21heCk7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7XG4gfVxuQEAgLTI4MzUsMTIgKzI4NDAsMjEgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpzY2hlbWUsXG4gXHRcdH0gZWxzZSBpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7XG4gXHRcdFx0ZmlsdGVyLVx1MDAzZXRhcmdldF9pZHggPSBzeXNmc19maWx0ZXItXHUwMDNldGFyZ2V0X2lkeDtcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFKSB7XG4tXHRcdFx0aWYgKHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gXHUwMDNlXG4tXHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpIHtcbitcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbitcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuK1x0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbitcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcbitcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbitcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuIFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UgPSBzeXNmc19maWx0ZXItXHUwMDNlc3pfcmFuZ2U7XG4rXHRcdFx0ZmlsdGVyLVx1MDAzZXJhbmdlX21pbiA9IHN5c2ZzX2ZpbHRlci1cdTAwM2VyYW5nZV9taW47XG4rXHRcdFx0ZmlsdGVyLVx1MDAzZXJhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2VyYW5nZV9tYXg7XG4gXHRcdH1cbiBcbiBcdFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IDlhMzhkYzg5YTE1NmUuLjRhZWNmMzRlMzliZTIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNzA0LDcgKzcwNCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0XHRpZiAobW0pXG4gXHRcdFx0bW1wdXQobW0pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MDEuMjM2NjE2NjY0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4ODI0Njg3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBpbiBhIERBTU9OIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHdhcnJhbnQgS01TQU4gZnV6emluZy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGluIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLiBUaGF0J3MgYSBuZXcgZmlsdGVyIHR5cGUuIE1vcmUgaW1wb3J0YW50bHksIHRoZSBgc3RydWN0IGRhbW9zX2ZpbHRlcmAgdW5pb24gaXMgbW9kaWZpZWQuIEkgc2VlIGEgYGNoYXIgKm1lbWNnX3BhdGhgLCBgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VgLCBgaW50IHRhcmdldF9pZHhgLCBhbmQgdGhlbiBgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2VgLiBCdXQgd2FpdC4uLnRoYXQgdW5pb24gaGFzIGJlZW4gbW9kaWZpZWQsIGl0IHNlZW1zIHRoYXQgYHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlYCBpcyBubyBsb25nZXIgdGhlcmUgYW5kIGluc3RlYWQgd2UgaGF2ZSBgdW5zaWduZWQgbG9uZyByYW5nZV9taW47IHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O2AuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZWAgZGVmaW5pdGlvbiwgc28gSSdsbCBncmVwIGZvciBpdCB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcuXG5cbk5leHQsIGxvb2tpbmcgYXQgYG1tL2RhbW9uL2NvcmUuY2AsIEkgc2VlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIHdpdGggYSBuZXcgYG12YCBwYXJhbWV0ZXIuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGhhbmRsaW5nIGl0IGNvcnJlY3RseSBpbiBpdHMgdGhyZWUgZGlzdGluY3QgYnJhbmNoZXMgb2YgYGRhbW9uX2Zvcl9lYWNoX3Byb2JlYC4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gSSBzZWUgYSBuZXcgZW50cnkgaW4gYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzYCBmb3IgdGhlIG5ldyBgUFJPQkVfSElUU19XU1VNYCBjYXNlIHdoaWNoIHJldHVybnMgYGZhbHNlYC4gVGhlbiB0aGVyZSdzIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AgdGhhdCBhcHBlYXJzIHRvIGhhbmRsZSB0aGUgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFzc2lnbm1lbnRzIHdoaWNoIGlzIGNvcnJlY3QgZ2l2ZW4gdGhlIG5ldyBzdHJ1Y3QuIEluIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCB0aGUgbG9naWMgZm9yIHRoZSBuZXcgZmlsdGVyIHR5cGUgc2VlbXMgc291bmQuIEl0J3MgY2FsbGluZyBgZGFtb25fcHJvYmVfaGl0c193c3VtYCAod2hpY2ggc2hvdWxkIG5vdyBiZSBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgZ2l2ZW4gdGhlIGNoYW5nZSksIGFuZCB0aGVuIGNoZWNraW5nIHRoZSByYW5nZS4gVGhlIGNhbGxlcnMgb2YgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAgaGF2ZSBhbHNvIGJlZW4gdXBkYXRlZCwgd2hpY2ggaXMgZ29vZC5cblxuRmluYWxseSwgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHRoZSByZW1vdmFsIG9mIGBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZWAgYW5kIHRoZSBkaXJlY3QgaW5jbHVzaW9uIG9mIGB1bnNpZ25lZCBsb25nIHJhbmdlX21pbjsgdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7YCBpbiBgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGNvbmZpcm1zIG15IGluaXRpYWwgb2JzZXJ2YXRpb24uIFRoZSBzdWJzZXF1ZW50IHVwZGF0ZXMgdG8gdGhlIHN5c2ZzIHNob3cvc3RvcmUgZnVuY3Rpb25zIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCBzZWVtIGxvZ2ljYWwgZ2l2ZW4gdGhpcyBjaGFuZ2UuXG5cbk5vdywgdG8gYmUgcmVhbGx5IHN1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb250ZXh0LiBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhcm91bmQgdGhlIERBTU9OIHN5c2ZzLCBob3cgdGhlIGZpbHRlcnMgYXJlIGNyZWF0ZWQsIGFuZCBwYXJ0aWN1bGFybHksIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBwbGFjZSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gc25lYWsgaW4uIEkgbmVlZCB0byBsZWF2ZSBubyBzdG9uZSB1bnR1cm5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjA3LjExOTA4ODQ0OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2MzQ3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTcwLVxcbm1tL2RhbW9uL2NvcmUuYzoxNzE6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXFxubW0vZGFtb24vY29yZS5jLTE3Mi1cXHRcXHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4MTU9c3RhdGljIGludCBkYW1vbl9jb21taXRfZmlsdGVycyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODMyLVxcbm1tL2RhbW9uL2NvcmUuYzoxODMzOlxcdFxcdG5ld19maWx0ZXIgPSBkYW1vbl9uZXdfZmlsdGVyKHNyY19maWx0ZXItXFx1MDAzZXR5cGUsXFxubW0vZGFtb24vY29yZS5jLTE4MzQtXFx0XFx0XFx0XFx0c3JjX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsIHNyY19maWx0ZXItXFx1MDAzZWFsbG93KTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjE5OT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDgtXFxubW0vZGFtb24vc3lzZnMuYzoyMjA5OlxcdFxcdGZpbHRlciA9IGRhbW9uX25ld19maWx0ZXIoc3lzX2ZpbHRlci1cXHUwMDNldHlwZSxcXG5tbS9kYW1vbi9zeXNmcy5jLTIyMTAtXFx0XFx0XFx0XFx0c3lzX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjA3LjE3NTcyODc4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODY4Mzc3MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyB0aGUgTmV3IEZpbHRlcidzIEludGVncmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBnaXZlIGBkYW1vc19uZXdfZmlsdGVyYCBhIHRob3JvdWdoIGdvaW5nLW92ZXIuIEkga25vdyB3ZSd2ZSB0ZXN0ZWQgdGhlIGluZGl2aWR1YWwgY29tcG9uZW50cywgYW5kIHRoZSBwcmVsaW1pbmFyeSByZXN1bHRzIGxvb2tlZCBwcm9taXNpbmcuIEJ1dCwgYmVmb3JlIHdlIGZ1bGx5IGludGVncmF0ZSB0aGlzIGludG8gdGhlIHBpcGVsaW5lLCBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmUgbm8gdW5mb3Jlc2VlbiBpbnRlcmFjdGlvbnMgb3IgZWRnZSBjYXNlcyB3aGVuIGl0J3MgY29tYmluZWQgd2l0aCB0aGUgZXhpc3RpbmcgbG9naWMuIEknbSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgdG9vIOKAkyBkb2VzIGl0IGludHJvZHVjZSBhbnkgbm90aWNlYWJsZSBib3R0bGVuZWNrcyBvciBtZW1vcnkgbGVha3M/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIG91dHB1dCBpcyBjb25zaXN0ZW50IGFuZCByZWxpYWJsZSB1bmRlciB2YXJ5aW5nIGRhdGEgbG9hZHMgYW5kIGNvbmRpdGlvbnMuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIGVuc3VyZSB0aGlzIGZpbHRlciBwbGF5cyBuaWNlbHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtOyB0aGlzIGlzIHBhcnRpY3VsYXJseSBjcnVjaWFsIG5vdywgY29uc2lkZXJpbmcgdGhlIGRlYWRsaW5lLiBObyBsb29zZSBlbmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MTAuMDQ0MTA4MTgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ4NTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19uZXdfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz01NDM9aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjMzLVxcbm1tL2RhbW9uL2NvcmUuYzo2MzQ6c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXFxubW0vZGFtb24vY29yZS5jLTYzNS1cXHRcXHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEzNTQ9c3RhdGljIGludCBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzcwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMzcxOlxcdFxcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxcbm1tL2RhbW9uL2NvcmUuYy0xMzcyLVxcdFxcdFxcdFxcdHNyY19maWx0ZXItXFx1MDAzZXR5cGUsIHNyY19maWx0ZXItXFx1MDAzZW1hdGNoaW5nLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEzODI9c3RhdGljIGludCBkYW1vc19jb21taXRfb3BzX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzOTgtXFxubW0vZGFtb24vY29yZS5jOjEzOTk6XFx0XFx0bmV3X2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoXFxubW0vZGFtb24vY29yZS5jLTE0MDAtXFx0XFx0XFx0XFx0c3JjX2ZpbHRlci1cXHUwMDNldHlwZSwgc3JjX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI0OT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjU3LVxcdC8qIGRpc2FsbG93IHByaW9yaXRpemluZyBub3QteW91bmcgcGFnZXMgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI1ODpcXHRmaWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HLCBmYWxzZSwgZmFsc2UpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjU5LVxcdGlmICghZmlsdGVyKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNjMtXFx0LyogZGlzYWJsbG93IGRlLXByaW9yaXRpemluZyB5b3VuZyBwYWdlcyAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjY0OlxcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfWU9VTkcsIHRydWUsIGZhbHNlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI2NS1cXHRpZiAoIWZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MjM5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjU2LVxcdGlmIChpbnN0YWxsX3lvdW5nX2ZpbHRlcikge1xcbm1tL2RhbW9uL3BhZGRyLmM6MjU3OlxcdFxcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoXFxubW0vZGFtb24vcGFkZHIuYy0yNTgtXFx0XFx0XFx0XFx0REFNT1NfRklMVEVSX1RZUEVfWU9VTkcsIHRydWUsIGZhbHNlKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNTEtXFx0aWYgKHNraXBfYW5vbikge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNTI6XFx0XFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI1My1cXHRcXHRpZiAoIWZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODA5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MTctXFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgxODpcXHRcXHRcXHRkYW1vc19uZXdfZmlsdGVyKHN5c2ZzX2ZpbHRlci1cXHUwMDNldHlwZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgxOS1cXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZW1hdGNoaW5nLFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc5MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X25ld19maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc5My1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Nzk0OlxcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgZmFsc2UpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03OTUtXFx0aWYgKCFmaWx0ZXIpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTU3MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2ZpbHRlcl9vdXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NzUtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1NzY6XFx0ZiA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQUREUiwgdHJ1ZSwgZmFsc2UpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTc3LVxcdGlmICghZilcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNjc5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2OTQtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE2OTU6XFx0dGFyZ2V0X2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULCB0cnVlLCB0cnVlKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY5Ni1cXHRpZiAoIXRhcmdldF9maWx0ZXIpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyMS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTcyMjpcXHRhbm9uX2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgdHJ1ZSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3MjMtXFx0aWYgKCFhbm9uX2ZpbHRlcikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzoxMC4wODk1OTgyMjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyOTU3NTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbi4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGFwcHJvYWNoIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBEQU1PTiBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGRhbW9zX25ld19maWx0ZXJgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHNvIHRoYXQncyB3aGVyZSBJIHNob3VsZCBzdGFydC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZmlsdGVyIGlzIGJlaW5nIGNyZWF0ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY29yZSBEQU1PTiBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgbWFpbiBEQU1PTiBsb29wLCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQncyBtb2RpZnlpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGVkZ2UgY2FzZXMgaGVyZS4gSSdsbCBwcm9iYWJseSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIGZpbHRlciBjcmVhdGlvbiB0byBpdHMgdXNlIGluIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZy5cblxuQW5kIG5leHQsIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzZnMgaXMgYWxsb2NhdGluZyBzcGFjZSBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBuZWVkIHRvIGFzc2VzcyBob3cgdGhlIGZpbHRlcnMgYXJlIGV4cG9zZWQgdGhyb3VnaCBzeXNmcy4gSSB3YW50IHRvIGNoZWNrIGZvciByYWNlIGNvbmRpdGlvbnMuIFBlcmhhcHMsIEkgd2lsbCBuZWVkIHRvIHRoaW5rIGhvdyB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBEQU1PTiB2aWEgc3lzZnMuIEkgd2lsbCBuZWVkIHRvIGxvb2sgZm9yIGFsbG9jYXRpb24gc2l6ZSBsaW1pdHMgYW5kIGhvdyB0aGVzZSBsaW1pdHMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgYSBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEFueSBpbmVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCBvciB1bmJvdW5kZWQgYWxsb2NhdGlvbnMgY291bGQgY2F1c2Ugc2VyaW91cyBpc3N1ZXMsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHByb2JsZW1zIHRoZXJlLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBzeXNmcyBhdHRyaWJ1dGVzIHRpZSBpbnRvIHRoZSBgZGFtb3NfbmV3X2ZpbHRlcmAgZnVuY3Rpb24gYW5kIHRoZSBvdmVyYWxsIERBTU9OIHNjaGVtZSBtYW5hZ2VtZW50LiBJJ20gdGhpbmtpbmcgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MgYW5kIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdGhhdCBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB0aGVzZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MTIuNzE5MTc3MTI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjMwOlxcdFxcdH1cXG4gNjMxOlxcdFxcdHJldHVybiAwO1xcbiA2MzI6XFx0fVxcbiA2MzM6XFx0XFxuIDYzNDpcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcXG4gNjM1OlxcdFxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXFxuIDYzNjpcXHR7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxuIDYzODpcXHRcXG4gNjM5OlxcdFxcdGZpbHRlciA9IGttYWxsb2Nfb2JqKCpmaWx0ZXIpO1xcbiA2NDA6XFx0XFx0aWYgKCFmaWx0ZXIpXFxuIDY0MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjQyOlxcdFxcdGZpbHRlci1cXHUwMDNldHlwZSA9IHR5cGU7XFxuIDY0MzpcXHRcXHRmaWx0ZXItXFx1MDAzZW1hdGNoaW5nID0gbWF0Y2hpbmc7XFxuIDY0NDpcXHRcXHRmaWx0ZXItXFx1MDAzZWFsbG93ID0gYWxsb3c7XFxuIDY0NTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZmlsdGVyLVxcdTAwM2VsaXN0KTtcXG4gNjQ2OlxcdFxcdHJldHVybiBmaWx0ZXI7XFxuIDY0NzpcXHR9XFxuIDY0ODpcXHRcXG4gNjQ5OlxcdC8qKlxcbiA2NTA6XFx0ICogZGFtb3NfZmlsdGVyX2Zvcl9vcHMoKSAtIFJldHVybiBpZiB0aGUgZmlsdGVyIGlzIG9wcy1oYW5kbGVkIG9uZS5cXG4gNjUxOlxcdCAqIEB0eXBlOlxcdHR5cGUgb2YgdGhlIGZpbHRlci5cXG4gNjUyOlxcdCAqXFxuIDY1MzpcXHQgKiBSZXR1cm46IHRydWUgaWYgdGhlIGZpbHRlciBvZiBAdHlwZSBuZWVkcyB0byBiZSBoYW5kbGVkIGJ5IG9wcyBsYXllciwgZmFsc2VcXG4gNjU0OlxcdCAqIG90aGVyd2lzZS5cXG4gNjU1OlxcdCAqL1xcbiA2NTY6XFx0Ym9vbCBkYW1vc19maWx0ZXJfZm9yX29wcyhlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUpXFxuIDY1NzpcXHR7XFxuIDY1ODpcXHRcXHRzd2l0Y2ggKHR5cGUpIHtcXG4gNjU5OlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcXG4gNjYwOlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlxcbiA2NjE6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XFxuIDY2MjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDY2MzpcXHRcXHRkZWZhdWx0OlxcbiA2NjQ6XFx0XFx0XFx0YnJlYWs7XFxuIDY2NTpcXHRcXHR9XFxuIDY2NjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNjY3OlxcdH1cXG4gNjY4OlxcdFxcbiA2Njk6XFx0dm9pZCBkYW1vc19hZGRfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MTIuNzE5MzM5MDY5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTE5NjUzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBEQU1PTidzIFN5c2ZzIEludGVyZmFjZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBmb2N1c2luZyBvbiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIGZyYW1ld29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gc29saWQgb24gaG93IGl0J3MgaW50ZXJmYWNpbmcgd2l0aCB0aGUgc3lzdGVtIHRocm91Z2ggYHN5c2ZzYC4gV2UgbmVlZCB0byB2ZXJpZnkgdGhlIGFsbG9jYXRpb24gYW5kIHVzZSBvZiB0aGUgYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGF0J3MgaGFuZGxlZCwgd2hpY2ggb2YgY291cnNlLCBsZWFkcyBtZSB0byB0aGUgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgZmlsZS4gVGltZSB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiBmaWx0ZXJpbmcgREFNT04ncyBvcGVyYXRpb25zIGlzIHNvdW5kLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MTUuMTMxMzA3NzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTc2MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyOT1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDI6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDMtXFx0XFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkzMD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJzX2FkZF9kaXJzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk0Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZmlsdGVyczsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjk0NzpcXHRcXHRmaWx0ZXIgPSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05NDgtXFx0XFx0XFx0XFx0ZmlsdGVycy1cXHUwMDNlaGFuZGxlX2xheWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MTUuMTc4ODg5NDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyMTQwNDcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byBgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvY2AqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2NgIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlc291cmNlcyBmb3IgbWFuYWdpbmcgREFNT04ncyBzeXNmcyBzY2hlbWVzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBmaWx0ZXJpbmcuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBwb2ludHMgb2YgY29udGVudGlvbiBoZXJlLCBjb25zaWRlcmluZyB0aGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBwcm9jZXNzZWQsIHBhcnNlZCwgYW5kIGFwcGxpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiB3b3Jrczogd2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQgKGlmIGFueSksIHdoYXQgdGhlIG1lbW9yeSBmb290cHJpbnQgaXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBmb3VuZGF0aW9uYWwgY29kZSBhbmQgSSdsbCBuZWVkIHRvIGtub3cgaXQgYmFja3dhcmRzIGFuZCBmb3J3YXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzoxNy44MDAyOTY4NTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDA6XFx0fTtcXG4gNTQxOlxcdFxcbiA1NDI6XFx0c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxcbiA1NDM6XFx0XFx0XFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxcbiA1NDQ6XFx0e1xcbiA1NDU6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlcjtcXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0ZmlsdGVyID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIpO1xcbiA1NDg6XFx0XFx0aWYgKGZpbHRlcilcXG4gNTQ5OlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlaGFuZGxlX2xheWVyID0gbGF5ZXI7XFxuIDU1MDpcXHRcXHRyZXR1cm4gZmlsdGVyO1xcbiA1NTE6XFx0fVxcbiA1NTI6XFx0XFxuIDU1MzpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XFxuIDU1NDpcXHRcXHRlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGU7XFxuIDU1NTpcXHRcXHRjaGFyICpuYW1lO1xcbiA1NTY6XFx0fTtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lXFxuIDU1OTpcXHRkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0ge1xcbiA1NjA6XFx0XFx0e1xcbiA1NjE6XFx0XFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9BTk9OLFxcbiA1NjI6XFx0XFx0XFx0Lm5hbWUgPSBcXFwiYW5vblxcXCIsXFxuIDU2MzpcXHRcXHR9LFxcbiA1NjQ6XFx0XFx0e1xcbiA1NjU6XFx0XFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9BQ1RJVkUsXFxuIDU2NjpcXHRcXHRcXHQubmFtZSA9IFxcXCJhY3RpdmVcXFwiLFxcbiA1Njc6XFx0XFx0fSxcXG4gNTY4OlxcdFxcdHtcXG4gNTY5OlxcdFxcdFxcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfTUVNQ0csXFxuIDU3MDpcXHRcXHRcXHQubmFtZSA9IFxcXCJtZW1jZ1xcXCIsXFxuIDU3MTpcXHRcXHR9LFxcbiA1NzI6XFx0XFx0e1xcbiA1NzM6XFx0XFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9ZT1VORyxcXG4gNTc0OlxcdFxcdFxcdC5uYW1lID0gXFxcInlvdW5nXFxcIixcXG4gNTc1OlxcdFxcdH0sXFxuIDU3NjpcXHRcXHR7XFxuIDU3NzpcXHRcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUsXFxuIDU3ODpcXHRcXHRcXHQubmFtZSA9IFxcXCJodWdlcGFnZV9zaXplXFxcIixcXG4gNTc5OlxcdFxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjE3LjgwMDQzNTM4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzU2MDMxMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGFtb24gc3lzZnMgU2NoZW1lIEZpbHRlciBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvY2AgZnVuY3Rpb24gd29ya3MuIEl0IHV0aWxpemVzIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGtleS4gVGhpcyBtZWFucyB0aGF0IGJvdGggYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIHdpdGhpbiB0aGUgYWxsb2NhdGVkIGZpbHRlciBzdHJ1Y3R1cmUgYXJlIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZCByaWdodCBvZmYgdGhlIGJhdC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBiZWNhdXNlIGxhdGVyLCB3aGVuIHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgYWNjZXNzZWQgYW5kIHdlIHJlYWQgZWl0aGVyIGBtaW5fc2hvd2Agb3IgYG1heF9zaG93YCwgdGhlIHN5c3RlbSBpcyBnb2luZyB0byBvdXRwdXQgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIGBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluYCBhbmQgYGZpbHRlci1cdTAwM2VyYW5nZV9tYXhgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRob3NlIHZhbHVlcyAqYXJlKiBhdCBhbnkgZ2l2ZW4gdGltZSwgcGFydGljdWxhcmx5IHdoZW4gYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AgaXMgY2FsbGVkLiBUaGF0IGNhbGwgaXMgY3JpdGljYWw7IGl0J3Mgd2hlcmUgdGhlIGZpbHRlcnMgYXJlIGxpa2VseSBwb3B1bGF0ZWQuIFRpbWUgdG8ganVtcCBvdmVyIHRvIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBsaW5lcyAyODM1IHRocm91Z2ggMjg2NS4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQncyBnb2luZyBvbiB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBsaWZlY3ljbGUgYW5kIGhvdyB0aGVzZSByYW5nZXMgYXJlIGFjdHVhbGx5IHNldCwgYW5kIHdoYXQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlLiBUaGUgaW5pdGlhbGl6YXRpb24gaXMgemVybywgYnV0IHRoYXQgd29uJ3QgbmVjZXNzYXJpbHkgdGVsbCB0aGUgd2hvbGUgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODI0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MjIuMTU2NDY4Nzk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgzNTpcXHRcXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZWFkZHJfcmFuZ2Uuc3RhcnQpIHtcXG4yODM2OlxcdFxcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XFxuMjgzNzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODM4OlxcdFxcdFxcdFxcdH1cXG4yODM5OlxcdFxcdFxcdFxcdGZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZSA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZTtcXG4yODQwOlxcdFxcdFxcdH0gZWxzZSBpZiAoZmlsdGVyLVxcdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCkge1xcbjI4NDE6XFx0XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2V0YXJnZXRfaWR4ID0gc3lzZnNfZmlsdGVyLVxcdTAwM2V0YXJnZXRfaWR4O1xcbjI4NDI6XFx0XFx0XFx0fSBlbHNlIGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRSkge1xcbjI4NDM6XFx0XFx0XFx0XFx0aWYgKHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluIFxcdTAwM2VcXG4yODQ0OlxcdFxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4KSB7XFxuMjg0NTpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbjI4NDY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjg0NzpcXHRcXHRcXHRcXHR9XFxuMjg0ODpcXHRcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1pbiA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluO1xcbjI4NDk6XFx0XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2Vzel9yYW5nZS5tYXggPSBzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21heDtcXG4yODUwOlxcdFxcdFxcdH0gZWxzZSBpZiAoZmlsdGVyLVxcdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkge1xcbjI4NTE6XFx0XFx0XFx0XFx0aWYgKHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluIFxcdTAwM2VcXG4yODUyOlxcdFxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4KSB7XFxuMjg1MzpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbjI4NTQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjg1NTpcXHRcXHRcXHRcXHR9XFxuMjg1NjpcXHRcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXJhbmdlX21pbiA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluO1xcbjI4NTc6XFx0XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXggPSBzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21heDtcXG4yODU4OlxcdFxcdFxcdH1cXG4yODU5OlxcdFxcbjI4NjA6XFx0XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XFxuMjg2MTpcXHRcXHR9XFxuMjg2MjpcXHRcXHRyZXR1cm4gMDtcXG4yODYzOlxcdH1cXG4yODY0OlxcdFxcbjI4NjU6XFx0c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuMjg2NjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKnN5c2ZzX2dvYWxzLFxcbjI4Njc6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4yODY4OlxcdHtcXG4yODY5OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbjI4NzA6XFx0XFx0aW50IGksIGVycjtcXG4yODcxOlxcdFxcbjI4NzI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN5c2ZzX2dvYWxzLVxcdTAwM2VucjsgaSsrKSB7XFxuMjg3MzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqc3lzZnNfZ29hbCA9XFxuMjg3NDpcXHRcXHRcXHRcXHRzeXNmc19nb2Fscy1cXHUwMDNlZ29hbHNfYXJyW2ldO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzoyMi4xNTY2MDAwNjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA3MzIxODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IHRoZSBwcm9iZSBoaXRzIG1vdmluZyBzdW0gb3BlcmF0ZXM6XG5cbioqRGVlcCBEaXZlIGludG8gYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1lY2hhbmlzbSBiZWhpbmQgdGhlIHByb2JlIGhpdHMgbW92aW5nIHN1bS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgd29ya3MgYmVjYXVzZSBhbnkgZWZmaWNpZW5jeSBnYWlucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgd2l0aGluIHRoaXMgYXJlIGNydWNpYWwgZm9yIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIEknbSB0cnlpbmcgdG8gYWNoaWV2ZS4gSSBzaG91bGQgZmlyc3QgdmVyaWZ5IHRoZSBjb3JlIGxvZ2ljLCBtYWtpbmcgc3VyZSB0aGUgYXZlcmFnaW5nIGlzIGRvbmUgY29ycmVjdGx5IGFuZCB0aGF0IHRoZSB3aW5kb3cgc2l6ZSBpcyBlZmZlY3RpdmVseSB1dGlsaXplZC4gQW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IgaGVyZSBjYW4gaW50cm9kdWNlIGVycm9ycyBpbiB0aGUgb3V0cHV0IHdoaWNoIGRpcmVjdGx5IGltcGFjdHMgZG93bnN0cmVhbSBjb21wdXRhdGlvbnMgb3IgZGVjaXNpb24tbWFraW5nLiBJJ2xsIG1ldGljdWxvdXNseSBjaGVjayB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IHRoZXkgaGFuZGxlIHVwZGF0ZXMuIEkgd2lsbCBwYXkgc3BlY2lhbCBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHRvIGNvbmZpcm0gaG93IHVwZGF0ZXMgYXJlIHN5bmNocm9uaXplZCwgZXNwZWNpYWxseSBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzoyNS4yMjk4MjE3MzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjU0MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3Byb2JlX2hpdHNfbXZzdW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyNT11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDgtXFxubW0vZGFtb24vY29yZS5jOjM0OTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzUwLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz00Nzc9dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDg3LVxcdFxcdGVsc2UgaWYgKG12KVxcbm1tL2RhbW9uL2NvcmUuYzo0ODg6XFx0XFx0XFx0c3VtICs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSsrLCByLCBjdHgpICpcXG5tbS9kYW1vbi9jb3JlLmMtNDg5LVxcdFxcdFxcdFxcdHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cXHRcXHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0OlxcdFxcdFxcdFxcdGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSwgcmVnaW9uLCBjdHgpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVxcdFxcdGlmICghc3lzX3Byb2JlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjI1LjI3NzQ4MDgyN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODYzMjYwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gUHJvYmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgZnVuY3Rpb24gaW4gdGhlIERBTU9OIGNvcmUgaXMgd29ya2luZy4gTGV0J3Mgc3RhcnQgd2l0aCBgbW0vZGFtb24vY29yZS5jYC4gSSBleHBlY3QgdG8gc2VlIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb3Zpbmcgc3VtLWJhc2VkIGhpdCBjb3VudGVyIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgYXQgbGVhc3QsIGEgc2lnbmlmaWNhbnQgcGFydCBvZiBpdCkgaGFwcGVucyBpbiBEQU1PTidzIHByb2JpbmcgbWV0aG9kb2xvZ3kuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIG92ZXJhbGwgcHJvY2VzcywgaG93IGl04oCZcyB0cmlnZ2VyZWQsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIHByb2JlIGFjY3VyYWN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjI4LjE0MDc0NDczWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcdHJldHVybiBkYW1vbl9tdnN1bShyLVxcdTAwM2Vucl9hY2Nlc3Nlcywgci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyxcXG4gMzQ2OlxcdFxcdFxcdFxcdGxlZnRfd2luZG93X2JwKTtcXG4gMzQ3OlxcdH1cXG4gMzQ4OlxcdFxcbiAzNDk6XFx0dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIDM1MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIDM1MTpcXHR7XFxuIDM1MjpcXHRcXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCwgYWdncl9pbnRlcnZhbDtcXG4gMzUzOlxcdFxcdHVuc2lnbmVkIGxvbmcgd2luZG93X2xlbiwgbGVmdF93aW5kb3csIGxlZnRfd2luZG93X2JwO1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4gMzU2OlxcdFxcdGFnZ3JfaW50ZXJ2YWwgPSAgY3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID8gOiAxO1xcbiAzNTc6XFx0XFx0d2luZG93X2xlbiA9IGFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWw7XFxuIDM1ODpcXHRcXHRpZiAodGltZV9hZnRlcl9lcShjdHgtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxcbiAzNTk6XFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcykpXFxuIDM2MDpcXHRcXHRcXHRsZWZ0X3dpbmRvdyA9IDA7XFxuIDM2MTpcXHRcXHRlbHNlXFxuIDM2MjpcXHRcXHRcXHRsZWZ0X3dpbmRvdyA9IGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgLVxcbiAzNjM6XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscztcXG4gMzY0OlxcdFxcdGxlZnRfd2luZG93X2JwID0gbXVsdF9mcmFjKGxlZnRfd2luZG93LCAxMDAwMCwgd2luZG93X2xlbik7XFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcXG4gMzY3OlxcdFxcdFxcdHJldHVybiByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcXG4gMzY4OlxcdFxcbiAzNjk6XFx0XFx0cmV0dXJuIGRhbW9uX212c3VtKHItXFx1MDAzZXByb2JlX2hpdHNbcHJvYmVfaWR4XSxcXG4gMzcwOlxcdFxcdFxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XFxuIDM3MTpcXHR9XFxuIDM3MjpcXHRcXG4gMzczOlxcdCNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxuIDM3NDpcXHRzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gMzc1OlxcdHtcXG4gMzc2OlxcdFxcdFdBUk5fT05DRShzdGFydCBcXHUwMDNlPSBlbmQsIFxcXCJzdGFydCAlbHUgXFx1MDAzZT0gZW5kICVsdVxcXFxuXFxcIiwgc3RhcnQsIGVuZCk7XFxuIDM3NzpcXHR9XFxuIDM3ODpcXHQjZWxzZVxcbiAzNzk6XFx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIDM4MDpcXHR7XFxuIDM4MTpcXHR9XFxuIDM4MjpcXHQjZW5kaWZcXG4gMzgzOlxcdFxcbiAzODQ6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MjguMTQwOTIwNzQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MzQwMDQyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBGaWx0ZXIgQXJndW1lbnQgSGFuZGxpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBncmFudWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBmaWx0ZXIgYXJndW1lbnRzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYC4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBhcmd1bWVudCBpcyBhY3R1YWxseSAqY29tbWl0dGVkKiBvciAqY29waWVkKiB3aXRoaW4gdGhlIHN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byB0cmFjaW5nIGl0cyBwcm9wYWdhdGlvbiBhbmQgcG90ZW50aWFsIGltcGFjdC4gSSBuZWVkIHRvIGtub3cgdGhlIGV4YWN0IHBvaW50cyBvZiBpbnRlcmFjdGlvbiwgc28gSSBjYW4gYmV0dGVyIGRpYWdub3NlIGFueSBpc3N1ZXMgb3Igb3B0aW1pemUgcmVsYXRlZCBwcm9jZXNzZXMuIEknbGwgbGlrZWx5IGJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIGNhbGxzLCBhc3NpZ25tZW50cywgb3IgbWVtb3J5IG1hbmlwdWxhdGlvbnMgaW52b2x2aW5nIHRoaXMgc3BlY2lmaWMgdmFyaWFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDM1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzozMC4wNzQ5Mjg5MjlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjA1MjU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19jb21taXRfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMzA4PXN0YXRpYyBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19udGhfb3BzX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzMTktXFxubW0vZGFtb24vY29yZS5jOjEzMjA6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXFxubW0vZGFtb24vY29yZS5jLTEzMjEtXFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM0NC1cXG5tbS9kYW1vbi9jb3JlLmM6MTM0NTpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyKFxcbm1tL2RhbW9uL2NvcmUuYy0xMzQ2LVxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNTAtXFx0ZHN0LVxcdTAwM2VhbGxvdyA9IHNyYy1cXHUwMDNlYWxsb3c7XFxubW0vZGFtb24vY29yZS5jOjEzNTE6XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzUyLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzU0PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM2MS1cXHRcXHRpZiAoc3JjX2ZpbHRlcilcXG5tbS9kYW1vbi9jb3JlLmM6MTM2MjpcXHRcXHRcXHRkYW1vc19jb21taXRfZmlsdGVyKGRzdF9maWx0ZXIsIHNyY19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzYzLVxcdFxcdGVsc2VcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzc1LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzoxMzc2OlxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKG5ld19maWx0ZXIsIHNyY19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzc3LVxcdFxcdGRhbW9zX2FkZF9maWx0ZXIoZHN0LCBuZXdfZmlsdGVyKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzgyPXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzg5LVxcdFxcdGlmIChzcmNfZmlsdGVyKVxcbm1tL2RhbW9uL2NvcmUuYzoxMzkwOlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEzOTEtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0MDMtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjE0MDQ6XFx0XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTE0MDUtXFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE0ODg9c3RhdGljIGludCBkYW1vc19jb21taXRfZGVzdHMoc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKmRzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTE4LVxcbm1tL2RhbW9uL2NvcmUuYzoxNTE5OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNTIwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTQ1PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTYzLVxcbm1tL2RhbW9uL2NvcmUuYzoxNTY0OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9maWx0ZXJzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTU2NS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTExMTg9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTEyMC17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExMjE6XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMjItXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNldHlwZSwgc3JjLVxcdTAwM2V0eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6MjM6MzAuMjc2OTg3MjI2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTQ2OTA2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCBpbiB0aGUgREFNT04gQ29yZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgREFNT04gY29yZSBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYC4gSSdtIGFzc3VtaW5nIGl0J3MgcHJvYmFibHkgYW4gYXJndW1lbnQgcmVsYXRlZCB0byBmaWx0ZXJpbmcgY29tbWl0cywgbGlrZWx5IHVzZWQgd2hlbiBEQU1PTiBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1lbW9yeSByZWdpb25zIHRvIGFjdCB1cG9uLiBJdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gc29tZSBhc3BlY3Qgb2YgY29tbWl0IGJlaGF2aW9yLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgd29ya3MgYmVjYXVzZSBpdCdzIGtleSB0byBlaXRoZXIgcGVyZm9ybWFuY2UgdHVuaW5nIG9yIGRlYnVnZ2luZyBhIGJlaGF2aW9yIGluIGEgZGFtb24tcmVsYXRlZCBjb250ZXh0LiBJcyBpdCBhIGJpdG1hc2s/IEEgZmxhZz8gRG9lcyBpdCByZWxhdGUgdG8gYSBjb21taXQgdGhyZXNob2xkPyBBIHNwZWNpZmljIHR5cGUgb2YgY29tbWl0IG9wZXJhdGlvbj8gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBlY29zeXN0ZW0uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVoaW5kIHRoZSBzY2VuZXMgcmVnYXJkaW5nIGhvdyB0aGlzIHBhcmFtZXRlciBndWlkZXMgdGhlIGNvbW1pdCBsb2dpYyBzbyBJIGNhbiBzb2x2ZSB0aGUgaXNzdWUgYXQgaGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzozMy4wMzE2ODE4NDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKFxcbjEzMjE6XFx0XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXFxuMTMyMjpcXHR7XFxuMTMyMzpcXHRcXHRzd2l0Y2ggKGRzdC1cXHUwMDNldHlwZSkge1xcbjEzMjQ6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG4xMzI1OlxcdFxcdFxcdGRzdC1cXHUwMDNlbWVtY2dfaWQgPSBzcmMtXFx1MDAzZW1lbWNnX2lkO1xcbjEzMjY6XFx0XFx0XFx0YnJlYWs7XFxuMTMyNzpcXHRcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XFxuMTMyODpcXHRcXHRcXHRkc3QtXFx1MDAzZWFkZHJfcmFuZ2UgPSBzcmMtXFx1MDAzZWFkZHJfcmFuZ2U7XFxuMTMyOTpcXHRcXHRcXHRicmVhaztcXG4xMzMwOlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlxcbjEzMzE6XFx0XFx0XFx0ZHN0LVxcdTAwM2V0YXJnZXRfaWR4ID0gc3JjLVxcdTAwM2V0YXJnZXRfaWR4O1xcbjEzMzI6XFx0XFx0XFx0YnJlYWs7XFxuMTMzMzpcXHRcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkU6XFxuMTMzNDpcXHRcXHRcXHRkc3QtXFx1MDAzZXN6X3JhbmdlID0gc3JjLVxcdTAwM2Vzel9yYW5nZTtcXG4xMzM1OlxcdFxcdFxcdGJyZWFrO1xcbjEzMzY6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XFxuMTMzNzpcXHRcXHRcXHRkc3QtXFx1MDAzZXJhbmdlX21pbiA9IHNyYy1cXHUwMDNlcmFuZ2VfbWluO1xcbjEzMzg6XFx0XFx0XFx0ZHN0LVxcdTAwM2VyYW5nZV9tYXggPSBzcmMtXFx1MDAzZXJhbmdlX21heDtcXG4xMzM5OlxcdFxcdFxcdGJyZWFrO1xcbjEzNDA6XFx0XFx0ZGVmYXVsdDpcXG4xMzQxOlxcdFxcdFxcdGJyZWFrO1xcbjEzNDI6XFx0XFx0fVxcbjEzNDM6XFx0fVxcbjEzNDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjMzLjAzMTg1MjYxMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM5NTE3NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gRmlsdGVyIFN0cnVjdHVyZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBzdHJ1Y3QgZGFtb3NfZmlsdGVyYCBkZWZpbml0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIERBTU9OIGZpbHRlciBpbXBsZW1lbnRhdGlvbiBpbiB0aGUga2VybmVsP1wiIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSBob3cgdGhlIGZpbHRlcmluZyBtZWNoYW5pc20gaXMgc3RydWN0dXJlZC4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgY2hlY2sgZm9yIGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucyBvciBlbmhhbmNlbWVudHMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBmaWVsZHMsIGhvdyBpdCdzIHVzZWQgd2l0aCBEQU1PTidzIGNvcmUgZnVuY3Rpb25hbGl0eSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBwYWdlIGFjY2VzcyB0cmFja2luZy4gSSdtIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgZmlsdGVyaW5nIGNyaXRlcmlhLCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZSBmaWx0ZXJpbmcgbG9naWMsIGFuZCBhbnkgbWVjaGFuaXNtcyBmb3IgZHluYW1pYyBhZGp1c3RtZW50IG9yIGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGZpbHRlcidzIGludGVybmFscyB3aWxsIGJlIGtleSB0byBvcHRpbWl6aW5nIERBTU9OJ3MgYmVoYXZpb3IgaW4gY29tcGxleCBzY2VuYXJpb3MuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzozNS45NzEzNzQyNzRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0ICogZGFtb25fb3BlcmF0aW9ucyBhbmQgdGhlIHR5cGUuICBSZWZlciB0byBcXHUwMDI2ZW51bSBkYW1vc19maWx0ZXJfdHlwZSBmb3IgbW9yZVxcbiA0NDY6XFx0ICogZGV0YWlscy5cXG4gNDQ3OlxcdCAqL1xcbiA0NDg6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciB7XFxuIDQ0OTpcXHRcXHRlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGU7XFxuIDQ1MDpcXHRcXHRib29sIG1hdGNoaW5nO1xcbiA0NTE6XFx0XFx0Ym9vbCBhbGxvdztcXG4gNDUyOlxcdFxcdHVuaW9uIHtcXG4gNDUzOlxcdFxcdFxcdHU2NCBtZW1jZ19pZDtcXG4gNDU0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XFxuIDQ1NTpcXHRcXHRcXHRpbnQgdGFyZ2V0X2lkeDtcXG4gNDU2OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xcbiA0NTc6XFx0XFx0XFx0c3RydWN0IHtcXG4gNDU4OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xcbiA0NTk6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XFxuIDQ2MDpcXHRcXHRcXHR9O1xcbiA0NjE6XFx0XFx0fTtcXG4gNDYyOlxcdC8qIHByaXZhdGU6ICovXFxuIDQ2MzpcXHRcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiA0NjQ6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiA0NjU6XFx0fTtcXG4gNDY2OlxcdFxcbiA0Njc6XFx0c3RydWN0IGRhbW9uX2N0eDtcXG4gNDY4OlxcdHN0cnVjdCBkYW1vcztcXG4gNDY5OlxcdFxcbiA0NzA6XFx0LyoqXFxuIDQ3MTpcXHQgKiBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIC0gQ29udHJvbCBkYW1vc193YWxrKCkuXFxuIDQ3MjpcXHQgKlxcbiA0NzM6XFx0ICogQHdhbGtfZm46XFx0RnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJhY2sgZm9yIGVhY2ggcmVnaW9uLlxcbiA0NzQ6XFx0ICogQGRhdGE6XFx0RGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHdhbGsgZnVuY3Rpb25zLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzozNS45NzE1MzI4MTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyMzM5OTg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiBjb25zY2lvdXNuZXNzOlxuXG4qKkRpZ2dpbmcgaW50byBQcm9iZSBIaXQgVHJhY2tpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aG9zZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIOKAkyBgZGFtb25fZm9yX2VhY2hfcHJvYmVgLCBgci1cdTAwM2Vwcm9iZV9oaXRzYCwgYW5kIGByLVx1MDAzZWxhc3RfcHJvYmVfaGl0c2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgbWVtb3J5IGhhbmRsaW5nIGlzIHNvdW5kLCBhbmQgdGhlcmUgYXJlIG5vIHNuZWFreSBpc3N1ZXMgbHVya2luZyB0aGVyZS5cblxuU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gZXhhY3RseSAqaG93KiB0aGVzZSBgcHJvYmVfaGl0c2AgZmllbGRzIGFyZSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBUaGF0J3MgdGhlIGNvcmUgb2YgdW5kZXJzdGFuZGluZyBhbnkgcG90ZW50aWFsIHByb2JsZW1zLiBMZXQncyBzZWUgaWYgSSBjYW4gdHJhY2UgYmFjayB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3Qgc2VxdWVuY2UuIEdvdHRhIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgYmVmb3JlIGFueXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTMxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzozOC4xOTQ5MzUyNDhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDY1NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2JlX2hpdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyNT11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDgtXFxubW0vZGFtb24vY29yZS5jOjM0OTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzUwLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjYtXFx0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxcbm1tL2RhbW9uL2NvcmUuYzozNjc6XFx0XFx0cmV0dXJuIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdO1xcbm1tL2RhbW9uL2NvcmUuYy0zNjgtXFxubW0vZGFtb24vY29yZS5jOjM2OTpcXHRyZXR1cm4gZGFtb25fbXZzdW0oci1cXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxcbm1tL2RhbW9uL2NvcmUuYzozNzA6XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF0sIGxlZnRfd2luZG93X2JwKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzcxLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zODk9c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKykge1xcbm1tL2RhbW9uL2NvcmUuYzo0MDM6XFx0XFx0cmVnaW9uLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6NDA0OlxcdFxcdHJlZ2lvbi1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtNDA1LVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz00NjI9c3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NjgtLyoqXFxubW0vZGFtb24vY29yZS5jOjQ2OTogKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXFxubW0vZGFtb24vY29yZS5jLTQ3MC0gKiBAcjpcXHRcXHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDc2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0Nzc6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXFxubW0vZGFtb24vY29yZS5jLTQ3OC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDg1LVxcdFxcdGlmIChsYXN0KVxcbm1tL2RhbW9uL2NvcmUuYzo0ODY6XFx0XFx0XFx0c3VtICs9IHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpKytdICogcHJvYmUtXFx1MDAzZXdlaWdodDtcXG5tbS9kYW1vbi9jb3JlLmMtNDg3LVxcdFxcdGVsc2UgaWYgKG12KVxcbm1tL2RhbW9uL2NvcmUuYzo0ODg6XFx0XFx0XFx0c3VtICs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSsrLCByLCBjdHgpICpcXG5tbS9kYW1vbi9jb3JlLmMtNDg5LVxcdFxcdFxcdFxcdHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxubW0vZGFtb24vY29yZS5jLTQ5MC1cXHRcXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjQ5MTpcXHRcXHRcXHRzdW0gKz0gci1cXHUwMDNlcHJvYmVfaGl0c1tpKytdICogcHJvYmUtXFx1MDAzZXdlaWdodDtcXG5tbS9kYW1vbi9jb3JlLmMtNDkyLVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDA4PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDE0LVxcbm1tL2RhbW9uL2NvcmUuYzoxMDE1OnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTEwMTYtXFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMjItXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jOjEwMjM6XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxcbm1tL2RhbW9uL2NvcmUuYzoxMDI0OlxcdFxcdFxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDI1LVxcdFxcdGlmICghYWdncmVnYXRpbmcpXFxubW0vZGFtb24vY29yZS5jOjEwMjY6XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcXG5tbS9kYW1vbi9jb3JlLmM6MTAyNzpcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsXFxubW0vZGFtb24vY29yZS5jLTEwMjgtXFx0XFx0XFx0XFx0XFx0bmV3X2F0dHJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTAyOS1cXHRcXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjEwMzA6XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTEwMzEtXFx0XFx0aSsrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMzU9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAzOC17XFxubW0vZGFtb24vY29yZS5jOjEwMzk6XFx0ZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMociwgb2xkX2F0dHJzLCBuZXdfYXR0cnMsIGFnZ3JlZ2F0aW5nLCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDQwLVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE0MzY9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDM4LVxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDM5OlxcdHVuc2lnbmVkIGNoYXIgbWF4X3Byb2JlX2hpdHM7XFxubW0vZGFtb24vY29yZS5jLTE0NDAtXFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDU3LVxcdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXFxubW0vZGFtb24vY29yZS5jOjE0NTg6XFx0bWF4X3Byb2JlX2hpdHMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZjdHgtXFx1MDAzZWF0dHJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1OS1cXHR3c3VtID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ2MC1cXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jOjE0NjE6XFx0XFx0aWYgKHByb2JlLVxcdTAwM2V3ZWlnaHQgXFx1MDAzZSBVSU5UX01BWCAvIG1heF9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYy0xNDYyLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTQ2MzpcXHRcXHR3c3VtX3RvX2FkZCA9IHByb2JlLVxcdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcXG5tbS9kYW1vbi9jb3JlLmMtMTQ2NC1cXHRcXHRpZiAoVUlOVF9NQVggLSB3c3VtIFxcdTAwM2Mgd3N1bV90b19hZGQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjMwMj1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzI1LVxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjMyNjpcXHRcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSByLVxcdTAwM2Vwcm9iZV9oaXRzW2ldO1xcbm1tL2RhbW9uL2NvcmUuYzoyMzI3OlxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0yMzI4LVxcdFxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTExPXN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjU1My1cXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcXG5tbS9kYW1vbi9jb3JlLmM6MjU1NDpcXHRcXHR3c3VtID0gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLCB0cnVlLCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0yNTU1LVxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZXJhbmdlX21pbiBcXHUwMDNjPSB3c3VtIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzQ0ND1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MzQ1NjpcXHRcXHRsLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gKGwtXFx1MDAzZXByb2JlX2hpdHNbaV0gKiBzel9sICsgci1cXHUwMDNlcHJvYmVfaGl0c1tpXVxcbm1tL2RhbW9uL2NvcmUuYy0zNDU3LVxcdFxcdFxcdFxcdCogc3pfcikgLyAoc3pfbCArIHN6X3IpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NjI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxubW0vZGFtb24vY29yZS5jOjM0NjM6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYy0zNDY0LXtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ2NTpcXHRpZiAodXNlX3Byb2JlX2hpdHMpXFxubW0vZGFtb24vY29yZS5jOjM0NjY6XFx0XFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBmYWxzZSwgY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ2Ny1cXHRpZiAobGFzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDc5PXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0ODItXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ4MzpcXHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ4NC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDg3LVxcbm1tL2RhbW9uL2NvcmUuYzozNDg4OlxcdFxcdHNjb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgZmFsc2UsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xcbm1tL2RhbW9uL2NvcmUuYzozNDg5OlxcdFxcdGxhc3Rfc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCB0cnVlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ5MC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNTA0LVxcdFxcdGRpZmYgPSBhYnNfZGlmZihzY29yZSwgZGFtb25fbWVyZ2Vfc2NvcmUocHJldiwgZmFsc2UsIGN0eCxcXG5tbS9kYW1vbi9jb3JlLmM6MzUwNTpcXHRcXHRcXHRcXHRcXHR1c2VfcHJvYmVfaGl0cykpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNTA2LVxcdFxcdGlmIChkaWZmIFxcdTAwM2UgdGhyZXMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzU4ND1zdGF0aWMgaW50IGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1OTktXFx0LyogdG9kbzogZG8gdGhpcyBmb3Igb25seSBpbnN0YWxsZWQgcHJvYmVzICovXFxubW0vZGFtb24vY29yZS5jOjM2MDA6XFx0bWVtY3B5KG5ldy1cXHUwMDNlcHJvYmVfaGl0cywgci1cXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXFx1MDAzZXByb2JlX2hpdHMpKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzYwMTpcXHRtZW1jcHkobmV3LVxcdTAwM2VsYXN0X3Byb2JlX2hpdHMsIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0cyxcXG5tbS9kYW1vbi9jb3JlLmM6MzYwMjpcXHRcXHRcXHRzaXplb2Yoci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzKSk7XFxubW0vZGFtb24vY29yZS5jLTM2MDMtXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE3Nj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE5Ny1cXHRcXHRcXHRcXHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcXG5tbS9kYW1vbi9wYWRkci5jOjE5ODpcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldKys7XFxubW0vZGFtb24vcGFkZHIuYy0xOTktXFx0XFx0XFx0XFx0aSsrO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yMDMtXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG5tbS9kYW1vbi9wYWRkci5jOjIwNDpcXHRcXHRcXHRcXHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXFxubW0vZGFtb24vcGFkZHIuYy0yMDUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MD1zdGF0aWMgdm9pZCBkYW1vc19zeXNmc19wcm9iZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3Byb2JlX2hpdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5LVxcdFxcdF9fQVRUUl9ST19NT0RFKGhpdHMsIDA0MDApO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19wcm9iZV9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MjpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcHJvYmVfaGl0c19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUzLVxcdE5VTEwsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cXHRcXHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0OlxcdFxcdFxcdFxcdGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSwgcmVnaW9uLCBjdHgpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVxcdFxcdGlmICghc3lzX3Byb2JlKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTU5PWRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTkzLVxcdFxcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1OTQ6XFx0XFx0Lm5hbWUgPSBcXFwicHJvYmVfaGl0c193c3VtXFxcIixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk1LVxcdH0sXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NC1cXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gMTU7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1NTpcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzWzBdID0gNztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU2OlxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSA9IDM7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1Ny1cXHRyLVxcdTAwM2VhZ2UgPSAxMDtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNzItXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIHJfbmV3LVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTczOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vwcm9iZV9oaXRzWzBdLCByX25ldy1cXHUwMDNlcHJvYmVfaGl0c1swXSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE3NDpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdLCByX25ldy1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTc1LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIHJfbmV3LVxcdTAwM2VhZ2UpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE4MT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3R3byhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTk1LVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gMTA7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE5NjpcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzWzBdID0gNjtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTk3LVxcdHItXFx1MDAzZWFnZSA9IDk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjA0LVxcdHIyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDIwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyMDU6XFx0cjItXFx1MDAzZXByb2JlX2hpdHNbMF0gPSAxNDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjA2LVxcdHIyLVxcdTAwM2VhZ2UgPSAyMTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMTItXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzLCAxNnUpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyMTM6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZXByb2JlX2hpdHNbMF0sIDExKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjE0LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIDE3dSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTUxND1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUzOC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTUzOTpcXHQvKiBNb3JlIHNhbXBsZXMgY291bGQgb3ZlcmZsb3cgdGhlIHByb2JlX2hpdHMgY291bnRlcnMuICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NDAtXFx0Y3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMjU2O1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz01ODE9c3RhdGljIHZvaWQgZGFtb25fdmFfcHJvYmVfZm9saW8oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy01OTAtXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlc2FtcGxpbmdfYWRkcikpXFxubW0vZGFtb24vdmFkZHIuYzo1OTE6XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbm1tL2RhbW9uL3ZhZGRyLmMtNTkyLVxcdFxcdGkrKztcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjkwPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNzA1LVxcdFxcdFxcdGlmIChyZXR1cm5fbWF4X3dzdW0pXFxubW0vZGFtb24vdmFkZHIuYzo3MDY6XFx0XFx0XFx0XFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxcbm1tL2RhbW9uL3ZhZGRyLmMtNzA3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjIzOjM4LjI0NzAwNTgxOFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NjAyODQ4MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IERBTU9OIFByb2JlIEhpdHMgV2VpZ2h0ZWQgU3VtIEZpbHRlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHdhcnJhbnQgS01TQU4uIEZpcnN0LCBsZXQncyByZWNhcCB3aGF0IHRoZSBwYXRjaCAqZG9lcyo6IGl0IGludHJvZHVjZXMgYSBuZXcgZmlsdGVyIHR5cGUgZm9yIERBTU9OICh0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvcikgdGhhdCB1c2VzIGEgXCJwcm9iZSBoaXRzIHdlaWdodGVkIHN1bVwiLiBUaGlzIGludm9sdmVzIGFkZGluZyBuZXcgZmllbGRzIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIHRvIGZpbHRlciBzdHJ1Y3R1cmVzLCB1cGRhdGluZyBzeXNmcyBpbnRlcmZhY2VzIGZvciBjb25maWd1cmF0aW9uLCBhbmQgaW50cm9kdWNpbmcgYSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gaW4gdGhlIG1hdGNoaW5nIGxvZ2ljLiBFc3NlbnRpYWxseSwgaXQgYWxsb3dzIGZpbHRlcmluZyBiYXNlZCBvbiBhIHJhbmdlIG9mIHdlaWdodGVkIHByb2JlIGhpdCBjb3VudHMuXG5cbk5vdywgY3JpdGljYWxseSwgSSBuZWVkIHRvIGV2YWx1YXRlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlY29tZSBhbiBpc3N1ZS5cblxuMS4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBUaGUgcGF0Y2ggdXNlcyBzeXNmcyB0byBleHBvc2UgZmlsdGVyIHBhcmFtZXRlcnMuIE15IGZpcnN0IGNvbmNlcm4gaXMgYWx3YXlzIGFib3V0IHdoYXQncyBzZW50IHRvIHVzZXIgc3BhY2UuIEFyZSB3ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeT8gSGVyZSwgdGhlIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCB2YWx1ZXMgYXJlIHNob3duIHZpYSBgc3lzZnNfZW1pdGAsIGJ1dCB0aGUgYHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIFRoaXMgaW5jbHVkZXMgdGhlIG5ldyBmaWVsZHMuIFRoZSBgc3RydWN0IGRhbW9zX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IHRvby4gU28sIHRoZSBkYXRhIGV4cG9zZWQgdG8gdXNlciBzcGFjZSAqc2hvdWxkKiBiZSBzYWZlLiBObyBsZWFrcy5cblxuMi4gICoqQ29uZGl0aW9uYWwgTG9naWMgXHUwMDI2IFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIERvZXMgdGhlIGNvZGUgaGF2ZSBicmFuY2hpbmcgb3IgZGVjaXNpb24tbWFraW5nIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBXaXRoaW4gdGhlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIGFuZCBgZGFtb3NfZmlsdGVyX21hdGNoYCBmdW5jdGlvbnMsIGFsbCB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBhcmUgZGVmaW5pdGVseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyB1c2VkLiBgci1cdTAwM2Vwcm9iZV9oaXRzYCBhbmQgYHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzYCBhcmUgaGFuZGxlZCBzYWZlbHkgaW4gYGRhbW9uX25ld19yZWdpb25gLiBUaGUgZmlsdGVycyBhcmUgY29uZmlndXJlZCB3aXRoIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCB2YWx1ZXMsIGFuZCB0aGUgYHdzdW1gIGlzIHRoZW4gY29ycmVjdGx5IGFzc2lnbmVkLiBUaGlzIGlzIGEgdmVyeSBjbGVhbiBpbml0aWFsaXphdGlvbiBhbmQgdXNlIG9mIHZhbHVlcy4gTm8gdW5pbml0aWFsaXplZCByZWFkcy5cblxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogQXJlIHRoZXJlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQgbGF0ZXI/IE5vdCBpbiB0aGlzIHBhdGNoLiBUaGUgc3RydWN0dXJlcyBhbmQgZmlsdGVycyBhcmUgc2ltcGxlLCBhbmQgdGhleSdyZSBpbml0aWFsaXplZCBwcm9wZXJseSBkdXJpbmcgYWxsb2NhdGlvbiBvciBjb25maWd1cmF0aW9uLlxuXG40LiAgKipCb3VuZHMgQ2hlY2tpbmcgYW5kIE1lbW9yeSBTYWZldHk6KiogQXJlIHRoZXJlIGFueSBwbGFjZXMgd2hlcmUgdW5pbml0aWFsaXplZCBkYXRhIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbj8gVGhlIGBkYW1vbl9mb3JfZWFjaF9wcm9iZWAgbG9vcCBpdGVyYXRlcyB0aHJvdWdoIHByb2JlcyBpbiBgY3R4YCwgYW5kIHRoZSBwcm9iZSBjb3VudCBpcyBsaW1pdGVkIHRvIGBEQU1PTl9NQVhfUFJPQkVTYC4gVGhlIGxvb3AgaW5kZXggYGlgIGlzIHByb3Blcmx5IG1hbmFnZWQsIHNvIHRoaXMgc2VlbXMgc2FmZS5cblxuKipEb3VibGUgQ2hlY2sgYW5kIENvbmNsdXNpb246KipcblxuSSd2ZSBnb25lIHRocm91Z2ggZWFjaCBvZiB0aGUgcG90ZW50aWFsIGlzc3Vlcy4gSSd2ZSBjb25maXJtZWQgdGhhdDpcblxuKiAgIE5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbi5cbiogICBObyBjb250cm9sIGZsb3cgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG4qICAgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgc2FmZXR5IHRvb2xzIChsaWtlIExPQ0tERVApIGNvdmVyIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIHJpc2tzLiBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZSB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gTm93LCBJIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHRvb2wgY2FsbCB0byByZWZsZWN0IHRoaXMgY29uY2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2ODUsIk91dHB1dFRva2VucyI6MjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNToyMzo0Ny44NDk4NTc3ODNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGZpbHRlciB0eXBlIGZvciBEQU1PTiBzY2hlbWVzLCBleHRlbmRpbmcgc3lzZnMgYXR0cmlidXRlcyAoYG1pbmAgYW5kIGBtYXhgKSBhbmQgY29yZSBmaWx0ZXIgbWF0Y2hpbmcgdG8gdXNlIHRoZSBwcm9iZSBoaXRzIHdlaWdodGVkIG1vdmluZyBzdW0uIFxcblxcbi0gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogU3lzZnMgc2NoZW1lIGZpbHRlciBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBJbiBEQU1PTiBjb3JlLCBmaWx0ZXIgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHVwb24gY3JlYXRpb24gYW5kIGZpbHRlciBhcmd1bWVudHMgY29tbWl0Llxcbi0gVXNlci1zcGFjZSBEYXRhIFRyYW5zZmVyOiBTeXNmcyBvdXRwdXQgdXNlcyBmb3JtYXR0ZWQgc3RyaW5nIGVtaXNzaW9ucyB2aWEgYHN5c2ZzX2VtaXQoKWAsIHdpdGggbm8gcmF3IHN0cnVjdCBjb3BpZXMgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4tIFZhcmlhYmxlcyBhbmQgQnJhbmNoaW5nOiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gYW5kIGZpbHRlciBtYXRjaGluZyAoYHN1bWAsIGBpYCwgYHdzdW1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3IgbG9naWMgaXNzdWVzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBtZWNoYW5pc21zIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIGZpbHRlciB0eXBlIGZvciBEQU1PTiBzY2hlbWVzLCBleHRlbmRpbmcgc3lzZnMgYXR0cmlidXRlcyAoYG1pbmAgYW5kIGBtYXhgKSBhbmQgY29yZSBmaWx0ZXIgbWF0Y2hpbmcgdG8gdXNlIHRoZSBwcm9iZSBoaXRzIHdlaWdodGVkIG1vdmluZyBzdW0uIFxcblxcbi0gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogU3lzZnMgc2NoZW1lIGZpbHRlciBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBJbiBEQU1PTiBjb3JlLCBmaWx0ZXIgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHVwb24gY3JlYXRpb24gYW5kIGZpbHRlciBhcmd1bWVudHMgY29tbWl0Llxcbi0gVXNlci1zcGFjZSBEYXRhIFRyYW5zZmVyOiBTeXNmcyBvdXRwdXQgdXNlcyBmb3JtYXR0ZWQgc3RyaW5nIGVtaXNzaW9ucyB2aWEgYHN5c2ZzX2VtaXQoKWAsIHdpdGggbm8gcmF3IHN0cnVjdCBjb3BpZXMgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4tIFZhcmlhYmxlcyBhbmQgQnJhbmNoaW5nOiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSB3ZWlnaHRlZCBzdW0gY2FsY3VsYXRpb24gYW5kIGZpbHRlciBtYXRjaGluZyAoYHN1bWAsIGBpYCwgYHdzdW1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3IgbG9naWMgaXNzdWVzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBtZWNoYW5pc21zIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhtxgf[1] Phase: Succeeded StartedAt: 2026-09-10 15:24:12 +0000 UTC FinishedAt: 2026-09-10 15:24:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 15:24:12 +0000 UTC FinishedAt: 2026-09-10 15:24:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2] Phase: Succeeded StartedAt: 2026-09-10 15:24:12 +0000 UTC FinishedAt: 2026-09-10 19:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 15:24:12 +0000 UTC FinishedAt: 2026-09-10 19:15:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","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-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 15:24:12 +0000 UTC FinishedAt: 2026-09-10 15:24:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 15:24:12 +0000 UTC FinishedAt: 2026-09-10 15:24:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhtxgf/series-workflowhtxgf-convert-artifact-607094971/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 15:24:26 +0000 UTC FinishedAt: 2026-09-10 15:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 15:24:26 +0000 UTC FinishedAt: 2026-09-10 15:44:44 +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:*0cf60a8c-4390-4bbc-b246-1a06ea49c5e3,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-workflowhtxgf/series-workflowhtxgf-convert-artifact-607094971/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": "85f1b629-ab03-4f90-b291-81622f67bcf0", "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-workflowhtxgf/series-workflowhtxgf-build-action-4093941497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 15:24:26 +0000 UTC FinishedAt: 2026-09-10 15:44:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0cf60a8c-4390-4bbc-b246-1a06ea49c5e3,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-workflowhtxgf/series-workflowhtxgf-convert-artifact-607094971/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": "85f1b629-ab03-4f90-b291-81622f67bcf0", "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-workflowhtxgf/series-workflowhtxgf-build-action-4093941497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 15:44:44 +0000 UTC FinishedAt: 2026-09-10 15:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 15:44:44 +0000 UTC FinishedAt: 2026-09-10 15:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 15:44:44 +0000 UTC FinishedAt: 2026-09-10 15:44:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 15:44:44 +0000 UTC FinishedAt: 2026-09-10 15:44:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","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-workflowhtxgf/series-workflowhtxgf-convert-artifact-362277394/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 15:44:54 +0000 UTC FinishedAt: 2026-09-10 15:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 15:44:54 +0000 UTC FinishedAt: 2026-09-10 15:46:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*85f1b629-ab03-4f90-b291-81622f67bcf0,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-workflowhtxgf/series-workflowhtxgf-build-action-4093941497/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-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 15:46:51 +0000 UTC FinishedAt: 2026-09-10 15:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 15:46:51 +0000 UTC FinishedAt: 2026-09-10 15:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 15:46:51 +0000 UTC FinishedAt: 2026-09-10 16:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 15:46:51 +0000 UTC FinishedAt: 2026-09-10 16:07:16 +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:*0cf60a8c-4390-4bbc-b246-1a06ea49c5e3,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-workflowhtxgf/series-workflowhtxgf-convert-artifact-362277394/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": "4a1ed2c2-9c33-4e31-8c98-ffa77294e5d1", "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-workflowhtxgf/series-workflowhtxgf-build-action-2834327206/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 15:46:51 +0000 UTC FinishedAt: 2026-09-10 16:06:56 +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:*0cf60a8c-4390-4bbc-b246-1a06ea49c5e3,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-workflowhtxgf/series-workflowhtxgf-convert-artifact-362277394/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": "4a1ed2c2-9c33-4e31-8c98-ffa77294e5d1", "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-workflowhtxgf/series-workflowhtxgf-build-action-2834327206/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 16:07:16 +0000 UTC FinishedAt: 2026-09-10 16:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 16:07:16 +0000 UTC FinishedAt: 2026-09-10 16:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 16:07:16 +0000 UTC FinishedAt: 2026-09-10 16:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 16:07:16 +0000 UTC FinishedAt: 2026-09-10 16:09:02 +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:*4a1ed2c2-9c33-4e31-8c98-ffa77294e5d1,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-workflowhtxgf/series-workflowhtxgf-build-action-2834327206/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-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 16:09:11 +0000 UTC FinishedAt: 2026-09-10 19:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 16:09:11 +0000 UTC FinishedAt: 2026-09-10 19:15:43 +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_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"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:*85f1b629-ab03-4f90-b291-81622f67bcf0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4a1ed2c2-9c33-4e31-8c98-ffa77294e5d1,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-workflowhtxgf/series-workflowhtxgf-build-action-4093941497/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-workflowhtxgf/series-workflowhtxgf-build-action-2834327206/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 16:09:11 +0000 UTC FinishedAt: 2026-09-10 16:09:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 16:09:11 +0000 UTC FinishedAt: 2026-09-10 16:09:16 +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_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"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-workflowhtxgf/series-workflowhtxgf-convert-artifact-4086158183/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 16:09:11 +0000 UTC FinishedAt: 2026-09-10 16:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 16:09:11 +0000 UTC FinishedAt: 2026-09-10 16:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 16:09:11 +0000 UTC FinishedAt: 2026-09-10 16:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 16:09:21 +0000 UTC FinishedAt: 2026-09-10 19:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtxgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damos_filter_match","damos_filter_for_ops","damos_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_pa_apply_probes","damon_va_apply_probes","damon_merge_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"ece33db9-4802-4c0d-b860-87ee9f26ded5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 16:09:21 +0000 UTC FinishedAt: 2026-09-10 19:15:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*85f1b629-ab03-4f90-b291-81622f67bcf0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4a1ed2c2-9c33-4e31-8c98-ffa77294e5d1,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-workflowhtxgf/series-workflowhtxgf-build-action-4093941497/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-workflowhtxgf/series-workflowhtxgf-build-action-2834327206/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-workflowhtxgf/series-workflowhtxgf-convert-artifact-4086158183/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,}