Name: series-workflowcmvf6 Phase: Succeeded StartedAt: 2026-09-11 01:27:24 +0000 UTC FinishedAt: 2026-09-11 05:10:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[0] Phase: Succeeded StartedAt: 2026-09-11 01:27:24 +0000 UTC FinishedAt: 2026-09-11 01:31:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 01:27:24 +0000 UTC FinishedAt: 2026-09-11 01:31:42 +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": "1f78f28a2945f9e856b4ea8428ac41a6788e4b67", "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": "1f78f28a2945f9e856b4ea8428ac41a6788e4b67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "4f728551-3469-45f8-aa0a-95656ea8b126" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_probe_hits_wsum", "damos_filter_match", "damos_commit_filter_arg", "damon_sysfs_add_scheme_filters", "damon_sysfs_add_schemes", "damon_merge_score", "damon_pa_apply_probes", "damon_va_apply_probes" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gKSBhbmQgcmVmYWN0b3JzIHN5c2ZzIGZpbHRlciBtaW4vbWF4IGhhbmRsaW5nIHRvIHN1cHBvcnQgcHJvYmUgaGl0IHdlaWdodGVkIHN1bSByYW5nZXMgYWxvbmdzaWRlIGh1Z2VwYWdlIHNpemVzLlxuXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBzeXNmcyBmaWx0ZXIgc3RydWN0dXJlcyAoYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgKSBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFdoZW4gY29udmVydGluZyB0byBrZXJuZWwgZmlsdGVycyAoYGRhbW9zX2ZpbHRlcmApLCB0aGUgcmFuZ2UgZmllbGRzIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gc3lzZnMgZmlsdGVycy4gU3lzZnMgc2hvdyBhdHRyaWJ1dGVzIHVzZSBgc3lzZnNfZW1pdCgpYCB0byBvdXRwdXQgZm9ybWF0dGVkIHVuc2lnbmVkIGxvbmcgaW50ZWdlcnMsIHByZWNsdWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkLlxuLSBLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnMgYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBhbnkgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiBwcm9iZSBhcnJheXMsIG9yIGFsbG9jYXRpb24gaXNzdWVzLlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBtb25pdG9yaW5nIHJlZ2lvbnMgYmFzZWQgb24gdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzLiBJdCB1cGRhdGVzIGNvcmUgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBjb21taXQgZmlsdGVyIGFyZ3VtZW50IGhhbmRsaW5nLCBtb3Zpbmcgc3VtIHByb2JlIGhpdCBjYWxjdWxhdGlvbiwgYW5kIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWUgZmlsdGVyIGludGVyZmFjZS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBleHBvc2VkIHZpYSBzeXNmcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Nzc0NTQyZDhjZDg0NmI1MjhkZTY3ODE1YmU2OGM5MDAwYjI0MDVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDE6Mjk6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTU1MSw2ICYjNDM7NTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlXG4gZmlsdGVyLiAgUmVmZXIgdG8gOnJlZjpgdGhlIGRlc2lnbiBkb2MgXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnNcdTAwM2VgIGZvclxuIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLlxuIFxuJiM0MztGb3IgYGBwcm9iZV9oaXRzX3dzdW1gYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gcHJvYmVcbiYjNDM7aGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcyxcbiYjNDM7cmVzcGVjdGl2ZWx5LlxuJiM0MztcbiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnlcbiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG9cbiBgYG1lbWNnX3BhdGhgYCBmaWxlLiAgRm9yIGBgYWRkcmBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgc3RhcnQgYW5kIGVuZFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtODIyLDYgJiM0Mzs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gYWRkcmVzcyByYW5nZS5cbiAgICAgLSB0YXJnZXRcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LlxuJiM0MzsgICAgLSBwcm9iZV9oaXRzX3dzdW1cbiYjNDM7ICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlXG4mIzQzOyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSBcdTAwM2NkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nXHUwMDNlYCB2YWx1ZS5cbiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LlxuICAgICAtIGFub25cbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IG5vdCBzdG9yZWQgaW4gZmlsZXMuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0zOTksMTQgJiM0MzszOTksMTUgQEAgc3RydWN0IGRhbW9zX3N0YXQge1xuICAqIEBEQU1PU19GSUxURVJfVFlQRV9VTk1BUFBFRDpcdFVubWFwcGVkIHBhZ2VzLlxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9BRERSOlx0QWRkcmVzcyByYW5nZS5cbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlx0RGF0YSBBY2Nlc3MgTW9uaXRvcmluZyB0YXJnZXQuXG4mIzQzOyAqIEBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XHRwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS5cbiAgKiBATlJfREFNT1NfRklMVEVSX1RZUEVTOlx0TnVtYmVyIG9mIGZpbHRlciB0eXBlcy5cbiAgKlxuLSAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUXG4tICogYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZVxuLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LFxuLSAqIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkXG4tICogYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWRcbi0gKiBhcyAmIzM5O3RyaWVkJiMzOTsuXG4mIzQzOyAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGFuZFxuJiM0MzsgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0XG4mIzQzOyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZFxuJiM0MzsgKiBhcyAmIzM5O3RyaWVkJiMzOTsuICBJbiBjb250cmFzdCwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmRcbiYjNDM7ICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlXG4mIzQzOyAqIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQgYXMgJiMzOTt0cmllZCYjMzk7LlxuICAqXG4gICogU3VwcG9ydCBmb3IgdGhlIG9wZXJhdGlvbnMtaGFuZGxlZCBmaWx0ZXJzIGRlcGVuZHMgb24gdGhlIHJ1bm5pbmdcbiAgKiBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy5cbkBAIC00MjAsNiAmIzQzOzQyMSw3IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuIFx0REFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsXG4gXHREQU1PU19GSUxURVJfVFlQRV9BRERSLFxuIFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuJiM0MztcdERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcbiBcdE5SX0RBTU9TX0ZJTFRFUl9UWVBFUyxcbiB9O1xuIFxuQEAgLTQzNCw2ICYjNDM7NDM2LDggQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XG4gICpcdFx0XHUwMDI2ZGFtb25fY3R4LVx1MDAzZWFkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXNcbiAgKlx0XHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuXG4gICogQHN6X3JhbmdlOlx0U2l6ZSByYW5nZSBpZiBAdHlwZSBpcyBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFLlxuJiM0MzsgKiBAcmFuZ2VfbWluOlx0TWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXG4mIzQzOyAqIEByYW5nZV9tYXg6XHRNYXhpbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDUwLDYgJiM0Mzs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7XG4gXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4gXHRcdGludCB0YXJnZXRfaWR4O1xuIFx0XHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIHJhbmdlX21heDtcbiYjNDM7XHRcdH07XG4gXHR9O1xuIC8qIHByaXZhdGU6ICovXG4gXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuQEAgLTEwNjUsNyAmIzQzOzEwNzMsNyBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4gXG4gaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC00NjksMTEgJiM0Mzs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4gICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbiAgKiBAbGFzdDpcdGlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuXG4mIzQzOyAqIEBtdjpcdFx0dXNlIG1vdmluZyBzdW0uXG4gICogQGN0eDpcdGNvbnRleHQgb2YgXHUwMDI2ci5cbiAgKlxuICAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXG4gICovXG4tdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4mIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbkBAIC00ODMsNiAmIzQzOzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuIFx0XHRpZiAobGFzdClcbiBcdFx0XHRzdW0gJiM0Mzs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiYjNDM7XHRcdGVsc2UgaWYgKG12KVxuJiM0MztcdFx0XHRzdW0gJiM0Mzs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSYjNDM7JiM0MzssIHIsIGN0eCkgKlxuJiM0MztcdFx0XHRcdHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2Vwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdH1cbkBAIC02NTQsNiAmIzQzOzY1OCw3IEBAIGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuIFx0c3dpdGNoICh0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbiYjNDM7XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5AQCAtMTMyOCw2ICYjNDM7MTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcbiBcdFx0ZHN0LVx1MDAzZXN6X3JhbmdlID0gc3JjLVx1MDAzZXN6X3JhbmdlO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbiYjNDM7XHRcdGRzdC1cdTAwM2VyYW5nZV9taW4gPSBzcmMtXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0ZHN0LVx1MDAzZXJhbmdlX21heCA9IHNyYy1cdTAwM2VyYW5nZV9tYXg7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1MDYsNyAmIzQzOzI1MTUsNyBAQCBzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aTtcbiBcdGludCB0YXJnZXRfaWR4ID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHdzdW07XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbkBAIC0yNTQxLDYgJiM0MzsyNTUwLDExIEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLVx1MDAzZWFyLnN0YXJ0KTtcbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuJiM0MztcdFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcbiYjNDM7XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzYz0gd3N1bSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0d3N1bSBcdTAwM2M9IGZpbHRlci1cdTAwM2VyYW5nZV9tYXg7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0zNDQ5LDcgJiM0MzszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcbiB7XG4gXHRpZiAodXNlX3Byb2JlX2hpdHMpXG4tXHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcbiYjNDM7XHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7XG4gXHRpZiAobGFzdClcbiBcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcztcbiBcdHJldHVybiByLVx1MDAzZW5yX2FjY2Vzc2VzO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCBkN2M4MTgyOTQ0NWJhLi5iOGY0ZDI4MTY1ZGQ3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuJiM0MztcdFx0XHRcdFx0XHRcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiBtYXhfd3N1bTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbmluZGV4IGQ5YjgxZDdiNTkxMGUuLjNkZTRkODA0ZTA0OWYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTUzNCw3ICYjNDM7NTM0LDggQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xuIFx0Ym9vbCBhbGxvdztcbiBcdGNoYXIgKm1lbWNnX3BhdGg7XG4gXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xuLVx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4gXHRpbnQgdGFyZ2V0X2lkeDtcbiB9O1xuIFxuQEAgLTU4OCw2ICYjNDM7NTg5LDEwIEBAIGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XG4gXHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuIFx0XHQubmFtZSA9IFwmIzM0O3RhcmdldFwmIzM0OyxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3Byb2JlX2hpdHNfd3N1bVwmIzM0OyxcbiYjNDM7XHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc3OCw3ICYjNDM7NzgzLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuIFxuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuJiM0MztcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc4Niw3ICYjNDM7NzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4tXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluKTtcbiYjNDM7XHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtNzk3LDcgJiM0Mzs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtODA1LDcgJiM0Mzs4MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuJiM0MztcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xuIH1cbkBAIC0yODM1LDEyICYjNDM7Mjg0MCwyMCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbiBcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuIFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbi1cdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbiBcdTAwM2Vcbi1cdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCkge1xuJiM0MztcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbiYjNDM7XHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2VyYW5nZV9tYXgpIHtcbiYjNDM7XHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNKSB7XG4mIzQzO1x0XHRcdGZpbHRlci1cdTAwM2VyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbiYjNDM7XHRcdFx0aWYgKGZpbHRlci1cdTAwM2VyYW5nZV9taW4gXHUwMDNlIGZpbHRlci1cdTAwM2VyYW5nZV9tYXgpIHtcbiBcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0ZmlsdGVyLVx1MDAzZXN6X3JhbmdlID0gc3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlO1xuIFx0XHR9XG4gXG4gXHRcdGRhbW9zX2FkZF9maWx0ZXIoc2NoZW1lLCBmaWx0ZXIpO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCA5YTM4ZGM4OWExNTZlLi40YWVjZjM0ZTM5YmUyIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTcwNCw3ICYjNDM7NzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpO1xuIFx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4gXHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG4tXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0XHRpZiAobW0pXG4gXHRcdFx0bW1wdXQobW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBtb25pdG9yaW5nIHJlZ2lvbnMgYmFzZWQgb24gdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzLiBJdCB1cGRhdGVzIGNvcmUgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBjb21taXQgZmlsdGVyIGFyZ3VtZW50IGhhbmRsaW5nLCBtb3Zpbmcgc3VtIHByb2JlIGhpdCBjYWxjdWxhdGlvbiwgYW5kIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWUgZmlsdGVyIGludGVyZmFjZS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBleHBvc2VkIHZpYSBzeXNmcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Nzc0NTQyZDhjZDg0NmI1MjhkZTY3ODE1YmU2OGM5MDAwYjI0MDVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDE6Mjk6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0CmluZGV4IDAyM2M2MzM0MDI0ZjguLmQzZTM3NDAwMzY3YmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0CkBAIC01NTEsNiAmIzQzOzU1MSwxMCBAQCBhbmQgYGBkYW1vbl90YXJnZXRfaWR4YGAuICBUbyBgYHR5cGVgYCBmaWxlLCB5b3UgY2FuIHdyaXRlIHRoZSB0eXBlIG9mIHRoZQogZmlsdGVyLiAgUmVmZXIgdG8gOnJlZjpgdGhlIGRlc2lnbiBkb2MgJmx0O2RhbW9uX2Rlc2lnbl9kYW1vc19maWx0ZXJzJmd0O2AgZm9yCiBhdmFpbGFibGUgdHlwZSBuYW1lcywgdGhlaXIgbWVhbmluZyBhbmQgb24gd2hhdCBsYXllciB0aG9zZSBhcmUgaGFuZGxlZC4KIAomIzQzO0ZvciBgYHByb2JlX2hpdHNfd3N1bWBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBwcm9iZQomIzQzO2hpdHMgd2VpZ2h0ZWQgc3VtIHZhbHVlIGZvciB0aGUgZmlsdGVyIHRvIGBgbWluYGAgYW5kIGBgbWF4YGAgZmlsZXMsCiYjNDM7cmVzcGVjdGl2ZWx5LgomIzQzOwogRm9yIGBgbWVtY2dgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1lbW9yeSBjZ3JvdXAgb2YgdGhlIGludGVyZXN0IGJ5CiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG8KIGBgbWVtY2dfcGF0aGBgIGZpbGUuICBGb3IgYGBhZGRyYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBzdGFydCBhbmQgZW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdApAQCAtODIyLDYgJiM0Mzs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLgogICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBiZWxvbmdpbmcgdG8gYSBnaXZlbiBhZGRyZXNzIHJhbmdlLgogICAgIC0gdGFyZ2V0CiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LgomIzQzOyAgICAtIHByb2JlX2hpdHNfd3N1bQomIzQzOyAgICAgICAgLSBNYXRjaGVzIHRvIG1vbml0b3JpbmcgcmVnaW9ucyBoYXZpbmcgYSBnaXZlbiByYW5nZSBvZiA6cmVmOmBwcm9iZQomIzQzOyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSAmbHQ7ZGFtb25fZGVzaWduX2F0dHJzX29ubHlfbW9uaXRvcmluZyZndDtgIHZhbHVlLgogLSBPcGVyYXRpb25zIGxheWVyIGhhbmRsZWQsIHN1cHBvcnRlZCBieSBvbmx5IGBgcGFkZHJgYCBvcGVyYXRpb25zIHNldC4KICAgICAtIGFub24KICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgY29udGFpbmluZyBkYXRhIHRoYXQgbm90IHN0b3JlZCBpbiBmaWxlcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaAppbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCkBAIC0zOTksMTQgJiM0MzszOTksMTUgQEAgc3RydWN0IGRhbW9zX3N0YXQgewogICogQERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVEOglVbm1hcHBlZCBwYWdlcy4KICAqIEBEQU1PU19GSUxURVJfVFlQRV9BRERSOglBZGRyZXNzIHJhbmdlLgogICogQERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDoJRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyB0YXJnZXQuCiYjNDM7ICogQERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToJcHJvYmVfaGl0cyB3ZWlnaHRlZCBzdW0gcmFuZ2UuCiAgKiBATlJfREFNT1NfRklMVEVSX1RZUEVTOglOdW1iZXIgb2YgZmlsdGVyIHR5cGVzLgogICoKLSAqIEFsbCB0eXBlcyBleGNlcHQgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVAotICogYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBhcyBhIHBhcnQgb2Ygc2NoZW1lCi0gKiBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZCBhcyAmIzM5O3RyaWVkJiMzOTsuICBJbiBjb250cmFzdCwKLSAqICZhbXA7REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZAotICogYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQKLSAqIGFzICYjMzk7dHJpZWQmIzM5Oy4KJiM0MzsgKiBBbGwgdHlwZXMgZXhjZXB0ICZhbXA7REFNT1NfRklMVEVSX1RZUEVfQUREUiwgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgYW5kCiYjNDM7ICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgJmFtcDtzdHJ1Y3QKJiM0MzsgKiBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWUgYWN0aW9uIHRyeWluZywgYW5kIHRoZXJlZm9yZSBhY2NvdW50ZWQKJiM0MzsgKiBhcyAmIzM5O3RyaWVkJiMzOTsuICBJbiBjb250cmFzdCwgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZAomIzQzOyAqICZhbXA7REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlCiYjNDM7ICogdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZCBhcyAmIzM5O3RyaWVkJiMzOTsuCiAgKgogICogU3VwcG9ydCBmb3IgdGhlIG9wZXJhdGlvbnMtaGFuZGxlZCBmaWx0ZXJzIGRlcGVuZHMgb24gdGhlIHJ1bm5pbmcKICAqICZhbXA7c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuCkBAIC00MjAsNiAmIzQzOzQyMSw3IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgewogCURBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVELAogCURBTU9TX0ZJTFRFUl9UWVBFX0FERFIsCiAJREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULAomIzQzOwlEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sCiAJTlJfREFNT1NfRklMVEVSX1RZUEVTLAogfTsKIApAQCAtNDM0LDYgJiM0Mzs0MzYsOCBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHsKICAqCQkmYW1wO2RhbW9uX2N0eC0mZ3Q7YWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpcwogICoJCURBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC4KICAqIEBzel9yYW5nZToJU2l6ZSByYW5nZSBpZiBAdHlwZSBpcyBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFLgomIzQzOyAqIEByYW5nZV9taW46CU1pbmltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLgomIzQzOyAqIEByYW5nZV9tYXg6CU1heGltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLgogICoKICAqIEJlZm9yZSBhcHBseWluZyB0aGUgJmFtcDtkYW1vcy0mZ3Q7YWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2gKICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGUKQEAgLTQ1MCw2ICYjNDM7NDU0LDEwIEBAIHN0cnVjdCBkYW1vc19maWx0ZXIgewogCQlzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlOwogCQlpbnQgdGFyZ2V0X2lkeDsKIAkJc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluOwomIzQzOwkJCXVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4OwomIzQzOwkJfTsKIAl9OwogLyogcHJpdmF0ZTogKi8KIAkvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqLwpAQCAtMTA2NSw3ICYjNDM7MTA3Myw3IEBAIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCk7Ci11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKJiM0Mzt1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdiwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KTsKIAogaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ1Y2IzNjcwMTlhZS4uZDlkNTZmNGJlMWE5NyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtNDY5LDExICYjNDM7NDY5LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uCiAgKiBAcjoJCXJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi4KICAqIEBsYXN0OglpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLgomIzQzOyAqIEBtdjoJCXVzZSBtb3Zpbmcgc3VtLgogICogQGN0eDoJY29udGV4dCBvZiAmYW1wO3IuCiAgKgogICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi4KICAqLwotdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsCiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIHsKIAlzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlOwpAQCAtNDgzLDYgJiM0Mzs0ODQsOSBAQCB1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKIAlkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7CiAJCWlmIChsYXN0KQogCQkJc3VtICYjNDM7PSByLSZndDtsYXN0X3Byb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtJmd0O3dlaWdodDsKJiM0MzsJCWVsc2UgaWYgKG12KQomIzQzOwkJCXN1bSAmIzQzOz0gZGFtb25fcHJvYmVfaGl0c19tdnN1bShpJiM0MzsmIzQzOywgciwgY3R4KSAqCiYjNDM7CQkJCXByb2JlLSZndDt3ZWlnaHQ7CiAJCWVsc2UKIAkJCXN1bSAmIzQzOz0gci0mZ3Q7cHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS0mZ3Q7d2VpZ2h0OwogCX0KQEAgLTY1NCw2ICYjNDM7NjU4LDcgQEAgYm9vbCBkYW1vc19maWx0ZXJfZm9yX29wcyhlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUpCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOgogCWNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOgomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKIAkJcmV0dXJuIGZhbHNlOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTMyOCw2ICYjNDM7MTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZygKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkU6CiAJCWRzdC0mZ3Q7c3pfcmFuZ2UgPSBzcmMtJmd0O3N6X3JhbmdlOwogCQlicmVhazsKJiM0MzsJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06CiYjNDM7CQlkc3QtJmd0O3JhbmdlX21pbiA9IHNyYy0mZ3Q7cmFuZ2VfbWluOwomIzQzOwkJZHN0LSZndDtyYW5nZV9tYXggPSBzcmMtJmd0O3JhbmdlX21heDsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTI1MDYsNyAmIzQzOzI1MTUsNyBAQCBzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LAogCWJvb2wgbWF0Y2hlZCA9IGZhbHNlOwogCXN0cnVjdCBkYW1vbl90YXJnZXQgKnRpOwogCWludCB0YXJnZXRfaWR4ID0gMDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgd3N1bTsKIAogCXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7CiAJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6CkBAIC0yNTQxLDYgJiM0MzsyNTUwLDExIEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCWRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLSZndDthci5zdGFydCk7CiAJCW1hdGNoZWQgPSB0cnVlOwogCQlicmVhazsKJiM0MzsJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06CiYjNDM7CQl3c3VtID0gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLCB0cnVlLCBjdHgpOwomIzQzOwkJbWF0Y2hlZCA9IGZpbHRlci0mZ3Q7cmFuZ2VfbWluICZsdDs9IHdzdW0gJmFtcDsmYW1wOwomIzQzOwkJCXdzdW0gJmx0Oz0gZmlsdGVyLSZndDtyYW5nZV9tYXg7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMzQ0OSw3ICYjNDM7MzQ2Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWVyZ2Vfc2NvcmUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpCiB7CiAJaWYgKHVzZV9wcm9iZV9oaXRzKQotCQlyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGN0eCk7CiYjNDM7CQlyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGZhbHNlLCBjdHgpOwogCWlmIChsYXN0KQogCQlyZXR1cm4gci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlczsKIAlyZXR1cm4gci0mZ3Q7bnJfYWNjZXNzZXM7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuYwppbmRleCBkN2M4MTgyOTQ0NWJhLi5iOGY0ZDI4MTY1ZGQ3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCQkJCWZvbGlvX3B1dChmb2xpbyk7CiAJCQlpZiAocmV0dXJuX21heF93c3VtKQogCQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKLQkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiYjNDM7CQkJCQkJCWZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7CiAJCX0KIAl9CiAJcmV0dXJuIG1heF93c3VtOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCmluZGV4IGQ5YjgxZDdiNTkxMGUuLjNkZTRkODA0ZTA0OWYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKQEAgLTUzNCw3ICYjNDM7NTM0LDggQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgewogCWJvb2wgYWxsb3c7CiAJY2hhciAqbWVtY2dfcGF0aDsKIAlzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlOwotCXN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlOwomIzQzOwl1bnNpZ25lZCBsb25nIHJhbmdlX21pbjsKJiM0MzsJdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7CiAJaW50IHRhcmdldF9pZHg7CiB9OwogCkBAIC01ODgsNiAmIzQzOzU4OSwxMCBAQCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0gewogCQkudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCwKIAkJLm5hbWUgPSAmIzM0O3RhcmdldCYjMzQ7LAogCX0sCiYjNDM7CXsKJiM0MzsJCS50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLAomIzQzOwkJLm5hbWUgPSAmIzM0O3Byb2JlX2hpdHNfd3N1bSYjMzQ7LAomIzQzOwl9LAogfTsKIAogc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLApAQCAtNzc4LDcgJiM0Mzs3ODMsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosCiAJCQlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7CiAKLQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgZmlsdGVyLSZndDtzel9yYW5nZS5taW4pOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgZmlsdGVyLSZndDtyYW5nZV9taW4pOwogfQogCiBzdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC03ODYsNyAmIzQzOzc5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIHsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosCiAJCQlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7Ci0JaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbik7CiYjNDM7CWludCBlcnIgPSBrc3RydG91bChidWYsIDAsICZhbXA7ZmlsdGVyLSZndDtyYW5nZV9taW4pOwogCiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQpAQCAtNzk3LDcgJiM0Mzs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosCiAJCQlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7CiAKLQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgZmlsdGVyLSZndDtzel9yYW5nZS5tYXgpOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgZmlsdGVyLSZndDtyYW5nZV9tYXgpOwogfQogCiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC04MDUsNyAmIzQzOzgxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIHsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosCiAJCQlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7Ci0JaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3N6X3JhbmdlLm1heCk7CiYjNDM7CWludCBlcnIgPSBrc3RydG91bChidWYsIDAsICZhbXA7ZmlsdGVyLSZndDtyYW5nZV9tYXgpOwogCiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQpAQCAtMjgzNSwxMiAmIzQzOzI4NDAsMjAgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpzY2hlbWUsCiAJCX0gZWxzZSBpZiAoZmlsdGVyLSZndDt0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCkgewogCQkJZmlsdGVyLSZndDt0YXJnZXRfaWR4ID0gc3lzZnNfZmlsdGVyLSZndDt0YXJnZXRfaWR4OwogCQl9IGVsc2UgaWYgKGZpbHRlci0mZ3Q7dHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFKSB7Ci0JCQlpZiAoc3lzZnNfZmlsdGVyLSZndDtzel9yYW5nZS5taW4gJmd0OwotCQkJCQlzeXNmc19maWx0ZXItJmd0O3N6X3JhbmdlLm1heCkgewomIzQzOwkJCWlmIChzeXNmc19maWx0ZXItJmd0O3JhbmdlX21pbiAmZ3Q7CiYjNDM7CQkJCQlzeXNmc19maWx0ZXItJmd0O3JhbmdlX21heCkgewomIzQzOwkJCQlkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CQkJZmlsdGVyLSZndDtzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItJmd0O3JhbmdlX21pbjsKJiM0MzsJCQlmaWx0ZXItJmd0O3N6X3JhbmdlLm1heCA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4OwomIzQzOwkJfSBlbHNlIGlmIChmaWx0ZXItJmd0O3R5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNKSB7CiYjNDM7CQkJZmlsdGVyLSZndDtyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItJmd0O3JhbmdlX21pbjsKJiM0MzsJCQlmaWx0ZXItJmd0O3JhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4OwomIzQzOwkJCWlmIChmaWx0ZXItJmd0O3JhbmdlX21pbiAmZ3Q7IGZpbHRlci0mZ3Q7cmFuZ2VfbWF4KSB7CiAJCQkJZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCWZpbHRlci0mZ3Q7c3pfcmFuZ2UgPSBzeXNmc19maWx0ZXItJmd0O3N6X3JhbmdlOwogCQl9CiAKIAkJZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCA5YTM4ZGM4OWExNTZlLi40YWVjZjM0ZTM5YmUyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTcwNCw3ICYjNDM7NzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCQkJX19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7CiAJCQlpZiAocmV0dXJuX21heF93c3VtKQogCQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKLQkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiYjNDM7CQkJCQkJCWZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7CiAJCX0KIAkJaWYgKG1tKQogCQkJbW1wdXQobW0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTQxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2ggZm9yIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIChEQU1PTikgc3Vic3lzdGVtLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgc29tZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGNhbGN1bGF0aW5nIHdlaWdodGVkIHN1bXMgb2YgcHJvYmUgaGl0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LgoKTXkgZmlyc3QgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYWRkaW5nIG1vcmUgZ3JhbnVsYXJpdHkgdG8gaG93IHdlIGZpbHRlciBhbmQgYW5hbHl6ZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBUaGUga2V5IGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgaW5jbHVzaW9uIG9mIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gLiBUaGlzIG5ldyBmaWx0ZXIgdHlwZSBpcyBpbnRyb2R1Y2VkIGFjcm9zcyBzZXZlcmFsIGZpbGVzLiBJbiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgdGhlIGFkZGl0aW9ucyBpbmNsdWRlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gLCBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gdGhlIGBzdHJ1Y3QgZGFtb3NfZmlsdGVyYCB0byBpbmNsdWRlIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCwgYW5kIHRoZSBwcm90b3R5cGUgb2YgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAuIFRoZXNlIGFkZGl0aW9ucyBwb2ludCB0byB0aGUgaW50cm9kdWN0aW9uIG9mIGZpbHRlcmluZyBiYXNlZCBvbiBhIHJhbmdlLgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEhlcmUsIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIGlzIHVwZGF0ZWQgdG8gYWNjZXB0IGEgYGJvb2wgbXZgIHBhcmFtZXRlciwgd2hpY2ggaXMgbGlrZWx5IGZvciBhICYjMzQ7bW92aW5nIHN1bSYjMzQ7LiBUaGlzLCBhbG9uZ3NpZGUgdGhlIGNoYW5nZXMgdG8gYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzYCwgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCwgYW5kIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBpbmRpY2F0ZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbW92aW5nIHN1bSBjYWxjdWxhdGlvbiBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgZmlsdGVyaW5nIG1lY2hhbmlzbS4gSSBzZWUgYSBjb25uZWN0aW9uIG9mIHRoaXMgd2l0aCB0aGUgYGRhbW9uX21lcmdlX3Njb3JlYCBmdW5jdGlvbiwgd2hpY2ggbm93IGNhbGxzIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBhbmQgd2l0aGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCB3ZSBzZWUgdGhlIGNhbGxzIHRvIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIHdpdGggdGhlIGBmYWxzZWAgb3B0aW9uLgoKRmluYWxseSwgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHdlIGdldCB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIG5ldyBmaWx0ZXIuIFdlIHNlZSBgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCAoJiMzNDtwcm9iZV9oaXRzX3dzdW0mIzM0OykgYWRkZWQgdG8gdGhlIHN5c2ZzIHJlcHJlc2VudGF0aW9uLCBhbmQgYHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBiZWluZyByZWZhY3RvcmVkLiBUaGUgcmVwbGFjZW1lbnRzIG9mIGBzel9yYW5nZWAgd2l0aCBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAsIGFsb25nc2lkZSB0aGUgdXBkYXRlcyB0byB0aGUgYG1pbl9zaG93YCwgYG1pbl9zdG9yZWAsIGBtYXhfc2hvd2AsIGBtYXhfc3RvcmVgIGZ1bmN0aW9ucywgYXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgb3B0aW9ucyB0byBkZXRlcm1pbmUgaWYgdGhpcyBuZXcgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgaXQgaGFzIGFueSBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgYSBzb2xpZCBlbmhhbmNlbWVudCB0byB0aGUgREFNT04gc3Vic3lzdGVtLCB3aGljaCBsaWtlbHkgaW1wcm92ZXMgaXRzIGFiaWxpdHkgdG8gaWRlbnRpZnkgYW5kIG9wdGltaXplIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBNYWtlZmlsZSBhbmQgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb3JlIGJ1aWxkIGluZnJhc3RydWN0dXJlIGZvciB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIG9wZW4gdXAgYG1tL2RhbW9uL01ha2VmaWxlYCBhbmQgYG1tL2RhbW9uL0tjb25maWdgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBidWlsZCBydWxlcyBhbmQgbGlrZWx5IHRoZSBtb2R1bGUgZGVmaW5pdGlvbnMgaW4gdGhlIE1ha2VmaWxlLiBGcm9tIGEgS2NvbmZpZyBwZXJzcGVjdGl2ZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBEQU1PTiYjMzk7cyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJ1bnRpbWUgYmVoYXZpb3JzIHRoYXQgYXJlIGNvbnRyb2xsZWQgdGhyb3VnaCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgREFNT04gYW5kIHRvIHNlZSB0aGUgbW9kdWxhcml0eSBvZiB0aGUgZGVzaWduLCB3aGljaCBtaWdodCByZXZlYWwgYXNwZWN0cyByZWxhdGVkIHRvIGl0cyBzY2FsYWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5LiBBbmFseXppbmcgdGhlIE1ha2VmaWxlIHdpbGwgcXVpY2tseSBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcywgd2hpbGUgS2NvbmZpZyB3aWxsIGlsbHVtaW5hdGUgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGJha2VkIGludG8gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgZmllbGQgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgREFNT04gc3Vic3lzdGVtLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY3J1Y2lhbCBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhleSBpbnRlcnJlbGF0ZSBpcyBlc3NlbnRpYWwuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGEgZmV3IGtleSBmZWF0dXJlczogYERBTU9OX1NZU0ZTYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1ZBRERSYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBvdmVyYXJjaGluZyBgREFNT05gIG9wdGlvbiBpdHNlbGYuIEkgd2FudCB0byBzZWUgd2hpY2ggb2YgdGhlc2UgYXJlIHJlcXVpcmVkIHRvIGJlIGVuYWJsZWQgZm9yIG90aGVycywgaWYgYW55IGhhdmUgZXh0ZXJuYWwgcHJlcmVxdWlzaXRlcyBvciBpbnRlcm5hbCBjb25mbGljdHMsIGFuZCBob3cgYWxsIHRoaXMgaW1wYWN0cyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIG1lbnRhbGx5IG1hcCB0aGUgY29uZmlndXJhdGlvbiBoaWVyYXJjaHkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiAgMjE6XHRcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbiAgMjI6XHRcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcbiAgMjc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyODpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAyOTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IERBTU9OIE1NIFN1YnN5c3RlbSBFbmhhbmNlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBuZXcgZmVhdHVyZSBiZWluZyBhZGRlZCB0byBEQU1PTiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChNTSkgc3Vic3lzdGVtLiBUaGlzIGluY2x1ZGVzIGEgbmV3IGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIERBTU9TIGZpbHRlciB0eXBlLiBJJiMzOTttIGFsc28gc2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT1Mgc2NoZW1lIGZpbHRlcnMsIHNwZWNpZmljYWxseSB0aGUgYG1pbmAgYW5kIGBtYXhgIGF0dHJpYnV0ZXMuIFRoaXMgYWxzbyBtZWFucyB1cGRhdGVzIHRvIGNvcmUgZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AsIGFtb25nIG90aGVycy4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgc29tZXRoaW5nIFN5emthbGxlciBjYW4gYWN0dWFsbHkgdGFyZ2V0PyBUaGUgZ29vZCBuZXdzIGlzLCBhYnNvbHV0ZWx5LCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgaW50ZXJmYWNlIFN5emthbGxlciBsb3ZlcyB0byBpbnRlcmFjdCB3aXRoLiBDcnVjaWFsbHksIHRoaXMgdG91Y2hlcyBjb3JlIERBTU9OIGNvZGUgYW5kIHRoZSBwYXJzaW5nIGFuZCBtYXRjaGluZyBsb2dpYyBmb3IgdGhvc2Ugc3lzZnMgc2NoZW1lIGZpbHRlcnMuCgpUaGVyZWZvcmUsIHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCBuZXcgYXR0YWNrIHN1cmZhY2UgbGllcy4gVGltZSB0byBmaW5kIHRoZSBrZXkgc3ltYm9scy4KCkxldCYjMzk7cyBpbnNwZWN0IHRoZSBkaWZmIGFuZCBsb29rIGF0IHRoZSBjaGFuZ2VkIGFuZCBhZGRlZCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgb2YgaW50ZXJlc3Q6CjEuICBgZGFtb25fcHJvYmVfaGl0c193c3VtYCAoaW4gbW0vZGFtb24vY29yZS5jKQoyLiAgYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzYCAoaW4gbW0vZGFtb24vY29yZS5jKQozLiAgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCAoaW4gbW0vZGFtb24vY29yZS5jKQo0LiAgYGRhbW9zX2ZpbHRlcl9tYXRjaGAgKGluIG1tL2RhbW9uL2NvcmUuYykKNS4gIGBkYW1vbl9tZXJnZV9zY29yZWAgKGluIG1tL2RhbW9uL2NvcmUuYykKNi4gIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgIChpbiBtbS9kYW1vbi9wYWRkci5jKQo3LiAgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgKGluIG1tL2RhbW9uL3ZhZGRyLmMpCjguICBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCAoaW4gbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jKQo5LiAgYG1pbl9zdG9yZWAgLyBgbWF4X3N0b3JlYCAvIGBtaW5fc2hvd2AgLyBgbWF4X3Nob3dgIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgICh0aG91Z2ggc3RhdGljKQoKSSYjMzk7bGwgYWxzbyBoYXZlIHRvIGRvdWJsZS1jaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCBhbmQgYG1tL2RhbW9uL2NvcmUuY2AgZm9yIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgb3IgZW50cnkgcG9pbnRzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkIGR1cmluZyB0aGlzIHVwZGF0ZS4gTmVlZCB0byBnZXQgYSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yNDk5PXN0YXRpYyB2b2lkIGRhbW9zX3VwZGF0ZV9zdGF0KHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjUxMC1cbm1tL2RhbW9uL2NvcmUuYzoyNTExOnN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjUxMi1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNTY1PXN0YXRpYyBib29sIGRhbW9zX2NvcmVfZmlsdGVyX291dChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI1NzEtXHRkYW1vc19mb3JfZWFjaF9jb3JlX2ZpbHRlcihmaWx0ZXIsIHMpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNTcyOlx0XHRpZiAoZGFtb3NfZmlsdGVyX21hdGNoKGN0eCwgdCwgciwgZmlsdGVyLCBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcbm1tL2RhbW9uL2NvcmUuYy0yNTczLVx0XHRcdGlmIChmaWx0ZXItXHUwMDNlYWxsb3cpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1NzA9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU5NC1cdC8qIHJlZ2lvbiBpbiB0aGUgcmFuZ2UgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTk1Olx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTk2LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDEpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjAxLVx0S1VOSVRfRVhQRUNUX0ZBTFNFKHRlc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTYwMjpcdFx0XHRkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MDMtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MDgtXHRLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNjA5Olx0XHRcdGRhbW9zX2ZpbHRlcl9tYXRjaChOVUxMLCB0LCByLCBmLCAxKSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYxMC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAxKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYxNC1cdHItXHUwMDNlYXIuZW5kID0gNDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNjE1Olx0S1VOSVRfRVhQRUNUX0ZBTFNFKHRlc3QsIGRhbW9zX2ZpbHRlcl9tYXRjaChOVUxMLCB0LCByLCBmLCAxKSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYxNi1cdC8qIGZpbHRlciBzaG91bGQgaGF2ZSBzcGxpdCB0aGUgcmVnaW9uICovXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MzAtXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE2MzE6XHRcdFx0ZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjMyLVx0LyogZmlsdGVyIHNob3VsZCBoYXZlIHNwbGl0IHRoZSByZWdpb24gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgc3lzZnMtc2NoZW1lcy5jYCBDYWxsZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmaWx0ZXJpbmcgc2NoZW1lcyBhcmUgYmVpbmcgYWRkZWQgYW5kIHV0aWxpemVkLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCBhbmQgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucyB3aXRoaW4gYHN5c2ZzLXNjaGVtZXMuY2AuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHN5c3RlbSByZXNvdXJjZSBtYW5hZ2VtZW50LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byBlbnN1cmUgcHJvcGVyIHVzYWdlIGFuZCBhdm9pZCBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIEkmIzM5O2xsIGxpa2VseSBzdGFydCBieSBsaXN0aW5nIGFsbCBjYWxsZXJzIHRvIHRoYXQgZnVuY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBCZXlvbmQgdGhpcyBJIHdpbGwgYWxzbyBsb29rIGF0IGZ1bmN0aW9ucyBleHBvcnRlZCB3aXRoaW4gdGhlIHNvdXJjZSwgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNhbGxzIG9yaWdpbmF0aW5nIGZyb20gdmFyaW91cyBzdWJzeXN0ZW0gZHJpdmVycywgcHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciByZXNvdXJjZSBjb250cm9sLCBiYXNlZCBvbiB0aGUgYGRhbW9uYCBwcmVmaXguIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBrbm93IGFsbCB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjgwMz1jb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MDgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgwOTpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODEwLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnMgKnN5c2ZzX2ZpbHRlcnMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5ODc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDM2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwMzc6XHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc2NoZW1lLCBzeXNmc19zY2hlbWUtXHUwMDNlY29yZV9maWx0ZXJzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDM4LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQxLVx0fVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNDI6XHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc2NoZW1lLCBzeXNmc19zY2hlbWUtXHUwMDNlb3BzX2ZpbHRlcnMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDMtXHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDYtXHR9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NzpcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzY2hlbWUsIHN5c2ZzX3NjaGVtZS1cdTAwM2VmaWx0ZXJzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQ4LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMwOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBEQU1PTiBTeXNmcyBDYWxscyoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gdW5kZXJzdGFuZGluZyB0aGUgdXNhZ2Ugb2YgdGhlIGBkYW1vbl9zeXNmc19ta19zY2hlbWVgIGFuZCBgZGFtb25fc3lzZnNfc2V0X3NjaGVtZXNgIHN5c3RlbSBjYWxscyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBmcmFtZXdvcmsuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIGNvbmZpZ3VyaW5nIGFuZCBtb2RpZnlpbmcgbW9uaXRvcmluZyBzY2hlbWVzIOKAkyBlc3NlbnRpYWxseSwgaG93IERBTU9OIGRlZmluZXMgYW5kIHRyYWNrcyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aG8mIzM5O3MgKmNhbGxpbmcqIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBoZXJlIGFuZCBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhlc2UgY2FsbHM/IElzIGl0IHVzZXItc3BhY2UgdG9vbHMgaW50ZXJhY3Rpbmcgd2l0aCBzeXNmcyBkaXJlY3RseT8gQXJlIHRoZXkgYmVpbmcgaW5pdGlhdGVkIGJ5IHNvbWUga2VybmVsLWxldmVsIGNvbXBvbmVudHMgb3IgbW9kdWxlcz8gVGhlICYjMzQ7d2h5JiMzNDsgaXMgYWxzbyBpbXBvcnRhbnQ6ICp3aHkqIGFyZSB0aGVzZSBzY2hlbWVzIGJlaW5nIGNyZWF0ZWQgb3IgYWx0ZXJlZD8gQXJlIHRoZXkgZHluYW1pY2FsbHkgYWRhcHRpbmcgYmFzZWQgb24gcnVudGltZSBjb25kaXRpb25zLCBvciBhcmUgdGhleSBzdGF0aWNhbGx5IGRlZmluZWQgYXQgYm9vdD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVyIGFuZCB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zIGlzIHRoZSBrZXkgdG8gdHJ1bHkgdW5kZXJzdGFuZGluZyBob3cgREFNT04gaXMgYmVoYXZpbmcgYW5kIHBlcmZvcm1pbmcgdW5kZXIgdGhlIGhvb2QuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RlcCBpbiBhbmFseXppbmcgYW55IERBTU9OIHJlbGF0ZWQgaXNzdWUgb3Igb3B0aW1pemF0aW9uIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfbWtfc2NoZW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5NjY9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfbWlncmF0ZV9kZXN0KHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTg2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5ODc6c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5ODgtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnN5c2ZzX3NjaGVtZSlcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA2MT1pbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDY4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNjk6XHRcdHNjaGVtZSA9IGRhbW9uX3N5c2ZzX21rX3NjaGVtZShzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW2ldKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDcwLVx0XHRpZiAoIXNjaGVtZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4NwoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT04gQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBrZXkgYXJlYXMgZm9yIGZ1cnRoZXIgZXhhbWluYXRpb24gd2l0aGluIHRoZSBgbW0vZGFtb25gIGZyYW1ld29yaywgYW5kIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gaXQgbm93LiBJJiMzOTt2ZSBwaW5wb2ludGVkIHNldmVyYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29kZSB0aGF0IGxvb2sgbGlrZSBwcmltZSB0YXJnZXRzIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZXNlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb3NfZmlsdGVyX21hdGNoYCAoYW5kL29yIGBkYW1vc19jb3JlX2ZpbHRlcl9vdXRgKSwgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGBkYW1vbl9tZXJnZV9zY29yZWAsIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AuIFRoZXNlIHNlZW0gY2VudHJhbCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuCgpOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYERBTU9OYCAodGhlIGNvcmUgZnJhbWV3b3JrKSwgYERBTU9OX1NZU0ZTYCAodGhlIHN5c2ZzIGludGVyZmFjZSksIGBEQU1PTl9QQUREUmAgKGZvciBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMpLCBhbmQgYERBTU9OX1ZBRERSYCAoZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zKS4gSSYjMzk7dmUgYWxzbyB2ZXJpZmllZCB0aGVpciBkZXBlbmRlbmNpZXM6IGBEQU1PTl9TWVNGU2AgbmVlZHMgYERBTU9OYCBhbmQgYFNZU0ZTYCwgYW5kIGJvdGggYERBTU9OX1BBRERSYCBhbmQgYERBTU9OX1ZBRERSYCByZXF1aXJlIGBEQU1PTmAgYW5kIGBNTVVgLiBUaGlzIGFsbCBjaGVja3Mgb3V0LgoKVG8gYmUgZXh0cmEgdGhvcm91Z2gsIEkmIzM5O3ZlIGp1c3QgZG9uZSBhIGZpbmFsIHN3ZWVwIHRvIGNvbmZpcm0gYWxsIHRoZSBkZXRhaWxzIGFyZSBhY2N1cmF0ZS4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgYWxsIHJlcXVpcmVkIGFuZCB0aGUgc3ltYm9scyBsaXN0ZWQgYXJlIGluZGVlZCBpbXBvcnRhbnQuCgpJJiMzOTt2ZSBhbHNvIHBlcmZvcm1lZCBhIHNhbml0eSBjaGVjayBvbiBteSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmaWx0ZXIgdHlwZSwgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAsIHdoaWNoIGlzIGFsbCBhYm91dCBtYXRjaGluZyBhbmQgZmlsdGVyaW5nIG1lbW9yeSByZWdpb25zIGJhc2VkIG9uIGEgbW92aW5nIHN1bSBvZiB3ZWlnaHRlZCBwcm9iZSBoaXRzLiBUaGF0JiMzOTtzIGEgbmV3IGxheWVyIG9mIGNvbXBsZXhpdHkgd2l0aGluIERBTU9OLCBhbmQgaXQgdG91Y2hlcyBjb3JlLCBwYWRkciwgdmFkZHIgYW5kIHN5c2ZzIHNjaGVtZSBpbnRlcmZhY2VzLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvZGUgZXhlY3V0aW9uIHBhdGhzLCBhbmQgcG90ZW50aWFsbHksIG5ldyBhcmVhcyBmb3IgZXhwbG9yYXRpb24uCgpXaXRoIG15IGFzc2Vzc21lbnQgY29tcGxldGUsIEkmIzM5O20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBtb25pdG9yaW5nIHJlZ2lvbnMgYmFzZWQgb24gdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzLiBJdCB1cGRhdGVzIGNvcmUgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBjb21taXQgZmlsdGVyIGFyZ3VtZW50IGhhbmRsaW5nLCBtb3Zpbmcgc3VtIHByb2JlIGhpdCBjYWxjdWxhdGlvbiwgYW5kIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWUgZmlsdGVyIGludGVyZmFjZS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBleHBvc2VkIHZpYSBzeXNmcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBtb25pdG9yaW5nIHJlZ2lvbnMgYmFzZWQgb24gdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzLiBJdCB1cGRhdGVzIGNvcmUgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBjb21taXQgZmlsdGVyIGFyZ3VtZW50IGhhbmRsaW5nLCBtb3Zpbmcgc3VtIHByb2JlIGhpdCBjYWxjdWxhdGlvbiwgYW5kIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWUgZmlsdGVyIGludGVyZmFjZS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBleHBvc2VkIHZpYSBzeXNmcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCkgYW5kIHJlZmFjdG9ycyBzeXNmcyBmaWx0ZXIgbWluL21heCBoYW5kbGluZyB0byBzdXBwb3J0IHByb2JlIGhpdCB3ZWlnaHRlZCBzdW0gcmFuZ2VzIGFsb25nc2lkZSBodWdlcGFnZSBzaXplcy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgc3lzZnMgZmlsdGVyIHN0cnVjdHVyZXMgKGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBXaGVuIGNvbnZlcnRpbmcgdG8ga2VybmVsIGZpbHRlcnMgKGBkYW1vc19maWx0ZXJgKSwgdGhlIHJhbmdlIGZpZWxkcyAoYHJhbmdlX21pbmAsIGByYW5nZV9tYXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIHN5c2ZzIGZpbHRlcnMuIFN5c2ZzIHNob3cgYXR0cmlidXRlcyB1c2UgYHN5c2ZzX2VtaXQoKWAgdG8gb3V0cHV0IGZvcm1hdHRlZCB1bnNpZ25lZCBsb25nIGludGVnZXJzLCBwcmVjbHVkaW5nIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZC5cbi0gS0FTQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgYW55IGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gcHJvYmUgYXJyYXlzLCBvciBhbGxvY2F0aW9uIGlzc3Vlcy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3NzQ1NDJkOGNkODQ2YjUyOGRlNjc4MTViZTY4YzkwMDBiMjQwNWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwMToyOTozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKQEAgLTU1MSw2ICYjNDM7NTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlCiBmaWx0ZXIuICBSZWZlciB0byA6cmVmOmB0aGUgZGVzaWduIGRvYyAmbHQ7ZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnMmZ3Q7YCBmb3IKIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLgogCiYjNDM7Rm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlCiYjNDM7aGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcywKJiM0MztyZXNwZWN0aXZlbHkuCiYjNDM7CiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnkKIHdyaXRpbmcgdGhlIHBhdGggb2YgdGhlIG1lbW9yeSBjZ3JvdXAgZnJvbSB0aGUgY2dyb3VwcyBtb3VudCBwb2ludCB0bwogYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdAppbmRleCBhYWM4NGRlMjYxYWE4Li44ZTk4MGRkZTM2MmRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CkBAIC04MjIsNiAmIzQzOzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIGFkZHJlc3MgcmFuZ2UuCiAgICAgLSB0YXJnZXQKICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuCiYjNDM7ICAgIC0gcHJvYmVfaGl0c193c3VtCiYjNDM7ICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlCiYjNDM7ICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtICZsdDtkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nJmd0O2AgdmFsdWUuCiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LgogICAgIC0gYW5vbgogICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBjb250YWluaW5nIGRhdGEgdGhhdCBub3Qgc3RvcmVkIGluIGZpbGVzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDg3MWQyNmFkZjZhZTUuLjRhMzZmMzQ0YmJjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTM5OSwxNCAmIzQzOzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7CiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6CVVubWFwcGVkIHBhZ2VzLgogICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CUFkZHJlc3MgcmFuZ2UuCiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOglEYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC4KJiM0MzsgKiBAREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOglwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS4KICAqIEBOUl9EQU1PU19GSUxURVJfVFlQRVM6CU51bWJlciBvZiBmaWx0ZXIgdHlwZXMuCiAgKgotICogQWxsIHR5cGVzIGV4Y2VwdCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kICZhbXA7REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUCi0gKiBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWUKLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LAotICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkCi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZAotICogYXMgJiMzOTt0cmllZCYjMzk7LgomIzQzOyAqIEFsbCB0eXBlcyBleGNlcHQgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSLCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmQKJiM0MzsgKiAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdAomIzQzOyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZAomIzQzOyAqIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kCiYjNDM7ICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmUKJiM0MzsgKiB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4KICAqCiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZwogICogJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4KQEAgLTQyMCw2ICYjNDM7NDIxLDcgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7CiAJREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsCiAJREFNT1NfRklMVEVSX1RZUEVfQUREUiwKIAlEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsCiYjNDM7CURBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSwKIAlOUl9EQU1PU19GSUxURVJfVFlQRVMsCiB9OwogCkBAIC00MzQsNiAmIzQzOzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgewogICoJCSZhbXA7ZGFtb25fY3R4LSZndDthZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzCiAgKgkJREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULgogICogQHN6X3JhbmdlOglTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuCiYjNDM7ICogQHJhbmdlX21pbjoJTWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiYjNDM7ICogQHJhbmdlX21heDoJTWF4aW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiAgKgogICogQmVmb3JlIGFwcGx5aW5nIHRoZSAmYW1wO2RhbW9zLSZndDthY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaAogICogYnl0ZSBvZiB0aGUgcmVnaW9uIG1hdGNoZXMgdG8gdGhpcyBnaXZlbiBjb25kaXRpb24gYW5kIGF2b2lkIGFwcGx5aW5nIHRoZQpAQCAtNDUwLDYgJiM0Mzs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7CiAJCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7CiAJCWludCB0YXJnZXRfaWR4OwogCQlzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9taW47CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7CiYjNDM7CQl9OwogCX07CiAvKiBwcml2YXRlOiAqLwogCS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCkBAIC0xMDY1LDcgJiM0MzsxMDczLDcgQEAgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCk7CiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KTsKLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAomIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogCiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcywKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC00NjksMTEgJiM0Mzs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKICAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi4KICAqIEByOgkJcmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLgogICogQGxhc3Q6CWlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuCiYjNDM7ICogQG12OgkJdXNlIG1vdmluZyBzdW0uCiAgKiBAY3R4Ogljb250ZXh0IG9mICZhbXA7ci4KICAqCiAgKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLgogICovCi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKJiM0Mzt1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdiwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewogCXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CkBAIC00ODMsNiAmIzQzOzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAogCWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHsKIAkJaWYgKGxhc3QpCiAJCQlzdW0gJiM0Mzs9IHItJmd0O2xhc3RfcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS0mZ3Q7d2VpZ2h0OwomIzQzOwkJZWxzZSBpZiAobXYpCiYjNDM7CQkJc3VtICYjNDM7PSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkmIzQzOyYjNDM7LCByLCBjdHgpICoKJiM0MzsJCQkJcHJvYmUtJmd0O3dlaWdodDsKIAkJZWxzZQogCQkJc3VtICYjNDM7PSByLSZndDtwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLSZndDt3ZWlnaHQ7CiAJfQpAQCAtNjU0LDYgJiM0Mzs2NTgsNyBAQCBib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSkKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CiAJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6CiYjNDM7CWNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOgogCQlyZXR1cm4gZmFsc2U7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMzI4LDYgJiM0MzsxMzMzLDEwIEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKAogCWNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRToKIAkJZHN0LSZndDtzel9yYW5nZSA9IHNyYy0mZ3Q7c3pfcmFuZ2U7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCWRzdC0mZ3Q7cmFuZ2VfbWluID0gc3JjLSZndDtyYW5nZV9taW47CiYjNDM7CQlkc3QtJmd0O3JhbmdlX21heCA9IHNyYy0mZ3Q7cmFuZ2VfbWF4OwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMjUwNiw3ICYjNDM7MjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiAJc3RydWN0IGRhbW9uX3RhcmdldCAqdGk7CiAJaW50IHRhcmdldF9pZHggPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtOwogCiAJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDoKQEAgLTI1NDEsNiAmIzQzOzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItJmd0O2FyLnN0YXJ0KTsKIAkJbWF0Y2hlZCA9IHRydWU7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCXdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7CiYjNDM7CQltYXRjaGVkID0gZmlsdGVyLSZndDtyYW5nZV9taW4gJmx0Oz0gd3N1bSAmYW1wOyZhbXA7CiYjNDM7CQkJd3N1bSAmbHQ7PSBmaWx0ZXItJmd0O3JhbmdlX21heDsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0zNDQ5LDcgJiM0MzszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cykKIHsKIAlpZiAodXNlX3Byb2JlX2hpdHMpCi0JCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTsKJiM0MzsJCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7CiAJaWYgKGxhc3QpCiAJCXJldHVybiByLSZndDtsYXN0X25yX2FjY2Vzc2VzOwogCXJldHVybiByLSZndDtucl9hY2Nlc3NlczsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jCmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiAJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAotCQkJCQkJCWN0eCksIG1heF93c3VtKTsKJiM0MzsJCQkJCQkJZmFsc2UsIGN0eCksIG1heF93c3VtKTsKIAkJfQogCX0KIAlyZXR1cm4gbWF4X3dzdW07CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKaW5kZXggZDliODFkN2I1OTEwZS4uM2RlNGQ4MDRlMDQ5ZiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwpAQCAtNTM0LDcgJiM0Mzs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7CiAJYm9vbCBhbGxvdzsKIAljaGFyICptZW1jZ19wYXRoOwogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7Ci0Jc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluOwomIzQzOwl1bnNpZ25lZCBsb25nIHJhbmdlX21heDsKIAlpbnQgdGFyZ2V0X2lkeDsKIH07CiAKQEAgLTU4OCw2ICYjNDM7NTg5LDEwIEBAIGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7CiAJCS50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULAogCQkubmFtZSA9ICYjMzQ7dGFyZ2V0JiMzNDssCiAJfSwKJiM0MzsJewomIzQzOwkJLnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sCiYjNDM7CQkubmFtZSA9ICYjMzQ7cHJvYmVfaGl0c193c3VtJiMzNDssCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC03NzgsNyAmIzQzOzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbik7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21pbik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTc4Niw3ICYjNDM7NzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWluKTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21pbik7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC03OTcsNyAmIzQzOzgwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1heCk7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21heCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTgwNSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21heCk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC0yODM1LDEyICYjNDM7Mjg0MCwyMCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwKIAkJfSBlbHNlIGlmIChmaWx0ZXItJmd0O3R5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7CiAJCQlmaWx0ZXItJmd0O3RhcmdldF9pZHggPSBzeXNmc19maWx0ZXItJmd0O3RhcmdldF9pZHg7CiAJCX0gZWxzZSBpZiAoZmlsdGVyLSZndDt0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHsKLQkJCWlmIChzeXNmc19maWx0ZXItJmd0O3N6X3JhbmdlLm1pbiAmZ3Q7Ci0JCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KSB7CiYjNDM7CQkJaWYgKHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluICZndDsKJiM0MzsJCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4KSB7CiYjNDM7CQkJCWRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCQlmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbiA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluOwomIzQzOwkJCWZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXg7CiYjNDM7CQl9IGVsc2UgaWYgKGZpbHRlci0mZ3Q7dHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHsKJiM0MzsJCQlmaWx0ZXItJmd0O3JhbmdlX21pbiA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluOwomIzQzOwkJCWZpbHRlci0mZ3Q7cmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXg7CiYjNDM7CQkJaWYgKGZpbHRlci0mZ3Q7cmFuZ2VfbWluICZndDsgZmlsdGVyLSZndDtyYW5nZV9tYXgpIHsKIAkJCQlkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJZmlsdGVyLSZndDtzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2U7CiAJCX0KIAogCQlkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jCmluZGV4IDlhMzhkYzg5YTE1NmUuLjRhZWNmMzRlMzliZTIgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtNzA0LDcgJiM0Mzs3MDQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJCQlfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTsKIAkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiAJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAotCQkJCQkJCWN0eCksIG1heF93c3VtKTsKJiM0MzsJCQkJCQkJZmFsc2UsIGN0eCksIG1heF93c3VtKTsKIAkJfQogCQlpZiAobW0pCiAJCQltbXB1dChtbSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTUzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogODIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byByZWFsbHkgZGlnIGludG8gd2hhdCYjMzk7cyBiZWluZyBhZGRlZCBhbmQgY2hhbmdlZC4KCkl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlOiBgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCBmb3IgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy4gVGhlIGNvZGUgY2hhbmdlcyBzZWVtIHByZXR0eSBmb2N1c2VkLCB3aGljaCBpcyBnb29kLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIHRoZSBlbnVtIGBkYW1vc19maWx0ZXJfdHlwZWAgbm93IGluY2x1ZGVzIHRoZSBuZXcgdHlwZSwgYW5kIHRoZSBgc3RydWN0IGRhbW9zX2ZpbHRlcmAgaXMgdXBkYXRlZCB3aXRoIGEgcmFuZ2Ugc3RydWN0dXJlIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIGluc2lkZSB0aGUgdW5pb24uIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgdGVsbHMgdXMgdGhlIGRhdGEgdGhhdCBpcyBuZWVkZWQgZm9yIHRoZSBmaWx0ZXIuIEFsc28sIHRoZSBgZGFtb25fcHJvYmVfaGl0c193c3VtYCBzaWduYXR1cmUgaXMgdXBkYXRlZCB3aXRoIGBib29sIG12YCB3aGljaCBpbmRpY2F0ZXMgdGhlcmUgYXJlIG9wdGlvbnMgaW4gaXRzIGJlaGF2aW91ci4KCkluIGBtbS9kYW1vbi9jb3JlLmNgLCB0aGUgY2hhbmdlcyBzaG93IGhvdyBgZGFtb25fcHJvYmVfaGl0c193c3VtKClgIGlzIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgbmV3IGBib29sIG12YCBhcmd1bWVudC4gSW50ZXJlc3RpbmcgdGhhdCBgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoKWAgcmV0dXJucyBmYWxzZSBmb3IgdGhpcyBmaWx0ZXIgdHlwZSwgd2hpY2ggaXMgZ29vZCBpbiB0aGF0IGl0IGluZGljYXRlcyB0aGlzIGlzIGEgbmV3IHR5cGUuIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZygpYCBpcyBhbHNvIHVwZGF0ZWQgdG8gY29weSBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgd2hpY2ggaXMgaW1wb3J0YW50IGluIGhvdyB0aGUgZmlsdGVyIGlzIGNvbmZpZ3VyZWQsIGFuZCBgZGFtb3NfZmlsdGVyX21hdGNoKClgIGhhbmRsZXMgdGhlIG5ldyBgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCBieSBjb21wYXJpbmcgYSB3ZWlnaHRlZCBzdW0gdG8gdGhlIHNwZWNpZmllZCByYW5nZS4gQWxzbywgdGhlIGBkYW1vbl9tZXJnZV9zY29yZSgpYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIHVzZSB0aGUgdXBkYXRlZCBgZGFtb25fcHJvYmVfaGl0c193c3VtYC4KClRoZSBwYXRjaCBhbHNvIHVwZGF0ZXMgY2FsbHMgdG8gYGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpYCB3aXRoIGBmYWxzZWAgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgdmFkZHIuY2AuIFRoaXMgaXNuJiMzOTt0IHRoYXQgaW1wb3J0YW50IGFzIGl0IGp1c3QgbW9kaWZpZXMgdGhlIG90aGVyIGZpbGVzIHRvIHVzZSB0aGUgdXBkYXRlZCBmdW5jdGlvbi4KCkZpbmFsbHksIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIHVwZGF0ZXMgdGhlIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBzdHJ1Y3R1cmUgYW5kIHRoZSByZWxhdGVkIHN5c2ZzIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gdXNlIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCBpbnN0ZWFkIG9mIGBzel9yYW5nZS5taW5gIGFuZCBgc3pfcmFuZ2UubWF4YCwgd2hpY2ggaXMgZXhwZWN0ZWQuCgpOb3csIGEga2V5IGNvbmNlcm46IGhvdyBhcmUgYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGFuZCBgZGFtb3NfZmlsdGVyYCBjcmVhdGVkLCBpbml0aWFsaXplZCwgYW5kIGNvcGllZD8gSSBuZWVkIHRvIHVzZSBncmVwcGVyIHRvIHRyYWNrIHRoZXNlIHN0cnVjdHVyZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB3aGVyZSBwb3RlbnRpYWwgS01TQU4gaXNzdWVzIGNvdWxkIGFyaXNlIOKAkyBlc3BlY2lhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgdGhlIG5ldyByYW5nZSBwYXJhbWV0ZXJzLiBJIHdpbGwgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyBmb3IgZXJyb3JzIHdpdGhpbiBEQU1PTi4gQmFzZWQgb24gdGhlIGZpbmRpbmdzIGZyb20gZ3JlcHBlciwgSSBjYW4gYXNzZXNzIHRoZSBuZWVkIGZvciBmb2N1c2VkIEtNU0FOIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2N8ZGFtb3NfbmV3X2ZpbHRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz01NDM9aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTYzMy1cbm1tL2RhbW9uL2NvcmUuYzo2MzQ6c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXG5tbS9kYW1vbi9jb3JlLmMtNjM1LVx0XHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzU0PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEzNzAtXG5tbS9kYW1vbi9jb3JlLmM6MTM3MTpcdFx0bmV3X2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoXG5tbS9kYW1vbi9jb3JlLmMtMTM3Mi1cdFx0XHRcdHNyY19maWx0ZXItXHUwMDNldHlwZSwgc3JjX2ZpbHRlci1cdTAwM2VtYXRjaGluZyxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTM4Mj1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9vcHNfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEzOTgtXG5tbS9kYW1vbi9jb3JlLmM6MTM5OTpcdFx0bmV3X2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoXG5tbS9kYW1vbi9jb3JlLmMtMTQwMC1cdFx0XHRcdHNyY19maWx0ZXItXHUwMDNldHlwZSwgc3JjX2ZpbHRlci1cdTAwM2VtYXRjaGluZyxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTI0OT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTI1Ny1cdC8qIGRpc2FsbG93IHByaW9yaXRpemluZyBub3QteW91bmcgcGFnZXMgKi9cbm1tL2RhbW9uL2xydV9zb3J0LmM6MjU4Olx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9ZT1VORywgZmFsc2UsIGZhbHNlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjU5LVx0aWYgKCFmaWx0ZXIpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNjMtXHQvKiBkaXNhYmxsb3cgZGUtcHJpb3JpdGl6aW5nIHlvdW5nIHBhZ2VzICovXG5tbS9kYW1vbi9scnVfc29ydC5jOjI2NDpcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfWU9VTkcsIHRydWUsIGZhbHNlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjY1LVx0aWYgKCFmaWx0ZXIpXG4tLVxubW0vZGFtb24vcGFkZHIuYz0yMzk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjU2LVx0aWYgKGluc3RhbGxfeW91bmdfZmlsdGVyKSB7XG5tbS9kYW1vbi9wYWRkci5jOjI1NzpcdFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihcbm1tL2RhbW9uL3BhZGRyLmMtMjU4LVx0XHRcdFx0REFNT1NfRklMVEVSX1RZUEVfWU9VTkcsIHRydWUsIGZhbHNlKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI1MS1cdGlmIChza2lwX2Fub24pIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNTI6XHRcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgZmFsc2UpO1xubW0vZGFtb24vcmVjbGFpbS5jLTI1My1cdFx0aWYgKCFmaWx0ZXIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyOT1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDI6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My1cdFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MzA9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19hZGRfZGlycyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTQ2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZmlsdGVyczsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5NDc6XHRcdGZpbHRlciA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTQ4LVx0XHRcdFx0ZmlsdGVycy1cdTAwM2VoYW5kbGVfbGF5ZXIpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODA5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE3LVx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MTg6XHRcdFx0ZGFtb3NfbmV3X2ZpbHRlcihzeXNmc19maWx0ZXItXHUwMDNldHlwZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE5LVx0XHRcdFx0XHRzeXNmc19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc5MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X25ld19maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03OTMtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Nzk0Olx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzk1LVx0aWYgKCFmaWx0ZXIpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1NzA9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU3NS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTc2Olx0ZiA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQUREUiwgdHJ1ZSwgZmFsc2UpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NzctXHRpZiAoIWYpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE2Nzk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2OTQtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTY5NTpcdHRhcmdldF9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCwgdHJ1ZSwgdHJ1ZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY5Ni1cdGlmICghdGFyZ2V0X2ZpbHRlcilcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyMS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzIyOlx0YW5vbl9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX0FOT04sIHRydWUsIHRydWUpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3MjMtXHRpZiAoIWFub25fZmlsdGVyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbToKCioqRGlnZ2luZyBpbnRvIERBTU9OJiMzOTtzIEZpbHRlciBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZmlsdGVyIGFsbG9jYXRpb24gd2l0aGluIERBTU9OLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZm9jdXNpbmcgb24gYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2NgIGFuZCBgZGFtb3NfbmV3X2ZpbHRlcmAgaW4gYG1tL2RhbW9uYC4gUmlnaHQsIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jYCBsaWtlbHkgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgZmlsdGVyIHN0cnVjdHVyZSBpdHNlbGYsIHByb2JhYmx5IGluIHJlc3BvbnNlIHRvIGEgc3lzZnMgcmVxdWVzdCBvciBjb25maWd1cmF0aW9uIGNoYW5nZSwgYW5kIHByb2JhYmx5IHRpZWQgdG8gYSBwYXJ0aWN1bGFyIG1vbml0b3Jpbmcgc2NoZW1lLiBJIGltYWdpbmUgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgZmlsdGVyJiMzOTtzIG1ldGFkYXRhLCBzZXR0aW5nIHVwIGFueSBuZWNlc3NhcnkgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcGVyaGFwcyBsaW5raW5nIGl0IGludG8gdGhlIG92ZXJhbGwgREFNT04gc2NoZW1lJiMzOTtzIG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gSSBzaG91bGQgY2hlY2sgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzY2hlbWUmIzM5O3MgYWxsb2NhdGlvbi9mcmVlaW5nIG1lY2hhbmlzbXMuCgpUaGVuIHRoZXJlJiMzOTtzIGBkYW1vc19uZXdfZmlsdGVyYC4gVGhpcyBzb3VuZHMgbGlrZSB0aGUgbG93LWxldmVsIHByaW1pdGl2ZSBmb3IgY3JlYXRpbmcgYSBmaWx0ZXIuIExpa2VseSBjYWxsZWQgYnkgdGhlIGFib3ZlIG1lbnRpb25lZCBmdW5jdGlvbiwgYGRhbW9zX25ld19maWx0ZXJgIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBhbGxvY2F0aW5nIHRoZSBtZW1vcnkgZm9yIHRoZSBmaWx0ZXIgb2JqZWN0IGZyb20gYSBrZXJuZWwgbWVtb3J5IHBvb2wuIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYW55IGZpZWxkcyByZWxhdGVkIHRvIHRoZSBmaWx0ZXImIzM5O3MgaWRlbnRpdHksIHN0YXR1cyAoYWN0aXZlLCBpbmFjdGl2ZSwgZXRjLiksIGFuZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3aWxsIHN0b3JlIHRoZSBtb25pdG9yZWQgcmVnaW9uIGluZm9ybWF0aW9uLiBJIHdpbGwgYmUgc3VyZSB0byBvYnNlcnZlIHRoZSB1c2FnZSBvZiB0aGUgcmV0dXJuZWQgcG9pbnRlci4KCkkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRvIHRyYWNrIHdoZXJlIHRoZSBmaWx0ZXJzIGFyZSBmcmVlZCBhbmQgaG93IHRoYXQgcHJvY2VzcyBpcyB0cmlnZ2VyZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIGZpbHRlciBhbGxvY2F0aW9uLCBkZXN0cnVjdGlvbiwgYW5kIG1vbml0b3Jpbmcgb3BlcmF0aW9ucy4gREFNT04mIzM5O3MgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZSwgc28gY2xlYW4gYW5kIGNvcnJlY3QgZmlsdGVyIGhhbmRsaW5nIGlzIHBhcmFtb3VudCB0byBpdHMgcmVsaWFiaWxpdHkuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTM1Olx0XHRjaGFyICptZW1jZ19wYXRoO1xuIDUzNjpcdFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbiA1Mzc6XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuIDUzODpcdFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4gNTM5Olx0XHRpbnQgdGFyZ2V0X2lkeDtcbiA1NDA6XHR9O1xuIDU0MTpcdFxuIDU0MjpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcbiA1NDM6XHRcdFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxuIDU0NDpcdHtcbiA1NDU6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXI7XG4gNTQ2Olx0XG4gNTQ3Olx0XHRmaWx0ZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcik7XG4gNTQ4Olx0XHRpZiAoZmlsdGVyKVxuIDU0OTpcdFx0XHRmaWx0ZXItXHUwMDNlaGFuZGxlX2xheWVyID0gbGF5ZXI7XG4gNTUwOlx0XHRyZXR1cm4gZmlsdGVyO1xuIDU1MTpcdH1cbiA1NTI6XHRcbiA1NTM6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XG4gNTU0Olx0XHRlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGU7XG4gNTU1Olx0XHRjaGFyICpuYW1lO1xuIDU1NjpcdH07XG4gNTU3Olx0XG4gNTU4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lXG4gNTU5Olx0ZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbiA1NjA6XHRcdHtcbiA1NjE6XHRcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9BTk9OLFxuIDU2MjpcdFx0XHQubmFtZSA9IFwmIzM0O2Fub25cJiMzNDssXG4gNTYzOlx0XHR9LFxuIDU2NDpcdFx0e1xuIDU2NTpcdFx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX0FDVElWRSxcbiA1NjY6XHRcdFx0Lm5hbWUgPSBcJiMzNDthY3RpdmVcJiMzNDssXG4gNTY3Olx0XHR9LFxuIDU2ODpcdFx0e1xuIDU2OTpcdFx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHLFxuIDU3MDpcdFx0XHQubmFtZSA9IFwmIzM0O21lbWNnXCYjMzQ7LFxuIDU3MTpcdFx0fSxcbiA1NzI6XHRcdHtcbiA1NzM6XHRcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9ZT1VORyxcbiA1NzQ6XHRcdFx0Lm5hbWUgPSBcJiMzNDt5b3VuZ1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBkYW1vc19uZXdfZmlsdGVyYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGRhbW9zX25ld19maWx0ZXJgIGZ1bmN0aW9uLiBMb29rcyBsaWtlIGl0JiMzOTtzIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IGZpbHRlcmluZyBtZWNoYW5pc20gaXMgYmVpbmcgaW1wbGVtZW50ZWQuIFdoYXQmIzM5O3MgdGhlIGNvcmUgbG9naWMgaGVyZT8gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBsb29raW5nIGZvciBob3cgbmV3IHJlZ2lvbnMgYXJlIGJlaW5nIGlkZW50aWZpZWQgb3IgY2xhc3NpZmllZCBhbmQgaG93IHRoZSBmaWx0ZXJpbmcgaXMgYXBwbGllZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIERBTU9OIGZyYW1ld29yayBpcyBvcmNoZXN0cmF0aW5nIHRoaXMgdG8gcG90ZW50aWFsbHkgcmVkdWNlIG92ZXJoZWFkLiBXaGF0IHBhcmFtZXRlcnMgYXJlIGdvaW5nIGludG8gYGRhbW9zX25ld19maWx0ZXJgPyBBbmQsIHdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uPyBJIGJldCBpdCBkZWFscyB3aXRoIGFsbG9jYXRpb24gYW5kIHNldHRpbmcgdXAgc29tZSBzb3J0IG9mIGZpbHRlciBmb3IgdHJhY2tpbmcgbWVtb3J5IGFjY2Vzcy4gRnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmUgSSB3YW50IHRvIHVuZGVyc3RhbmQ6CiogICBIb3cgdGhlIGZpbHRlciBpbnRlcmFjdHMgd2l0aCB0aGUgYWRkcmVzcyBzcGFjZS4KKiAgIFRoZSBjb21wdXRhdGlvbmFsIGNvbXBsZXhpdHkgb2YgZmlsdGVyIG9wZXJhdGlvbnMuCiogICBIb3cgd2VsbCB0aGUgZmlsdGVyIHBsYXlzIHdpdGggdGhlIHN5c3RlbS4KKiAgIFBvdGVudGlhbCBib3R0bGVuZWNrcy4KKiAgIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZSBuZXcgZmlsdGVyIGlzIHVzaW5nLgoKTGV0JiMzOTtzIGdldCBjcmFja2luZywgbGluZSBieSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjMwOlx0XHR9XG4gNjMxOlx0XHRyZXR1cm4gMDtcbiA2MzI6XHR9XG4gNjMzOlx0XG4gNjM0Olx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXG4gNjM1Olx0XHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXG4gNjM2Olx0e1xuIDYzNzpcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xuIDYzODpcdFxuIDYzOTpcdFx0ZmlsdGVyID0ga21hbGxvY19vYmooKmZpbHRlcik7XG4gNjQwOlx0XHRpZiAoIWZpbHRlcilcbiA2NDE6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjQyOlx0XHRmaWx0ZXItXHUwMDNldHlwZSA9IHR5cGU7XG4gNjQzOlx0XHRmaWx0ZXItXHUwMDNlbWF0Y2hpbmcgPSBtYXRjaGluZztcbiA2NDQ6XHRcdGZpbHRlci1cdTAwM2VhbGxvdyA9IGFsbG93O1xuIDY0NTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZmlsdGVyLVx1MDAzZWxpc3QpO1xuIDY0NjpcdFx0cmV0dXJuIGZpbHRlcjtcbiA2NDc6XHR9XG4gNjQ4Olx0XG4gNjQ5Olx0LyoqXG4gNjUwOlx0ICogZGFtb3NfZmlsdGVyX2Zvcl9vcHMoKSAtIFJldHVybiBpZiB0aGUgZmlsdGVyIGlzIG9wcy1oYW5kbGVkIG9uZS5cbiA2NTE6XHQgKiBAdHlwZTpcdHR5cGUgb2YgdGhlIGZpbHRlci5cbiA2NTI6XHQgKlxuIDY1MzpcdCAqIFJldHVybjogdHJ1ZSBpZiB0aGUgZmlsdGVyIG9mIEB0eXBlIG5lZWRzIHRvIGJlIGhhbmRsZWQgYnkgb3BzIGxheWVyLCBmYWxzZVxuIDY1NDpcdCAqIG90aGVyd2lzZS5cbiA2NTU6XHQgKi9cbiA2NTY6XHRib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSlcbiA2NTc6XHR7XG4gNjU4Olx0XHRzd2l0Y2ggKHR5cGUpIHtcbiA2NTk6XHRcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AuIEkga25vdyB3aGF0IERBTU9OIGlzLCBhbmQgSSYjMzk7bSBmYW1pbGlhciB3aXRoIHN5c2ZzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIGFkZGluZyBmaWx0ZXJpbmcgbWVjaGFuaXNtcyBvciBwYXJhbWV0ZXJzIHRvIERBTU9OIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gU3BlY2lmaWNhbGx5LCBJIGltYWdpbmUgaXQmIzM5O3MgYWJvdXQgc2V0dGluZyB1cCB0aGUgc2NoZW1lcyBmb3IgbW9uaXRvcmluZy4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGRlZmluaW5nIHdoYXQgbWVtb3J5IHJlZ2lvbnMgb3IgdHlwZXMgREFNT04gc2hvdWxkIGZvY3VzIG9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIGRvaW5nIGluIGRldGFpbCwgbGlrZTogV2hhdCBraW5kIG9mIGZpbHRlcnMgaXMgaXQgYWRkaW5nPyBBcmUgdGhleSBiYXNlZCBvbiBhZGRyZXNzIHJhbmdlcywgbWVtb3J5IHR5cGVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSG93IGlzIGl0IGhhbmRsaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQ/IElzIHRoZXJlIGVycm9yIGNoZWNraW5nPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgdG8gY29uc2lkZXIgd2hlbiBkZWFsaW5nIHdpdGggc3lzZnMgYW5kIERBTU9OJiMzOTtzIGludGVybmFsIHN0YXRlPyBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsgYW5kIGZpbmQgdGhlIHNvdXJjZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgxMDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnMgKnN5c2ZzX2ZpbHRlcnMpXG4yODExOlx0e1xuMjgxMjpcdFx0aW50IGk7XG4yODEzOlx0XG4yODE0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNmc19maWx0ZXJzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xuMjgxNTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqc3lzZnNfZmlsdGVyID1cbjI4MTY6XHRcdFx0XHRzeXNmc19maWx0ZXJzLVx1MDAzZWZpbHRlcnNfYXJyW2ldO1xuMjgxNzpcdFx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIgPVxuMjgxODpcdFx0XHRcdGRhbW9zX25ld19maWx0ZXIoc3lzZnNfZmlsdGVyLVx1MDAzZXR5cGUsXG4yODE5Olx0XHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2VtYXRjaGluZyxcbjI4MjA6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZWFsbG93KTtcbjI4MjE6XHRcdFx0aW50IGVycjtcbjI4MjI6XHRcbjI4MjM6XHRcdFx0aWYgKCFmaWx0ZXIpXG4yODI0Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yODI1Olx0XHRcdGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRykge1xuMjgyNjpcdFx0XHRcdGVyciA9IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoXG4yODI3Olx0XHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2VtZW1jZ19wYXRoLFxuMjgyODpcdFx0XHRcdFx0XHRcdTAwMjZmaWx0ZXItXHUwMDNlbWVtY2dfaWQpO1xuMjgyOTpcdFx0XHRcdGlmIChlcnIpIHtcbjI4MzA6XHRcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG4yODMxOlx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjgzMjpcdFx0XHRcdH1cbjI4MzM6XHRcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9BRERSKSB7XG4yODM0Olx0XHRcdFx0aWYgKHN5c2ZzX2ZpbHRlci1cdTAwM2VhZGRyX3JhbmdlLmVuZCBcdTAwM2NcbjI4MzU6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZWFkZHJfcmFuZ2Uuc3RhcnQpIHtcbjI4MzY6XHRcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG4yODM3Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI4Mzg6XHRcdFx0XHR9XG4yODM5Olx0XHRcdFx0ZmlsdGVyLVx1MDAzZWFkZHJfcmFuZ2UgPSBzeXNmc19maWx0ZXItXHUwMDNlYWRkcl9yYW5nZTtcbjI4NDA6XHRcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbjI4NDE6XHRcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuMjg0MjpcdFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbjI4NDM6XHRcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbjI4NDQ6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuMjg0NTpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbjI4NDY6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg0NzpcdFx0XHRcdH1cbjI4NDg6XHRcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbjI4NDk6XHRcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbjI4NTA6XHRcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcbjI4NTE6XHRcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbjI4NTI6XHRcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbjI4NTM6XHRcdFx0XHRpZiAoZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2UgZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuMjg1NDpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbjI4NTU6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg1NjpcdFx0XHRcdH1cbjI4NTc6XHRcdFx0fVxuMjg1ODpcdFxuMjg1OTpcdFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbjI4NjA6XHRcdH1cbjI4NjE6XHRcdHJldHVybiAwO1xuMjg2MjpcdH1cbjI4NjM6XHRcbjI4NjQ6XHRzdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgRGF0YSB3aXRoICYjMzk7ZGFtb25fcHJvYmVfaGl0c19tdnN1bSYjMzk7KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAuIFRoaXMgdmFyaWFibGUgbGlrZWx5IGhvbGRzIHNvbWUgY3JpdGljYWwgZGF0YSByZWxhdGVkIHRvIERhbW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIHVzZWQgYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUgbmFtZS4gTGV0JiMzOTtzIGZpcmUgdXAgYSBgZ3JlcGAgY29tbWFuZCB0byBsb29rIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBpbiB0aGUgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIGl0cyB1c2FnZSBhbmQgcHVycG9zZS4gSSBuZWVkIHRvIGdldCBhIGxpc3Qgb2YgdGhlIG9jY3VycmVuY2VzIHNvIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgaG93IGl0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfbXZzdW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDgtXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTM1MC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00Nzc9dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXG4tLVxubW0vZGFtb24vY29yZS5jLTQ4Ny1cdFx0ZWxzZSBpZiAobXYpXG5tbS9kYW1vbi9jb3JlLmM6NDg4Olx0XHRcdHN1bSAmIzQzOz0gZGFtb25fcHJvYmVfaGl0c19tdnN1bShpJiM0MzsmIzQzOywgciwgY3R4KSAqXG5tbS9kYW1vbi9jb3JlLmMtNDg5LVx0XHRcdFx0cHJvYmUtXHUwMDNld2VpZ2h0O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cdFx0c3lzX3Byb2JlID0gZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0Olx0XHRcdFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExNS1cdFx0aWYgKCFzeXNfcHJvYmUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgREFNT04gcHJvYmUgaGl0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBhbmQgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAgZnVuY3Rpb25zLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3Qgb2YgREFNT04sIGFuZCBJIHN1c3BlY3QgdGhleSYjMzk7cmUgaW52b2x2ZWQgaW4gaG93IHRoZSBtb25pdG9yIGFnZ3JlZ2F0ZXMgYW5kIHdlaWdocyBkYXRhIGZyb20gcHJvYmVzLiBJJiMzOTttIGd1ZXNzaW5nIHRoZXkmIzM5O3JlIGJvdGggZGVmaW5lZCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHNvIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIHRoYXQgZmlsZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdpbGwgbGlrZWx5IHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29yZSBsb2dpYyBiZWhpbmQgREFNT04mIzM5O3Mgb3BlcmF0aW9uLCBhbmQgaG9wZWZ1bGx5IHdpbGwgcHJvdmlkZSBzb21lIGluc2lnaHRzIGludG8gaG93IHRoaXMgbW9kdWxlIGtlZXBzIHRyYWNrIG9mIGFuZCB1c2VzIHByb2JlIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDU6XHRcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZW5yX2FjY2Vzc2VzLCByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsXG4gMzQ2Olx0XHRcdFx0bGVmdF93aW5kb3dfYnApO1xuIDM0NzpcdH1cbiAzNDg6XHRcbiAzNDk6XHR1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAzNTA6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIDM1MTpcdHtcbiAzNTI6XHRcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsLCBhZ2dyX2ludGVydmFsO1xuIDM1MzpcdFx0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XG4gMzU0Olx0XG4gMzU1Olx0XHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxO1xuIDM1NjpcdFx0YWdncl9pbnRlcnZhbCA9ICBjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA/IDogMTtcbiAzNTc6XHRcdHdpbmRvd19sZW4gPSBhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsO1xuIDM1ODpcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxuIDM1OTpcdFx0XHRcdFx0Y3R4LVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzKSlcbiAzNjA6XHRcdFx0bGVmdF93aW5kb3cgPSAwO1xuIDM2MTpcdFx0ZWxzZVxuIDM2MjpcdFx0XHRsZWZ0X3dpbmRvdyA9IGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyAtXG4gMzYzOlx0XHRcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzO1xuIDM2NDpcdFx0bGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTtcbiAzNjU6XHRcbiAzNjY6XHRcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcbiAzNjc6XHRcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF07XG4gMzY4Olx0XG4gMzY5Olx0XHRyZXR1cm4gZGFtb25fbXZzdW0oci1cdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXG4gMzcwOlx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xuIDM3MTpcdH1cbiAzNzI6XHRcbiAzNzM6XHQjaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxuIDM3NDpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIDM3NTpcdHtcbiAzNzY6XHRcdFdBUk5fT05DRShzdGFydCBcdTAwM2U9IGVuZCwgXCYjMzQ7c3RhcnQgJWx1IFx1MDAzZT0gZW5kICVsdVxcblwmIzM0Oywgc3RhcnQsIGVuZCk7XG4gMzc3Olx0fVxuIDM3ODpcdCNlbHNlXG4gMzc5Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gMzgwOlx0e1xuIDM4MTpcdH1cbiAzODI6XHQjZW5kaWZcbiAzODM6XHRcbiAzODQ6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcwMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCBpbiB0aGUgREFNT04gQ29yZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIERBTU9OIGNvcmUgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBvdXQgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgYW4gYXJndW1lbnQgcmVsYXRlZCB0byBmaWx0ZXJpbmcgY29tbWl0cywgbGlrZWx5IHVzZWQgd2hlbiBEQU1PTiBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1lbW9yeSByZWdpb25zIHRvIGFjdCB1cG9uLiBJdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXNwZWN0IG9mIGNvbW1pdCBiZWhhdmlvciwgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IHdvcmtzIGJlY2F1c2UgaXQmIzM5O3Mga2V5IHRvIGVpdGhlciBwZXJmb3JtYW5jZSB0dW5pbmcgb3IgZGVidWdnaW5nIGEgYmVoYXZpb3IgaW4gYSBkYW1vbi1yZWxhdGVkIGNvbnRleHQuIElzIGl0IGEgYml0bWFzaz8gQSBmbGFnPyBEb2VzIGl0IHJlbGF0ZSB0byBhIGNvbW1pdCB0aHJlc2hvbGQ/IEEgc3BlY2lmaWMgdHlwZSBvZiBjb21taXQgb3BlcmF0aW9uPyBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBlY29zeXN0ZW0uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaGluZCB0aGUgc2NlbmVzIHJlZ2FyZGluZyBob3cgdGhpcyBwYXJhbWV0ZXIgZ3VpZGVzIHRoZSBjb21taXQgbG9naWMgc28gSSBjYW4gc29sdmUgdGhlIGlzc3VlIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG4xMzIxOlx0XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxuMTMyMjpcdHtcbjEzMjM6XHRcdHN3aXRjaCAoZHN0LVx1MDAzZXR5cGUpIHtcbjEzMjQ6XHRcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XG4xMzI1Olx0XHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbjEzMjY6XHRcdFx0YnJlYWs7XG4xMzI3Olx0XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4xMzI4Olx0XHRcdGRzdC1cdTAwM2VhZGRyX3JhbmdlID0gc3JjLVx1MDAzZWFkZHJfcmFuZ2U7XG4xMzI5Olx0XHRcdGJyZWFrO1xuMTMzMDpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG4xMzMxOlx0XHRcdGRzdC1cdTAwM2V0YXJnZXRfaWR4ID0gc3JjLVx1MDAzZXRhcmdldF9pZHg7XG4xMzMyOlx0XHRcdGJyZWFrO1xuMTMzMzpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFOlxuMTMzNDpcdFx0XHRkc3QtXHUwMDNlc3pfcmFuZ2UgPSBzcmMtXHUwMDNlc3pfcmFuZ2U7XG4xMzM1Olx0XHRcdGJyZWFrO1xuMTMzNjpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4xMzM3Olx0XHRcdGRzdC1cdTAwM2VyYW5nZV9taW4gPSBzcmMtXHUwMDNlcmFuZ2VfbWluO1xuMTMzODpcdFx0XHRkc3QtXHUwMDNlcmFuZ2VfbWF4ID0gc3JjLVx1MDAzZXJhbmdlX21heDtcbjEzMzk6XHRcdFx0YnJlYWs7XG4xMzQwOlx0XHRkZWZhdWx0OlxuMTM0MTpcdFx0XHRicmVhaztcbjEzNDI6XHRcdH1cbjEzNDM6XHR9XG4xMzQ0Olx0XG4xMzQ1Olx0c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcihcbjEzNDY6XHRcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXG4xMzQ3Olx0e1xuMTM0ODpcdFx0ZHN0LVx1MDAzZXR5cGUgPSBzcmMtXHUwMDNldHlwZTtcbjEzNDk6XHRcdGRzdC1cdTAwM2VtYXRjaGluZyA9IHNyYy1cdTAwM2VtYXRjaGluZztcbjEzNTA6XHRcdGRzdC1cdTAwM2VhbGxvdyA9IHNyYy1cdTAwM2VhbGxvdztcbjEzNTE6XHRcdGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKGRzdCwgc3JjKTtcbjEzNTI6XHR9XG4xMzUzOlx0XG4xMzU0Olx0c3RhdGljIGludCBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTcKCQkJCQkJCW91dHB1dDogMjU1CgkJCQkJCQl0aG91Z2h0czogOTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBJbnRyb2R1Y2VkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O3ZlIGJlZW4gZXhhbWluaW5nIHRoZSBgbWluX3Nob3dgIGFuZCBgbWF4X3Nob3dgIG9wZXJhdGlvbnMgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBhdmVudWVzIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIG90aGVyIG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0aWVzLgoKRmlyc3QsIEkgZXhhbWluZWQgaG93IGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBzdHJ1Y3R1cmUuIE15IHJldmlldyByZXZlYWxzOgoKKiAgIFRoZSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBpcyBrZXkuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFsbCBmaWVsZHMsIGluY2x1ZGluZyBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAsIGFyZSB6ZXJvLWluaXRpYWxpemVkIGZyb20gdGhlIHN0YXJ0LiBUaGF0JiMzOTtzIGEgZ29vZCBmaXJzdCBzdGVwLgoqICAgV2hlbiB2YWx1ZXMgYXJlIHdyaXR0ZW4gdmlhIHN5c2ZzIChgbWluX3N0b3JlYCwgYG1heF9zdG9yZWApLCBga3N0cnRvdWxgIGNvcnJlY3RseSBwYXJzZXMgdGhlIGlucHV0IHN0cmluZyBhbmQgc3RvcmVzIHRoZSBwYXJzZWQgdW5zaWduZWQgbG9uZyB2YWx1ZXMgZGlyZWN0bHkgaW50byBgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21pbmAgYW5kIGAmYW1wO2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4YC4KKiAgIFdoZW4gcmVhZCB2aWEgc3lzZnMgKGBtaW5fc2hvd2AsIGBtYXhfc2hvd2ApLCBgc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgZmlsdGVyLSZndDtyYW5nZV9taW4pYCBpcyB1c2VkIHRvIG91dHB1dCB0aGUgdmFsdWVzLiBUaGlzIGlzIGZvcm1hdHRlZCBvdXRwdXQgb2YgYSBkZWZpbmVkIHZhbHVlLCBzbyBubyB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgYmUgcHJlc2VudGVkLgoqICAgV2hlbiBhcHBseWluZyB0aGUgZmlsdGVyLCB0aGUgcmFuZ2UgaXMgY29waWVkIGNvcnJlY3RseS4KCkkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIGFsbCB0aGUgcmVsZXZhbnQgYXNwZWN0cyB0aG9yb3VnaGx5OgoKMS4gICoqS2VybmVsLXRvLVVzZXJzcGFjZSBEYXRhIFRyYW5zZmVyOioqIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgb3IgZmllbGRzIGFyZSBsZWFrZWQgdG8gdXNlcnNwYWNlIGJlY2F1c2UgYG1pbl9zaG93YCBhbmQgYG1heF9zaG93YCB1c2UgZm9ybWF0dGVkIG91dHB1dCBvZiBpbml0aWFsaXplZCB2YWx1ZXMuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIE5vIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBsb2dpYyBpcyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBga3phbGxvY2AgaXMgdXNlZCwgYW5kIGZpbHRlciBmaWVsZCBhc3NpZ25tZW50IGlzIGV4cGxpY2l0LgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLgo0LiAgKipCb3VuZHMgQ2hlY2tzL0xlbmd0aDoqKiBObyBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgdGhlIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXMuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggKipkb2VzIG5vdCoqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHRoYXQgbWlnaHQgYXJpc2UsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tlcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4KCk5vdywgbGV0JiMzOTtzIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTiB0byBmb3JtdWxhdGUgYSBjbGVhciBLTVNBTiByZWFzb25pbmc6CgoqICAgKipLQVNBTiAmYW1wOyBTdGFuZGFyZCBDaGVja2VyczoqKiBEZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGFuZCBzaW1pbGFyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgYXJlIG5vdCBpbiBwbGF5IGhlcmUuCiogICAqKktNU0FOOioqIFNwZWNpZmljYWxseSBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIFRoaXMgaXMgd2hhdCBJIHdhcyBpbnZlc3RpZ2F0aW5nLgoqICAgKipUaGUgUGF0Y2g6KiogQWRkcyBhIG5ldyBEQU1PTiBmaWx0ZXIgdHlwZSAoYHByb2JlX2hpdHNfd3N1bWApIGFuZCB1cGRhdGVzIHN5c2ZzIG1pbi9tYXggaGFuZGxlcnMuIEkmIzM5O3ZlIHNjcnV0aW5pemVkIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLgoqICAgKipBbGxvY2F0aW9uICZhbXA7IEluaXRpYWxpemF0aW9uOioqIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgIHRvIGluaXRpYWxpemUgYWxsIGZpZWxkcyBhbmQgYGRhbW9zX25ld19maWx0ZXJgIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQsIGVuc3VyaW5nIGRlZmluZWQgdmFsdWVzIGFyZSBhbHdheXMgaW4gcGxheS4KKiAgICoqU3lzZnMgT3V0cHV0OioqICBTeXNmcyBzaG93IGZ1bmN0aW9ucyBwcm92aWRlIGZvcm1hdHRlZCBpbnRlZ2VyIG91dHB1dCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLgoqICAgKipDb25jbHVzaW9uOioqIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGUgY29kZSBpcyBzYWZlLgoKSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCkgYW5kIHJlZmFjdG9ycyBzeXNmcyBmaWx0ZXIgbWluL21heCBoYW5kbGluZyB0byBzdXBwb3J0IHByb2JlIGhpdCB3ZWlnaHRlZCBzdW0gcmFuZ2VzIGFsb25nc2lkZSBodWdlcGFnZSBzaXplcy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgc3lzZnMgZmlsdGVyIHN0cnVjdHVyZXMgKGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBXaGVuIGNvbnZlcnRpbmcgdG8ga2VybmVsIGZpbHRlcnMgKGBkYW1vc19maWx0ZXJgKSwgdGhlIHJhbmdlIGZpZWxkcyAoYHJhbmdlX21pbmAsIGByYW5nZV9tYXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIHN5c2ZzIGZpbHRlcnMuIFN5c2ZzIHNob3cgYXR0cmlidXRlcyB1c2UgYHN5c2ZzX2VtaXQoKWAgdG8gb3V0cHV0IGZvcm1hdHRlZCB1bnNpZ25lZCBsb25nIGludGVnZXJzLCBwcmVjbHVkaW5nIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZC5cbi0gS0FTQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgYW55IGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gcHJvYmUgYXJyYXlzLCBvciBhbGxvY2F0aW9uIGlzc3Vlcy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gKSBhbmQgcmVmYWN0b3JzIHN5c2ZzIGZpbHRlciBtaW4vbWF4IGhhbmRsaW5nIHRvIHN1cHBvcnQgcHJvYmUgaGl0IHdlaWdodGVkIHN1bSByYW5nZXMgYWxvbmdzaWRlIGh1Z2VwYWdlIHNpemVzLlxuXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBzeXNmcyBmaWx0ZXIgc3RydWN0dXJlcyAoYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgKSBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFdoZW4gY29udmVydGluZyB0byBrZXJuZWwgZmlsdGVycyAoYGRhbW9zX2ZpbHRlcmApLCB0aGUgcmFuZ2UgZmllbGRzIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gc3lzZnMgZmlsdGVycy4gU3lzZnMgc2hvdyBhdHRyaWJ1dGVzIHVzZSBgc3lzZnNfZW1pdCgpYCB0byBvdXRwdXQgZm9ybWF0dGVkIHVuc2lnbmVkIGxvbmcgaW50ZWdlcnMsIHByZWNsdWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkLlxuLSBLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnMgYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBhbnkgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiBwcm9iZSBhcnJheXMsIG9yIGFsbG9jYXRpb24gaXNzdWVzLlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMToyOTozMy45OTE4MTY2MzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcyOTUzMDI4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9wcm9iZV9oaXRzX3dzdW1cIixcbiAgICBcImRhbW9zX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9uX21lcmdlX3Njb3JlXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZSAoYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWApIGFuZCByZWZhY3RvcnMgc3lzZnMgZmlsdGVyIG1pbi9tYXggaGFuZGxpbmcgdG8gc3VwcG9ydCBwcm9iZSBoaXQgd2VpZ2h0ZWQgc3VtIHJhbmdlcyBhbG9uZ3NpZGUgaHVnZXBhZ2Ugc2l6ZXMuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgc3lzZnMgZmlsdGVyIHN0cnVjdHVyZXMgKGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBXaGVuIGNvbnZlcnRpbmcgdG8ga2VybmVsIGZpbHRlcnMgKGBkYW1vc19maWx0ZXJgKSwgdGhlIHJhbmdlIGZpZWxkcyAoYHJhbmdlX21pbmAsIGByYW5nZV9tYXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIHN5c2ZzIGZpbHRlcnMuIFN5c2ZzIHNob3cgYXR0cmlidXRlcyB1c2UgYHN5c2ZzX2VtaXQoKWAgdG8gb3V0cHV0IGZvcm1hdHRlZCB1bnNpZ25lZCBsb25nIGludGVnZXJzLCBwcmVjbHVkaW5nIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZC5cXG4tIEtBU0FOIC8gc3RhbmRhcmQgc2FuaXRpemVycyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIHByb2JlIGFycmF5cywgb3IgYWxsb2NhdGlvbiBpc3N1ZXMuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBtb25pdG9yaW5nIHJlZ2lvbnMgYmFzZWQgb24gdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzLiBJdCB1cGRhdGVzIGNvcmUgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBjb21taXQgZmlsdGVyIGFyZ3VtZW50IGhhbmRsaW5nLCBtb3Zpbmcgc3VtIHByb2JlIGhpdCBjYWxjdWxhdGlvbiwgYW5kIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWUgZmlsdGVyIGludGVyZmFjZS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBleHBvc2VkIHZpYSBzeXNmcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjMzLjk5MTgyMTM5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEwNjIwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTc3NDU0MmQ4Y2Q4NDZiNTI4ZGU2NzgxNWJlNjhjOTAwMGIyNDA1ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMToyOTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuQEAgLTU1MSw2ICs1NTEsMTAgQEAgYW5kIGBgZGFtb25fdGFyZ2V0X2lkeGBgLiAgVG8gYGB0eXBlYGAgZmlsZSwgeW91IGNhbiB3cml0ZSB0aGUgdHlwZSBvZiB0aGVcXG4gZmlsdGVyLiAgUmVmZXIgdG8gOnJlZjpgdGhlIGRlc2lnbiBkb2MgXFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc19maWx0ZXJzXFx1MDAzZWAgZm9yXFxuIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLlxcbiBcXG4rRm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlXFxuK2hpdHMgd2VpZ2h0ZWQgc3VtIHZhbHVlIGZvciB0aGUgZmlsdGVyIHRvIGBgbWluYGAgYW5kIGBgbWF4YGAgZmlsZXMsXFxuK3Jlc3BlY3RpdmVseS5cXG4rXFxuIEZvciBgYG1lbWNnYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtZW1vcnkgY2dyb3VwIG9mIHRoZSBpbnRlcmVzdCBieVxcbiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG9cXG4gYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmRcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG5AQCAtODIyLDYgKzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuXFxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gYWRkcmVzcyByYW5nZS5cXG4gICAgIC0gdGFyZ2V0XFxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuXFxuKyAgICAtIHByb2JlX2hpdHNfd3N1bVxcbisgICAgICAgIC0gTWF0Y2hlcyB0byBtb25pdG9yaW5nIHJlZ2lvbnMgaGF2aW5nIGEgZ2l2ZW4gcmFuZ2Ugb2YgOnJlZjpgcHJvYmVcXG4rICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtIFxcdTAwM2NkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nXFx1MDAzZWAgdmFsdWUuXFxuIC0gT3BlcmF0aW9ucyBsYXllciBoYW5kbGVkLCBzdXBwb3J0ZWQgYnkgb25seSBgYHBhZGRyYGAgb3BlcmF0aW9ucyBzZXQuXFxuICAgICAtIGFub25cXG4gICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBjb250YWluaW5nIGRhdGEgdGhhdCBub3Qgc3RvcmVkIGluIGZpbGVzLlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5pbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbkBAIC0zOTksMTQgKzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7XFxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9VTk1BUFBFRDpcXHRVbm1hcHBlZCBwYWdlcy5cXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XFx0QWRkcmVzcyByYW5nZS5cXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcXHREYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC5cXG4rICogQERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcXHRwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS5cXG4gICogQE5SX0RBTU9TX0ZJTFRFUl9UWVBFUzpcXHROdW1iZXIgb2YgZmlsdGVyIHR5cGVzLlxcbiAgKlxcbi0gKiBBbGwgdHlwZXMgZXhjZXB0IFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUXFxuLSAqIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFxcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBhcyBhIHBhcnQgb2Ygc2NoZW1lXFxuLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICd0cmllZCcuICBJbiBjb250cmFzdCxcXG4tICogXFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kIFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZFxcbi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZFxcbi0gKiBhcyAndHJpZWQnLlxcbisgKiBBbGwgdHlwZXMgZXhjZXB0IFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSLCBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGFuZFxcbisgKiBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFxcdTAwMjZzdHJ1Y3RcXG4rICogZGFtb25fb3BlcmF0aW9ucyBhcyBhIHBhcnQgb2Ygc2NoZW1lIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkXFxuKyAqIGFzICd0cmllZCcuICBJbiBjb250cmFzdCwgXFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kXFxuKyAqIFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmVcXG4rICogdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZCBhcyAndHJpZWQnLlxcbiAgKlxcbiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZ1xcbiAgKiBcXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuXFxuQEAgLTQyMCw2ICs0MjEsNyBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHtcXG4gXFx0REFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsXFxuIFxcdERBTU9TX0ZJTFRFUl9UWVBFX0FERFIsXFxuIFxcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcXG4rXFx0REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxcbiBcXHROUl9EQU1PU19GSUxURVJfVFlQRVMsXFxuIH07XFxuIFxcbkBAIC00MzQsNiArNDM2LDggQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XFxuICAqXFx0XFx0XFx1MDAyNmRhbW9uX2N0eC1cXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpc1xcbiAgKlxcdFxcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC5cXG4gICogQHN6X3JhbmdlOlxcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cXG4rICogQHJhbmdlX21pbjpcXHRNaW5pbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cXG4rICogQHJhbmdlX21heDpcXHRNYXhpbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cXG4gICpcXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcXHUwMDI2ZGFtb3MtXFx1MDAzZWFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoXFxuICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGVcXG5AQCAtNDUwLDYgKzQ1NCwxMCBAQCBzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcXG4gXFx0XFx0aW50IHRhcmdldF9pZHg7XFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJhbmdlX21pbjtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XFxuK1xcdFxcdH07XFxuIFxcdH07XFxuIC8qIHByaXZhdGU6ICovXFxuIFxcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuQEAgLTEwNjUsNyArMTA3Myw3IEBAIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4tdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuK3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbiBcXG4gaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDY0NWNiMzY3MDE5YWUuLmQ5ZDU2ZjRiZTFhOTcgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTQ2OSwxMSArNDY5LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuICAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cXG4gICogQHI6XFx0XFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxcbiAgKiBAbGFzdDpcXHRpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLlxcbisgKiBAbXY6XFx0XFx0dXNlIG1vdmluZyBzdW0uXFxuICAqIEBjdHg6XFx0Y29udGV4dCBvZiBcXHUwMDI2ci5cXG4gICpcXG4gICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi5cXG4gICovXFxuLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuQEAgLTQ4Myw2ICs0ODQsOSBAQCB1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4gXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xcbiBcXHRcXHRpZiAobGFzdClcXG4gXFx0XFx0XFx0c3VtICs9IHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpKytdICogcHJvYmUtXFx1MDAzZXdlaWdodDtcXG4rXFx0XFx0ZWxzZSBpZiAobXYpXFxuK1xcdFxcdFxcdHN1bSArPSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkrKywgciwgY3R4KSAqXFxuK1xcdFxcdFxcdFxcdHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0c3VtICs9IHItXFx1MDAzZXByb2JlX2hpdHNbaSsrXSAqIHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuIFxcdH1cXG5AQCAtNjU0LDYgKzY1OCw3IEBAIGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4gXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxcbiBcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcXG4rXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTEzMjgsNiArMTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcXG4gXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFOlxcbiBcXHRcXHRkc3QtXFx1MDAzZXN6X3JhbmdlID0gc3JjLVxcdTAwM2Vzel9yYW5nZTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxcbitcXHRcXHRkc3QtXFx1MDAzZXJhbmdlX21pbiA9IHNyYy1cXHUwMDNlcmFuZ2VfbWluO1xcbitcXHRcXHRkc3QtXFx1MDAzZXJhbmdlX21heCA9IHNyYy1cXHUwMDNlcmFuZ2VfbWF4O1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtMjUwNiw3ICsyNTE1LDcgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xcbiBcXHRpbnQgdGFyZ2V0X2lkeCA9IDA7XFxuLVxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtO1xcbiBcXG4gXFx0c3dpdGNoIChmaWx0ZXItXFx1MDAzZXR5cGUpIHtcXG4gXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XFxuQEAgLTI1NDEsNiArMjU1MCwxMSBAQCBzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgZW5kIC0gci1cXHUwMDNlYXIuc3RhcnQpO1xcbiBcXHRcXHRtYXRjaGVkID0gdHJ1ZTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxcbitcXHRcXHR3c3VtID0gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLCB0cnVlLCBjdHgpO1xcbitcXHRcXHRtYXRjaGVkID0gZmlsdGVyLVxcdTAwM2VyYW5nZV9taW4gXFx1MDAzYz0gd3N1bSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHR3c3VtIFxcdTAwM2M9IGZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4O1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuQEAgLTM0NDksNyArMzQ2Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWVyZ2Vfc2NvcmUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXFxuIHtcXG4gXFx0aWYgKHVzZV9wcm9iZV9oaXRzKVxcbi1cXHRcXHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGN0eCk7XFxuK1xcdFxcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7XFxuIFxcdGlmIChsYXN0KVxcbiBcXHRcXHRyZXR1cm4gci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcztcXG4gXFx0cmV0dXJuIHItXFx1MDAzZW5yX2FjY2Vzc2VzO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xcbmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4gXFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG4gXFx0XFx0XFx0XFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgpLCBtYXhfd3N1bSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRyZXR1cm4gbWF4X3dzdW07XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbmluZGV4IGQ5YjgxZDdiNTkxMGUuLjNkZTRkODA0ZTA0OWYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuQEAgLTUzNCw3ICs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XFxuIFxcdGJvb2wgYWxsb3c7XFxuIFxcdGNoYXIgKm1lbWNnX3BhdGg7XFxuIFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XFxuLVxcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xcbitcXHR1bnNpZ25lZCBsb25nIHJhbmdlX21pbjtcXG4rXFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XFxuIFxcdGludCB0YXJnZXRfaWR4O1xcbiB9O1xcbiBcXG5AQCAtNTg4LDYgKzU4OSwxMCBAQCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0ge1xcbiBcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcXG4gXFx0XFx0Lm5hbWUgPSBcXFwidGFyZ2V0XFxcIixcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwicHJvYmVfaGl0c193c3VtXFxcIixcXG4rXFx0fSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBzc2l6ZV90IHR5cGVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5AQCAtNzc4LDcgKzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxuIFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG4gXFxuLVxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZmlsdGVyLVxcdTAwM2Vzel9yYW5nZS5taW4pO1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGZpbHRlci1cXHUwMDNlcmFuZ2VfbWluKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbkBAIC03ODYsNyArNzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG4gXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbi1cXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2Vzel9yYW5nZS5taW4pO1xcbitcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2VyYW5nZV9taW4pO1xcbiBcXG4gXFx0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xcbiB9XFxuQEAgLTc5Nyw3ICs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxuIFxcbi1cXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWF4KTtcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWx1XFxcXG5cXFwiLCBmaWx0ZXItXFx1MDAzZXJhbmdlX21heCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5AQCAtODA1LDcgKzgxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxuIFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG4tXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWF4KTtcXG4rXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4KTtcXG4gXFxuIFxcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcXG4gfVxcbkBAIC0yODM1LDEyICsyODQwLDIwIEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxcbiBcXHRcXHR9IGVsc2UgaWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcXG4gXFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2V0YXJnZXRfaWR4ID0gc3lzZnNfZmlsdGVyLVxcdTAwM2V0YXJnZXRfaWR4O1xcbiBcXHRcXHR9IGVsc2UgaWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFKSB7XFxuLVxcdFxcdFxcdGlmIChzeXNmc19maWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1pbiBcXHUwMDNlXFxuLVxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWF4KSB7XFxuK1xcdFxcdFxcdGlmIChzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21pbiBcXHUwMDNlXFxuK1xcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4KSB7XFxuK1xcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWluID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9taW47XFxuK1xcdFxcdFxcdGZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXg7XFxuK1xcdFxcdH0gZWxzZSBpZiAoZmlsdGVyLVxcdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkge1xcbitcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXJhbmdlX21pbiA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluO1xcbitcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXJhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4O1xcbitcXHRcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VyYW5nZV9taW4gXFx1MDAzZSBmaWx0ZXItXFx1MDAzZXJhbmdlX21heCkge1xcbiBcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXN6X3JhbmdlID0gc3lzZnNfZmlsdGVyLVxcdTAwM2Vzel9yYW5nZTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXFxuaW5kZXggOWEzOGRjODlhMTU2ZS4uNGFlY2YzNGUzOWJlMiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXFxuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xcbkBAIC03MDQsNyArNzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcXG4gXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG4gXFx0XFx0XFx0XFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgpLCBtYXhfd3N1bSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKG1tKVxcbiBcXHRcXHRcXHRtbXB1dChtbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjM0LjYwMzI5NDIyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Njg4ODcyNjcxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9wcm9iZV9oaXRzX3dzdW1cIixcbiAgICBcImRhbW9zX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9uX21lcmdlX3Njb3JlXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkgYW5kIGFkZHMgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIG1vbml0b3JpbmcgcmVnaW9ucyBiYXNlZCBvbiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMuIEl0IHVwZGF0ZXMgY29yZSBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMsIGNvbW1pdCBmaWx0ZXIgYXJndW1lbnQgaGFuZGxpbmcsIG1vdmluZyBzdW0gcHJvYmUgaGl0IGNhbGN1bGF0aW9uLCBhbmQgdGhlIERBTU9OIHN5c2ZzIHNjaGVtZSBmaWx0ZXIgaW50ZXJmYWNlLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGV4cG9zZWQgdmlhIHN5c2ZzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Nzc0NTQyZDhjZDg0NmI1MjhkZTY3ODE1YmU2OGM5MDAwYjI0MDVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDE6Mjk6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCAwMjNjNjMzNDAyNGY4Li5kM2UzNzQwMDM2N2JkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5AQCAtNTUxLDYgKzU1MSwxMCBAQCBhbmQgYGBkYW1vbl90YXJnZXRfaWR4YGAuICBUbyBgYHR5cGVgYCBmaWxlLCB5b3UgY2FuIHdyaXRlIHRoZSB0eXBlIG9mIHRoZVxuIGZpbHRlci4gIFJlZmVyIHRvIDpyZWY6YHRoZSBkZXNpZ24gZG9jIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc19maWx0ZXJzXHUwMDNlYCBmb3JcbiBhdmFpbGFibGUgdHlwZSBuYW1lcywgdGhlaXIgbWVhbmluZyBhbmQgb24gd2hhdCBsYXllciB0aG9zZSBhcmUgaGFuZGxlZC5cbiBcbitGb3IgYGBwcm9iZV9oaXRzX3dzdW1gYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gcHJvYmVcbitoaXRzIHdlaWdodGVkIHN1bSB2YWx1ZSBmb3IgdGhlIGZpbHRlciB0byBgYG1pbmBgIGFuZCBgYG1heGBgIGZpbGVzLFxuK3Jlc3BlY3RpdmVseS5cbitcbiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnlcbiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG9cbiBgYG1lbWNnX3BhdGhgYCBmaWxlLiAgRm9yIGBgYWRkcmBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgc3RhcnQgYW5kIGVuZFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtODIyLDYgKzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBiZWxvbmdpbmcgdG8gYSBnaXZlbiBhZGRyZXNzIHJhbmdlLlxuICAgICAtIHRhcmdldFxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuXG4rICAgIC0gcHJvYmVfaGl0c193c3VtXG4rICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlXG4rICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtIFx1MDAzY2RhbW9uX2Rlc2lnbl9hdHRyc19vbmx5X21vbml0b3JpbmdcdTAwM2VgIHZhbHVlLlxuIC0gT3BlcmF0aW9ucyBsYXllciBoYW5kbGVkLCBzdXBwb3J0ZWQgYnkgb25seSBgYHBhZGRyYGAgb3BlcmF0aW9ucyBzZXQuXG4gICAgIC0gYW5vblxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgY29udGFpbmluZyBkYXRhIHRoYXQgbm90IHN0b3JlZCBpbiBmaWxlcy5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDg3MWQyNmFkZjZhZTUuLjRhMzZmMzQ0YmJjN2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTM5OSwxNCArMzk5LDE1IEBAIHN0cnVjdCBkYW1vc19zdGF0IHtcbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6XHRVbm1hcHBlZCBwYWdlcy5cbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfQUREUjpcdEFkZHJlc3MgcmFuZ2UuXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcdERhdGEgQWNjZXNzIE1vbml0b3JpbmcgdGFyZ2V0LlxuKyAqIEBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XHRwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS5cbiAgKiBATlJfREFNT1NfRklMVEVSX1RZUEVTOlx0TnVtYmVyIG9mIGZpbHRlciB0eXBlcy5cbiAgKlxuLSAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUXG4tICogYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZVxuLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICd0cmllZCcuICBJbiBjb250cmFzdCxcbi0gKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZFxuLSAqIGJ5IHRoZSBjb3JlIGxheWVyIGJlZm9yZSB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkXG4tICogYXMgJ3RyaWVkJy5cbisgKiBBbGwgdHlwZXMgZXhjZXB0IFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIsIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmRcbisgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0XG4rICogZGFtb25fb3BlcmF0aW9ucyBhcyBhIHBhcnQgb2Ygc2NoZW1lIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkXG4rICogYXMgJ3RyaWVkJy4gIEluIGNvbnRyYXN0LCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZFxuKyAqIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjb3JlIGxheWVyIGJlZm9yZVxuKyAqIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQgYXMgJ3RyaWVkJy5cbiAgKlxuICAqIFN1cHBvcnQgZm9yIHRoZSBvcGVyYXRpb25zLWhhbmRsZWQgZmlsdGVycyBkZXBlbmRzIG9uIHRoZSBydW5uaW5nXG4gICogXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuXG5AQCAtNDIwLDYgKzQyMSw3IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuIFx0REFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsXG4gXHREQU1PU19GSUxURVJfVFlQRV9BRERSLFxuIFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuK1x0REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxuIFx0TlJfREFNT1NfRklMVEVSX1RZUEVTLFxuIH07XG4gXG5AQCAtNDM0LDYgKzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuICAqXHRcdFx1MDAyNmRhbW9uX2N0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzXG4gICpcdFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULlxuICAqIEBzel9yYW5nZTpcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cbisgKiBAcmFuZ2VfbWluOlx0TWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXG4rICogQHJhbmdlX21heDpcdE1heGltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLlxuICAqXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcdTAwMjZkYW1vcy1cdTAwM2VhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaFxuICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGVcbkBAIC00NTAsNiArNDU0LDEwIEBAIHN0cnVjdCBkYW1vc19maWx0ZXIge1xuIFx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xuIFx0XHRpbnQgdGFyZ2V0X2lkeDtcbiBcdFx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4rXHRcdFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4rXHRcdH07XG4gXHR9O1xuIC8qIHByaXZhdGU6ICovXG4gXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuQEAgLTEwNjUsNyArMTA3Myw3IEBAIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIHVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuK3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIFxuIGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ1Y2IzNjcwMTlhZS4uZDlkNTZmNGJlMWE5NyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtNDY5LDExICs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4gICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbiAgKiBAbGFzdDpcdGlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuXG4rICogQG12Olx0XHR1c2UgbW92aW5nIHN1bS5cbiAgKiBAY3R4Olx0Y29udGV4dCBvZiBcdTAwMjZyLlxuICAqXG4gICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi5cbiAgKi9cbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG5AQCAtNDgzLDYgKzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuIFx0XHRpZiAobGFzdClcbiBcdFx0XHRzdW0gKz0gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSsrXSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbitcdFx0ZWxzZSBpZiAobXYpXG4rXHRcdFx0c3VtICs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSsrLCByLCBjdHgpICpcbitcdFx0XHRcdHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHN1bSArPSByLVx1MDAzZXByb2JlX2hpdHNbaSsrXSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdH1cbkBAIC02NTQsNiArNjU4LDcgQEAgYm9vbCBkYW1vc19maWx0ZXJfZm9yX29wcyhlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUpXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlxuK1x0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTEzMjgsNiArMTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcbiBcdFx0ZHN0LVx1MDAzZXN6X3JhbmdlID0gc3JjLVx1MDAzZXN6X3JhbmdlO1xuIFx0XHRicmVhaztcbitcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuK1x0XHRkc3QtXHUwMDNlcmFuZ2VfbWluID0gc3JjLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0ZHN0LVx1MDAzZXJhbmdlX21heCA9IHNyYy1cdTAwM2VyYW5nZV9tYXg7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjUwNiw3ICsyNTE1LDcgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuIFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGk7XG4gXHRpbnQgdGFyZ2V0X2lkeCA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHdzdW07XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbkBAIC0yNTQxLDYgKzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItXHUwMDNlYXIuc3RhcnQpO1xuIFx0XHRtYXRjaGVkID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbitcdFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcbitcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VyYW5nZV9taW4gXHUwMDNjPSB3c3VtIFx1MDAyNlx1MDAyNlxuK1x0XHRcdHdzdW0gXHUwMDNjPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0zNDQ5LDcgKzM0NjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxuIHtcbiBcdGlmICh1c2VfcHJvYmVfaGl0cylcbi1cdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xuK1x0XHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGZhbHNlLCBjdHgpO1xuIFx0aWYgKGxhc3QpXG4gXHRcdHJldHVybiByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XG4gXHRyZXR1cm4gci1cdTAwM2Vucl9hY2Nlc3NlcztcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggZDdjODE4Mjk0NDViYS4uYjhmNGQyODE2NWRkNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0fVxuIFx0cmV0dXJuIG1heF93c3VtO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggZDliODFkN2I1OTEwZS4uM2RlNGQ4MDRlMDQ5ZiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5AQCAtNTM0LDcgKzUzNCw4IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcbiBcdGJvb2wgYWxsb3c7XG4gXHRjaGFyICptZW1jZ19wYXRoO1xuIFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbi1cdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuK1x0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4rXHR1bnNpZ25lZCBsb25nIHJhbmdlX21heDtcbiBcdGludCB0YXJnZXRfaWR4O1xuIH07XG4gXG5AQCAtNTg4LDYgKzU4OSwxMCBAQCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0ge1xuIFx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcbiBcdFx0Lm5hbWUgPSBcInRhcmdldFwiLFxuIFx0fSxcbitcdHtcbitcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sXG4rXHRcdC5uYW1lID0gXCJwcm9iZV9oaXRzX3dzdW1cIixcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtNzc4LDcgKzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbiBcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbik7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2VyYW5nZV9taW4pO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtNzg2LDcgKzc5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuLVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbik7XG4rXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtNzk3LDcgKzgwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbiBcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtODA1LDcgKzgxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuLVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4rXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4KTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtMjgzNSwxMiArMjg0MCwyMCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbiBcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuIFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbi1cdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbiBcdTAwM2Vcbi1cdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCkge1xuK1x0XHRcdGlmIChzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzZVxuK1x0XHRcdFx0XHRzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4KSB7XG4rXHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuK1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXggPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkge1xuK1x0XHRcdGZpbHRlci1cdTAwM2VyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuK1x0XHRcdGZpbHRlci1cdTAwM2VyYW5nZV9tYXggPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHRcdGlmIChmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzZSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4KSB7XG4gXHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZTtcbiBcdFx0fVxuIFxuIFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggOWEzOGRjODlhMTU2ZS4uNGFlY2YzNGUzOWJlMiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC03MDQsNyArNzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpO1xuIFx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4gXHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG4tXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4rXHRcdFx0XHRcdFx0XHRmYWxzZSwgY3R4KSwgbWF4X3dzdW0pO1xuIFx0XHR9XG4gXHRcdGlmIChtbSlcbiBcdFx0XHRtbXB1dChtbSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMToyOTozNC42MDMyOTYxNTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDA5NjIwMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFBhdGNoIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoIGZvciB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyAoREFNT04pIHN1YnN5c3RlbS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgc29tZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGNhbGN1bGF0aW5nIHdlaWdodGVkIHN1bXMgb2YgcHJvYmUgaGl0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LlxuXG5NeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhZGRpbmcgbW9yZSBncmFudWxhcml0eSB0byBob3cgd2UgZmlsdGVyIGFuZCBhbmFseXplIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMuIFRoZSBrZXkgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIHRoZSBpbmNsdXNpb24gb2YgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAuIFRoaXMgbmV3IGZpbHRlciB0eXBlIGlzIGludHJvZHVjZWQgYWNyb3NzIHNldmVyYWwgZmlsZXMuIEluIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLCB0aGUgYWRkaXRpb25zIGluY2x1ZGUgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAsIGFsb25nIHdpdGggdXBkYXRlcyB0byB0aGUgYHN0cnVjdCBkYW1vc19maWx0ZXJgIHRvIGluY2x1ZGUgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgLCBhbmQgdGhlIHByb3RvdHlwZSBvZiBgZGFtb25fcHJvYmVfaGl0c193c3VtYC4gVGhlc2UgYWRkaXRpb25zIHBvaW50IHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2YgZmlsdGVyaW5nIGJhc2VkIG9uIGEgcmFuZ2UuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzIHNlZW1zIHRvIGJlIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBIZXJlLCBgZGFtb25fcHJvYmVfaGl0c193c3VtYCBpcyB1cGRhdGVkIHRvIGFjY2VwdCBhIGBib29sIG12YCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGxpa2VseSBmb3IgYSBcIm1vdmluZyBzdW1cIi4gVGhpcywgYWxvbmdzaWRlIHRoZSBjaGFuZ2VzIHRvIGBkYW1vc19maWx0ZXJfZm9yX29wc2AsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AsIGFuZCBgZGFtb3NfZmlsdGVyX21hdGNoYCwgaW5kaWNhdGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1vdmluZyBzdW0gY2FsY3VsYXRpb24gYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgZmlsdGVyaW5nIG1lY2hhbmlzbS4gSSBzZWUgYSBjb25uZWN0aW9uIG9mIHRoaXMgd2l0aCB0aGUgYGRhbW9uX21lcmdlX3Njb3JlYCBmdW5jdGlvbiwgd2hpY2ggbm93IGNhbGxzIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBhbmQgd2l0aGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCB3ZSBzZWUgdGhlIGNhbGxzIHRvIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIHdpdGggdGhlIGBmYWxzZWAgb3B0aW9uLlxuXG5GaW5hbGx5LCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCwgd2UgZ2V0IHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgbmV3IGZpbHRlci4gV2Ugc2VlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIChcInByb2JlX2hpdHNfd3N1bVwiKSBhZGRlZCB0byB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24sIGFuZCBgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGJlaW5nIHJlZmFjdG9yZWQuIFRoZSByZXBsYWNlbWVudHMgb2YgYHN6X3JhbmdlYCB3aXRoIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCwgYWxvbmdzaWRlIHRoZSB1cGRhdGVzIHRvIHRoZSBgbWluX3Nob3dgLCBgbWluX3N0b3JlYCwgYG1heF9zaG93YCwgYG1heF9zdG9yZWAgZnVuY3Rpb25zLCBhcmUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbmV3IGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIGl0IGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGEgc29saWQgZW5oYW5jZW1lbnQgdG8gdGhlIERBTU9OIHN1YnN5c3RlbSwgd2hpY2ggbGlrZWx5IGltcHJvdmVzIGl0cyBhYmlsaXR5IHRvIGlkZW50aWZ5IGFuZCBvcHRpbWl6ZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTQxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6Mjk6NDEuMDEyOTE5NDkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzE3MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjQxLjA2MjI0MTAyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0Njk4MzAxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIE1ha2VmaWxlIGFuZCBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBidWlsZCBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBvcGVuIHVwIGBtbS9kYW1vbi9NYWtlZmlsZWAgYW5kIGBtbS9kYW1vbi9LY29uZmlnYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBidWlsZCBydWxlcyBhbmQgbGlrZWx5IHRoZSBtb2R1bGUgZGVmaW5pdGlvbnMgaW4gdGhlIE1ha2VmaWxlLiBGcm9tIGEgS2NvbmZpZyBwZXJzcGVjdGl2ZSwgSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIERBTU9OJ3MgZmVhdHVyZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBydW50aW1lIGJlaGF2aW9ycyB0aGF0IGFyZSBjb250cm9sbGVkIHRocm91Z2gga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgREFNT04gYW5kIHRvIHNlZSB0aGUgbW9kdWxhcml0eSBvZiB0aGUgZGVzaWduLCB3aGljaCBtaWdodCByZXZlYWwgYXNwZWN0cyByZWxhdGVkIHRvIGl0cyBzY2FsYWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5LiBBbmFseXppbmcgdGhlIE1ha2VmaWxlIHdpbGwgcXVpY2tseSBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcywgd2hpbGUgS2NvbmZpZyB3aWxsIGlsbHVtaW5hdGUgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGJha2VkIGludG8gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjQ1LjUzMjA3NDkzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjQ1LjUzMjEyODgwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMTg0ODQ5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgZmllbGQgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgREFNT04ncyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgREFNT04gc3Vic3lzdGVtLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY3J1Y2lhbCBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhleSBpbnRlcnJlbGF0ZSBpcyBlc3NlbnRpYWwuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGEgZmV3IGtleSBmZWF0dXJlczogYERBTU9OX1NZU0ZTYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1ZBRERSYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBvdmVyYXJjaGluZyBgREFNT05gIG9wdGlvbiBpdHNlbGYuIEkgd2FudCB0byBzZWUgd2hpY2ggb2YgdGhlc2UgYXJlIHJlcXVpcmVkIHRvIGJlIGVuYWJsZWQgZm9yIG90aGVycywgaWYgYW55IGhhdmUgZXh0ZXJuYWwgcHJlcmVxdWlzaXRlcyBvciBpbnRlcm5hbCBjb25mbGljdHMsIGFuZCBob3cgYWxsIHRoaXMgaW1wYWN0cyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIG1lbnRhbGx5IG1hcCB0aGUgY29uZmlndXJhdGlvbiBoaWVyYXJjaHkgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI4MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6Mjk6NDkuNTUwNjE2MjE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6Mjk6NDkuNTUwNzAzMzI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc3ODg1NDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogREFNT04gTU0gU3Vic3lzdGVtIEVuaGFuY2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBuZXcgZmVhdHVyZSBiZWluZyBhZGRlZCB0byBEQU1PTiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChNTSkgc3Vic3lzdGVtLiBUaGlzIGluY2x1ZGVzIGEgbmV3IGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIERBTU9TIGZpbHRlciB0eXBlLiBJJ20gYWxzbyBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PUyBzY2hlbWUgZmlsdGVycywgc3BlY2lmaWNhbGx5IHRoZSBgbWluYCBhbmQgYG1heGAgYXR0cmlidXRlcy4gVGhpcyBhbHNvIG1lYW5zIHVwZGF0ZXMgdG8gY29yZSBmdW5jdGlvbnMgbGlrZSBgZGFtb25fcHJvYmVfaGl0c193c3VtYCwgYGRhbW9zX2ZpbHRlcl9tYXRjaGAsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCwgYW1vbmcgb3RoZXJzLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIHNvbWV0aGluZyBTeXprYWxsZXIgY2FuIGFjdHVhbGx5IHRhcmdldD8gVGhlIGdvb2QgbmV3cyBpcywgYWJzb2x1dGVseSwgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBpcyByZWFjaGFibGUgdGhyb3VnaCBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYCwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGludGVyZmFjZSBTeXprYWxsZXIgbG92ZXMgdG8gaW50ZXJhY3Qgd2l0aC4gQ3J1Y2lhbGx5LCB0aGlzIHRvdWNoZXMgY29yZSBEQU1PTiBjb2RlIGFuZCB0aGUgcGFyc2luZyBhbmQgbWF0Y2hpbmcgbG9naWMgZm9yIHRob3NlIHN5c2ZzIHNjaGVtZSBmaWx0ZXJzLlxuXG5UaGVyZWZvcmUsIHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuIE5vdywgbGV0J3MgZHJpbGwgZG93biBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGNoYW5nZWQgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgbmV3IGF0dGFjayBzdXJmYWNlIGxpZXMuIFRpbWUgdG8gZmluZCB0aGUga2V5IHN5bWJvbHMuXG5cbkxldCdzIGluc3BlY3QgdGhlIGRpZmYgYW5kIGxvb2sgYXQgdGhlIGNoYW5nZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBvZiBpbnRlcmVzdDpcbjEuICBgZGFtb25fcHJvYmVfaGl0c193c3VtYCAoaW4gbW0vZGFtb24vY29yZS5jKVxuMi4gIGBkYW1vc19maWx0ZXJfZm9yX29wc2AgKGluIG1tL2RhbW9uL2NvcmUuYylcbjMuICBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgIChpbiBtbS9kYW1vbi9jb3JlLmMpXG40LiAgYGRhbW9zX2ZpbHRlcl9tYXRjaGAgKGluIG1tL2RhbW9uL2NvcmUuYylcbjUuICBgZGFtb25fbWVyZ2Vfc2NvcmVgIChpbiBtbS9kYW1vbi9jb3JlLmMpXG42LiAgYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AgKGluIG1tL2RhbW9uL3BhZGRyLmMpXG43LiAgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgKGluIG1tL2RhbW9uL3ZhZGRyLmMpXG44LiAgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AgKGluIG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYylcbjkuICBgbWluX3N0b3JlYCAvIGBtYXhfc3RvcmVgIC8gYG1pbl9zaG93YCAvIGBtYXhfc2hvd2AgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgKHRob3VnaCBzdGF0aWMpXG5cbkknbGwgYWxzbyBoYXZlIHRvIGRvdWJsZS1jaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCBhbmQgYG1tL2RhbW9uL2NvcmUuY2AgZm9yIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgb3IgZW50cnkgcG9pbnRzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkIGR1cmluZyB0aGlzIHVwZGF0ZS4gTmVlZCB0byBnZXQgYSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTg5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6Mjk6NTUuMzI5NTYwNjYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY4MDkxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfZmlsdGVyX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNDk5PXN0YXRpYyB2b2lkIGRhbW9zX3VwZGF0ZV9zdGF0KHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNTEwLVxcbm1tL2RhbW9uL2NvcmUuYzoyNTExOnN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTI1MTItXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI1NjU9c3RhdGljIGJvb2wgZGFtb3NfY29yZV9maWx0ZXJfb3V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNTcxLVxcdGRhbW9zX2Zvcl9lYWNoX2NvcmVfZmlsdGVyKGZpbHRlciwgcykge1xcbm1tL2RhbW9uL2NvcmUuYzoyNTcyOlxcdFxcdGlmIChkYW1vc19maWx0ZXJfbWF0Y2goY3R4LCB0LCByLCBmaWx0ZXIsIGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMjU3My1cXHRcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VhbGxvdylcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTcwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU5NC1cXHQvKiByZWdpb24gaW4gdGhlIHJhbmdlICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1OTU6XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU5Ni1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYwMS1cXHRLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTYwMjpcXHRcXHRcXHRkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjAzLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAxKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjA4LVxcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNjA5OlxcdFxcdFxcdGRhbW9zX2ZpbHRlcl9tYXRjaChOVUxMLCB0LCByLCBmLCAxKSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MTAtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDEpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MTQtXFx0ci1cXHUwMDNlYXIuZW5kID0gNDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTYxNTpcXHRLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCwgZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYxNi1cXHQvKiBmaWx0ZXIgc2hvdWxkIGhhdmUgc3BsaXQgdGhlIHJlZ2lvbiAqL1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MzAtXFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTYzMTpcXHRcXHRcXHRkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjMyLVxcdC8qIGZpbHRlciBzaG91bGQgaGF2ZSBzcGxpdCB0aGUgcmVnaW9uICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjU1LjQzNjM4MDYzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDIxMjI1Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBzeXNmcy1zY2hlbWVzLmNgIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlsdGVyaW5nIHNjaGVtZXMgYXJlIGJlaW5nIGFkZGVkIGFuZCB1dGlsaXplZCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGludGVyYWN0aW9uIHdpdGggYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AgYW5kIGFueSBleHBvcnRlZCBmdW5jdGlvbnMgd2l0aGluIGBzeXNmcy1zY2hlbWVzLmNgLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBzeXN0ZW0gcmVzb3VyY2UgbWFuYWdlbWVudCwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gZW5zdXJlIHByb3BlciB1c2FnZSBhbmQgYXZvaWQgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLiBJJ2xsIGxpa2VseSBzdGFydCBieSBsaXN0aW5nIGFsbCBjYWxsZXJzIHRvIHRoYXQgZnVuY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBCZXlvbmQgdGhpcyBJIHdpbGwgYWxzbyBsb29rIGF0IGZ1bmN0aW9ucyBleHBvcnRlZCB3aXRoaW4gdGhlIHNvdXJjZSwgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgY2FsbHMgb3JpZ2luYXRpbmcgZnJvbSB2YXJpb3VzIHN1YnN5c3RlbSBkcml2ZXJzLCBwcm9iYWJseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHJlc291cmNlIGNvbnRyb2wsIGJhc2VkIG9uIHRoZSBgZGFtb25gIHByZWZpeC4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIGtub3cgYWxsIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6Mjk6NTguODU3NjA4MjI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTYyNDM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4MDM9Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MDgtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MDk6c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpzY2hlbWUsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MTAtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJzICpzeXNmc19maWx0ZXJzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5ODc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMzYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwMzc6XFx0ZXJyID0gZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHNjaGVtZSwgc3lzZnNfc2NoZW1lLVxcdTAwM2Vjb3JlX2ZpbHRlcnMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDM4LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQxLVxcdH1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0MjpcXHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc2NoZW1lLCBzeXNmc19zY2hlbWUtXFx1MDAzZW9wc19maWx0ZXJzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0Ni1cXHR9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNDc6XFx0ZXJyID0gZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHNjaGVtZSwgc3lzZnNfc2NoZW1lLVxcdTAwM2VmaWx0ZXJzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0OC1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjU4LjkwNzIzNjkxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzgyMjMyODYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gREFNT04gU3lzZnMgQ2FsbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gdW5kZXJzdGFuZGluZyB0aGUgdXNhZ2Ugb2YgdGhlIGBkYW1vbl9zeXNmc19ta19zY2hlbWVgIGFuZCBgZGFtb25fc3lzZnNfc2V0X3NjaGVtZXNgIHN5c3RlbSBjYWxscyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBmcmFtZXdvcmsuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIGNvbmZpZ3VyaW5nIGFuZCBtb2RpZnlpbmcgbW9uaXRvcmluZyBzY2hlbWVzIOKAkyBlc3NlbnRpYWxseSwgaG93IERBTU9OIGRlZmluZXMgYW5kIHRyYWNrcyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aG8ncyAqY2FsbGluZyogdGhlc2UgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGhlcmUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIFdoYXQncyB0cmlnZ2VyaW5nIHRoZXNlIGNhbGxzPyBJcyBpdCB1c2VyLXNwYWNlIHRvb2xzIGludGVyYWN0aW5nIHdpdGggc3lzZnMgZGlyZWN0bHk/IEFyZSB0aGV5IGJlaW5nIGluaXRpYXRlZCBieSBzb21lIGtlcm5lbC1sZXZlbCBjb21wb25lbnRzIG9yIG1vZHVsZXM/IFRoZSBcIndoeVwiIGlzIGFsc28gaW1wb3J0YW50OiAqd2h5KiBhcmUgdGhlc2Ugc2NoZW1lcyBiZWluZyBjcmVhdGVkIG9yIGFsdGVyZWQ/IEFyZSB0aGV5IGR5bmFtaWNhbGx5IGFkYXB0aW5nIGJhc2VkIG9uIHJ1bnRpbWUgY29uZGl0aW9ucywgb3IgYXJlIHRoZXkgc3RhdGljYWxseSBkZWZpbmVkIGF0IGJvb3Q/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlciBhbmQgdGhlIHRyaWdnZXJpbmcgY29uZGl0aW9ucyBpcyB0aGUga2V5IHRvIHRydWx5IHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGJlaGF2aW5nIGFuZCBwZXJmb3JtaW5nIHVuZGVyIHRoZSBob29kLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCBpbiBhbmFseXppbmcgYW55IERBTU9OIHJlbGF0ZWQgaXNzdWUgb3Igb3B0aW1pemF0aW9uIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMDoxMi43Mjk1Njk3MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjQyNTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N5c2ZzX21rX3NjaGVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk2Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9taWdyYXRlX2Rlc3Qoc3RydWN0IGRhbW9zICpzY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk4Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk4NzpzdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5ODgtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMwNjE9aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDY4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDY5OlxcdFxcdHNjaGVtZSA9IGRhbW9uX3N5c2ZzX21rX3NjaGVtZShzeXNmc19zY2hlbWVzLVxcdTAwM2VzY2hlbWVzX2FycltpXSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNzAtXFx0XFx0aWYgKCFzY2hlbWUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzA6MTIuNzc5MjE3MjI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNjI0Nzc2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGtleSBhcmVhcyBmb3IgZnVydGhlciBleGFtaW5hdGlvbiB3aXRoaW4gdGhlIGBtbS9kYW1vbmAgZnJhbWV3b3JrLCBhbmQgSSB0aGluayBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIGl0IG5vdy4gSSd2ZSBwaW5wb2ludGVkIHNldmVyYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29kZSB0aGF0IGxvb2sgbGlrZSBwcmltZSB0YXJnZXRzIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZXNlIFwiRm9jdXNTeW1ib2xzXCI6IGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb3NfZmlsdGVyX21hdGNoYCAoYW5kL29yIGBkYW1vc19jb3JlX2ZpbHRlcl9vdXRgKSwgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGBkYW1vbl9tZXJnZV9zY29yZWAsIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AuIFRoZXNlIHNlZW0gY2VudHJhbCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSd2ZSBpZGVudGlmaWVkIGBEQU1PTmAgKHRoZSBjb3JlIGZyYW1ld29yayksIGBEQU1PTl9TWVNGU2AgKHRoZSBzeXNmcyBpbnRlcmZhY2UpLCBgREFNT05fUEFERFJgIChmb3IgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zKSwgYW5kIGBEQU1PTl9WQUREUmAgKGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucykuIEkndmUgYWxzbyB2ZXJpZmllZCB0aGVpciBkZXBlbmRlbmNpZXM6IGBEQU1PTl9TWVNGU2AgbmVlZHMgYERBTU9OYCBhbmQgYFNZU0ZTYCwgYW5kIGJvdGggYERBTU9OX1BBRERSYCBhbmQgYERBTU9OX1ZBRERSYCByZXF1aXJlIGBEQU1PTmAgYW5kIGBNTVVgLiBUaGlzIGFsbCBjaGVja3Mgb3V0LlxuXG5UbyBiZSBleHRyYSB0aG9yb3VnaCwgSSd2ZSBqdXN0IGRvbmUgYSBmaW5hbCBzd2VlcCB0byBjb25maXJtIGFsbCB0aGUgZGV0YWlscyBhcmUgYWNjdXJhdGUuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgYWxsIHJlcXVpcmVkIGFuZCB0aGUgc3ltYm9scyBsaXN0ZWQgYXJlIGluZGVlZCBpbXBvcnRhbnQuXG5cbkkndmUgYWxzbyBwZXJmb3JtZWQgYSBzYW5pdHkgY2hlY2sgb24gbXkgcmVhc29uaW5nLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmlsdGVyIHR5cGUsIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gLCB3aGljaCBpcyBhbGwgYWJvdXQgbWF0Y2hpbmcgYW5kIGZpbHRlcmluZyBtZW1vcnkgcmVnaW9ucyBiYXNlZCBvbiBhIG1vdmluZyBzdW0gb2Ygd2VpZ2h0ZWQgcHJvYmUgaGl0cy4gVGhhdCdzIGEgbmV3IGxheWVyIG9mIGNvbXBsZXhpdHkgd2l0aGluIERBTU9OLCBhbmQgaXQgdG91Y2hlcyBjb3JlLCBwYWRkciwgdmFkZHIgYW5kIHN5c2ZzIHNjaGVtZSBpbnRlcmZhY2VzLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvZGUgZXhlY3V0aW9uIHBhdGhzLCBhbmQgcG90ZW50aWFsbHksIG5ldyBhcmVhcyBmb3IgZXhwbG9yYXRpb24uXG5cbldpdGggbXkgYXNzZXNzbWVudCBjb21wbGV0ZSwgSSdtIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODg3LCJPdXRwdXRUb2tlbnMiOjI0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMDo0My40MDM5OTY3MjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjU2MDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9wcm9iZV9oaXRzX3dzdW1cIixcbiAgICBcImRhbW9zX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9uX21lcmdlX3Njb3JlXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkgYW5kIGFkZHMgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIG1vbml0b3JpbmcgcmVnaW9ucyBiYXNlZCBvbiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMuIEl0IHVwZGF0ZXMgY29yZSBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMsIGNvbW1pdCBmaWx0ZXIgYXJndW1lbnQgaGFuZGxpbmcsIG1vdmluZyBzdW0gcHJvYmUgaGl0IGNhbGN1bGF0aW9uLCBhbmQgdGhlIERBTU9OIHN5c2ZzIHNjaGVtZSBmaWx0ZXIgaW50ZXJmYWNlLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGV4cG9zZWQgdmlhIHN5c2ZzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3Byb2JlX2hpdHNfd3N1bVwiLFxuICAgIFwiZGFtb3NfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vc19jb21taXRfZmlsdGVyX2FyZ1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fbWVyZ2Vfc2NvcmVcIixcbiAgICBcImRhbW9uX3BhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fdmFfYXBwbHlfcHJvYmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZSAoREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNKSBhbmQgYWRkcyBzdXBwb3J0IGZvciBmaWx0ZXJpbmcgbW9uaXRvcmluZyByZWdpb25zIGJhc2VkIG9uIHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cy4gSXQgdXBkYXRlcyBjb3JlIERBTU9OIGZpbHRlciBtYXRjaGluZyBsb2dpYywgY29tbWl0IGZpbHRlciBhcmd1bWVudCBoYW5kbGluZywgbW92aW5nIHN1bSBwcm9iZSBoaXQgY2FsY3VsYXRpb24sIGFuZCB0aGUgREFNT04gc3lzZnMgc2NoZW1lIGZpbHRlciBpbnRlcmZhY2UuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZXhwb3NlZCB2aWEgc3lzZnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMDo0My40OTA1NjU0NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzk2NTQ0NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzA6NDMuNDkxMjY5OTk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDc3OTU4MzUzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gKSBhbmQgcmVmYWN0b3JzIHN5c2ZzIGZpbHRlciBtaW4vbWF4IGhhbmRsaW5nIHRvIHN1cHBvcnQgcHJvYmUgaGl0IHdlaWdodGVkIHN1bSByYW5nZXMgYWxvbmdzaWRlIGh1Z2VwYWdlIHNpemVzLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHN5c2ZzIGZpbHRlciBzdHJ1Y3R1cmVzIChgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcmApIGFyZSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gV2hlbiBjb252ZXJ0aW5nIHRvIGtlcm5lbCBmaWx0ZXJzIChgZGFtb3NfZmlsdGVyYCksIHRoZSByYW5nZSBmaWVsZHMgKGByYW5nZV9taW5gLCBgcmFuZ2VfbWF4YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBzeXNmcyBmaWx0ZXJzLiBTeXNmcyBzaG93IGF0dHJpYnV0ZXMgdXNlIGBzeXNmc19lbWl0KClgIHRvIG91dHB1dCBmb3JtYXR0ZWQgdW5zaWduZWQgbG9uZyBpbnRlZ2VycywgcHJlY2x1ZGluZyBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQuXFxuLSBLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnMgYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBhbnkgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiBwcm9iZSBhcnJheXMsIG9yIGFsbG9jYXRpb24gaXNzdWVzLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTc3NDU0MmQ4Y2Q4NDZiNTI4ZGU2NzgxNWJlNjhjOTAwMGIyNDA1ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAxOjI5OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTU1MSw2ICs1NTEsMTAgQEAgYW5kIGBgZGFtb25fdGFyZ2V0X2lkeGBgLiAgVG8gYGB0eXBlYGAgZmlsZSwgeW91IGNhbiB3cml0ZSB0aGUgdHlwZSBvZiB0aGVcbiBmaWx0ZXIuICBSZWZlciB0byA6cmVmOmB0aGUgZGVzaWduIGRvYyBcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVyc1x1MDAzZWAgZm9yXG4gYXZhaWxhYmxlIHR5cGUgbmFtZXMsIHRoZWlyIG1lYW5pbmcgYW5kIG9uIHdoYXQgbGF5ZXIgdGhvc2UgYXJlIGhhbmRsZWQuXG4gXG4rRm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlXG4raGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcyxcbityZXNwZWN0aXZlbHkuXG4rXG4gRm9yIGBgbWVtY2dgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1lbW9yeSBjZ3JvdXAgb2YgdGhlIGludGVyZXN0IGJ5XG4gd3JpdGluZyB0aGUgcGF0aCBvZiB0aGUgbWVtb3J5IGNncm91cCBmcm9tIHRoZSBjZ3JvdXBzIG1vdW50IHBvaW50IHRvXG4gYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmRcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbmluZGV4IGFhYzg0ZGUyNjFhYTguLjhlOTgwZGRlMzYyZGUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTgyMiw2ICs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gYWRkcmVzcyByYW5nZS5cbiAgICAgLSB0YXJnZXRcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LlxuKyAgICAtIHByb2JlX2hpdHNfd3N1bVxuKyAgICAgICAgLSBNYXRjaGVzIHRvIG1vbml0b3JpbmcgcmVnaW9ucyBoYXZpbmcgYSBnaXZlbiByYW5nZSBvZiA6cmVmOmBwcm9iZVxuKyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSBcdTAwM2NkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nXHUwMDNlYCB2YWx1ZS5cbiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LlxuICAgICAtIGFub25cbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IG5vdCBzdG9yZWQgaW4gZmlsZXMuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0zOTksMTQgKzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7XG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVEOlx0VW5tYXBwZWQgcGFnZXMuXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XHRBZGRyZXNzIHJhbmdlLlxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XHREYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC5cbisgKiBAREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlx0cHJvYmVfaGl0cyB3ZWlnaHRlZCBzdW0gcmFuZ2UuXG4gICogQE5SX0RBTU9TX0ZJTFRFUl9UWVBFUzpcdE51bWJlciBvZiBmaWx0ZXIgdHlwZXMuXG4gICpcbi0gKiBBbGwgdHlwZXMgZXhjZXB0IFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVFxuLSAqIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWVcbi0gKiBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZCBhcyAndHJpZWQnLiAgSW4gY29udHJhc3QsXG4tICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWRcbi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZFxuLSAqIGFzICd0cmllZCcuXG4rICogQWxsIHR5cGVzIGV4Y2VwdCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSLCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgYW5kXG4rICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdFxuKyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZFxuKyAqIGFzICd0cmllZCcuICBJbiBjb250cmFzdCwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmRcbisgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmVcbisgKiB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkIGFzICd0cmllZCcuXG4gICpcbiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZ1xuICAqIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLlxuQEAgLTQyMCw2ICs0MjEsNyBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHtcbiBcdERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVELFxuIFx0REFNT1NfRklMVEVSX1RZUEVfQUREUixcbiBcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcbitcdERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcbiBcdE5SX0RBTU9TX0ZJTFRFUl9UWVBFUyxcbiB9O1xuIFxuQEAgLTQzNCw2ICs0MzYsOCBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHtcbiAgKlx0XHRcdTAwMjZkYW1vbl9jdHgtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpc1xuICAqXHRcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC5cbiAgKiBAc3pfcmFuZ2U6XHRTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuXG4rICogQHJhbmdlX21pbjpcdE1pbmltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLlxuKyAqIEByYW5nZV9tYXg6XHRNYXhpbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDUwLDYgKzQ1NCwxMCBAQCBzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcbiBcdFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbiBcdFx0aW50IHRhcmdldF9pZHg7XG4gXHRcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O1xuK1x0XHR9O1xuIFx0fTtcbiAvKiBwcml2YXRlOiAqL1xuIFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbkBAIC0xMDY1LDcgKzEwNzMsNyBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiBcbiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NWNiMzY3MDE5YWUuLmQ5ZDU2ZjRiZTFhOTcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTQ2OSwxMSArNDY5LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxuICAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG4gICogQGxhc3Q6XHRpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLlxuKyAqIEBtdjpcdFx0dXNlIG1vdmluZyBzdW0uXG4gICogQGN0eDpcdGNvbnRleHQgb2YgXHUwMDI2ci5cbiAgKlxuICAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXG4gICovXG4tdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4rdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xuQEAgLTQ4Myw2ICs0ODQsOSBAQCB1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiBcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbiBcdFx0aWYgKGxhc3QpXG4gXHRcdFx0c3VtICs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4rXHRcdGVsc2UgaWYgKG12KVxuK1x0XHRcdHN1bSArPSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkrKywgciwgY3R4KSAqXG4rXHRcdFx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHRcdGVsc2VcbiBcdFx0XHRzdW0gKz0gci1cdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHR9XG5AQCAtNjU0LDYgKzY1OCw3IEBAIGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuIFx0c3dpdGNoICh0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbitcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbkBAIC0xMzI4LDYgKzEzMzMsMTAgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkU6XG4gXHRcdGRzdC1cdTAwM2Vzel9yYW5nZSA9IHNyYy1cdTAwM2Vzel9yYW5nZTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbitcdFx0ZHN0LVx1MDAzZXJhbmdlX21pbiA9IHNyYy1cdTAwM2VyYW5nZV9taW47XG4rXHRcdGRzdC1cdTAwM2VyYW5nZV9tYXggPSBzcmMtXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1MDYsNyArMjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xuIFx0aW50IHRhcmdldF9pZHggPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtO1xuIFxuIFx0c3dpdGNoIChmaWx0ZXItXHUwMDNldHlwZSkge1xuIFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG5AQCAtMjU0MSw2ICsyNTUwLDExIEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLVx1MDAzZWFyLnN0YXJ0KTtcbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4rXHRcdHdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7XG4rXHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzYz0gd3N1bSBcdTAwMjZcdTAwMjZcbitcdFx0XHR3c3VtIFx1MDAzYz0gZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtMzQ0OSw3ICszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcbiB7XG4gXHRpZiAodXNlX3Byb2JlX2hpdHMpXG4tXHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcbitcdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBmYWxzZSwgY3R4KTtcbiBcdGlmIChsYXN0KVxuIFx0XHRyZXR1cm4gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xuIFx0cmV0dXJuIHItXHUwMDNlbnJfYWNjZXNzZXM7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbiBcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbi1cdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbitcdFx0XHRcdFx0XHRcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiBtYXhfd3N1bTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbmluZGV4IGQ5YjgxZDdiNTkxMGUuLjNkZTRkODA0ZTA0OWYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTUzNCw3ICs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XG4gXHRib29sIGFsbG93O1xuIFx0Y2hhciAqbWVtY2dfcGF0aDtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4tXHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbitcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuK1x0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4gXHRpbnQgdGFyZ2V0X2lkeDtcbiB9O1xuIFxuQEAgLTU4OCw2ICs1ODksMTAgQEAgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbiBcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsXG4gXHRcdC5uYW1lID0gXCJ0YXJnZXRcIixcbiBcdH0sXG4rXHR7XG4rXHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxuK1x0XHQubmFtZSA9IFwicHJvYmVfaGl0c193c3VtXCIsXG4rXHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc3OCw3ICs3ODMsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsdVxcblwiLCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc4Niw3ICs3OTEsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuK1x0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXJhbmdlX21pbik7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7XG4gfVxuQEAgLTc5Nyw3ICs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsdVxcblwiLCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4KTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTgwNSw3ICs4MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuK1x0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXJhbmdlX21heCk7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7XG4gfVxuQEAgLTI4MzUsMTIgKzI4NDAsMjAgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpzY2hlbWUsXG4gXHRcdH0gZWxzZSBpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7XG4gXHRcdFx0ZmlsdGVyLVx1MDAzZXRhcmdldF9pZHggPSBzeXNmc19maWx0ZXItXHUwMDNldGFyZ2V0X2lkeDtcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFKSB7XG4tXHRcdFx0aWYgKHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gXHUwMDNlXG4tXHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpIHtcbitcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbitcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuK1x0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbitcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcbitcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbitcdFx0XHRpZiAoZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2UgZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuIFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UgPSBzeXNmc19maWx0ZXItXHUwMDNlc3pfcmFuZ2U7XG4gXHRcdH1cbiBcbiBcdFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IDlhMzhkYzg5YTE1NmUuLjRhZWNmMzRlMzliZTIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNzA0LDcgKzcwNCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0XHRpZiAobW0pXG4gXHRcdFx0bW1wdXQobW0pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzA6NDMuNDkxMjcxMzE2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxMTM3NzE2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byByZWFsbHkgZGlnIGludG8gd2hhdCdzIGJlaW5nIGFkZGVkIGFuZCBjaGFuZ2VkLlxuXG5JdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlOiBgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCBmb3IgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy4gVGhlIGNvZGUgY2hhbmdlcyBzZWVtIHByZXR0eSBmb2N1c2VkLCB3aGljaCBpcyBnb29kLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpbiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgdGhlIGVudW0gYGRhbW9zX2ZpbHRlcl90eXBlYCBub3cgaW5jbHVkZXMgdGhlIG5ldyB0eXBlLCBhbmQgdGhlIGBzdHJ1Y3QgZGFtb3NfZmlsdGVyYCBpcyB1cGRhdGVkIHdpdGggYSByYW5nZSBzdHJ1Y3R1cmUgKGByYW5nZV9taW5gLCBgcmFuZ2VfbWF4YCkgaW5zaWRlIHRoZSB1bmlvbi4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCB0ZWxscyB1cyB0aGUgZGF0YSB0aGF0IGlzIG5lZWRlZCBmb3IgdGhlIGZpbHRlci4gQWxzbywgdGhlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIHNpZ25hdHVyZSBpcyB1cGRhdGVkIHdpdGggYGJvb2wgbXZgIHdoaWNoIGluZGljYXRlcyB0aGVyZSBhcmUgb3B0aW9ucyBpbiBpdHMgYmVoYXZpb3VyLlxuXG5JbiBgbW0vZGFtb24vY29yZS5jYCwgdGhlIGNoYW5nZXMgc2hvdyBob3cgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpYCBpcyBtb2RpZmllZCB0byBoYW5kbGUgdGhlIG5ldyBgYm9vbCBtdmAgYXJndW1lbnQuIEludGVyZXN0aW5nIHRoYXQgYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKClgIHJldHVybnMgZmFsc2UgZm9yIHRoaXMgZmlsdGVyIHR5cGUsIHdoaWNoIGlzIGdvb2QgaW4gdGhhdCBpdCBpbmRpY2F0ZXMgdGhpcyBpcyBhIG5ldyB0eXBlLiBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoKWAgaXMgYWxzbyB1cGRhdGVkIHRvIGNvcHkgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIHdoaWNoIGlzIGltcG9ydGFudCBpbiBob3cgdGhlIGZpbHRlciBpcyBjb25maWd1cmVkLCBhbmQgYGRhbW9zX2ZpbHRlcl9tYXRjaCgpYCBoYW5kbGVzIHRoZSBuZXcgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgYnkgY29tcGFyaW5nIGEgd2VpZ2h0ZWQgc3VtIHRvIHRoZSBzcGVjaWZpZWQgcmFuZ2UuIEFsc28sIHRoZSBgZGFtb25fbWVyZ2Vfc2NvcmUoKWAgZnVuY3Rpb24gaXMgdXBkYXRlZCB0byB1c2UgdGhlIHVwZGF0ZWQgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAuXG5cblRoZSBwYXRjaCBhbHNvIHVwZGF0ZXMgY2FsbHMgdG8gYGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpYCB3aXRoIGBmYWxzZWAgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgdmFkZHIuY2AuIFRoaXMgaXNuJ3QgdGhhdCBpbXBvcnRhbnQgYXMgaXQganVzdCBtb2RpZmllcyB0aGUgb3RoZXIgZmlsZXMgdG8gdXNlIHRoZSB1cGRhdGVkIGZ1bmN0aW9uLlxuXG5GaW5hbGx5LCBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCB1cGRhdGVzIHRoZSBgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcmAgc3RydWN0dXJlIGFuZCB0aGUgcmVsYXRlZCBzeXNmcyBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHVzZSBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgaW5zdGVhZCBvZiBgc3pfcmFuZ2UubWluYCBhbmQgYHN6X3JhbmdlLm1heGAsIHdoaWNoIGlzIGV4cGVjdGVkLlxuXG5Ob3csIGEga2V5IGNvbmNlcm46IGhvdyBhcmUgYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGFuZCBgZGFtb3NfZmlsdGVyYCBjcmVhdGVkLCBpbml0aWFsaXplZCwgYW5kIGNvcGllZD8gSSBuZWVkIHRvIHVzZSBncmVwcGVyIHRvIHRyYWNrIHRoZXNlIHN0cnVjdHVyZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkncmUgYmVpbmcgdXNlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHdoZXJlIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMgY291bGQgYXJpc2Ug4oCTIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluY29ycmVjdCBoYW5kbGluZyBvZiB0aGUgbmV3IHJhbmdlIHBhcmFtZXRlcnMuIEkgd2lsbCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBlcnJvcnMgd2l0aGluIERBTU9OLiBCYXNlZCBvbiB0aGUgZmluZGluZ3MgZnJvbSBncmVwcGVyLCBJIGNhbiBhc3Nlc3MgdGhlIG5lZWQgZm9yIGZvY3VzZWQgS01TQU4gdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMwOjUyLjYwNTA0NTUxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5Mjg1ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2N8ZGFtb3NfbmV3X2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NTQzPWludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYzMy1cXG5tbS9kYW1vbi9jb3JlLmM6NjM0OnN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX25ld19maWx0ZXIoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlLFxcbm1tL2RhbW9uL2NvcmUuYy02MzUtXFx0XFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzU0PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM3MC1cXG5tbS9kYW1vbi9jb3JlLmM6MTM3MTpcXHRcXHRuZXdfZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihcXG5tbS9kYW1vbi9jb3JlLmMtMTM3Mi1cXHRcXHRcXHRcXHRzcmNfZmlsdGVyLVxcdTAwM2V0eXBlLCBzcmNfZmlsdGVyLVxcdTAwM2VtYXRjaGluZyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzgyPXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzk4LVxcbm1tL2RhbW9uL2NvcmUuYzoxMzk5OlxcdFxcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxcbm1tL2RhbW9uL2NvcmUuYy0xNDAwLVxcdFxcdFxcdFxcdHNyY19maWx0ZXItXFx1MDAzZXR5cGUsIHNyY19maWx0ZXItXFx1MDAzZW1hdGNoaW5nLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI1Ny1cXHQvKiBkaXNhbGxvdyBwcmlvcml0aXppbmcgbm90LXlvdW5nIHBhZ2VzICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNTg6XFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9ZT1VORywgZmFsc2UsIGZhbHNlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI1OS1cXHRpZiAoIWZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjYzLVxcdC8qIGRpc2FibGxvdyBkZS1wcmlvcml0aXppbmcgeW91bmcgcGFnZXMgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI2NDpcXHRmaWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HLCB0cnVlLCBmYWxzZSk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNjUtXFx0aWYgKCFmaWx0ZXIpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTIzOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTI1Ni1cXHRpZiAoaW5zdGFsbF95b3VuZ19maWx0ZXIpIHtcXG5tbS9kYW1vbi9wYWRkci5jOjI1NzpcXHRcXHRmaWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxcbm1tL2RhbW9uL3BhZGRyLmMtMjU4LVxcdFxcdFxcdFxcdERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HLCB0cnVlLCBmYWxzZSk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjUxLVxcdGlmIChza2lwX2Fub24pIHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjUyOlxcdFxcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgZmFsc2UpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNTMtXFx0XFx0aWYgKCFmaWx0ZXIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTI5PXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDEtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0MjpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My1cXHRcXHRlbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIgbGF5ZXIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTMwPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnNfYWRkX2RpcnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTQ2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9maWx0ZXJzOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6OTQ3OlxcdFxcdGZpbHRlciA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk0OC1cXHRcXHRcXHRcXHRmaWx0ZXJzLVxcdTAwM2VoYW5kbGVfbGF5ZXIpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4MDk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpzY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgxNy1cXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODE4OlxcdFxcdFxcdGRhbW9zX25ld19maWx0ZXIoc3lzZnNfZmlsdGVyLVxcdTAwM2V0eXBlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE5LVxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NzkwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfbmV3X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzkzLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3OTQ6XFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc5NS1cXHRpZiAoIWZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTcwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU3NS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU3NjpcXHRmID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BRERSLCB0cnVlLCBmYWxzZSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NzctXFx0aWYgKCFmKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE2Nzk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY5NC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTY5NTpcXHR0YXJnZXRfZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsIHRydWUsIHRydWUpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjk2LVxcdGlmICghdGFyZ2V0X2ZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNzIxLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzIyOlxcdGFub25fZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCB0cnVlKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyMy1cXHRpZiAoIWFub25fZmlsdGVyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMwOjUzLjEwNDMzODg1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzExNTU2OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW06XG5cbioqRGlnZ2luZyBpbnRvIERBTU9OJ3MgRmlsdGVyIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZpbHRlciBhbGxvY2F0aW9uIHdpdGhpbiBEQU1PTi4gTGV0J3Mgc2VlLi4uIEknbSBmb2N1c2luZyBvbiBgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvY2AgYW5kIGBkYW1vc19uZXdfZmlsdGVyYCBpbiBgbW0vZGFtb25gLiBSaWdodCwgYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2NgIGxpa2VseSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBmaWx0ZXIgc3RydWN0dXJlIGl0c2VsZiwgcHJvYmFibHkgaW4gcmVzcG9uc2UgdG8gYSBzeXNmcyByZXF1ZXN0IG9yIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCBhbmQgcHJvYmFibHkgdGllZCB0byBhIHBhcnRpY3VsYXIgbW9uaXRvcmluZyBzY2hlbWUuIEkgaW1hZ2luZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIGZpbHRlcidzIG1ldGFkYXRhLCBzZXR0aW5nIHVwIGFueSBuZWNlc3NhcnkgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcGVyaGFwcyBsaW5raW5nIGl0IGludG8gdGhlIG92ZXJhbGwgREFNT04gc2NoZW1lJ3MgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBJIHNob3VsZCBjaGVjayBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHNjaGVtZSdzIGFsbG9jYXRpb24vZnJlZWluZyBtZWNoYW5pc21zLlxuXG5UaGVuIHRoZXJlJ3MgYGRhbW9zX25ld19maWx0ZXJgLiBUaGlzIHNvdW5kcyBsaWtlIHRoZSBsb3ctbGV2ZWwgcHJpbWl0aXZlIGZvciBjcmVhdGluZyBhIGZpbHRlci4gTGlrZWx5IGNhbGxlZCBieSB0aGUgYWJvdmUgbWVudGlvbmVkIGZ1bmN0aW9uLCBgZGFtb3NfbmV3X2ZpbHRlcmAgaXMgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IGFsbG9jYXRpbmcgdGhlIG1lbW9yeSBmb3IgdGhlIGZpbHRlciBvYmplY3QgZnJvbSBhIGtlcm5lbCBtZW1vcnkgcG9vbC4gSSdkIGV4cGVjdCBpdCB0byBoYW5kbGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIGFueSBmaWVsZHMgcmVsYXRlZCB0byB0aGUgZmlsdGVyJ3MgaWRlbnRpdHksIHN0YXR1cyAoYWN0aXZlLCBpbmFjdGl2ZSwgZXRjLiksIGFuZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3aWxsIHN0b3JlIHRoZSBtb25pdG9yZWQgcmVnaW9uIGluZm9ybWF0aW9uLiBJIHdpbGwgYmUgc3VyZSB0byBvYnNlcnZlIHRoZSB1c2FnZSBvZiB0aGUgcmV0dXJuZWQgcG9pbnRlci5cblxuSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdG8gdHJhY2sgd2hlcmUgdGhlIGZpbHRlcnMgYXJlIGZyZWVkIGFuZCBob3cgdGhhdCBwcm9jZXNzIGlzIHRyaWdnZXJlZC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBmaWx0ZXIgYWxsb2NhdGlvbiwgZGVzdHJ1Y3Rpb24sIGFuZCBtb25pdG9yaW5nIG9wZXJhdGlvbnMuIERBTU9OJ3MgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZSwgc28gY2xlYW4gYW5kIGNvcnJlY3QgZmlsdGVyIGhhbmRsaW5nIGlzIHBhcmFtb3VudCB0byBpdHMgcmVsaWFiaWxpdHkuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMTQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMDo1Ny40MTU5MDAyMloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzNTpcXHRcXHRjaGFyICptZW1jZ19wYXRoO1xcbiA1MzY6XFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcXG4gNTM3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xcbiA1Mzg6XFx0XFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XFxuIDUzOTpcXHRcXHRpbnQgdGFyZ2V0X2lkeDtcXG4gNTQwOlxcdH07XFxuIDU0MTpcXHRcXG4gNTQyOlxcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcXG4gNTQzOlxcdFxcdFxcdGVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciBsYXllcilcXG4gNTQ0OlxcdHtcXG4gNTQ1OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXI7XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdFxcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyKTtcXG4gNTQ4OlxcdFxcdGlmIChmaWx0ZXIpXFxuIDU0OTpcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZWhhbmRsZV9sYXllciA9IGxheWVyO1xcbiA1NTA6XFx0XFx0cmV0dXJuIGZpbHRlcjtcXG4gNTUxOlxcdH1cXG4gNTUyOlxcdFxcbiA1NTM6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWUge1xcbiA1NTQ6XFx0XFx0ZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlO1xcbiA1NTU6XFx0XFx0Y2hhciAqbmFtZTtcXG4gNTU2OlxcdH07XFxuIDU1NzpcXHRcXG4gNTU4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZVxcbiA1NTk6XFx0ZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcXG4gNTYwOlxcdFxcdHtcXG4gNTYxOlxcdFxcdFxcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfQU5PTixcXG4gNTYyOlxcdFxcdFxcdC5uYW1lID0gXFxcImFub25cXFwiLFxcbiA1NjM6XFx0XFx0fSxcXG4gNTY0OlxcdFxcdHtcXG4gNTY1OlxcdFxcdFxcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfQUNUSVZFLFxcbiA1NjY6XFx0XFx0XFx0Lm5hbWUgPSBcXFwiYWN0aXZlXFxcIixcXG4gNTY3OlxcdFxcdH0sXFxuIDU2ODpcXHRcXHR7XFxuIDU2OTpcXHRcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHLFxcbiA1NzA6XFx0XFx0XFx0Lm5hbWUgPSBcXFwibWVtY2dcXFwiLFxcbiA1NzE6XFx0XFx0fSxcXG4gNTcyOlxcdFxcdHtcXG4gNTczOlxcdFxcdFxcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfWU9VTkcsXFxuIDU3NDpcXHRcXHRcXHQubmFtZSA9IFxcXCJ5b3VuZ1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMwOjU3LjQxNjA3ODg3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyODIzNDA0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGRhbW9zX25ld19maWx0ZXJgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBkYW1vc19uZXdfZmlsdGVyYCBmdW5jdGlvbi4gTG9va3MgbGlrZSBpdCdzIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IGZpbHRlcmluZyBtZWNoYW5pc20gaXMgYmVpbmcgaW1wbGVtZW50ZWQuIFdoYXQncyB0aGUgY29yZSBsb2dpYyBoZXJlPyBJJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgaG93IG5ldyByZWdpb25zIGFyZSBiZWluZyBpZGVudGlmaWVkIG9yIGNsYXNzaWZpZWQgYW5kIGhvdyB0aGUgZmlsdGVyaW5nIGlzIGFwcGxpZWQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBEQU1PTiBmcmFtZXdvcmsgaXMgb3JjaGVzdHJhdGluZyB0aGlzIHRvIHBvdGVudGlhbGx5IHJlZHVjZSBvdmVyaGVhZC4gV2hhdCBwYXJhbWV0ZXJzIGFyZSBnb2luZyBpbnRvIGBkYW1vc19uZXdfZmlsdGVyYD8gQW5kLCB3aGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBmdW5jdGlvbj8gSSBiZXQgaXQgZGVhbHMgd2l0aCBhbGxvY2F0aW9uIGFuZCBzZXR0aW5nIHVwIHNvbWUgc29ydCBvZiBmaWx0ZXIgZm9yIHRyYWNraW5nIG1lbW9yeSBhY2Nlc3MuIEZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlIEkgd2FudCB0byB1bmRlcnN0YW5kOlxuKiAgIEhvdyB0aGUgZmlsdGVyIGludGVyYWN0cyB3aXRoIHRoZSBhZGRyZXNzIHNwYWNlLlxuKiAgIFRoZSBjb21wdXRhdGlvbmFsIGNvbXBsZXhpdHkgb2YgZmlsdGVyIG9wZXJhdGlvbnMuXG4qICAgSG93IHdlbGwgdGhlIGZpbHRlciBwbGF5cyB3aXRoIHRoZSBzeXN0ZW0uXG4qICAgUG90ZW50aWFsIGJvdHRsZW5lY2tzLlxuKiAgIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZSBuZXcgZmlsdGVyIGlzIHVzaW5nLlxuXG5MZXQncyBnZXQgY3JhY2tpbmcsIGxpbmUgYnkgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMxOjAyLjY5ODQyMjUwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzMDpcXHRcXHR9XFxuIDYzMTpcXHRcXHRyZXR1cm4gMDtcXG4gNjMyOlxcdH1cXG4gNjMzOlxcdFxcbiA2MzQ6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXFxuIDYzNTpcXHRcXHRcXHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxcbiA2MzY6XFx0e1xcbiA2Mzc6XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbiA2Mzg6XFx0XFxuIDYzOTpcXHRcXHRmaWx0ZXIgPSBrbWFsbG9jX29iaigqZmlsdGVyKTtcXG4gNjQwOlxcdFxcdGlmICghZmlsdGVyKVxcbiA2NDE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY0MjpcXHRcXHRmaWx0ZXItXFx1MDAzZXR5cGUgPSB0eXBlO1xcbiA2NDM6XFx0XFx0ZmlsdGVyLVxcdTAwM2VtYXRjaGluZyA9IG1hdGNoaW5nO1xcbiA2NDQ6XFx0XFx0ZmlsdGVyLVxcdTAwM2VhbGxvdyA9IGFsbG93O1xcbiA2NDU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmZpbHRlci1cXHUwMDNlbGlzdCk7XFxuIDY0NjpcXHRcXHRyZXR1cm4gZmlsdGVyO1xcbiA2NDc6XFx0fVxcbiA2NDg6XFx0XFxuIDY0OTpcXHQvKipcXG4gNjUwOlxcdCAqIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKCkgLSBSZXR1cm4gaWYgdGhlIGZpbHRlciBpcyBvcHMtaGFuZGxlZCBvbmUuXFxuIDY1MTpcXHQgKiBAdHlwZTpcXHR0eXBlIG9mIHRoZSBmaWx0ZXIuXFxuIDY1MjpcXHQgKlxcbiA2NTM6XFx0ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBmaWx0ZXIgb2YgQHR5cGUgbmVlZHMgdG8gYmUgaGFuZGxlZCBieSBvcHMgbGF5ZXIsIGZhbHNlXFxuIDY1NDpcXHQgKiBvdGhlcndpc2UuXFxuIDY1NTpcXHQgKi9cXG4gNjU2OlxcdGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxcbiA2NTc6XFx0e1xcbiA2NTg6XFx0XFx0c3dpdGNoICh0eXBlKSB7XFxuIDY1OTpcXHRcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMxOjAyLjY5ODYwODgwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDc5Nzg5MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnNgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnNgLiBJIGtub3cgd2hhdCBEQU1PTiBpcywgYW5kIEknbSBmYW1pbGlhciB3aXRoIHN5c2ZzLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgaW52b2x2ZWQgaW4gYWRkaW5nIGZpbHRlcmluZyBtZWNoYW5pc21zIG9yIHBhcmFtZXRlcnMgdG8gREFNT04gdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBTcGVjaWZpY2FsbHksIEkgaW1hZ2luZSBpdCdzIGFib3V0IHNldHRpbmcgdXAgdGhlIHNjaGVtZXMgZm9yIG1vbml0b3JpbmcuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGRlZmluaW5nIHdoYXQgbWVtb3J5IHJlZ2lvbnMgb3IgdHlwZXMgREFNT04gc2hvdWxkIGZvY3VzIG9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0J3MgZG9pbmcgaW4gZGV0YWlsLCBsaWtlOiBXaGF0IGtpbmQgb2YgZmlsdGVycyBpcyBpdCBhZGRpbmc/IEFyZSB0aGV5IGJhc2VkIG9uIGFkZHJlc3MgcmFuZ2VzLCBtZW1vcnkgdHlwZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBIb3cgaXMgaXQgaGFuZGxpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZD8gSXMgdGhlcmUgZXJyb3IgY2hlY2tpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0byBjb25zaWRlciB3aGVuIGRlYWxpbmcgd2l0aCBzeXNmcyBhbmQgREFNT04ncyBpbnRlcm5hbCBzdGF0ZT8gTGV0J3MgZ2V0IHRvIHdvcmsgYW5kIGZpbmQgdGhlIHNvdXJjZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzE6MDYuMTc4NDAwOTEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgxMCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgxMDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnMgKnN5c2ZzX2ZpbHRlcnMpXFxuMjgxMTpcXHR7XFxuMjgxMjpcXHRcXHRpbnQgaTtcXG4yODEzOlxcdFxcbjI4MTQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN5c2ZzX2ZpbHRlcnMtXFx1MDAzZW5yOyBpKyspIHtcXG4yODE1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpzeXNmc19maWx0ZXIgPVxcbjI4MTY6XFx0XFx0XFx0XFx0c3lzZnNfZmlsdGVycy1cXHUwMDNlZmlsdGVyc19hcnJbaV07XFxuMjgxNzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIgPVxcbjI4MTg6XFx0XFx0XFx0XFx0ZGFtb3NfbmV3X2ZpbHRlcihzeXNmc19maWx0ZXItXFx1MDAzZXR5cGUsXFxuMjgxOTpcXHRcXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZW1hdGNoaW5nLFxcbjI4MjA6XFx0XFx0XFx0XFx0XFx0XFx0c3lzZnNfZmlsdGVyLVxcdTAwM2VhbGxvdyk7XFxuMjgyMTpcXHRcXHRcXHRpbnQgZXJyO1xcbjI4MjI6XFx0XFxuMjgyMzpcXHRcXHRcXHRpZiAoIWZpbHRlcilcXG4yODI0OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjI4MjU6XFx0XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRykge1xcbjI4MjY6XFx0XFx0XFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChcXG4yODI3OlxcdFxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlbWVtY2dfcGF0aCxcXG4yODI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZmaWx0ZXItXFx1MDAzZW1lbWNnX2lkKTtcXG4yODI5OlxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4yODMwOlxcdFxcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XFxuMjgzMTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI4MzI6XFx0XFx0XFx0XFx0fVxcbjI4MzM6XFx0XFx0XFx0fSBlbHNlIGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfQUREUikge1xcbjI4MzQ6XFx0XFx0XFx0XFx0aWYgKHN5c2ZzX2ZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZS5lbmQgXFx1MDAzY1xcbjI4MzU6XFx0XFx0XFx0XFx0XFx0XFx0c3lzZnNfZmlsdGVyLVxcdTAwM2VhZGRyX3JhbmdlLnN0YXJ0KSB7XFxuMjgzNjpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbjI4Mzc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjgzODpcXHRcXHRcXHRcXHR9XFxuMjgzOTpcXHRcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZWFkZHJfcmFuZ2UgPSBzeXNmc19maWx0ZXItXFx1MDAzZWFkZHJfcmFuZ2U7XFxuMjg0MDpcXHRcXHRcXHR9IGVsc2UgaWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcXG4yODQxOlxcdFxcdFxcdFxcdGZpbHRlci1cXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNldGFyZ2V0X2lkeDtcXG4yODQyOlxcdFxcdFxcdH0gZWxzZSBpZiAoZmlsdGVyLVxcdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcXG4yODQzOlxcdFxcdFxcdFxcdGlmIChzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21pbiBcXHUwMDNlXFxuMjg0NDpcXHRcXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21heCkge1xcbjI4NDU6XFx0XFx0XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcXG4yODQ2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI4NDc6XFx0XFx0XFx0XFx0fVxcbjI4NDg6XFx0XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2Vzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21pbjtcXG4yODQ5OlxcdFxcdFxcdFxcdGZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXg7XFxuMjg1MDpcXHRcXHRcXHR9IGVsc2UgaWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcXG4yODUxOlxcdFxcdFxcdFxcdGZpbHRlci1cXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9taW47XFxuMjg1MjpcXHRcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXJhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4O1xcbjI4NTM6XFx0XFx0XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlcmFuZ2VfbWluIFxcdTAwM2UgZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXgpIHtcXG4yODU0OlxcdFxcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XFxuMjg1NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODU2OlxcdFxcdFxcdFxcdH1cXG4yODU3OlxcdFxcdFxcdH1cXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XFxuMjg2MDpcXHRcXHR9XFxuMjg2MTpcXHRcXHRyZXR1cm4gMDtcXG4yODYyOlxcdH1cXG4yODYzOlxcdFxcbjI4NjQ6XFx0c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMxOjA2LjE3ODU2MjIyMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTIyMjA4MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgRGF0YSB3aXRoICdkYW1vbl9wcm9iZV9oaXRzX212c3VtJyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGludmVzdGlnYXRlIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYC4gVGhpcyB2YXJpYWJsZSBsaWtlbHkgaG9sZHMgc29tZSBjcml0aWNhbCBkYXRhIHJlbGF0ZWQgdG8gRGFtb24sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyB0byBzZWUgd2hlcmUgaXQncyB1c2VkIGFuZCBob3cgaXQncyBkZWZpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUgbmFtZS4gTGV0J3MgZmlyZSB1cCBhIGBncmVwYCBjb21tYW5kIHRvIGxvb2sgZm9yIGFueSBpbnN0YW5jZXMgb2YgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gIGluIHRoZSBjb2RlYmFzZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgaXRzIHVzYWdlIGFuZCBwdXJwb3NlLiBJIG5lZWQgdG8gZ2V0IGEgbGlzdCBvZiB0aGUgb2NjdXJyZW5jZXMgc28gSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMxOjA4LjEwMDc3MzAwMloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3ODUwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcHJvYmVfaGl0c19tdnN1bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0OC1cXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0zNTAtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ3Nz11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00ODctXFx0XFx0ZWxzZSBpZiAobXYpXFxubW0vZGFtb24vY29yZS5jOjQ4ODpcXHRcXHRcXHRzdW0gKz0gZGFtb25fcHJvYmVfaGl0c19tdnN1bShpKyssIHIsIGN0eCkgKlxcbm1tL2RhbW9uL2NvcmUuYy00ODktXFx0XFx0XFx0XFx0cHJvYmUtXFx1MDAzZXdlaWdodDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEzLVxcdFxcdHN5c19wcm9iZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XFx0XFx0XFx0XFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTUtXFx0XFx0aWYgKCFzeXNfcHJvYmUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzE6MDguMTUxNTYzODYxWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NTAwODQ3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgREFNT04gcHJvYmUgaGl0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gIGFuZCBgZGFtb25fcHJvYmVfaGl0c193c3VtYCBmdW5jdGlvbnMuIEl0IHNlZW1zIHRoZXkncmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0IG9mIERBTU9OLCBhbmQgSSBzdXNwZWN0IHRoZXkncmUgaW52b2x2ZWQgaW4gaG93IHRoZSBtb25pdG9yIGFnZ3JlZ2F0ZXMgYW5kIHdlaWdocyBkYXRhIGZyb20gcHJvYmVzLiBJJ20gZ3Vlc3NpbmcgdGhleSdyZSBib3RoIGRlZmluZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLCBzbyBJJ2xsIGdvIHN0cmFpZ2h0IHRvIHRoYXQgZmlsZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdpbGwgbGlrZWx5IHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29yZSBsb2dpYyBiZWhpbmQgREFNT04ncyBvcGVyYXRpb24sIGFuZCBob3BlZnVsbHkgd2lsbCBwcm92aWRlIHNvbWUgaW5zaWdodHMgaW50byBob3cgdGhpcyBtb2R1bGUga2VlcHMgdHJhY2sgb2YgYW5kIHVzZXMgcHJvYmUgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMToxMS44MDE2NTA4MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDU6XFx0XFx0cmV0dXJuIGRhbW9uX212c3VtKHItXFx1MDAzZW5yX2FjY2Vzc2VzLCByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzLFxcbiAzNDY6XFx0XFx0XFx0XFx0bGVmdF93aW5kb3dfYnApO1xcbiAzNDc6XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHR1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gMzUwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gMzUxOlxcdHtcXG4gMzUyOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsLCBhZ2dyX2ludGVydmFsO1xcbiAzNTM6XFx0XFx0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XFxuIDM1NDpcXHRcXG4gMzU1OlxcdFxcdHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxO1xcbiAzNTY6XFx0XFx0YWdncl9pbnRlcnZhbCA9ICBjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPyA6IDE7XFxuIDM1NzpcXHRcXHR3aW5kb3dfbGVuID0gYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbDtcXG4gMzU4OlxcdFxcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXFxuIDM1OTpcXHRcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzKSlcXG4gMzYwOlxcdFxcdFxcdGxlZnRfd2luZG93ID0gMDtcXG4gMzYxOlxcdFxcdGVsc2VcXG4gMzYyOlxcdFxcdFxcdGxlZnRfd2luZG93ID0gY3R4LVxcdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyAtXFxuIDM2MzpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzO1xcbiAzNjQ6XFx0XFx0bGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTtcXG4gMzY1OlxcdFxcbiAzNjY6XFx0XFx0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxcbiAzNjc6XFx0XFx0XFx0cmV0dXJuIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdO1xcbiAzNjg6XFx0XFxuIDM2OTpcXHRcXHRyZXR1cm4gZGFtb25fbXZzdW0oci1cXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxcbiAzNzA6XFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF0sIGxlZnRfd2luZG93X2JwKTtcXG4gMzcxOlxcdH1cXG4gMzcyOlxcdFxcbiAzNzM6XFx0I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG4gMzc0OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiAzNzU6XFx0e1xcbiAzNzY6XFx0XFx0V0FSTl9PTkNFKHN0YXJ0IFxcdTAwM2U9IGVuZCwgXFxcInN0YXJ0ICVsdSBcXHUwMDNlPSBlbmQgJWx1XFxcXG5cXFwiLCBzdGFydCwgZW5kKTtcXG4gMzc3OlxcdH1cXG4gMzc4OlxcdCNlbHNlXFxuIDM3OTpcXHRzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gMzgwOlxcdHtcXG4gMzgxOlxcdH1cXG4gMzgyOlxcdCNlbmRpZlxcbiAzODM6XFx0XFxuIDM4NDpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMToxMS44MDE4Mzk3NjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAzOTU0NDU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgIGluIHRoZSBEQU1PTiBDb3JlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBEQU1PTiBjb3JlIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgbW0vZGFtb24vY29yZS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgb3V0IHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgLiBJJ20gYXNzdW1pbmcgaXQncyBwcm9iYWJseSBhbiBhcmd1bWVudCByZWxhdGVkIHRvIGZpbHRlcmluZyBjb21taXRzLCBsaWtlbHkgdXNlZCB3aGVuIERBTU9OIGlzIHRyeWluZyB0byBkZXRlcm1pbmUgd2hpY2ggbWVtb3J5IHJlZ2lvbnMgdG8gYWN0IHVwb24uIEl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIGFzcGVjdCBvZiBjb21taXQgYmVoYXZpb3IsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCB3b3JrcyBiZWNhdXNlIGl0J3Mga2V5IHRvIGVpdGhlciBwZXJmb3JtYW5jZSB0dW5pbmcgb3IgZGVidWdnaW5nIGEgYmVoYXZpb3IgaW4gYSBkYW1vbi1yZWxhdGVkIGNvbnRleHQuIElzIGl0IGEgYml0bWFzaz8gQSBmbGFnPyBEb2VzIGl0IHJlbGF0ZSB0byBhIGNvbW1pdCB0aHJlc2hvbGQ/IEEgc3BlY2lmaWMgdHlwZSBvZiBjb21taXQgb3BlcmF0aW9uPyBJJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgaXRzIHB1cnBvc2UgYW5kIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIERBTU9OIGVjb3N5c3RlbS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWhpbmQgdGhlIHNjZW5lcyByZWdhcmRpbmcgaG93IHRoaXMgcGFyYW1ldGVyIGd1aWRlcyB0aGUgY29tbWl0IGxvZ2ljIHNvIEkgY2FuIHNvbHZlIHRoZSBpc3N1ZSBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzE6MTUuODQxMzg2OTEyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMyMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMyMDpcXHRzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcXG4xMzIxOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxcbjEzMjI6XFx0e1xcbjEzMjM6XFx0XFx0c3dpdGNoIChkc3QtXFx1MDAzZXR5cGUpIHtcXG4xMzI0OlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XFxuMTMyNTpcXHRcXHRcXHRkc3QtXFx1MDAzZW1lbWNnX2lkID0gc3JjLVxcdTAwM2VtZW1jZ19pZDtcXG4xMzI2OlxcdFxcdFxcdGJyZWFrO1xcbjEzMjc6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxcbjEzMjg6XFx0XFx0XFx0ZHN0LVxcdTAwM2VhZGRyX3JhbmdlID0gc3JjLVxcdTAwM2VhZGRyX3JhbmdlO1xcbjEzMjk6XFx0XFx0XFx0YnJlYWs7XFxuMTMzMDpcXHRcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcXG4xMzMxOlxcdFxcdFxcdGRzdC1cXHUwMDNldGFyZ2V0X2lkeCA9IHNyYy1cXHUwMDNldGFyZ2V0X2lkeDtcXG4xMzMyOlxcdFxcdFxcdGJyZWFrO1xcbjEzMzM6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFOlxcbjEzMzQ6XFx0XFx0XFx0ZHN0LVxcdTAwM2Vzel9yYW5nZSA9IHNyYy1cXHUwMDNlc3pfcmFuZ2U7XFxuMTMzNTpcXHRcXHRcXHRicmVhaztcXG4xMzM2OlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxcbjEzMzc6XFx0XFx0XFx0ZHN0LVxcdTAwM2VyYW5nZV9taW4gPSBzcmMtXFx1MDAzZXJhbmdlX21pbjtcXG4xMzM4OlxcdFxcdFxcdGRzdC1cXHUwMDNlcmFuZ2VfbWF4ID0gc3JjLVxcdTAwM2VyYW5nZV9tYXg7XFxuMTMzOTpcXHRcXHRcXHRicmVhaztcXG4xMzQwOlxcdFxcdGRlZmF1bHQ6XFxuMTM0MTpcXHRcXHRcXHRicmVhaztcXG4xMzQyOlxcdFxcdH1cXG4xMzQzOlxcdH1cXG4xMzQ0OlxcdFxcbjEzNDU6XFx0c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcihcXG4xMzQ2OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxcbjEzNDc6XFx0e1xcbjEzNDg6XFx0XFx0ZHN0LVxcdTAwM2V0eXBlID0gc3JjLVxcdTAwM2V0eXBlO1xcbjEzNDk6XFx0XFx0ZHN0LVxcdTAwM2VtYXRjaGluZyA9IHNyYy1cXHUwMDNlbWF0Y2hpbmc7XFxuMTM1MDpcXHRcXHRkc3QtXFx1MDAzZWFsbG93ID0gc3JjLVxcdTAwM2VhbGxvdztcXG4xMzUxOlxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKGRzdCwgc3JjKTtcXG4xMzUyOlxcdH1cXG4xMzUzOlxcdFxcbjEzNTQ6XFx0c3RhdGljIGludCBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzE6MTUuODQxODk3NTAzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NDQ1MTg2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBJbnRyb2R1Y2VkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIGJlZW4gZXhhbWluaW5nIHRoZSBgbWluX3Nob3dgIGFuZCBgbWF4X3Nob3dgIG9wZXJhdGlvbnMgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBhdmVudWVzIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIG90aGVyIG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0aWVzLlxuXG5GaXJzdCwgSSBleGFtaW5lZCBob3cgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIHN0cnVjdHVyZS4gTXkgcmV2aWV3IHJldmVhbHM6XG5cbiogICBUaGUgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMga2V5LiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBhbGwgZmllbGRzLCBpbmNsdWRpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgLCBhcmUgemVyby1pbml0aWFsaXplZCBmcm9tIHRoZSBzdGFydC4gVGhhdCdzIGEgZ29vZCBmaXJzdCBzdGVwLlxuKiAgIFdoZW4gdmFsdWVzIGFyZSB3cml0dGVuIHZpYSBzeXNmcyAoYG1pbl9zdG9yZWAsIGBtYXhfc3RvcmVgKSwgYGtzdHJ0b3VsYCBjb3JyZWN0bHkgcGFyc2VzIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHN0b3JlcyB0aGUgcGFyc2VkIHVuc2lnbmVkIGxvbmcgdmFsdWVzIGRpcmVjdGx5IGludG8gYFx1MDAyNmZpbHRlci1cdTAwM2VyYW5nZV9taW5gIGFuZCBgXHUwMDI2ZmlsdGVyLVx1MDAzZXJhbmdlX21heGAuXG4qICAgV2hlbiByZWFkIHZpYSBzeXNmcyAoYG1pbl9zaG93YCwgYG1heF9zaG93YCksIGBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZmlsdGVyLVx1MDAzZXJhbmdlX21pbilgIGlzIHVzZWQgdG8gb3V0cHV0IHRoZSB2YWx1ZXMuIFRoaXMgaXMgZm9ybWF0dGVkIG91dHB1dCBvZiBhIGRlZmluZWQgdmFsdWUsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3VsZCBiZSBwcmVzZW50ZWQuXG4qICAgV2hlbiBhcHBseWluZyB0aGUgZmlsdGVyLCB0aGUgcmFuZ2UgaXMgY29waWVkIGNvcnJlY3RseS5cblxuSSd2ZSBkb3VibGUtY2hlY2tlZCBhbGwgdGhlIHJlbGV2YW50IGFzcGVjdHMgdGhvcm91Z2hseTpcblxuMS4gICoqS2VybmVsLXRvLVVzZXJzcGFjZSBEYXRhIFRyYW5zZmVyOioqIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgb3IgZmllbGRzIGFyZSBsZWFrZWQgdG8gdXNlcnNwYWNlIGJlY2F1c2UgYG1pbl9zaG93YCBhbmQgYG1heF9zaG93YCB1c2UgZm9ybWF0dGVkIG91dHB1dCBvZiBpbml0aWFsaXplZCB2YWx1ZXMuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBObyBjb25kaXRpb25hbCBicmFuY2hpbmcgb3IgbG9naWMgaXMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gYGt6YWxsb2NgIGlzIHVzZWQsIGFuZCBmaWx0ZXIgZmllbGQgYXNzaWdubWVudCBpcyBleHBsaWNpdC5cbjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuXG40LiAgKipCb3VuZHMgQ2hlY2tzL0xlbmd0aDoqKiBObyBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgdGhlIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXMuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoICoqZG9lcyBub3QqKiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyB0aGF0IG1pZ2h0IGFyaXNlLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGNoZWNrZXJzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuXG5cbk5vdywgbGV0J3MgY29udHJhc3QgS0FTQU4gYW5kIEtNU0FOIHRvIGZvcm11bGF0ZSBhIGNsZWFyIEtNU0FOIHJlYXNvbmluZzpcblxuKiAgICoqS0FTQU4gXHUwMDI2IFN0YW5kYXJkIENoZWNrZXJzOioqIERldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgYW5kIHNpbWlsYXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBUaGVzZSBhcmUgbm90IGluIHBsYXkgaGVyZS5cbiogICAqKktNU0FOOioqIFNwZWNpZmljYWxseSBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIFRoaXMgaXMgd2hhdCBJIHdhcyBpbnZlc3RpZ2F0aW5nLlxuKiAgICoqVGhlIFBhdGNoOioqIEFkZHMgYSBuZXcgREFNT04gZmlsdGVyIHR5cGUgKGBwcm9iZV9oaXRzX3dzdW1gKSBhbmQgdXBkYXRlcyBzeXNmcyBtaW4vbWF4IGhhbmRsZXJzLiBJJ3ZlIHNjcnV0aW5pemVkIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLlxuKiAgICoqQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246KiogYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAgdG8gaW5pdGlhbGl6ZSBhbGwgZmllbGRzIGFuZCBgZGFtb3NfbmV3X2ZpbHRlcmAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCwgZW5zdXJpbmcgZGVmaW5lZCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBwbGF5LlxuKiAgICoqU3lzZnMgT3V0cHV0OioqICBTeXNmcyBzaG93IGZ1bmN0aW9ucyBwcm92aWRlIGZvcm1hdHRlZCBpbnRlZ2VyIG91dHB1dCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuKiAgICoqQ29uY2x1c2lvbjoqKiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZC4gVGhlIGNvZGUgaXMgc2FmZS5cblxuSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTE3LCJPdXRwdXRUb2tlbnMiOjI1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMxOjMxLjI4NzA4Nzg4MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZSAoYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWApIGFuZCByZWZhY3RvcnMgc3lzZnMgZmlsdGVyIG1pbi9tYXggaGFuZGxpbmcgdG8gc3VwcG9ydCBwcm9iZSBoaXQgd2VpZ2h0ZWQgc3VtIHJhbmdlcyBhbG9uZ3NpZGUgaHVnZXBhZ2Ugc2l6ZXMuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgc3lzZnMgZmlsdGVyIHN0cnVjdHVyZXMgKGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBXaGVuIGNvbnZlcnRpbmcgdG8ga2VybmVsIGZpbHRlcnMgKGBkYW1vc19maWx0ZXJgKSwgdGhlIHJhbmdlIGZpZWxkcyAoYHJhbmdlX21pbmAsIGByYW5nZV9tYXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIHN5c2ZzIGZpbHRlcnMuIFN5c2ZzIHNob3cgYXR0cmlidXRlcyB1c2UgYHN5c2ZzX2VtaXQoKWAgdG8gb3V0cHV0IGZvcm1hdHRlZCB1bnNpZ25lZCBsb25nIGludGVnZXJzLCBwcmVjbHVkaW5nIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZC5cXG4tIEtBU0FOIC8gc3RhbmRhcmQgc2FuaXRpemVycyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIHByb2JlIGFycmF5cywgb3IgYWxsb2NhdGlvbiBpc3N1ZXMuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCkgYW5kIHJlZmFjdG9ycyBzeXNmcyBmaWx0ZXIgbWluL21heCBoYW5kbGluZyB0byBzdXBwb3J0IHByb2JlIGhpdCB3ZWlnaHRlZCBzdW0gcmFuZ2VzIGFsb25nc2lkZSBodWdlcGFnZSBzaXplcy5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBzeXNmcyBmaWx0ZXIgc3RydWN0dXJlcyAoYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgKSBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFdoZW4gY29udmVydGluZyB0byBrZXJuZWwgZmlsdGVycyAoYGRhbW9zX2ZpbHRlcmApLCB0aGUgcmFuZ2UgZmllbGRzIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gc3lzZnMgZmlsdGVycy4gU3lzZnMgc2hvdyBhdHRyaWJ1dGVzIHVzZSBgc3lzZnNfZW1pdCgpYCB0byBvdXRwdXQgZm9ybWF0dGVkIHVuc2lnbmVkIGxvbmcgaW50ZWdlcnMsIHByZWNsdWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkLlxcbi0gS0FTQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgYW55IGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gcHJvYmUgYXJyYXlzLCBvciBhbGxvY2F0aW9uIGlzc3Vlcy5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowcmvf6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 01:27:24 +0000 UTC FinishedAt: 2026-09-11 01:31:32 +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": "1f78f28a2945f9e856b4ea8428ac41a6788e4b67", "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": "1f78f28a2945f9e856b4ea8428ac41a6788e4b67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "4f728551-3469-45f8-aa0a-95656ea8b126" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_probe_hits_wsum", "damos_filter_match", "damos_commit_filter_arg", "damon_sysfs_add_scheme_filters", "damon_sysfs_add_schemes", "damon_merge_score", "damon_pa_apply_probes", "damon_va_apply_probes" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gKSBhbmQgcmVmYWN0b3JzIHN5c2ZzIGZpbHRlciBtaW4vbWF4IGhhbmRsaW5nIHRvIHN1cHBvcnQgcHJvYmUgaGl0IHdlaWdodGVkIHN1bSByYW5nZXMgYWxvbmdzaWRlIGh1Z2VwYWdlIHNpemVzLlxuXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBzeXNmcyBmaWx0ZXIgc3RydWN0dXJlcyAoYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgKSBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFdoZW4gY29udmVydGluZyB0byBrZXJuZWwgZmlsdGVycyAoYGRhbW9zX2ZpbHRlcmApLCB0aGUgcmFuZ2UgZmllbGRzIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gc3lzZnMgZmlsdGVycy4gU3lzZnMgc2hvdyBhdHRyaWJ1dGVzIHVzZSBgc3lzZnNfZW1pdCgpYCB0byBvdXRwdXQgZm9ybWF0dGVkIHVuc2lnbmVkIGxvbmcgaW50ZWdlcnMsIHByZWNsdWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkLlxuLSBLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnMgYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBhbnkgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiBwcm9iZSBhcnJheXMsIG9yIGFsbG9jYXRpb24gaXNzdWVzLlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBtb25pdG9yaW5nIHJlZ2lvbnMgYmFzZWQgb24gdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzLiBJdCB1cGRhdGVzIGNvcmUgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBjb21taXQgZmlsdGVyIGFyZ3VtZW50IGhhbmRsaW5nLCBtb3Zpbmcgc3VtIHByb2JlIGhpdCBjYWxjdWxhdGlvbiwgYW5kIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWUgZmlsdGVyIGludGVyZmFjZS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBleHBvc2VkIHZpYSBzeXNmcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Nzc0NTQyZDhjZDg0NmI1MjhkZTY3ODE1YmU2OGM5MDAwYjI0MDVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDE6Mjk6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTU1MSw2ICYjNDM7NTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlXG4gZmlsdGVyLiAgUmVmZXIgdG8gOnJlZjpgdGhlIGRlc2lnbiBkb2MgXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnNcdTAwM2VgIGZvclxuIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLlxuIFxuJiM0MztGb3IgYGBwcm9iZV9oaXRzX3dzdW1gYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gcHJvYmVcbiYjNDM7aGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcyxcbiYjNDM7cmVzcGVjdGl2ZWx5LlxuJiM0MztcbiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnlcbiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG9cbiBgYG1lbWNnX3BhdGhgYCBmaWxlLiAgRm9yIGBgYWRkcmBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgc3RhcnQgYW5kIGVuZFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtODIyLDYgJiM0Mzs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gYWRkcmVzcyByYW5nZS5cbiAgICAgLSB0YXJnZXRcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LlxuJiM0MzsgICAgLSBwcm9iZV9oaXRzX3dzdW1cbiYjNDM7ICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlXG4mIzQzOyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSBcdTAwM2NkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nXHUwMDNlYCB2YWx1ZS5cbiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LlxuICAgICAtIGFub25cbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IG5vdCBzdG9yZWQgaW4gZmlsZXMuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0zOTksMTQgJiM0MzszOTksMTUgQEAgc3RydWN0IGRhbW9zX3N0YXQge1xuICAqIEBEQU1PU19GSUxURVJfVFlQRV9VTk1BUFBFRDpcdFVubWFwcGVkIHBhZ2VzLlxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9BRERSOlx0QWRkcmVzcyByYW5nZS5cbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlx0RGF0YSBBY2Nlc3MgTW9uaXRvcmluZyB0YXJnZXQuXG4mIzQzOyAqIEBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XHRwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS5cbiAgKiBATlJfREFNT1NfRklMVEVSX1RZUEVTOlx0TnVtYmVyIG9mIGZpbHRlciB0eXBlcy5cbiAgKlxuLSAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUXG4tICogYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZVxuLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LFxuLSAqIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkXG4tICogYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWRcbi0gKiBhcyAmIzM5O3RyaWVkJiMzOTsuXG4mIzQzOyAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGFuZFxuJiM0MzsgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0XG4mIzQzOyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZFxuJiM0MzsgKiBhcyAmIzM5O3RyaWVkJiMzOTsuICBJbiBjb250cmFzdCwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmRcbiYjNDM7ICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlXG4mIzQzOyAqIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQgYXMgJiMzOTt0cmllZCYjMzk7LlxuICAqXG4gICogU3VwcG9ydCBmb3IgdGhlIG9wZXJhdGlvbnMtaGFuZGxlZCBmaWx0ZXJzIGRlcGVuZHMgb24gdGhlIHJ1bm5pbmdcbiAgKiBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy5cbkBAIC00MjAsNiAmIzQzOzQyMSw3IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuIFx0REFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsXG4gXHREQU1PU19GSUxURVJfVFlQRV9BRERSLFxuIFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuJiM0MztcdERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcbiBcdE5SX0RBTU9TX0ZJTFRFUl9UWVBFUyxcbiB9O1xuIFxuQEAgLTQzNCw2ICYjNDM7NDM2LDggQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XG4gICpcdFx0XHUwMDI2ZGFtb25fY3R4LVx1MDAzZWFkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXNcbiAgKlx0XHREQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuXG4gICogQHN6X3JhbmdlOlx0U2l6ZSByYW5nZSBpZiBAdHlwZSBpcyBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFLlxuJiM0MzsgKiBAcmFuZ2VfbWluOlx0TWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXG4mIzQzOyAqIEByYW5nZV9tYXg6XHRNYXhpbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDUwLDYgJiM0Mzs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7XG4gXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4gXHRcdGludCB0YXJnZXRfaWR4O1xuIFx0XHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIHJhbmdlX21heDtcbiYjNDM7XHRcdH07XG4gXHR9O1xuIC8qIHByaXZhdGU6ICovXG4gXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuQEAgLTEwNjUsNyAmIzQzOzEwNzMsNyBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4gXG4gaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC00NjksMTEgJiM0Mzs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4gICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbiAgKiBAbGFzdDpcdGlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuXG4mIzQzOyAqIEBtdjpcdFx0dXNlIG1vdmluZyBzdW0uXG4gICogQGN0eDpcdGNvbnRleHQgb2YgXHUwMDI2ci5cbiAgKlxuICAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXG4gICovXG4tdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4mIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbkBAIC00ODMsNiAmIzQzOzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuIFx0XHRpZiAobGFzdClcbiBcdFx0XHRzdW0gJiM0Mzs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiYjNDM7XHRcdGVsc2UgaWYgKG12KVxuJiM0MztcdFx0XHRzdW0gJiM0Mzs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSYjNDM7JiM0MzssIHIsIGN0eCkgKlxuJiM0MztcdFx0XHRcdHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2Vwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdH1cbkBAIC02NTQsNiAmIzQzOzY1OCw3IEBAIGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuIFx0c3dpdGNoICh0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbiYjNDM7XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5AQCAtMTMyOCw2ICYjNDM7MTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcbiBcdFx0ZHN0LVx1MDAzZXN6X3JhbmdlID0gc3JjLVx1MDAzZXN6X3JhbmdlO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbiYjNDM7XHRcdGRzdC1cdTAwM2VyYW5nZV9taW4gPSBzcmMtXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0ZHN0LVx1MDAzZXJhbmdlX21heCA9IHNyYy1cdTAwM2VyYW5nZV9tYXg7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1MDYsNyAmIzQzOzI1MTUsNyBAQCBzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aTtcbiBcdGludCB0YXJnZXRfaWR4ID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHdzdW07XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbkBAIC0yNTQxLDYgJiM0MzsyNTUwLDExIEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLVx1MDAzZWFyLnN0YXJ0KTtcbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuJiM0MztcdFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcbiYjNDM7XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzYz0gd3N1bSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0d3N1bSBcdTAwM2M9IGZpbHRlci1cdTAwM2VyYW5nZV9tYXg7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0zNDQ5LDcgJiM0MzszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcbiB7XG4gXHRpZiAodXNlX3Byb2JlX2hpdHMpXG4tXHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcbiYjNDM7XHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7XG4gXHRpZiAobGFzdClcbiBcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcztcbiBcdHJldHVybiByLVx1MDAzZW5yX2FjY2Vzc2VzO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCBkN2M4MTgyOTQ0NWJhLi5iOGY0ZDI4MTY1ZGQ3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuJiM0MztcdFx0XHRcdFx0XHRcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiBtYXhfd3N1bTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbmluZGV4IGQ5YjgxZDdiNTkxMGUuLjNkZTRkODA0ZTA0OWYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTUzNCw3ICYjNDM7NTM0LDggQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xuIFx0Ym9vbCBhbGxvdztcbiBcdGNoYXIgKm1lbWNnX3BhdGg7XG4gXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xuLVx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4gXHRpbnQgdGFyZ2V0X2lkeDtcbiB9O1xuIFxuQEAgLTU4OCw2ICYjNDM7NTg5LDEwIEBAIGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XG4gXHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuIFx0XHQubmFtZSA9IFwmIzM0O3RhcmdldFwmIzM0OyxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3Byb2JlX2hpdHNfd3N1bVwmIzM0OyxcbiYjNDM7XHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc3OCw3ICYjNDM7NzgzLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuIFxuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuJiM0MztcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc4Niw3ICYjNDM7NzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4tXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluKTtcbiYjNDM7XHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtNzk3LDcgJiM0Mzs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtODA1LDcgJiM0Mzs4MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuJiM0MztcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xuIH1cbkBAIC0yODM1LDEyICYjNDM7Mjg0MCwyMCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbiBcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuIFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbi1cdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbiBcdTAwM2Vcbi1cdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCkge1xuJiM0MztcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbiYjNDM7XHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2VyYW5nZV9tYXgpIHtcbiYjNDM7XHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNKSB7XG4mIzQzO1x0XHRcdGZpbHRlci1cdTAwM2VyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuJiM0MztcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbiYjNDM7XHRcdFx0aWYgKGZpbHRlci1cdTAwM2VyYW5nZV9taW4gXHUwMDNlIGZpbHRlci1cdTAwM2VyYW5nZV9tYXgpIHtcbiBcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0ZmlsdGVyLVx1MDAzZXN6X3JhbmdlID0gc3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlO1xuIFx0XHR9XG4gXG4gXHRcdGRhbW9zX2FkZF9maWx0ZXIoc2NoZW1lLCBmaWx0ZXIpO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCA5YTM4ZGM4OWExNTZlLi40YWVjZjM0ZTM5YmUyIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTcwNCw3ICYjNDM7NzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpO1xuIFx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4gXHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG4tXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0XHRpZiAobW0pXG4gXHRcdFx0bW1wdXQobW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBtb25pdG9yaW5nIHJlZ2lvbnMgYmFzZWQgb24gdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzLiBJdCB1cGRhdGVzIGNvcmUgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBjb21taXQgZmlsdGVyIGFyZ3VtZW50IGhhbmRsaW5nLCBtb3Zpbmcgc3VtIHByb2JlIGhpdCBjYWxjdWxhdGlvbiwgYW5kIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWUgZmlsdGVyIGludGVyZmFjZS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBleHBvc2VkIHZpYSBzeXNmcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Nzc0NTQyZDhjZDg0NmI1MjhkZTY3ODE1YmU2OGM5MDAwYjI0MDVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDE6Mjk6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0CmluZGV4IDAyM2M2MzM0MDI0ZjguLmQzZTM3NDAwMzY3YmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0CkBAIC01NTEsNiAmIzQzOzU1MSwxMCBAQCBhbmQgYGBkYW1vbl90YXJnZXRfaWR4YGAuICBUbyBgYHR5cGVgYCBmaWxlLCB5b3UgY2FuIHdyaXRlIHRoZSB0eXBlIG9mIHRoZQogZmlsdGVyLiAgUmVmZXIgdG8gOnJlZjpgdGhlIGRlc2lnbiBkb2MgJmx0O2RhbW9uX2Rlc2lnbl9kYW1vc19maWx0ZXJzJmd0O2AgZm9yCiBhdmFpbGFibGUgdHlwZSBuYW1lcywgdGhlaXIgbWVhbmluZyBhbmQgb24gd2hhdCBsYXllciB0aG9zZSBhcmUgaGFuZGxlZC4KIAomIzQzO0ZvciBgYHByb2JlX2hpdHNfd3N1bWBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBwcm9iZQomIzQzO2hpdHMgd2VpZ2h0ZWQgc3VtIHZhbHVlIGZvciB0aGUgZmlsdGVyIHRvIGBgbWluYGAgYW5kIGBgbWF4YGAgZmlsZXMsCiYjNDM7cmVzcGVjdGl2ZWx5LgomIzQzOwogRm9yIGBgbWVtY2dgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1lbW9yeSBjZ3JvdXAgb2YgdGhlIGludGVyZXN0IGJ5CiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG8KIGBgbWVtY2dfcGF0aGBgIGZpbGUuICBGb3IgYGBhZGRyYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBzdGFydCBhbmQgZW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdApAQCAtODIyLDYgJiM0Mzs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLgogICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBiZWxvbmdpbmcgdG8gYSBnaXZlbiBhZGRyZXNzIHJhbmdlLgogICAgIC0gdGFyZ2V0CiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LgomIzQzOyAgICAtIHByb2JlX2hpdHNfd3N1bQomIzQzOyAgICAgICAgLSBNYXRjaGVzIHRvIG1vbml0b3JpbmcgcmVnaW9ucyBoYXZpbmcgYSBnaXZlbiByYW5nZSBvZiA6cmVmOmBwcm9iZQomIzQzOyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSAmbHQ7ZGFtb25fZGVzaWduX2F0dHJzX29ubHlfbW9uaXRvcmluZyZndDtgIHZhbHVlLgogLSBPcGVyYXRpb25zIGxheWVyIGhhbmRsZWQsIHN1cHBvcnRlZCBieSBvbmx5IGBgcGFkZHJgYCBvcGVyYXRpb25zIHNldC4KICAgICAtIGFub24KICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgY29udGFpbmluZyBkYXRhIHRoYXQgbm90IHN0b3JlZCBpbiBmaWxlcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaAppbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCkBAIC0zOTksMTQgJiM0MzszOTksMTUgQEAgc3RydWN0IGRhbW9zX3N0YXQgewogICogQERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVEOglVbm1hcHBlZCBwYWdlcy4KICAqIEBEQU1PU19GSUxURVJfVFlQRV9BRERSOglBZGRyZXNzIHJhbmdlLgogICogQERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDoJRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyB0YXJnZXQuCiYjNDM7ICogQERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToJcHJvYmVfaGl0cyB3ZWlnaHRlZCBzdW0gcmFuZ2UuCiAgKiBATlJfREFNT1NfRklMVEVSX1RZUEVTOglOdW1iZXIgb2YgZmlsdGVyIHR5cGVzLgogICoKLSAqIEFsbCB0eXBlcyBleGNlcHQgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVAotICogYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBhcyBhIHBhcnQgb2Ygc2NoZW1lCi0gKiBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZCBhcyAmIzM5O3RyaWVkJiMzOTsuICBJbiBjb250cmFzdCwKLSAqICZhbXA7REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZAotICogYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQKLSAqIGFzICYjMzk7dHJpZWQmIzM5Oy4KJiM0MzsgKiBBbGwgdHlwZXMgZXhjZXB0ICZhbXA7REFNT1NfRklMVEVSX1RZUEVfQUREUiwgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgYW5kCiYjNDM7ICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgJmFtcDtzdHJ1Y3QKJiM0MzsgKiBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWUgYWN0aW9uIHRyeWluZywgYW5kIHRoZXJlZm9yZSBhY2NvdW50ZWQKJiM0MzsgKiBhcyAmIzM5O3RyaWVkJiMzOTsuICBJbiBjb250cmFzdCwgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZAomIzQzOyAqICZhbXA7REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvcmUgbGF5ZXIgYmVmb3JlCiYjNDM7ICogdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZCBhcyAmIzM5O3RyaWVkJiMzOTsuCiAgKgogICogU3VwcG9ydCBmb3IgdGhlIG9wZXJhdGlvbnMtaGFuZGxlZCBmaWx0ZXJzIGRlcGVuZHMgb24gdGhlIHJ1bm5pbmcKICAqICZhbXA7c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuCkBAIC00MjAsNiAmIzQzOzQyMSw3IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgewogCURBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVELAogCURBTU9TX0ZJTFRFUl9UWVBFX0FERFIsCiAJREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULAomIzQzOwlEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sCiAJTlJfREFNT1NfRklMVEVSX1RZUEVTLAogfTsKIApAQCAtNDM0LDYgJiM0Mzs0MzYsOCBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHsKICAqCQkmYW1wO2RhbW9uX2N0eC0mZ3Q7YWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpcwogICoJCURBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC4KICAqIEBzel9yYW5nZToJU2l6ZSByYW5nZSBpZiBAdHlwZSBpcyBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFLgomIzQzOyAqIEByYW5nZV9taW46CU1pbmltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLgomIzQzOyAqIEByYW5nZV9tYXg6CU1heGltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLgogICoKICAqIEJlZm9yZSBhcHBseWluZyB0aGUgJmFtcDtkYW1vcy0mZ3Q7YWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2gKICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGUKQEAgLTQ1MCw2ICYjNDM7NDU0LDEwIEBAIHN0cnVjdCBkYW1vc19maWx0ZXIgewogCQlzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlOwogCQlpbnQgdGFyZ2V0X2lkeDsKIAkJc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluOwomIzQzOwkJCXVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4OwomIzQzOwkJfTsKIAl9OwogLyogcHJpdmF0ZTogKi8KIAkvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqLwpAQCAtMTA2NSw3ICYjNDM7MTA3Myw3IEBAIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCk7Ci11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKJiM0Mzt1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdiwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KTsKIAogaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ1Y2IzNjcwMTlhZS4uZDlkNTZmNGJlMWE5NyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtNDY5LDExICYjNDM7NDY5LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uCiAgKiBAcjoJCXJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi4KICAqIEBsYXN0OglpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLgomIzQzOyAqIEBtdjoJCXVzZSBtb3Zpbmcgc3VtLgogICogQGN0eDoJY29udGV4dCBvZiAmYW1wO3IuCiAgKgogICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi4KICAqLwotdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsCiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIHsKIAlzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlOwpAQCAtNDgzLDYgJiM0Mzs0ODQsOSBAQCB1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKIAlkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7CiAJCWlmIChsYXN0KQogCQkJc3VtICYjNDM7PSByLSZndDtsYXN0X3Byb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtJmd0O3dlaWdodDsKJiM0MzsJCWVsc2UgaWYgKG12KQomIzQzOwkJCXN1bSAmIzQzOz0gZGFtb25fcHJvYmVfaGl0c19tdnN1bShpJiM0MzsmIzQzOywgciwgY3R4KSAqCiYjNDM7CQkJCXByb2JlLSZndDt3ZWlnaHQ7CiAJCWVsc2UKIAkJCXN1bSAmIzQzOz0gci0mZ3Q7cHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS0mZ3Q7d2VpZ2h0OwogCX0KQEAgLTY1NCw2ICYjNDM7NjU4LDcgQEAgYm9vbCBkYW1vc19maWx0ZXJfZm9yX29wcyhlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUpCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOgogCWNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOgomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKIAkJcmV0dXJuIGZhbHNlOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTMyOCw2ICYjNDM7MTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZygKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkU6CiAJCWRzdC0mZ3Q7c3pfcmFuZ2UgPSBzcmMtJmd0O3N6X3JhbmdlOwogCQlicmVhazsKJiM0MzsJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06CiYjNDM7CQlkc3QtJmd0O3JhbmdlX21pbiA9IHNyYy0mZ3Q7cmFuZ2VfbWluOwomIzQzOwkJZHN0LSZndDtyYW5nZV9tYXggPSBzcmMtJmd0O3JhbmdlX21heDsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTI1MDYsNyAmIzQzOzI1MTUsNyBAQCBzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LAogCWJvb2wgbWF0Y2hlZCA9IGZhbHNlOwogCXN0cnVjdCBkYW1vbl90YXJnZXQgKnRpOwogCWludCB0YXJnZXRfaWR4ID0gMDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgd3N1bTsKIAogCXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7CiAJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6CkBAIC0yNTQxLDYgJiM0MzsyNTUwLDExIEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCWRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLSZndDthci5zdGFydCk7CiAJCW1hdGNoZWQgPSB0cnVlOwogCQlicmVhazsKJiM0MzsJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06CiYjNDM7CQl3c3VtID0gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLCB0cnVlLCBjdHgpOwomIzQzOwkJbWF0Y2hlZCA9IGZpbHRlci0mZ3Q7cmFuZ2VfbWluICZsdDs9IHdzdW0gJmFtcDsmYW1wOwomIzQzOwkJCXdzdW0gJmx0Oz0gZmlsdGVyLSZndDtyYW5nZV9tYXg7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMzQ0OSw3ICYjNDM7MzQ2Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWVyZ2Vfc2NvcmUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpCiB7CiAJaWYgKHVzZV9wcm9iZV9oaXRzKQotCQlyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGN0eCk7CiYjNDM7CQlyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGZhbHNlLCBjdHgpOwogCWlmIChsYXN0KQogCQlyZXR1cm4gci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlczsKIAlyZXR1cm4gci0mZ3Q7bnJfYWNjZXNzZXM7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuYwppbmRleCBkN2M4MTgyOTQ0NWJhLi5iOGY0ZDI4MTY1ZGQ3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCQkJCWZvbGlvX3B1dChmb2xpbyk7CiAJCQlpZiAocmV0dXJuX21heF93c3VtKQogCQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKLQkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiYjNDM7CQkJCQkJCWZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7CiAJCX0KIAl9CiAJcmV0dXJuIG1heF93c3VtOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCmluZGV4IGQ5YjgxZDdiNTkxMGUuLjNkZTRkODA0ZTA0OWYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKQEAgLTUzNCw3ICYjNDM7NTM0LDggQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgewogCWJvb2wgYWxsb3c7CiAJY2hhciAqbWVtY2dfcGF0aDsKIAlzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlOwotCXN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlOwomIzQzOwl1bnNpZ25lZCBsb25nIHJhbmdlX21pbjsKJiM0MzsJdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7CiAJaW50IHRhcmdldF9pZHg7CiB9OwogCkBAIC01ODgsNiAmIzQzOzU4OSwxMCBAQCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0gewogCQkudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCwKIAkJLm5hbWUgPSAmIzM0O3RhcmdldCYjMzQ7LAogCX0sCiYjNDM7CXsKJiM0MzsJCS50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLAomIzQzOwkJLm5hbWUgPSAmIzM0O3Byb2JlX2hpdHNfd3N1bSYjMzQ7LAomIzQzOwl9LAogfTsKIAogc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLApAQCAtNzc4LDcgJiM0Mzs3ODMsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosCiAJCQlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7CiAKLQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgZmlsdGVyLSZndDtzel9yYW5nZS5taW4pOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgZmlsdGVyLSZndDtyYW5nZV9taW4pOwogfQogCiBzdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC03ODYsNyAmIzQzOzc5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIHsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosCiAJCQlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7Ci0JaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbik7CiYjNDM7CWludCBlcnIgPSBrc3RydG91bChidWYsIDAsICZhbXA7ZmlsdGVyLSZndDtyYW5nZV9taW4pOwogCiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQpAQCAtNzk3LDcgJiM0Mzs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosCiAJCQlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7CiAKLQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgZmlsdGVyLSZndDtzel9yYW5nZS5tYXgpOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgZmlsdGVyLSZndDtyYW5nZV9tYXgpOwogfQogCiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC04MDUsNyAmIzQzOzgxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIHsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosCiAJCQlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7Ci0JaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3N6X3JhbmdlLm1heCk7CiYjNDM7CWludCBlcnIgPSBrc3RydG91bChidWYsIDAsICZhbXA7ZmlsdGVyLSZndDtyYW5nZV9tYXgpOwogCiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQpAQCAtMjgzNSwxMiAmIzQzOzI4NDAsMjAgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpzY2hlbWUsCiAJCX0gZWxzZSBpZiAoZmlsdGVyLSZndDt0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCkgewogCQkJZmlsdGVyLSZndDt0YXJnZXRfaWR4ID0gc3lzZnNfZmlsdGVyLSZndDt0YXJnZXRfaWR4OwogCQl9IGVsc2UgaWYgKGZpbHRlci0mZ3Q7dHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFKSB7Ci0JCQlpZiAoc3lzZnNfZmlsdGVyLSZndDtzel9yYW5nZS5taW4gJmd0OwotCQkJCQlzeXNmc19maWx0ZXItJmd0O3N6X3JhbmdlLm1heCkgewomIzQzOwkJCWlmIChzeXNmc19maWx0ZXItJmd0O3JhbmdlX21pbiAmZ3Q7CiYjNDM7CQkJCQlzeXNmc19maWx0ZXItJmd0O3JhbmdlX21heCkgewomIzQzOwkJCQlkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CQkJZmlsdGVyLSZndDtzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItJmd0O3JhbmdlX21pbjsKJiM0MzsJCQlmaWx0ZXItJmd0O3N6X3JhbmdlLm1heCA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4OwomIzQzOwkJfSBlbHNlIGlmIChmaWx0ZXItJmd0O3R5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNKSB7CiYjNDM7CQkJZmlsdGVyLSZndDtyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItJmd0O3JhbmdlX21pbjsKJiM0MzsJCQlmaWx0ZXItJmd0O3JhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4OwomIzQzOwkJCWlmIChmaWx0ZXItJmd0O3JhbmdlX21pbiAmZ3Q7IGZpbHRlci0mZ3Q7cmFuZ2VfbWF4KSB7CiAJCQkJZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCWZpbHRlci0mZ3Q7c3pfcmFuZ2UgPSBzeXNmc19maWx0ZXItJmd0O3N6X3JhbmdlOwogCQl9CiAKIAkJZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCA5YTM4ZGM4OWExNTZlLi40YWVjZjM0ZTM5YmUyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTcwNCw3ICYjNDM7NzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCQkJX19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7CiAJCQlpZiAocmV0dXJuX21heF93c3VtKQogCQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKLQkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiYjNDM7CQkJCQkJCWZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7CiAJCX0KIAkJaWYgKG1tKQogCQkJbW1wdXQobW0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTQxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2ggZm9yIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIChEQU1PTikgc3Vic3lzdGVtLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgc29tZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGNhbGN1bGF0aW5nIHdlaWdodGVkIHN1bXMgb2YgcHJvYmUgaGl0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LgoKTXkgZmlyc3QgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYWRkaW5nIG1vcmUgZ3JhbnVsYXJpdHkgdG8gaG93IHdlIGZpbHRlciBhbmQgYW5hbHl6ZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBUaGUga2V5IGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgaW5jbHVzaW9uIG9mIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gLiBUaGlzIG5ldyBmaWx0ZXIgdHlwZSBpcyBpbnRyb2R1Y2VkIGFjcm9zcyBzZXZlcmFsIGZpbGVzLiBJbiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgdGhlIGFkZGl0aW9ucyBpbmNsdWRlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gLCBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gdGhlIGBzdHJ1Y3QgZGFtb3NfZmlsdGVyYCB0byBpbmNsdWRlIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCwgYW5kIHRoZSBwcm90b3R5cGUgb2YgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAuIFRoZXNlIGFkZGl0aW9ucyBwb2ludCB0byB0aGUgaW50cm9kdWN0aW9uIG9mIGZpbHRlcmluZyBiYXNlZCBvbiBhIHJhbmdlLgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEhlcmUsIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIGlzIHVwZGF0ZWQgdG8gYWNjZXB0IGEgYGJvb2wgbXZgIHBhcmFtZXRlciwgd2hpY2ggaXMgbGlrZWx5IGZvciBhICYjMzQ7bW92aW5nIHN1bSYjMzQ7LiBUaGlzLCBhbG9uZ3NpZGUgdGhlIGNoYW5nZXMgdG8gYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzYCwgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCwgYW5kIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBpbmRpY2F0ZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbW92aW5nIHN1bSBjYWxjdWxhdGlvbiBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgZmlsdGVyaW5nIG1lY2hhbmlzbS4gSSBzZWUgYSBjb25uZWN0aW9uIG9mIHRoaXMgd2l0aCB0aGUgYGRhbW9uX21lcmdlX3Njb3JlYCBmdW5jdGlvbiwgd2hpY2ggbm93IGNhbGxzIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBhbmQgd2l0aGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCB3ZSBzZWUgdGhlIGNhbGxzIHRvIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIHdpdGggdGhlIGBmYWxzZWAgb3B0aW9uLgoKRmluYWxseSwgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHdlIGdldCB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIG5ldyBmaWx0ZXIuIFdlIHNlZSBgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCAoJiMzNDtwcm9iZV9oaXRzX3dzdW0mIzM0OykgYWRkZWQgdG8gdGhlIHN5c2ZzIHJlcHJlc2VudGF0aW9uLCBhbmQgYHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBiZWluZyByZWZhY3RvcmVkLiBUaGUgcmVwbGFjZW1lbnRzIG9mIGBzel9yYW5nZWAgd2l0aCBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAsIGFsb25nc2lkZSB0aGUgdXBkYXRlcyB0byB0aGUgYG1pbl9zaG93YCwgYG1pbl9zdG9yZWAsIGBtYXhfc2hvd2AsIGBtYXhfc3RvcmVgIGZ1bmN0aW9ucywgYXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgb3B0aW9ucyB0byBkZXRlcm1pbmUgaWYgdGhpcyBuZXcgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgaXQgaGFzIGFueSBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgYSBzb2xpZCBlbmhhbmNlbWVudCB0byB0aGUgREFNT04gc3Vic3lzdGVtLCB3aGljaCBsaWtlbHkgaW1wcm92ZXMgaXRzIGFiaWxpdHkgdG8gaWRlbnRpZnkgYW5kIG9wdGltaXplIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBNYWtlZmlsZSBhbmQgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb3JlIGJ1aWxkIGluZnJhc3RydWN0dXJlIGZvciB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIG9wZW4gdXAgYG1tL2RhbW9uL01ha2VmaWxlYCBhbmQgYG1tL2RhbW9uL0tjb25maWdgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBidWlsZCBydWxlcyBhbmQgbGlrZWx5IHRoZSBtb2R1bGUgZGVmaW5pdGlvbnMgaW4gdGhlIE1ha2VmaWxlLiBGcm9tIGEgS2NvbmZpZyBwZXJzcGVjdGl2ZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBEQU1PTiYjMzk7cyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJ1bnRpbWUgYmVoYXZpb3JzIHRoYXQgYXJlIGNvbnRyb2xsZWQgdGhyb3VnaCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgREFNT04gYW5kIHRvIHNlZSB0aGUgbW9kdWxhcml0eSBvZiB0aGUgZGVzaWduLCB3aGljaCBtaWdodCByZXZlYWwgYXNwZWN0cyByZWxhdGVkIHRvIGl0cyBzY2FsYWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5LiBBbmFseXppbmcgdGhlIE1ha2VmaWxlIHdpbGwgcXVpY2tseSBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcywgd2hpbGUgS2NvbmZpZyB3aWxsIGlsbHVtaW5hdGUgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGJha2VkIGludG8gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgZmllbGQgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgREFNT04gc3Vic3lzdGVtLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY3J1Y2lhbCBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhleSBpbnRlcnJlbGF0ZSBpcyBlc3NlbnRpYWwuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGEgZmV3IGtleSBmZWF0dXJlczogYERBTU9OX1NZU0ZTYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1ZBRERSYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBvdmVyYXJjaGluZyBgREFNT05gIG9wdGlvbiBpdHNlbGYuIEkgd2FudCB0byBzZWUgd2hpY2ggb2YgdGhlc2UgYXJlIHJlcXVpcmVkIHRvIGJlIGVuYWJsZWQgZm9yIG90aGVycywgaWYgYW55IGhhdmUgZXh0ZXJuYWwgcHJlcmVxdWlzaXRlcyBvciBpbnRlcm5hbCBjb25mbGljdHMsIGFuZCBob3cgYWxsIHRoaXMgaW1wYWN0cyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIG1lbnRhbGx5IG1hcCB0aGUgY29uZmlndXJhdGlvbiBoaWVyYXJjaHkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiAgMjE6XHRcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbiAgMjI6XHRcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcbiAgMjc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyODpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAyOTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IERBTU9OIE1NIFN1YnN5c3RlbSBFbmhhbmNlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBuZXcgZmVhdHVyZSBiZWluZyBhZGRlZCB0byBEQU1PTiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChNTSkgc3Vic3lzdGVtLiBUaGlzIGluY2x1ZGVzIGEgbmV3IGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIERBTU9TIGZpbHRlciB0eXBlLiBJJiMzOTttIGFsc28gc2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT1Mgc2NoZW1lIGZpbHRlcnMsIHNwZWNpZmljYWxseSB0aGUgYG1pbmAgYW5kIGBtYXhgIGF0dHJpYnV0ZXMuIFRoaXMgYWxzbyBtZWFucyB1cGRhdGVzIHRvIGNvcmUgZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vc19maWx0ZXJfbWF0Y2hgLCBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AsIGFtb25nIG90aGVycy4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgc29tZXRoaW5nIFN5emthbGxlciBjYW4gYWN0dWFsbHkgdGFyZ2V0PyBUaGUgZ29vZCBuZXdzIGlzLCBhYnNvbHV0ZWx5LCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgaW50ZXJmYWNlIFN5emthbGxlciBsb3ZlcyB0byBpbnRlcmFjdCB3aXRoLiBDcnVjaWFsbHksIHRoaXMgdG91Y2hlcyBjb3JlIERBTU9OIGNvZGUgYW5kIHRoZSBwYXJzaW5nIGFuZCBtYXRjaGluZyBsb2dpYyBmb3IgdGhvc2Ugc3lzZnMgc2NoZW1lIGZpbHRlcnMuCgpUaGVyZWZvcmUsIHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCBuZXcgYXR0YWNrIHN1cmZhY2UgbGllcy4gVGltZSB0byBmaW5kIHRoZSBrZXkgc3ltYm9scy4KCkxldCYjMzk7cyBpbnNwZWN0IHRoZSBkaWZmIGFuZCBsb29rIGF0IHRoZSBjaGFuZ2VkIGFuZCBhZGRlZCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgb2YgaW50ZXJlc3Q6CjEuICBgZGFtb25fcHJvYmVfaGl0c193c3VtYCAoaW4gbW0vZGFtb24vY29yZS5jKQoyLiAgYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzYCAoaW4gbW0vZGFtb24vY29yZS5jKQozLiAgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCAoaW4gbW0vZGFtb24vY29yZS5jKQo0LiAgYGRhbW9zX2ZpbHRlcl9tYXRjaGAgKGluIG1tL2RhbW9uL2NvcmUuYykKNS4gIGBkYW1vbl9tZXJnZV9zY29yZWAgKGluIG1tL2RhbW9uL2NvcmUuYykKNi4gIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgIChpbiBtbS9kYW1vbi9wYWRkci5jKQo3LiAgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgKGluIG1tL2RhbW9uL3ZhZGRyLmMpCjguICBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCAoaW4gbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jKQo5LiAgYG1pbl9zdG9yZWAgLyBgbWF4X3N0b3JlYCAvIGBtaW5fc2hvd2AgLyBgbWF4X3Nob3dgIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgICh0aG91Z2ggc3RhdGljKQoKSSYjMzk7bGwgYWxzbyBoYXZlIHRvIGRvdWJsZS1jaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCBhbmQgYG1tL2RhbW9uL2NvcmUuY2AgZm9yIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgb3IgZW50cnkgcG9pbnRzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkIGR1cmluZyB0aGlzIHVwZGF0ZS4gTmVlZCB0byBnZXQgYSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yNDk5PXN0YXRpYyB2b2lkIGRhbW9zX3VwZGF0ZV9zdGF0KHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjUxMC1cbm1tL2RhbW9uL2NvcmUuYzoyNTExOnN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjUxMi1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNTY1PXN0YXRpYyBib29sIGRhbW9zX2NvcmVfZmlsdGVyX291dChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI1NzEtXHRkYW1vc19mb3JfZWFjaF9jb3JlX2ZpbHRlcihmaWx0ZXIsIHMpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNTcyOlx0XHRpZiAoZGFtb3NfZmlsdGVyX21hdGNoKGN0eCwgdCwgciwgZmlsdGVyLCBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcbm1tL2RhbW9uL2NvcmUuYy0yNTczLVx0XHRcdGlmIChmaWx0ZXItXHUwMDNlYWxsb3cpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1NzA9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU5NC1cdC8qIHJlZ2lvbiBpbiB0aGUgcmFuZ2UgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTk1Olx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTk2LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDEpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjAxLVx0S1VOSVRfRVhQRUNUX0ZBTFNFKHRlc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTYwMjpcdFx0XHRkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MDMtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MDgtXHRLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNjA5Olx0XHRcdGRhbW9zX2ZpbHRlcl9tYXRjaChOVUxMLCB0LCByLCBmLCAxKSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYxMC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAxKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYxNC1cdHItXHUwMDNlYXIuZW5kID0gNDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNjE1Olx0S1VOSVRfRVhQRUNUX0ZBTFNFKHRlc3QsIGRhbW9zX2ZpbHRlcl9tYXRjaChOVUxMLCB0LCByLCBmLCAxKSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYxNi1cdC8qIGZpbHRlciBzaG91bGQgaGF2ZSBzcGxpdCB0aGUgcmVnaW9uICovXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MzAtXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE2MzE6XHRcdFx0ZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjMyLVx0LyogZmlsdGVyIHNob3VsZCBoYXZlIHNwbGl0IHRoZSByZWdpb24gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgc3lzZnMtc2NoZW1lcy5jYCBDYWxsZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmaWx0ZXJpbmcgc2NoZW1lcyBhcmUgYmVpbmcgYWRkZWQgYW5kIHV0aWxpemVkLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCBhbmQgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucyB3aXRoaW4gYHN5c2ZzLXNjaGVtZXMuY2AuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHN5c3RlbSByZXNvdXJjZSBtYW5hZ2VtZW50LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byBlbnN1cmUgcHJvcGVyIHVzYWdlIGFuZCBhdm9pZCBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIEkmIzM5O2xsIGxpa2VseSBzdGFydCBieSBsaXN0aW5nIGFsbCBjYWxsZXJzIHRvIHRoYXQgZnVuY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBCZXlvbmQgdGhpcyBJIHdpbGwgYWxzbyBsb29rIGF0IGZ1bmN0aW9ucyBleHBvcnRlZCB3aXRoaW4gdGhlIHNvdXJjZSwgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNhbGxzIG9yaWdpbmF0aW5nIGZyb20gdmFyaW91cyBzdWJzeXN0ZW0gZHJpdmVycywgcHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciByZXNvdXJjZSBjb250cm9sLCBiYXNlZCBvbiB0aGUgYGRhbW9uYCBwcmVmaXguIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBrbm93IGFsbCB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjgwMz1jb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MDgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgwOTpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODEwLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnMgKnN5c2ZzX2ZpbHRlcnMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5ODc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDM2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwMzc6XHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc2NoZW1lLCBzeXNmc19zY2hlbWUtXHUwMDNlY29yZV9maWx0ZXJzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDM4LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQxLVx0fVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNDI6XHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc2NoZW1lLCBzeXNmc19zY2hlbWUtXHUwMDNlb3BzX2ZpbHRlcnMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDMtXHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDYtXHR9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NzpcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzY2hlbWUsIHN5c2ZzX3NjaGVtZS1cdTAwM2VmaWx0ZXJzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQ4LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMwOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBEQU1PTiBTeXNmcyBDYWxscyoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gdW5kZXJzdGFuZGluZyB0aGUgdXNhZ2Ugb2YgdGhlIGBkYW1vbl9zeXNmc19ta19zY2hlbWVgIGFuZCBgZGFtb25fc3lzZnNfc2V0X3NjaGVtZXNgIHN5c3RlbSBjYWxscyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBmcmFtZXdvcmsuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIGNvbmZpZ3VyaW5nIGFuZCBtb2RpZnlpbmcgbW9uaXRvcmluZyBzY2hlbWVzIOKAkyBlc3NlbnRpYWxseSwgaG93IERBTU9OIGRlZmluZXMgYW5kIHRyYWNrcyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aG8mIzM5O3MgKmNhbGxpbmcqIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBoZXJlIGFuZCBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhlc2UgY2FsbHM/IElzIGl0IHVzZXItc3BhY2UgdG9vbHMgaW50ZXJhY3Rpbmcgd2l0aCBzeXNmcyBkaXJlY3RseT8gQXJlIHRoZXkgYmVpbmcgaW5pdGlhdGVkIGJ5IHNvbWUga2VybmVsLWxldmVsIGNvbXBvbmVudHMgb3IgbW9kdWxlcz8gVGhlICYjMzQ7d2h5JiMzNDsgaXMgYWxzbyBpbXBvcnRhbnQ6ICp3aHkqIGFyZSB0aGVzZSBzY2hlbWVzIGJlaW5nIGNyZWF0ZWQgb3IgYWx0ZXJlZD8gQXJlIHRoZXkgZHluYW1pY2FsbHkgYWRhcHRpbmcgYmFzZWQgb24gcnVudGltZSBjb25kaXRpb25zLCBvciBhcmUgdGhleSBzdGF0aWNhbGx5IGRlZmluZWQgYXQgYm9vdD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVyIGFuZCB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zIGlzIHRoZSBrZXkgdG8gdHJ1bHkgdW5kZXJzdGFuZGluZyBob3cgREFNT04gaXMgYmVoYXZpbmcgYW5kIHBlcmZvcm1pbmcgdW5kZXIgdGhlIGhvb2QuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RlcCBpbiBhbmFseXppbmcgYW55IERBTU9OIHJlbGF0ZWQgaXNzdWUgb3Igb3B0aW1pemF0aW9uIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfbWtfc2NoZW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5NjY9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfbWlncmF0ZV9kZXN0KHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTg2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5ODc6c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5ODgtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnN5c2ZzX3NjaGVtZSlcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA2MT1pbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDY4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNjk6XHRcdHNjaGVtZSA9IGRhbW9uX3N5c2ZzX21rX3NjaGVtZShzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW2ldKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDcwLVx0XHRpZiAoIXNjaGVtZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4NwoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT04gQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBrZXkgYXJlYXMgZm9yIGZ1cnRoZXIgZXhhbWluYXRpb24gd2l0aGluIHRoZSBgbW0vZGFtb25gIGZyYW1ld29yaywgYW5kIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gaXQgbm93LiBJJiMzOTt2ZSBwaW5wb2ludGVkIHNldmVyYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29kZSB0aGF0IGxvb2sgbGlrZSBwcmltZSB0YXJnZXRzIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZXNlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb3NfZmlsdGVyX21hdGNoYCAoYW5kL29yIGBkYW1vc19jb3JlX2ZpbHRlcl9vdXRgKSwgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGBkYW1vbl9tZXJnZV9zY29yZWAsIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AuIFRoZXNlIHNlZW0gY2VudHJhbCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuCgpOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYERBTU9OYCAodGhlIGNvcmUgZnJhbWV3b3JrKSwgYERBTU9OX1NZU0ZTYCAodGhlIHN5c2ZzIGludGVyZmFjZSksIGBEQU1PTl9QQUREUmAgKGZvciBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMpLCBhbmQgYERBTU9OX1ZBRERSYCAoZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zKS4gSSYjMzk7dmUgYWxzbyB2ZXJpZmllZCB0aGVpciBkZXBlbmRlbmNpZXM6IGBEQU1PTl9TWVNGU2AgbmVlZHMgYERBTU9OYCBhbmQgYFNZU0ZTYCwgYW5kIGJvdGggYERBTU9OX1BBRERSYCBhbmQgYERBTU9OX1ZBRERSYCByZXF1aXJlIGBEQU1PTmAgYW5kIGBNTVVgLiBUaGlzIGFsbCBjaGVja3Mgb3V0LgoKVG8gYmUgZXh0cmEgdGhvcm91Z2gsIEkmIzM5O3ZlIGp1c3QgZG9uZSBhIGZpbmFsIHN3ZWVwIHRvIGNvbmZpcm0gYWxsIHRoZSBkZXRhaWxzIGFyZSBhY2N1cmF0ZS4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgYWxsIHJlcXVpcmVkIGFuZCB0aGUgc3ltYm9scyBsaXN0ZWQgYXJlIGluZGVlZCBpbXBvcnRhbnQuCgpJJiMzOTt2ZSBhbHNvIHBlcmZvcm1lZCBhIHNhbml0eSBjaGVjayBvbiBteSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmaWx0ZXIgdHlwZSwgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAsIHdoaWNoIGlzIGFsbCBhYm91dCBtYXRjaGluZyBhbmQgZmlsdGVyaW5nIG1lbW9yeSByZWdpb25zIGJhc2VkIG9uIGEgbW92aW5nIHN1bSBvZiB3ZWlnaHRlZCBwcm9iZSBoaXRzLiBUaGF0JiMzOTtzIGEgbmV3IGxheWVyIG9mIGNvbXBsZXhpdHkgd2l0aGluIERBTU9OLCBhbmQgaXQgdG91Y2hlcyBjb3JlLCBwYWRkciwgdmFkZHIgYW5kIHN5c2ZzIHNjaGVtZSBpbnRlcmZhY2VzLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvZGUgZXhlY3V0aW9uIHBhdGhzLCBhbmQgcG90ZW50aWFsbHksIG5ldyBhcmVhcyBmb3IgZXhwbG9yYXRpb24uCgpXaXRoIG15IGFzc2Vzc21lbnQgY29tcGxldGUsIEkmIzM5O20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBtb25pdG9yaW5nIHJlZ2lvbnMgYmFzZWQgb24gdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzLiBJdCB1cGRhdGVzIGNvcmUgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBjb21taXQgZmlsdGVyIGFyZ3VtZW50IGhhbmRsaW5nLCBtb3Zpbmcgc3VtIHByb2JlIGhpdCBjYWxjdWxhdGlvbiwgYW5kIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWUgZmlsdGVyIGludGVyZmFjZS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBleHBvc2VkIHZpYSBzeXNmcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9zX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfZmlsdGVyX2FyZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBtb25pdG9yaW5nIHJlZ2lvbnMgYmFzZWQgb24gdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzLiBJdCB1cGRhdGVzIGNvcmUgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBjb21taXQgZmlsdGVyIGFyZ3VtZW50IGhhbmRsaW5nLCBtb3Zpbmcgc3VtIHByb2JlIGhpdCBjYWxjdWxhdGlvbiwgYW5kIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWUgZmlsdGVyIGludGVyZmFjZS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBleHBvc2VkIHZpYSBzeXNmcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCkgYW5kIHJlZmFjdG9ycyBzeXNmcyBmaWx0ZXIgbWluL21heCBoYW5kbGluZyB0byBzdXBwb3J0IHByb2JlIGhpdCB3ZWlnaHRlZCBzdW0gcmFuZ2VzIGFsb25nc2lkZSBodWdlcGFnZSBzaXplcy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgc3lzZnMgZmlsdGVyIHN0cnVjdHVyZXMgKGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBXaGVuIGNvbnZlcnRpbmcgdG8ga2VybmVsIGZpbHRlcnMgKGBkYW1vc19maWx0ZXJgKSwgdGhlIHJhbmdlIGZpZWxkcyAoYHJhbmdlX21pbmAsIGByYW5nZV9tYXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIHN5c2ZzIGZpbHRlcnMuIFN5c2ZzIHNob3cgYXR0cmlidXRlcyB1c2UgYHN5c2ZzX2VtaXQoKWAgdG8gb3V0cHV0IGZvcm1hdHRlZCB1bnNpZ25lZCBsb25nIGludGVnZXJzLCBwcmVjbHVkaW5nIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZC5cbi0gS0FTQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgYW55IGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gcHJvYmUgYXJyYXlzLCBvciBhbGxvY2F0aW9uIGlzc3Vlcy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3NzQ1NDJkOGNkODQ2YjUyOGRlNjc4MTViZTY4YzkwMDBiMjQwNWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwMToyOTozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKQEAgLTU1MSw2ICYjNDM7NTUxLDEwIEBAIGFuZCBgYGRhbW9uX3RhcmdldF9pZHhgYC4gIFRvIGBgdHlwZWBgIGZpbGUsIHlvdSBjYW4gd3JpdGUgdGhlIHR5cGUgb2YgdGhlCiBmaWx0ZXIuICBSZWZlciB0byA6cmVmOmB0aGUgZGVzaWduIGRvYyAmbHQ7ZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnMmZ3Q7YCBmb3IKIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLgogCiYjNDM7Rm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlCiYjNDM7aGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcywKJiM0MztyZXNwZWN0aXZlbHkuCiYjNDM7CiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnkKIHdyaXRpbmcgdGhlIHBhdGggb2YgdGhlIG1lbW9yeSBjZ3JvdXAgZnJvbSB0aGUgY2dyb3VwcyBtb3VudCBwb2ludCB0bwogYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdAppbmRleCBhYWM4NGRlMjYxYWE4Li44ZTk4MGRkZTM2MmRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CkBAIC04MjIsNiAmIzQzOzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIGFkZHJlc3MgcmFuZ2UuCiAgICAgLSB0YXJnZXQKICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuCiYjNDM7ICAgIC0gcHJvYmVfaGl0c193c3VtCiYjNDM7ICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlCiYjNDM7ICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtICZsdDtkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nJmd0O2AgdmFsdWUuCiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LgogICAgIC0gYW5vbgogICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBjb250YWluaW5nIGRhdGEgdGhhdCBub3Qgc3RvcmVkIGluIGZpbGVzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDg3MWQyNmFkZjZhZTUuLjRhMzZmMzQ0YmJjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTM5OSwxNCAmIzQzOzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7CiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6CVVubWFwcGVkIHBhZ2VzLgogICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CUFkZHJlc3MgcmFuZ2UuCiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOglEYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC4KJiM0MzsgKiBAREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOglwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS4KICAqIEBOUl9EQU1PU19GSUxURVJfVFlQRVM6CU51bWJlciBvZiBmaWx0ZXIgdHlwZXMuCiAgKgotICogQWxsIHR5cGVzIGV4Y2VwdCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kICZhbXA7REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUCi0gKiBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWUKLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LAotICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkCi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZAotICogYXMgJiMzOTt0cmllZCYjMzk7LgomIzQzOyAqIEFsbCB0eXBlcyBleGNlcHQgJmFtcDtEQU1PU19GSUxURVJfVFlQRV9BRERSLCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmQKJiM0MzsgKiAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSBhcmUgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyAmYW1wO3N0cnVjdAomIzQzOyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZAomIzQzOyAqIGFzICYjMzk7dHJpZWQmIzM5Oy4gIEluIGNvbnRyYXN0LCAmYW1wO0RBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kCiYjNDM7ICogJmFtcDtEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmUKJiM0MzsgKiB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkIGFzICYjMzk7dHJpZWQmIzM5Oy4KICAqCiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZwogICogJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4KQEAgLTQyMCw2ICYjNDM7NDIxLDcgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7CiAJREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsCiAJREFNT1NfRklMVEVSX1RZUEVfQUREUiwKIAlEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsCiYjNDM7CURBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSwKIAlOUl9EQU1PU19GSUxURVJfVFlQRVMsCiB9OwogCkBAIC00MzQsNiAmIzQzOzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgewogICoJCSZhbXA7ZGFtb25fY3R4LSZndDthZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzCiAgKgkJREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULgogICogQHN6X3JhbmdlOglTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuCiYjNDM7ICogQHJhbmdlX21pbjoJTWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiYjNDM7ICogQHJhbmdlX21heDoJTWF4aW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuCiAgKgogICogQmVmb3JlIGFwcGx5aW5nIHRoZSAmYW1wO2RhbW9zLSZndDthY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaAogICogYnl0ZSBvZiB0aGUgcmVnaW9uIG1hdGNoZXMgdG8gdGhpcyBnaXZlbiBjb25kaXRpb24gYW5kIGF2b2lkIGFwcGx5aW5nIHRoZQpAQCAtNDUwLDYgJiM0Mzs0NTQsMTAgQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7CiAJCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7CiAJCWludCB0YXJnZXRfaWR4OwogCQlzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9taW47CiYjNDM7CQkJdW5zaWduZWQgbG9uZyByYW5nZV9tYXg7CiYjNDM7CQl9OwogCX07CiAvKiBwcml2YXRlOiAqLwogCS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCkBAIC0xMDY1LDcgJiM0MzsxMDczLDcgQEAgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCk7CiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KTsKLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAomIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogCiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcywKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDVjYjM2NzAxOWFlLi5kOWQ1NmY0YmUxYTk3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC00NjksMTEgJiM0Mzs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKICAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi4KICAqIEByOgkJcmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLgogICogQGxhc3Q6CWlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuCiYjNDM7ICogQG12OgkJdXNlIG1vdmluZyBzdW0uCiAgKiBAY3R4Ogljb250ZXh0IG9mICZhbXA7ci4KICAqCiAgKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLgogICovCi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKJiM0Mzt1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdiwKIAkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewogCXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CkBAIC00ODMsNiAmIzQzOzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAogCWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHsKIAkJaWYgKGxhc3QpCiAJCQlzdW0gJiM0Mzs9IHItJmd0O2xhc3RfcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS0mZ3Q7d2VpZ2h0OwomIzQzOwkJZWxzZSBpZiAobXYpCiYjNDM7CQkJc3VtICYjNDM7PSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkmIzQzOyYjNDM7LCByLCBjdHgpICoKJiM0MzsJCQkJcHJvYmUtJmd0O3dlaWdodDsKIAkJZWxzZQogCQkJc3VtICYjNDM7PSByLSZndDtwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLSZndDt3ZWlnaHQ7CiAJfQpAQCAtNjU0LDYgJiM0Mzs2NTgsNyBAQCBib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSkKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6CiAJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6CiYjNDM7CWNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOgogCQlyZXR1cm4gZmFsc2U7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMzI4LDYgJiM0MzsxMzMzLDEwIEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKAogCWNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRToKIAkJZHN0LSZndDtzel9yYW5nZSA9IHNyYy0mZ3Q7c3pfcmFuZ2U7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCWRzdC0mZ3Q7cmFuZ2VfbWluID0gc3JjLSZndDtyYW5nZV9taW47CiYjNDM7CQlkc3QtJmd0O3JhbmdlX21heCA9IHNyYy0mZ3Q7cmFuZ2VfbWF4OwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMjUwNiw3ICYjNDM7MjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiAJc3RydWN0IGRhbW9uX3RhcmdldCAqdGk7CiAJaW50IHRhcmdldF9pZHggPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtOwogCiAJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKIAljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDoKQEAgLTI1NDEsNiAmIzQzOzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItJmd0O2FyLnN0YXJ0KTsKIAkJbWF0Y2hlZCA9IHRydWU7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTToKJiM0MzsJCXdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7CiYjNDM7CQltYXRjaGVkID0gZmlsdGVyLSZndDtyYW5nZV9taW4gJmx0Oz0gd3N1bSAmYW1wOyZhbXA7CiYjNDM7CQkJd3N1bSAmbHQ7PSBmaWx0ZXItJmd0O3JhbmdlX21heDsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0zNDQ5LDcgJiM0MzszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cykKIHsKIAlpZiAodXNlX3Byb2JlX2hpdHMpCi0JCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTsKJiM0MzsJCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7CiAJaWYgKGxhc3QpCiAJCXJldHVybiByLSZndDtsYXN0X25yX2FjY2Vzc2VzOwogCXJldHVybiByLSZndDtucl9hY2Nlc3NlczsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jCmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiAJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAotCQkJCQkJCWN0eCksIG1heF93c3VtKTsKJiM0MzsJCQkJCQkJZmFsc2UsIGN0eCksIG1heF93c3VtKTsKIAkJfQogCX0KIAlyZXR1cm4gbWF4X3dzdW07CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKaW5kZXggZDliODFkN2I1OTEwZS4uM2RlNGQ4MDRlMDQ5ZiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwpAQCAtNTM0LDcgJiM0Mzs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7CiAJYm9vbCBhbGxvdzsKIAljaGFyICptZW1jZ19wYXRoOwogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7Ci0Jc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluOwomIzQzOwl1bnNpZ25lZCBsb25nIHJhbmdlX21heDsKIAlpbnQgdGFyZ2V0X2lkeDsKIH07CiAKQEAgLTU4OCw2ICYjNDM7NTg5LDEwIEBAIGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7CiAJCS50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULAogCQkubmFtZSA9ICYjMzQ7dGFyZ2V0JiMzNDssCiAJfSwKJiM0MzsJewomIzQzOwkJLnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sCiYjNDM7CQkubmFtZSA9ICYjMzQ7cHJvYmVfaGl0c193c3VtJiMzNDssCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC03NzgsNyAmIzQzOzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbik7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21pbik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTc4Niw3ICYjNDM7NzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWluKTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21pbik7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC03OTcsNyAmIzQzOzgwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKIAotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3N6X3JhbmdlLm1heCk7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBmaWx0ZXItJmd0O3JhbmdlX21heCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTgwNSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogewogCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaiwKIAkJCXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCAmYW1wO2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21heCk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC0yODM1LDEyICYjNDM7Mjg0MCwyMCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwKIAkJfSBlbHNlIGlmIChmaWx0ZXItJmd0O3R5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7CiAJCQlmaWx0ZXItJmd0O3RhcmdldF9pZHggPSBzeXNmc19maWx0ZXItJmd0O3RhcmdldF9pZHg7CiAJCX0gZWxzZSBpZiAoZmlsdGVyLSZndDt0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHsKLQkJCWlmIChzeXNmc19maWx0ZXItJmd0O3N6X3JhbmdlLm1pbiAmZ3Q7Ci0JCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4KSB7CiYjNDM7CQkJaWYgKHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluICZndDsKJiM0MzsJCQkJCXN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4KSB7CiYjNDM7CQkJCWRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCQlmaWx0ZXItJmd0O3N6X3JhbmdlLm1pbiA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluOwomIzQzOwkJCWZpbHRlci0mZ3Q7c3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXg7CiYjNDM7CQl9IGVsc2UgaWYgKGZpbHRlci0mZ3Q7dHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHsKJiM0MzsJCQlmaWx0ZXItJmd0O3JhbmdlX21pbiA9IHN5c2ZzX2ZpbHRlci0mZ3Q7cmFuZ2VfbWluOwomIzQzOwkJCWZpbHRlci0mZ3Q7cmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLSZndDtyYW5nZV9tYXg7CiYjNDM7CQkJaWYgKGZpbHRlci0mZ3Q7cmFuZ2VfbWluICZndDsgZmlsdGVyLSZndDtyYW5nZV9tYXgpIHsKIAkJCQlkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJZmlsdGVyLSZndDtzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci0mZ3Q7c3pfcmFuZ2U7CiAJCX0KIAogCQlkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jCmluZGV4IDlhMzhkYzg5YTE1NmUuLjRhZWNmMzRlMzliZTIgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtNzA0LDcgJiM0Mzs3MDQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJCQlfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTsKIAkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiAJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAotCQkJCQkJCWN0eCksIG1heF93c3VtKTsKJiM0MzsJCQkJCQkJZmFsc2UsIGN0eCksIG1heF93c3VtKTsKIAkJfQogCQlpZiAobW0pCiAJCQltbXB1dChtbSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTUzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogODIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byByZWFsbHkgZGlnIGludG8gd2hhdCYjMzk7cyBiZWluZyBhZGRlZCBhbmQgY2hhbmdlZC4KCkl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlOiBgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCBmb3IgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy4gVGhlIGNvZGUgY2hhbmdlcyBzZWVtIHByZXR0eSBmb2N1c2VkLCB3aGljaCBpcyBnb29kLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIHRoZSBlbnVtIGBkYW1vc19maWx0ZXJfdHlwZWAgbm93IGluY2x1ZGVzIHRoZSBuZXcgdHlwZSwgYW5kIHRoZSBgc3RydWN0IGRhbW9zX2ZpbHRlcmAgaXMgdXBkYXRlZCB3aXRoIGEgcmFuZ2Ugc3RydWN0dXJlIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIGluc2lkZSB0aGUgdW5pb24uIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgdGVsbHMgdXMgdGhlIGRhdGEgdGhhdCBpcyBuZWVkZWQgZm9yIHRoZSBmaWx0ZXIuIEFsc28sIHRoZSBgZGFtb25fcHJvYmVfaGl0c193c3VtYCBzaWduYXR1cmUgaXMgdXBkYXRlZCB3aXRoIGBib29sIG12YCB3aGljaCBpbmRpY2F0ZXMgdGhlcmUgYXJlIG9wdGlvbnMgaW4gaXRzIGJlaGF2aW91ci4KCkluIGBtbS9kYW1vbi9jb3JlLmNgLCB0aGUgY2hhbmdlcyBzaG93IGhvdyBgZGFtb25fcHJvYmVfaGl0c193c3VtKClgIGlzIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgbmV3IGBib29sIG12YCBhcmd1bWVudC4gSW50ZXJlc3RpbmcgdGhhdCBgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoKWAgcmV0dXJucyBmYWxzZSBmb3IgdGhpcyBmaWx0ZXIgdHlwZSwgd2hpY2ggaXMgZ29vZCBpbiB0aGF0IGl0IGluZGljYXRlcyB0aGlzIGlzIGEgbmV3IHR5cGUuIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZygpYCBpcyBhbHNvIHVwZGF0ZWQgdG8gY29weSBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgd2hpY2ggaXMgaW1wb3J0YW50IGluIGhvdyB0aGUgZmlsdGVyIGlzIGNvbmZpZ3VyZWQsIGFuZCBgZGFtb3NfZmlsdGVyX21hdGNoKClgIGhhbmRsZXMgdGhlIG5ldyBgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCBieSBjb21wYXJpbmcgYSB3ZWlnaHRlZCBzdW0gdG8gdGhlIHNwZWNpZmllZCByYW5nZS4gQWxzbywgdGhlIGBkYW1vbl9tZXJnZV9zY29yZSgpYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIHVzZSB0aGUgdXBkYXRlZCBgZGFtb25fcHJvYmVfaGl0c193c3VtYC4KClRoZSBwYXRjaCBhbHNvIHVwZGF0ZXMgY2FsbHMgdG8gYGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpYCB3aXRoIGBmYWxzZWAgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgdmFkZHIuY2AuIFRoaXMgaXNuJiMzOTt0IHRoYXQgaW1wb3J0YW50IGFzIGl0IGp1c3QgbW9kaWZpZXMgdGhlIG90aGVyIGZpbGVzIHRvIHVzZSB0aGUgdXBkYXRlZCBmdW5jdGlvbi4KCkZpbmFsbHksIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIHVwZGF0ZXMgdGhlIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBzdHJ1Y3R1cmUgYW5kIHRoZSByZWxhdGVkIHN5c2ZzIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gdXNlIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCBpbnN0ZWFkIG9mIGBzel9yYW5nZS5taW5gIGFuZCBgc3pfcmFuZ2UubWF4YCwgd2hpY2ggaXMgZXhwZWN0ZWQuCgpOb3csIGEga2V5IGNvbmNlcm46IGhvdyBhcmUgYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGFuZCBgZGFtb3NfZmlsdGVyYCBjcmVhdGVkLCBpbml0aWFsaXplZCwgYW5kIGNvcGllZD8gSSBuZWVkIHRvIHVzZSBncmVwcGVyIHRvIHRyYWNrIHRoZXNlIHN0cnVjdHVyZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB3aGVyZSBwb3RlbnRpYWwgS01TQU4gaXNzdWVzIGNvdWxkIGFyaXNlIOKAkyBlc3BlY2lhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgdGhlIG5ldyByYW5nZSBwYXJhbWV0ZXJzLiBJIHdpbGwgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyBmb3IgZXJyb3JzIHdpdGhpbiBEQU1PTi4gQmFzZWQgb24gdGhlIGZpbmRpbmdzIGZyb20gZ3JlcHBlciwgSSBjYW4gYXNzZXNzIHRoZSBuZWVkIGZvciBmb2N1c2VkIEtNU0FOIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2N8ZGFtb3NfbmV3X2ZpbHRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz01NDM9aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTYzMy1cbm1tL2RhbW9uL2NvcmUuYzo2MzQ6c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXG5tbS9kYW1vbi9jb3JlLmMtNjM1LVx0XHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzU0PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEzNzAtXG5tbS9kYW1vbi9jb3JlLmM6MTM3MTpcdFx0bmV3X2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoXG5tbS9kYW1vbi9jb3JlLmMtMTM3Mi1cdFx0XHRcdHNyY19maWx0ZXItXHUwMDNldHlwZSwgc3JjX2ZpbHRlci1cdTAwM2VtYXRjaGluZyxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTM4Mj1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9vcHNfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEzOTgtXG5tbS9kYW1vbi9jb3JlLmM6MTM5OTpcdFx0bmV3X2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoXG5tbS9kYW1vbi9jb3JlLmMtMTQwMC1cdFx0XHRcdHNyY19maWx0ZXItXHUwMDNldHlwZSwgc3JjX2ZpbHRlci1cdTAwM2VtYXRjaGluZyxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTI0OT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTI1Ny1cdC8qIGRpc2FsbG93IHByaW9yaXRpemluZyBub3QteW91bmcgcGFnZXMgKi9cbm1tL2RhbW9uL2xydV9zb3J0LmM6MjU4Olx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9ZT1VORywgZmFsc2UsIGZhbHNlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjU5LVx0aWYgKCFmaWx0ZXIpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNjMtXHQvKiBkaXNhYmxsb3cgZGUtcHJpb3JpdGl6aW5nIHlvdW5nIHBhZ2VzICovXG5tbS9kYW1vbi9scnVfc29ydC5jOjI2NDpcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfWU9VTkcsIHRydWUsIGZhbHNlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjY1LVx0aWYgKCFmaWx0ZXIpXG4tLVxubW0vZGFtb24vcGFkZHIuYz0yMzk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjU2LVx0aWYgKGluc3RhbGxfeW91bmdfZmlsdGVyKSB7XG5tbS9kYW1vbi9wYWRkci5jOjI1NzpcdFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihcbm1tL2RhbW9uL3BhZGRyLmMtMjU4LVx0XHRcdFx0REFNT1NfRklMVEVSX1RZUEVfWU9VTkcsIHRydWUsIGZhbHNlKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI1MS1cdGlmIChza2lwX2Fub24pIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNTI6XHRcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgZmFsc2UpO1xubW0vZGFtb24vcmVjbGFpbS5jLTI1My1cdFx0aWYgKCFmaWx0ZXIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyOT1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDI6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My1cdFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MzA9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19hZGRfZGlycyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTQ2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZmlsdGVyczsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5NDc6XHRcdGZpbHRlciA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTQ4LVx0XHRcdFx0ZmlsdGVycy1cdTAwM2VoYW5kbGVfbGF5ZXIpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODA5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE3LVx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MTg6XHRcdFx0ZGFtb3NfbmV3X2ZpbHRlcihzeXNmc19maWx0ZXItXHUwMDNldHlwZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE5LVx0XHRcdFx0XHRzeXNmc19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc5MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X25ld19maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03OTMtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Nzk0Olx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzk1LVx0aWYgKCFmaWx0ZXIpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1NzA9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU3NS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTc2Olx0ZiA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQUREUiwgdHJ1ZSwgZmFsc2UpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NzctXHRpZiAoIWYpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE2Nzk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2OTQtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTY5NTpcdHRhcmdldF9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCwgdHJ1ZSwgdHJ1ZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY5Ni1cdGlmICghdGFyZ2V0X2ZpbHRlcilcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyMS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzIyOlx0YW5vbl9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX0FOT04sIHRydWUsIHRydWUpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3MjMtXHRpZiAoIWFub25fZmlsdGVyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbToKCioqRGlnZ2luZyBpbnRvIERBTU9OJiMzOTtzIEZpbHRlciBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZmlsdGVyIGFsbG9jYXRpb24gd2l0aGluIERBTU9OLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZm9jdXNpbmcgb24gYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2NgIGFuZCBgZGFtb3NfbmV3X2ZpbHRlcmAgaW4gYG1tL2RhbW9uYC4gUmlnaHQsIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jYCBsaWtlbHkgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgZmlsdGVyIHN0cnVjdHVyZSBpdHNlbGYsIHByb2JhYmx5IGluIHJlc3BvbnNlIHRvIGEgc3lzZnMgcmVxdWVzdCBvciBjb25maWd1cmF0aW9uIGNoYW5nZSwgYW5kIHByb2JhYmx5IHRpZWQgdG8gYSBwYXJ0aWN1bGFyIG1vbml0b3Jpbmcgc2NoZW1lLiBJIGltYWdpbmUgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgZmlsdGVyJiMzOTtzIG1ldGFkYXRhLCBzZXR0aW5nIHVwIGFueSBuZWNlc3NhcnkgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcGVyaGFwcyBsaW5raW5nIGl0IGludG8gdGhlIG92ZXJhbGwgREFNT04gc2NoZW1lJiMzOTtzIG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gSSBzaG91bGQgY2hlY2sgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzY2hlbWUmIzM5O3MgYWxsb2NhdGlvbi9mcmVlaW5nIG1lY2hhbmlzbXMuCgpUaGVuIHRoZXJlJiMzOTtzIGBkYW1vc19uZXdfZmlsdGVyYC4gVGhpcyBzb3VuZHMgbGlrZSB0aGUgbG93LWxldmVsIHByaW1pdGl2ZSBmb3IgY3JlYXRpbmcgYSBmaWx0ZXIuIExpa2VseSBjYWxsZWQgYnkgdGhlIGFib3ZlIG1lbnRpb25lZCBmdW5jdGlvbiwgYGRhbW9zX25ld19maWx0ZXJgIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBhbGxvY2F0aW5nIHRoZSBtZW1vcnkgZm9yIHRoZSBmaWx0ZXIgb2JqZWN0IGZyb20gYSBrZXJuZWwgbWVtb3J5IHBvb2wuIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYW55IGZpZWxkcyByZWxhdGVkIHRvIHRoZSBmaWx0ZXImIzM5O3MgaWRlbnRpdHksIHN0YXR1cyAoYWN0aXZlLCBpbmFjdGl2ZSwgZXRjLiksIGFuZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3aWxsIHN0b3JlIHRoZSBtb25pdG9yZWQgcmVnaW9uIGluZm9ybWF0aW9uLiBJIHdpbGwgYmUgc3VyZSB0byBvYnNlcnZlIHRoZSB1c2FnZSBvZiB0aGUgcmV0dXJuZWQgcG9pbnRlci4KCkkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRvIHRyYWNrIHdoZXJlIHRoZSBmaWx0ZXJzIGFyZSBmcmVlZCBhbmQgaG93IHRoYXQgcHJvY2VzcyBpcyB0cmlnZ2VyZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIGZpbHRlciBhbGxvY2F0aW9uLCBkZXN0cnVjdGlvbiwgYW5kIG1vbml0b3Jpbmcgb3BlcmF0aW9ucy4gREFNT04mIzM5O3MgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZSwgc28gY2xlYW4gYW5kIGNvcnJlY3QgZmlsdGVyIGhhbmRsaW5nIGlzIHBhcmFtb3VudCB0byBpdHMgcmVsaWFiaWxpdHkuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTM1Olx0XHRjaGFyICptZW1jZ19wYXRoO1xuIDUzNjpcdFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbiA1Mzc6XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuIDUzODpcdFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4gNTM5Olx0XHRpbnQgdGFyZ2V0X2lkeDtcbiA1NDA6XHR9O1xuIDU0MTpcdFxuIDU0MjpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcbiA1NDM6XHRcdFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxuIDU0NDpcdHtcbiA1NDU6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXI7XG4gNTQ2Olx0XG4gNTQ3Olx0XHRmaWx0ZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcik7XG4gNTQ4Olx0XHRpZiAoZmlsdGVyKVxuIDU0OTpcdFx0XHRmaWx0ZXItXHUwMDNlaGFuZGxlX2xheWVyID0gbGF5ZXI7XG4gNTUwOlx0XHRyZXR1cm4gZmlsdGVyO1xuIDU1MTpcdH1cbiA1NTI6XHRcbiA1NTM6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XG4gNTU0Olx0XHRlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGU7XG4gNTU1Olx0XHRjaGFyICpuYW1lO1xuIDU1NjpcdH07XG4gNTU3Olx0XG4gNTU4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lXG4gNTU5Olx0ZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbiA1NjA6XHRcdHtcbiA1NjE6XHRcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9BTk9OLFxuIDU2MjpcdFx0XHQubmFtZSA9IFwmIzM0O2Fub25cJiMzNDssXG4gNTYzOlx0XHR9LFxuIDU2NDpcdFx0e1xuIDU2NTpcdFx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX0FDVElWRSxcbiA1NjY6XHRcdFx0Lm5hbWUgPSBcJiMzNDthY3RpdmVcJiMzNDssXG4gNTY3Olx0XHR9LFxuIDU2ODpcdFx0e1xuIDU2OTpcdFx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHLFxuIDU3MDpcdFx0XHQubmFtZSA9IFwmIzM0O21lbWNnXCYjMzQ7LFxuIDU3MTpcdFx0fSxcbiA1NzI6XHRcdHtcbiA1NzM6XHRcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9ZT1VORyxcbiA1NzQ6XHRcdFx0Lm5hbWUgPSBcJiMzNDt5b3VuZ1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBkYW1vc19uZXdfZmlsdGVyYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGRhbW9zX25ld19maWx0ZXJgIGZ1bmN0aW9uLiBMb29rcyBsaWtlIGl0JiMzOTtzIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IGZpbHRlcmluZyBtZWNoYW5pc20gaXMgYmVpbmcgaW1wbGVtZW50ZWQuIFdoYXQmIzM5O3MgdGhlIGNvcmUgbG9naWMgaGVyZT8gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBsb29raW5nIGZvciBob3cgbmV3IHJlZ2lvbnMgYXJlIGJlaW5nIGlkZW50aWZpZWQgb3IgY2xhc3NpZmllZCBhbmQgaG93IHRoZSBmaWx0ZXJpbmcgaXMgYXBwbGllZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIERBTU9OIGZyYW1ld29yayBpcyBvcmNoZXN0cmF0aW5nIHRoaXMgdG8gcG90ZW50aWFsbHkgcmVkdWNlIG92ZXJoZWFkLiBXaGF0IHBhcmFtZXRlcnMgYXJlIGdvaW5nIGludG8gYGRhbW9zX25ld19maWx0ZXJgPyBBbmQsIHdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uPyBJIGJldCBpdCBkZWFscyB3aXRoIGFsbG9jYXRpb24gYW5kIHNldHRpbmcgdXAgc29tZSBzb3J0IG9mIGZpbHRlciBmb3IgdHJhY2tpbmcgbWVtb3J5IGFjY2Vzcy4gRnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmUgSSB3YW50IHRvIHVuZGVyc3RhbmQ6CiogICBIb3cgdGhlIGZpbHRlciBpbnRlcmFjdHMgd2l0aCB0aGUgYWRkcmVzcyBzcGFjZS4KKiAgIFRoZSBjb21wdXRhdGlvbmFsIGNvbXBsZXhpdHkgb2YgZmlsdGVyIG9wZXJhdGlvbnMuCiogICBIb3cgd2VsbCB0aGUgZmlsdGVyIHBsYXlzIHdpdGggdGhlIHN5c3RlbS4KKiAgIFBvdGVudGlhbCBib3R0bGVuZWNrcy4KKiAgIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZSBuZXcgZmlsdGVyIGlzIHVzaW5nLgoKTGV0JiMzOTtzIGdldCBjcmFja2luZywgbGluZSBieSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjMwOlx0XHR9XG4gNjMxOlx0XHRyZXR1cm4gMDtcbiA2MzI6XHR9XG4gNjMzOlx0XG4gNjM0Olx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXG4gNjM1Olx0XHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXG4gNjM2Olx0e1xuIDYzNzpcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xuIDYzODpcdFxuIDYzOTpcdFx0ZmlsdGVyID0ga21hbGxvY19vYmooKmZpbHRlcik7XG4gNjQwOlx0XHRpZiAoIWZpbHRlcilcbiA2NDE6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjQyOlx0XHRmaWx0ZXItXHUwMDNldHlwZSA9IHR5cGU7XG4gNjQzOlx0XHRmaWx0ZXItXHUwMDNlbWF0Y2hpbmcgPSBtYXRjaGluZztcbiA2NDQ6XHRcdGZpbHRlci1cdTAwM2VhbGxvdyA9IGFsbG93O1xuIDY0NTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZmlsdGVyLVx1MDAzZWxpc3QpO1xuIDY0NjpcdFx0cmV0dXJuIGZpbHRlcjtcbiA2NDc6XHR9XG4gNjQ4Olx0XG4gNjQ5Olx0LyoqXG4gNjUwOlx0ICogZGFtb3NfZmlsdGVyX2Zvcl9vcHMoKSAtIFJldHVybiBpZiB0aGUgZmlsdGVyIGlzIG9wcy1oYW5kbGVkIG9uZS5cbiA2NTE6XHQgKiBAdHlwZTpcdHR5cGUgb2YgdGhlIGZpbHRlci5cbiA2NTI6XHQgKlxuIDY1MzpcdCAqIFJldHVybjogdHJ1ZSBpZiB0aGUgZmlsdGVyIG9mIEB0eXBlIG5lZWRzIHRvIGJlIGhhbmRsZWQgYnkgb3BzIGxheWVyLCBmYWxzZVxuIDY1NDpcdCAqIG90aGVyd2lzZS5cbiA2NTU6XHQgKi9cbiA2NTY6XHRib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSlcbiA2NTc6XHR7XG4gNjU4Olx0XHRzd2l0Y2ggKHR5cGUpIHtcbiA2NTk6XHRcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AuIEkga25vdyB3aGF0IERBTU9OIGlzLCBhbmQgSSYjMzk7bSBmYW1pbGlhciB3aXRoIHN5c2ZzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIGFkZGluZyBmaWx0ZXJpbmcgbWVjaGFuaXNtcyBvciBwYXJhbWV0ZXJzIHRvIERBTU9OIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gU3BlY2lmaWNhbGx5LCBJIGltYWdpbmUgaXQmIzM5O3MgYWJvdXQgc2V0dGluZyB1cCB0aGUgc2NoZW1lcyBmb3IgbW9uaXRvcmluZy4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGRlZmluaW5nIHdoYXQgbWVtb3J5IHJlZ2lvbnMgb3IgdHlwZXMgREFNT04gc2hvdWxkIGZvY3VzIG9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIGRvaW5nIGluIGRldGFpbCwgbGlrZTogV2hhdCBraW5kIG9mIGZpbHRlcnMgaXMgaXQgYWRkaW5nPyBBcmUgdGhleSBiYXNlZCBvbiBhZGRyZXNzIHJhbmdlcywgbWVtb3J5IHR5cGVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSG93IGlzIGl0IGhhbmRsaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQ/IElzIHRoZXJlIGVycm9yIGNoZWNraW5nPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgdG8gY29uc2lkZXIgd2hlbiBkZWFsaW5nIHdpdGggc3lzZnMgYW5kIERBTU9OJiMzOTtzIGludGVybmFsIHN0YXRlPyBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsgYW5kIGZpbmQgdGhlIHNvdXJjZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgxMDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnMgKnN5c2ZzX2ZpbHRlcnMpXG4yODExOlx0e1xuMjgxMjpcdFx0aW50IGk7XG4yODEzOlx0XG4yODE0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNmc19maWx0ZXJzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xuMjgxNTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqc3lzZnNfZmlsdGVyID1cbjI4MTY6XHRcdFx0XHRzeXNmc19maWx0ZXJzLVx1MDAzZWZpbHRlcnNfYXJyW2ldO1xuMjgxNzpcdFx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIgPVxuMjgxODpcdFx0XHRcdGRhbW9zX25ld19maWx0ZXIoc3lzZnNfZmlsdGVyLVx1MDAzZXR5cGUsXG4yODE5Olx0XHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2VtYXRjaGluZyxcbjI4MjA6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZWFsbG93KTtcbjI4MjE6XHRcdFx0aW50IGVycjtcbjI4MjI6XHRcbjI4MjM6XHRcdFx0aWYgKCFmaWx0ZXIpXG4yODI0Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yODI1Olx0XHRcdGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRykge1xuMjgyNjpcdFx0XHRcdGVyciA9IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoXG4yODI3Olx0XHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2VtZW1jZ19wYXRoLFxuMjgyODpcdFx0XHRcdFx0XHRcdTAwMjZmaWx0ZXItXHUwMDNlbWVtY2dfaWQpO1xuMjgyOTpcdFx0XHRcdGlmIChlcnIpIHtcbjI4MzA6XHRcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG4yODMxOlx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjgzMjpcdFx0XHRcdH1cbjI4MzM6XHRcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9BRERSKSB7XG4yODM0Olx0XHRcdFx0aWYgKHN5c2ZzX2ZpbHRlci1cdTAwM2VhZGRyX3JhbmdlLmVuZCBcdTAwM2NcbjI4MzU6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZWFkZHJfcmFuZ2Uuc3RhcnQpIHtcbjI4MzY6XHRcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG4yODM3Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI4Mzg6XHRcdFx0XHR9XG4yODM5Olx0XHRcdFx0ZmlsdGVyLVx1MDAzZWFkZHJfcmFuZ2UgPSBzeXNmc19maWx0ZXItXHUwMDNlYWRkcl9yYW5nZTtcbjI4NDA6XHRcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbjI4NDE6XHRcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuMjg0MjpcdFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbjI4NDM6XHRcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbjI4NDQ6XHRcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuMjg0NTpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbjI4NDY6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg0NzpcdFx0XHRcdH1cbjI4NDg6XHRcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbjI4NDk6XHRcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbjI4NTA6XHRcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcbjI4NTE6XHRcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbjI4NTI6XHRcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbjI4NTM6XHRcdFx0XHRpZiAoZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2UgZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuMjg1NDpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbjI4NTU6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg1NjpcdFx0XHRcdH1cbjI4NTc6XHRcdFx0fVxuMjg1ODpcdFxuMjg1OTpcdFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbjI4NjA6XHRcdH1cbjI4NjE6XHRcdHJldHVybiAwO1xuMjg2MjpcdH1cbjI4NjM6XHRcbjI4NjQ6XHRzdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgRGF0YSB3aXRoICYjMzk7ZGFtb25fcHJvYmVfaGl0c19tdnN1bSYjMzk7KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAuIFRoaXMgdmFyaWFibGUgbGlrZWx5IGhvbGRzIHNvbWUgY3JpdGljYWwgZGF0YSByZWxhdGVkIHRvIERhbW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIHVzZWQgYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUgbmFtZS4gTGV0JiMzOTtzIGZpcmUgdXAgYSBgZ3JlcGAgY29tbWFuZCB0byBsb29rIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBpbiB0aGUgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIGl0cyB1c2FnZSBhbmQgcHVycG9zZS4gSSBuZWVkIHRvIGdldCBhIGxpc3Qgb2YgdGhlIG9jY3VycmVuY2VzIHNvIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgaG93IGl0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfbXZzdW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDgtXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTM1MC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00Nzc9dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXG4tLVxubW0vZGFtb24vY29yZS5jLTQ4Ny1cdFx0ZWxzZSBpZiAobXYpXG5tbS9kYW1vbi9jb3JlLmM6NDg4Olx0XHRcdHN1bSAmIzQzOz0gZGFtb25fcHJvYmVfaGl0c19tdnN1bShpJiM0MzsmIzQzOywgciwgY3R4KSAqXG5tbS9kYW1vbi9jb3JlLmMtNDg5LVx0XHRcdFx0cHJvYmUtXHUwMDNld2VpZ2h0O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cdFx0c3lzX3Byb2JlID0gZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0Olx0XHRcdFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExNS1cdFx0aWYgKCFzeXNfcHJvYmUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgREFNT04gcHJvYmUgaGl0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBhbmQgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAgZnVuY3Rpb25zLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3Qgb2YgREFNT04sIGFuZCBJIHN1c3BlY3QgdGhleSYjMzk7cmUgaW52b2x2ZWQgaW4gaG93IHRoZSBtb25pdG9yIGFnZ3JlZ2F0ZXMgYW5kIHdlaWdocyBkYXRhIGZyb20gcHJvYmVzLiBJJiMzOTttIGd1ZXNzaW5nIHRoZXkmIzM5O3JlIGJvdGggZGVmaW5lZCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHNvIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIHRoYXQgZmlsZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdpbGwgbGlrZWx5IHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29yZSBsb2dpYyBiZWhpbmQgREFNT04mIzM5O3Mgb3BlcmF0aW9uLCBhbmQgaG9wZWZ1bGx5IHdpbGwgcHJvdmlkZSBzb21lIGluc2lnaHRzIGludG8gaG93IHRoaXMgbW9kdWxlIGtlZXBzIHRyYWNrIG9mIGFuZCB1c2VzIHByb2JlIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDU6XHRcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZW5yX2FjY2Vzc2VzLCByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsXG4gMzQ2Olx0XHRcdFx0bGVmdF93aW5kb3dfYnApO1xuIDM0NzpcdH1cbiAzNDg6XHRcbiAzNDk6XHR1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAzNTA6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIDM1MTpcdHtcbiAzNTI6XHRcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsLCBhZ2dyX2ludGVydmFsO1xuIDM1MzpcdFx0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XG4gMzU0Olx0XG4gMzU1Olx0XHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxO1xuIDM1NjpcdFx0YWdncl9pbnRlcnZhbCA9ICBjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA/IDogMTtcbiAzNTc6XHRcdHdpbmRvd19sZW4gPSBhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsO1xuIDM1ODpcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxuIDM1OTpcdFx0XHRcdFx0Y3R4LVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzKSlcbiAzNjA6XHRcdFx0bGVmdF93aW5kb3cgPSAwO1xuIDM2MTpcdFx0ZWxzZVxuIDM2MjpcdFx0XHRsZWZ0X3dpbmRvdyA9IGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyAtXG4gMzYzOlx0XHRcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzO1xuIDM2NDpcdFx0bGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTtcbiAzNjU6XHRcbiAzNjY6XHRcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcbiAzNjc6XHRcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF07XG4gMzY4Olx0XG4gMzY5Olx0XHRyZXR1cm4gZGFtb25fbXZzdW0oci1cdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXG4gMzcwOlx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xuIDM3MTpcdH1cbiAzNzI6XHRcbiAzNzM6XHQjaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxuIDM3NDpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIDM3NTpcdHtcbiAzNzY6XHRcdFdBUk5fT05DRShzdGFydCBcdTAwM2U9IGVuZCwgXCYjMzQ7c3RhcnQgJWx1IFx1MDAzZT0gZW5kICVsdVxcblwmIzM0Oywgc3RhcnQsIGVuZCk7XG4gMzc3Olx0fVxuIDM3ODpcdCNlbHNlXG4gMzc5Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gMzgwOlx0e1xuIDM4MTpcdH1cbiAzODI6XHQjZW5kaWZcbiAzODM6XHRcbiAzODQ6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcwMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCBpbiB0aGUgREFNT04gQ29yZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIERBTU9OIGNvcmUgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBvdXQgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgYW4gYXJndW1lbnQgcmVsYXRlZCB0byBmaWx0ZXJpbmcgY29tbWl0cywgbGlrZWx5IHVzZWQgd2hlbiBEQU1PTiBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1lbW9yeSByZWdpb25zIHRvIGFjdCB1cG9uLiBJdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXNwZWN0IG9mIGNvbW1pdCBiZWhhdmlvciwgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IHdvcmtzIGJlY2F1c2UgaXQmIzM5O3Mga2V5IHRvIGVpdGhlciBwZXJmb3JtYW5jZSB0dW5pbmcgb3IgZGVidWdnaW5nIGEgYmVoYXZpb3IgaW4gYSBkYW1vbi1yZWxhdGVkIGNvbnRleHQuIElzIGl0IGEgYml0bWFzaz8gQSBmbGFnPyBEb2VzIGl0IHJlbGF0ZSB0byBhIGNvbW1pdCB0aHJlc2hvbGQ/IEEgc3BlY2lmaWMgdHlwZSBvZiBjb21taXQgb3BlcmF0aW9uPyBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBlY29zeXN0ZW0uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaGluZCB0aGUgc2NlbmVzIHJlZ2FyZGluZyBob3cgdGhpcyBwYXJhbWV0ZXIgZ3VpZGVzIHRoZSBjb21taXQgbG9naWMgc28gSSBjYW4gc29sdmUgdGhlIGlzc3VlIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG4xMzIxOlx0XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxuMTMyMjpcdHtcbjEzMjM6XHRcdHN3aXRjaCAoZHN0LVx1MDAzZXR5cGUpIHtcbjEzMjQ6XHRcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XG4xMzI1Olx0XHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbjEzMjY6XHRcdFx0YnJlYWs7XG4xMzI3Olx0XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4xMzI4Olx0XHRcdGRzdC1cdTAwM2VhZGRyX3JhbmdlID0gc3JjLVx1MDAzZWFkZHJfcmFuZ2U7XG4xMzI5Olx0XHRcdGJyZWFrO1xuMTMzMDpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG4xMzMxOlx0XHRcdGRzdC1cdTAwM2V0YXJnZXRfaWR4ID0gc3JjLVx1MDAzZXRhcmdldF9pZHg7XG4xMzMyOlx0XHRcdGJyZWFrO1xuMTMzMzpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFOlxuMTMzNDpcdFx0XHRkc3QtXHUwMDNlc3pfcmFuZ2UgPSBzcmMtXHUwMDNlc3pfcmFuZ2U7XG4xMzM1Olx0XHRcdGJyZWFrO1xuMTMzNjpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4xMzM3Olx0XHRcdGRzdC1cdTAwM2VyYW5nZV9taW4gPSBzcmMtXHUwMDNlcmFuZ2VfbWluO1xuMTMzODpcdFx0XHRkc3QtXHUwMDNlcmFuZ2VfbWF4ID0gc3JjLVx1MDAzZXJhbmdlX21heDtcbjEzMzk6XHRcdFx0YnJlYWs7XG4xMzQwOlx0XHRkZWZhdWx0OlxuMTM0MTpcdFx0XHRicmVhaztcbjEzNDI6XHRcdH1cbjEzNDM6XHR9XG4xMzQ0Olx0XG4xMzQ1Olx0c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcihcbjEzNDY6XHRcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXG4xMzQ3Olx0e1xuMTM0ODpcdFx0ZHN0LVx1MDAzZXR5cGUgPSBzcmMtXHUwMDNldHlwZTtcbjEzNDk6XHRcdGRzdC1cdTAwM2VtYXRjaGluZyA9IHNyYy1cdTAwM2VtYXRjaGluZztcbjEzNTA6XHRcdGRzdC1cdTAwM2VhbGxvdyA9IHNyYy1cdTAwM2VhbGxvdztcbjEzNTE6XHRcdGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKGRzdCwgc3JjKTtcbjEzNTI6XHR9XG4xMzUzOlx0XG4xMzU0Olx0c3RhdGljIGludCBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTcKCQkJCQkJCW91dHB1dDogMjU1CgkJCQkJCQl0aG91Z2h0czogOTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBJbnRyb2R1Y2VkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O3ZlIGJlZW4gZXhhbWluaW5nIHRoZSBgbWluX3Nob3dgIGFuZCBgbWF4X3Nob3dgIG9wZXJhdGlvbnMgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBhdmVudWVzIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIG90aGVyIG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0aWVzLgoKRmlyc3QsIEkgZXhhbWluZWQgaG93IGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBzdHJ1Y3R1cmUuIE15IHJldmlldyByZXZlYWxzOgoKKiAgIFRoZSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBpcyBrZXkuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFsbCBmaWVsZHMsIGluY2x1ZGluZyBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAsIGFyZSB6ZXJvLWluaXRpYWxpemVkIGZyb20gdGhlIHN0YXJ0LiBUaGF0JiMzOTtzIGEgZ29vZCBmaXJzdCBzdGVwLgoqICAgV2hlbiB2YWx1ZXMgYXJlIHdyaXR0ZW4gdmlhIHN5c2ZzIChgbWluX3N0b3JlYCwgYG1heF9zdG9yZWApLCBga3N0cnRvdWxgIGNvcnJlY3RseSBwYXJzZXMgdGhlIGlucHV0IHN0cmluZyBhbmQgc3RvcmVzIHRoZSBwYXJzZWQgdW5zaWduZWQgbG9uZyB2YWx1ZXMgZGlyZWN0bHkgaW50byBgJmFtcDtmaWx0ZXItJmd0O3JhbmdlX21pbmAgYW5kIGAmYW1wO2ZpbHRlci0mZ3Q7cmFuZ2VfbWF4YC4KKiAgIFdoZW4gcmVhZCB2aWEgc3lzZnMgKGBtaW5fc2hvd2AsIGBtYXhfc2hvd2ApLCBgc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgZmlsdGVyLSZndDtyYW5nZV9taW4pYCBpcyB1c2VkIHRvIG91dHB1dCB0aGUgdmFsdWVzLiBUaGlzIGlzIGZvcm1hdHRlZCBvdXRwdXQgb2YgYSBkZWZpbmVkIHZhbHVlLCBzbyBubyB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgYmUgcHJlc2VudGVkLgoqICAgV2hlbiBhcHBseWluZyB0aGUgZmlsdGVyLCB0aGUgcmFuZ2UgaXMgY29waWVkIGNvcnJlY3RseS4KCkkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIGFsbCB0aGUgcmVsZXZhbnQgYXNwZWN0cyB0aG9yb3VnaGx5OgoKMS4gICoqS2VybmVsLXRvLVVzZXJzcGFjZSBEYXRhIFRyYW5zZmVyOioqIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgb3IgZmllbGRzIGFyZSBsZWFrZWQgdG8gdXNlcnNwYWNlIGJlY2F1c2UgYG1pbl9zaG93YCBhbmQgYG1heF9zaG93YCB1c2UgZm9ybWF0dGVkIG91dHB1dCBvZiBpbml0aWFsaXplZCB2YWx1ZXMuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIE5vIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBsb2dpYyBpcyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBga3phbGxvY2AgaXMgdXNlZCwgYW5kIGZpbHRlciBmaWVsZCBhc3NpZ25tZW50IGlzIGV4cGxpY2l0LgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLgo0LiAgKipCb3VuZHMgQ2hlY2tzL0xlbmd0aDoqKiBObyBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgdGhlIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXMuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggKipkb2VzIG5vdCoqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHRoYXQgbWlnaHQgYXJpc2UsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tlcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4KCk5vdywgbGV0JiMzOTtzIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTiB0byBmb3JtdWxhdGUgYSBjbGVhciBLTVNBTiByZWFzb25pbmc6CgoqICAgKipLQVNBTiAmYW1wOyBTdGFuZGFyZCBDaGVja2VyczoqKiBEZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGFuZCBzaW1pbGFyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgYXJlIG5vdCBpbiBwbGF5IGhlcmUuCiogICAqKktNU0FOOioqIFNwZWNpZmljYWxseSBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIFRoaXMgaXMgd2hhdCBJIHdhcyBpbnZlc3RpZ2F0aW5nLgoqICAgKipUaGUgUGF0Y2g6KiogQWRkcyBhIG5ldyBEQU1PTiBmaWx0ZXIgdHlwZSAoYHByb2JlX2hpdHNfd3N1bWApIGFuZCB1cGRhdGVzIHN5c2ZzIG1pbi9tYXggaGFuZGxlcnMuIEkmIzM5O3ZlIHNjcnV0aW5pemVkIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLgoqICAgKipBbGxvY2F0aW9uICZhbXA7IEluaXRpYWxpemF0aW9uOioqIGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgIHRvIGluaXRpYWxpemUgYWxsIGZpZWxkcyBhbmQgYGRhbW9zX25ld19maWx0ZXJgIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQsIGVuc3VyaW5nIGRlZmluZWQgdmFsdWVzIGFyZSBhbHdheXMgaW4gcGxheS4KKiAgICoqU3lzZnMgT3V0cHV0OioqICBTeXNmcyBzaG93IGZ1bmN0aW9ucyBwcm92aWRlIGZvcm1hdHRlZCBpbnRlZ2VyIG91dHB1dCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLgoqICAgKipDb25jbHVzaW9uOioqIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGUgY29kZSBpcyBzYWZlLgoKSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCkgYW5kIHJlZmFjdG9ycyBzeXNmcyBmaWx0ZXIgbWluL21heCBoYW5kbGluZyB0byBzdXBwb3J0IHByb2JlIGhpdCB3ZWlnaHRlZCBzdW0gcmFuZ2VzIGFsb25nc2lkZSBodWdlcGFnZSBzaXplcy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgc3lzZnMgZmlsdGVyIHN0cnVjdHVyZXMgKGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBXaGVuIGNvbnZlcnRpbmcgdG8ga2VybmVsIGZpbHRlcnMgKGBkYW1vc19maWx0ZXJgKSwgdGhlIHJhbmdlIGZpZWxkcyAoYHJhbmdlX21pbmAsIGByYW5nZV9tYXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIHN5c2ZzIGZpbHRlcnMuIFN5c2ZzIHNob3cgYXR0cmlidXRlcyB1c2UgYHN5c2ZzX2VtaXQoKWAgdG8gb3V0cHV0IGZvcm1hdHRlZCB1bnNpZ25lZCBsb25nIGludGVnZXJzLCBwcmVjbHVkaW5nIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZC5cbi0gS0FTQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgYW55IGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gcHJvYmUgYXJyYXlzLCBvciBhbGxvY2F0aW9uIGlzc3Vlcy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gKSBhbmQgcmVmYWN0b3JzIHN5c2ZzIGZpbHRlciBtaW4vbWF4IGhhbmRsaW5nIHRvIHN1cHBvcnQgcHJvYmUgaGl0IHdlaWdodGVkIHN1bSByYW5nZXMgYWxvbmdzaWRlIGh1Z2VwYWdlIHNpemVzLlxuXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBzeXNmcyBmaWx0ZXIgc3RydWN0dXJlcyAoYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgKSBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFdoZW4gY29udmVydGluZyB0byBrZXJuZWwgZmlsdGVycyAoYGRhbW9zX2ZpbHRlcmApLCB0aGUgcmFuZ2UgZmllbGRzIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gc3lzZnMgZmlsdGVycy4gU3lzZnMgc2hvdyBhdHRyaWJ1dGVzIHVzZSBgc3lzZnNfZW1pdCgpYCB0byBvdXRwdXQgZm9ybWF0dGVkIHVuc2lnbmVkIGxvbmcgaW50ZWdlcnMsIHByZWNsdWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkLlxuLSBLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnMgYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBhbnkgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiBwcm9iZSBhcnJheXMsIG9yIGFsbG9jYXRpb24gaXNzdWVzLlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMToyOTozMy45OTE4MTY2MzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcyOTUzMDI4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9wcm9iZV9oaXRzX3dzdW1cIixcbiAgICBcImRhbW9zX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9uX21lcmdlX3Njb3JlXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZSAoYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWApIGFuZCByZWZhY3RvcnMgc3lzZnMgZmlsdGVyIG1pbi9tYXggaGFuZGxpbmcgdG8gc3VwcG9ydCBwcm9iZSBoaXQgd2VpZ2h0ZWQgc3VtIHJhbmdlcyBhbG9uZ3NpZGUgaHVnZXBhZ2Ugc2l6ZXMuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgc3lzZnMgZmlsdGVyIHN0cnVjdHVyZXMgKGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBXaGVuIGNvbnZlcnRpbmcgdG8ga2VybmVsIGZpbHRlcnMgKGBkYW1vc19maWx0ZXJgKSwgdGhlIHJhbmdlIGZpZWxkcyAoYHJhbmdlX21pbmAsIGByYW5nZV9tYXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIHN5c2ZzIGZpbHRlcnMuIFN5c2ZzIHNob3cgYXR0cmlidXRlcyB1c2UgYHN5c2ZzX2VtaXQoKWAgdG8gb3V0cHV0IGZvcm1hdHRlZCB1bnNpZ25lZCBsb25nIGludGVnZXJzLCBwcmVjbHVkaW5nIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZC5cXG4tIEtBU0FOIC8gc3RhbmRhcmQgc2FuaXRpemVycyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIHByb2JlIGFycmF5cywgb3IgYWxsb2NhdGlvbiBpc3N1ZXMuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBtb25pdG9yaW5nIHJlZ2lvbnMgYmFzZWQgb24gdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzLiBJdCB1cGRhdGVzIGNvcmUgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLCBjb21taXQgZmlsdGVyIGFyZ3VtZW50IGhhbmRsaW5nLCBtb3Zpbmcgc3VtIHByb2JlIGhpdCBjYWxjdWxhdGlvbiwgYW5kIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWUgZmlsdGVyIGludGVyZmFjZS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBleHBvc2VkIHZpYSBzeXNmcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjMzLjk5MTgyMTM5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEwNjIwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTc3NDU0MmQ4Y2Q4NDZiNTI4ZGU2NzgxNWJlNjhjOTAwMGIyNDA1ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMToyOTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuQEAgLTU1MSw2ICs1NTEsMTAgQEAgYW5kIGBgZGFtb25fdGFyZ2V0X2lkeGBgLiAgVG8gYGB0eXBlYGAgZmlsZSwgeW91IGNhbiB3cml0ZSB0aGUgdHlwZSBvZiB0aGVcXG4gZmlsdGVyLiAgUmVmZXIgdG8gOnJlZjpgdGhlIGRlc2lnbiBkb2MgXFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc19maWx0ZXJzXFx1MDAzZWAgZm9yXFxuIGF2YWlsYWJsZSB0eXBlIG5hbWVzLCB0aGVpciBtZWFuaW5nIGFuZCBvbiB3aGF0IGxheWVyIHRob3NlIGFyZSBoYW5kbGVkLlxcbiBcXG4rRm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlXFxuK2hpdHMgd2VpZ2h0ZWQgc3VtIHZhbHVlIGZvciB0aGUgZmlsdGVyIHRvIGBgbWluYGAgYW5kIGBgbWF4YGAgZmlsZXMsXFxuK3Jlc3BlY3RpdmVseS5cXG4rXFxuIEZvciBgYG1lbWNnYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtZW1vcnkgY2dyb3VwIG9mIHRoZSBpbnRlcmVzdCBieVxcbiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG9cXG4gYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmRcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG5AQCAtODIyLDYgKzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuXFxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gYWRkcmVzcyByYW5nZS5cXG4gICAgIC0gdGFyZ2V0XFxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuXFxuKyAgICAtIHByb2JlX2hpdHNfd3N1bVxcbisgICAgICAgIC0gTWF0Y2hlcyB0byBtb25pdG9yaW5nIHJlZ2lvbnMgaGF2aW5nIGEgZ2l2ZW4gcmFuZ2Ugb2YgOnJlZjpgcHJvYmVcXG4rICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtIFxcdTAwM2NkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nXFx1MDAzZWAgdmFsdWUuXFxuIC0gT3BlcmF0aW9ucyBsYXllciBoYW5kbGVkLCBzdXBwb3J0ZWQgYnkgb25seSBgYHBhZGRyYGAgb3BlcmF0aW9ucyBzZXQuXFxuICAgICAtIGFub25cXG4gICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBjb250YWluaW5nIGRhdGEgdGhhdCBub3Qgc3RvcmVkIGluIGZpbGVzLlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5pbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbkBAIC0zOTksMTQgKzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7XFxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9VTk1BUFBFRDpcXHRVbm1hcHBlZCBwYWdlcy5cXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XFx0QWRkcmVzcyByYW5nZS5cXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcXHREYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC5cXG4rICogQERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcXHRwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS5cXG4gICogQE5SX0RBTU9TX0ZJTFRFUl9UWVBFUzpcXHROdW1iZXIgb2YgZmlsdGVyIHR5cGVzLlxcbiAgKlxcbi0gKiBBbGwgdHlwZXMgZXhjZXB0IFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUXFxuLSAqIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFxcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBhcyBhIHBhcnQgb2Ygc2NoZW1lXFxuLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICd0cmllZCcuICBJbiBjb250cmFzdCxcXG4tICogXFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kIFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZFxcbi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZFxcbi0gKiBhcyAndHJpZWQnLlxcbisgKiBBbGwgdHlwZXMgZXhjZXB0IFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSLCBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGFuZFxcbisgKiBcXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFxcdTAwMjZzdHJ1Y3RcXG4rICogZGFtb25fb3BlcmF0aW9ucyBhcyBhIHBhcnQgb2Ygc2NoZW1lIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkXFxuKyAqIGFzICd0cmllZCcuICBJbiBjb250cmFzdCwgXFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kXFxuKyAqIFxcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmVcXG4rICogdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZCBhcyAndHJpZWQnLlxcbiAgKlxcbiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZ1xcbiAgKiBcXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuXFxuQEAgLTQyMCw2ICs0MjEsNyBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHtcXG4gXFx0REFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsXFxuIFxcdERBTU9TX0ZJTFRFUl9UWVBFX0FERFIsXFxuIFxcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcXG4rXFx0REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxcbiBcXHROUl9EQU1PU19GSUxURVJfVFlQRVMsXFxuIH07XFxuIFxcbkBAIC00MzQsNiArNDM2LDggQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XFxuICAqXFx0XFx0XFx1MDAyNmRhbW9uX2N0eC1cXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpc1xcbiAgKlxcdFxcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC5cXG4gICogQHN6X3JhbmdlOlxcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cXG4rICogQHJhbmdlX21pbjpcXHRNaW5pbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cXG4rICogQHJhbmdlX21heDpcXHRNYXhpbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cXG4gICpcXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcXHUwMDI2ZGFtb3MtXFx1MDAzZWFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoXFxuICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGVcXG5AQCAtNDUwLDYgKzQ1NCwxMCBAQCBzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcXG4gXFx0XFx0aW50IHRhcmdldF9pZHg7XFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJhbmdlX21pbjtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XFxuK1xcdFxcdH07XFxuIFxcdH07XFxuIC8qIHByaXZhdGU6ICovXFxuIFxcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuQEAgLTEwNjUsNyArMTA3Myw3IEBAIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4tdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuK3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbiBcXG4gaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDY0NWNiMzY3MDE5YWUuLmQ5ZDU2ZjRiZTFhOTcgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTQ2OSwxMSArNDY5LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuICAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cXG4gICogQHI6XFx0XFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxcbiAgKiBAbGFzdDpcXHRpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLlxcbisgKiBAbXY6XFx0XFx0dXNlIG1vdmluZyBzdW0uXFxuICAqIEBjdHg6XFx0Y29udGV4dCBvZiBcXHUwMDI2ci5cXG4gICpcXG4gICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi5cXG4gICovXFxuLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuQEAgLTQ4Myw2ICs0ODQsOSBAQCB1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4gXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xcbiBcXHRcXHRpZiAobGFzdClcXG4gXFx0XFx0XFx0c3VtICs9IHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpKytdICogcHJvYmUtXFx1MDAzZXdlaWdodDtcXG4rXFx0XFx0ZWxzZSBpZiAobXYpXFxuK1xcdFxcdFxcdHN1bSArPSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkrKywgciwgY3R4KSAqXFxuK1xcdFxcdFxcdFxcdHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0c3VtICs9IHItXFx1MDAzZXByb2JlX2hpdHNbaSsrXSAqIHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuIFxcdH1cXG5AQCAtNjU0LDYgKzY1OCw3IEBAIGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4gXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxcbiBcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcXG4rXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTEzMjgsNiArMTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcXG4gXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFOlxcbiBcXHRcXHRkc3QtXFx1MDAzZXN6X3JhbmdlID0gc3JjLVxcdTAwM2Vzel9yYW5nZTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxcbitcXHRcXHRkc3QtXFx1MDAzZXJhbmdlX21pbiA9IHNyYy1cXHUwMDNlcmFuZ2VfbWluO1xcbitcXHRcXHRkc3QtXFx1MDAzZXJhbmdlX21heCA9IHNyYy1cXHUwMDNlcmFuZ2VfbWF4O1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtMjUwNiw3ICsyNTE1LDcgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xcbiBcXHRpbnQgdGFyZ2V0X2lkeCA9IDA7XFxuLVxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtO1xcbiBcXG4gXFx0c3dpdGNoIChmaWx0ZXItXFx1MDAzZXR5cGUpIHtcXG4gXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XFxuQEAgLTI1NDEsNiArMjU1MCwxMSBAQCBzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgZW5kIC0gci1cXHUwMDNlYXIuc3RhcnQpO1xcbiBcXHRcXHRtYXRjaGVkID0gdHJ1ZTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxcbitcXHRcXHR3c3VtID0gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLCB0cnVlLCBjdHgpO1xcbitcXHRcXHRtYXRjaGVkID0gZmlsdGVyLVxcdTAwM2VyYW5nZV9taW4gXFx1MDAzYz0gd3N1bSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHR3c3VtIFxcdTAwM2M9IGZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4O1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuQEAgLTM0NDksNyArMzQ2Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWVyZ2Vfc2NvcmUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXFxuIHtcXG4gXFx0aWYgKHVzZV9wcm9iZV9oaXRzKVxcbi1cXHRcXHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGN0eCk7XFxuK1xcdFxcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgZmFsc2UsIGN0eCk7XFxuIFxcdGlmIChsYXN0KVxcbiBcXHRcXHRyZXR1cm4gci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcztcXG4gXFx0cmV0dXJuIHItXFx1MDAzZW5yX2FjY2Vzc2VzO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xcbmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4gXFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG4gXFx0XFx0XFx0XFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgpLCBtYXhfd3N1bSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRyZXR1cm4gbWF4X3dzdW07XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbmluZGV4IGQ5YjgxZDdiNTkxMGUuLjNkZTRkODA0ZTA0OWYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuQEAgLTUzNCw3ICs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XFxuIFxcdGJvb2wgYWxsb3c7XFxuIFxcdGNoYXIgKm1lbWNnX3BhdGg7XFxuIFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XFxuLVxcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xcbitcXHR1bnNpZ25lZCBsb25nIHJhbmdlX21pbjtcXG4rXFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XFxuIFxcdGludCB0YXJnZXRfaWR4O1xcbiB9O1xcbiBcXG5AQCAtNTg4LDYgKzU4OSwxMCBAQCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0ge1xcbiBcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcXG4gXFx0XFx0Lm5hbWUgPSBcXFwidGFyZ2V0XFxcIixcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwicHJvYmVfaGl0c193c3VtXFxcIixcXG4rXFx0fSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBzc2l6ZV90IHR5cGVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5AQCAtNzc4LDcgKzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxuIFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG4gXFxuLVxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZmlsdGVyLVxcdTAwM2Vzel9yYW5nZS5taW4pO1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGZpbHRlci1cXHUwMDNlcmFuZ2VfbWluKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbkBAIC03ODYsNyArNzkxLDcgQEAgc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG4gXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbi1cXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2Vzel9yYW5nZS5taW4pO1xcbitcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2VyYW5nZV9taW4pO1xcbiBcXG4gXFx0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xcbiB9XFxuQEAgLTc5Nyw3ICs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxuIFxcbi1cXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWF4KTtcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWx1XFxcXG5cXFwiLCBmaWx0ZXItXFx1MDAzZXJhbmdlX21heCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5AQCAtODA1LDcgKzgxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxuIFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG4tXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWF4KTtcXG4rXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4KTtcXG4gXFxuIFxcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcXG4gfVxcbkBAIC0yODM1LDEyICsyODQwLDIwIEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxcbiBcXHRcXHR9IGVsc2UgaWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcXG4gXFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2V0YXJnZXRfaWR4ID0gc3lzZnNfZmlsdGVyLVxcdTAwM2V0YXJnZXRfaWR4O1xcbiBcXHRcXHR9IGVsc2UgaWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFKSB7XFxuLVxcdFxcdFxcdGlmIChzeXNmc19maWx0ZXItXFx1MDAzZXN6X3JhbmdlLm1pbiBcXHUwMDNlXFxuLVxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWF4KSB7XFxuK1xcdFxcdFxcdGlmIChzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21pbiBcXHUwMDNlXFxuK1xcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4KSB7XFxuK1xcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWluID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9taW47XFxuK1xcdFxcdFxcdGZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXg7XFxuK1xcdFxcdH0gZWxzZSBpZiAoZmlsdGVyLVxcdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkge1xcbitcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXJhbmdlX21pbiA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWluO1xcbitcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXJhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4O1xcbitcXHRcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VyYW5nZV9taW4gXFx1MDAzZSBmaWx0ZXItXFx1MDAzZXJhbmdlX21heCkge1xcbiBcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXN6X3JhbmdlID0gc3lzZnNfZmlsdGVyLVxcdTAwM2Vzel9yYW5nZTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXFxuaW5kZXggOWEzOGRjODlhMTU2ZS4uNGFlY2YzNGUzOWJlMiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXFxuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xcbkBAIC03MDQsNyArNzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcXG4gXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG4gXFx0XFx0XFx0XFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgpLCBtYXhfd3N1bSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKG1tKVxcbiBcXHRcXHRcXHRtbXB1dChtbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjM0LjYwMzI5NDIyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Njg4ODcyNjcxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9wcm9iZV9oaXRzX3dzdW1cIixcbiAgICBcImRhbW9zX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9uX21lcmdlX3Njb3JlXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkgYW5kIGFkZHMgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIG1vbml0b3JpbmcgcmVnaW9ucyBiYXNlZCBvbiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMuIEl0IHVwZGF0ZXMgY29yZSBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMsIGNvbW1pdCBmaWx0ZXIgYXJndW1lbnQgaGFuZGxpbmcsIG1vdmluZyBzdW0gcHJvYmUgaGl0IGNhbGN1bGF0aW9uLCBhbmQgdGhlIERBTU9OIHN5c2ZzIHNjaGVtZSBmaWx0ZXIgaW50ZXJmYWNlLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGV4cG9zZWQgdmlhIHN5c2ZzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Nzc0NTQyZDhjZDg0NmI1MjhkZTY3ODE1YmU2OGM5MDAwYjI0MDVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDE6Mjk6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCAwMjNjNjMzNDAyNGY4Li5kM2UzNzQwMDM2N2JkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5AQCAtNTUxLDYgKzU1MSwxMCBAQCBhbmQgYGBkYW1vbl90YXJnZXRfaWR4YGAuICBUbyBgYHR5cGVgYCBmaWxlLCB5b3UgY2FuIHdyaXRlIHRoZSB0eXBlIG9mIHRoZVxuIGZpbHRlci4gIFJlZmVyIHRvIDpyZWY6YHRoZSBkZXNpZ24gZG9jIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc19maWx0ZXJzXHUwMDNlYCBmb3JcbiBhdmFpbGFibGUgdHlwZSBuYW1lcywgdGhlaXIgbWVhbmluZyBhbmQgb24gd2hhdCBsYXllciB0aG9zZSBhcmUgaGFuZGxlZC5cbiBcbitGb3IgYGBwcm9iZV9oaXRzX3dzdW1gYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gcHJvYmVcbitoaXRzIHdlaWdodGVkIHN1bSB2YWx1ZSBmb3IgdGhlIGZpbHRlciB0byBgYG1pbmBgIGFuZCBgYG1heGBgIGZpbGVzLFxuK3Jlc3BlY3RpdmVseS5cbitcbiBGb3IgYGBtZW1jZ2BgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVtb3J5IGNncm91cCBvZiB0aGUgaW50ZXJlc3QgYnlcbiB3cml0aW5nIHRoZSBwYXRoIG9mIHRoZSBtZW1vcnkgY2dyb3VwIGZyb20gdGhlIGNncm91cHMgbW91bnQgcG9pbnQgdG9cbiBgYG1lbWNnX3BhdGhgYCBmaWxlLiAgRm9yIGBgYWRkcmBgIHR5cGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgc3RhcnQgYW5kIGVuZFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggYWFjODRkZTI2MWFhOC4uOGU5ODBkZGUzNjJkZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtODIyLDYgKzgyMiw5IEBAIEJlbG93IGBgdHlwZWBgIG9mIGZpbHRlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gICAgICAgICAtIEFwcGxpZWQgdG8gcGFnZXMgdGhhdCBiZWxvbmdpbmcgdG8gYSBnaXZlbiBhZGRyZXNzIHJhbmdlLlxuICAgICAtIHRhcmdldFxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gREFNT04gbW9uaXRvcmluZyB0YXJnZXQuXG4rICAgIC0gcHJvYmVfaGl0c193c3VtXG4rICAgICAgICAtIE1hdGNoZXMgdG8gbW9uaXRvcmluZyByZWdpb25zIGhhdmluZyBhIGdpdmVuIHJhbmdlIG9mIDpyZWY6YHByb2JlXG4rICAgICAgICAgIGhpdHMgd2VpZ2h0ZWQgc3VtIFx1MDAzY2RhbW9uX2Rlc2lnbl9hdHRyc19vbmx5X21vbml0b3JpbmdcdTAwM2VgIHZhbHVlLlxuIC0gT3BlcmF0aW9ucyBsYXllciBoYW5kbGVkLCBzdXBwb3J0ZWQgYnkgb25seSBgYHBhZGRyYGAgb3BlcmF0aW9ucyBzZXQuXG4gICAgIC0gYW5vblxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgY29udGFpbmluZyBkYXRhIHRoYXQgbm90IHN0b3JlZCBpbiBmaWxlcy5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDg3MWQyNmFkZjZhZTUuLjRhMzZmMzQ0YmJjN2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTM5OSwxNCArMzk5LDE1IEBAIHN0cnVjdCBkYW1vc19zdGF0IHtcbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6XHRVbm1hcHBlZCBwYWdlcy5cbiAgKiBAREFNT1NfRklMVEVSX1RZUEVfQUREUjpcdEFkZHJlc3MgcmFuZ2UuXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcdERhdGEgQWNjZXNzIE1vbml0b3JpbmcgdGFyZ2V0LlxuKyAqIEBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XHRwcm9iZV9oaXRzIHdlaWdodGVkIHN1bSByYW5nZS5cbiAgKiBATlJfREFNT1NfRklMVEVSX1RZUEVTOlx0TnVtYmVyIG9mIGZpbHRlciB0eXBlcy5cbiAgKlxuLSAqIEFsbCB0eXBlcyBleGNlcHQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUXG4tICogYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZVxuLSAqIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkIGFzICd0cmllZCcuICBJbiBjb250cmFzdCxcbi0gKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZFxuLSAqIGJ5IHRoZSBjb3JlIGxheWVyIGJlZm9yZSB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkXG4tICogYXMgJ3RyaWVkJy5cbisgKiBBbGwgdHlwZXMgZXhjZXB0IFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIsIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBhbmRcbisgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0gYXJlIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgXHUwMDI2c3RydWN0XG4rICogZGFtb25fb3BlcmF0aW9ucyBhcyBhIHBhcnQgb2Ygc2NoZW1lIGFjdGlvbiB0cnlpbmcsIGFuZCB0aGVyZWZvcmUgYWNjb3VudGVkXG4rICogYXMgJ3RyaWVkJy4gIEluIGNvbnRyYXN0LCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSIGFuZFxuKyAqIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCBmaWx0ZXJzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjb3JlIGxheWVyIGJlZm9yZVxuKyAqIHRyeWluZyBvZiB0aGUgYWN0aW9uLCBhbmQgdGhlcmVmb3JlIG5vdCBhY2NvdW50ZWQgYXMgJ3RyaWVkJy5cbiAgKlxuICAqIFN1cHBvcnQgZm9yIHRoZSBvcGVyYXRpb25zLWhhbmRsZWQgZmlsdGVycyBkZXBlbmRzIG9uIHRoZSBydW5uaW5nXG4gICogXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMuXG5AQCAtNDIwLDYgKzQyMSw3IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuIFx0REFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQsXG4gXHREQU1PU19GSUxURVJfVFlQRV9BRERSLFxuIFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuK1x0REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxuIFx0TlJfREFNT1NfRklMVEVSX1RZUEVTLFxuIH07XG4gXG5AQCAtNDM0LDYgKzQzNiw4IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuICAqXHRcdFx1MDAyNmRhbW9uX2N0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzXG4gICpcdFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULlxuICAqIEBzel9yYW5nZTpcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cbisgKiBAcmFuZ2VfbWluOlx0TWluaW11bSB2YWx1ZSBvZiByYW5nZSBhcmd1bWVudHMuXG4rICogQHJhbmdlX21heDpcdE1heGltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLlxuICAqXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcdTAwMjZkYW1vcy1cdTAwM2VhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBEQU1PUyBjaGVja3MgaWYgZWFjaFxuICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGVcbkBAIC00NTAsNiArNDU0LDEwIEBAIHN0cnVjdCBkYW1vc19maWx0ZXIge1xuIFx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xuIFx0XHRpbnQgdGFyZ2V0X2lkeDtcbiBcdFx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4rXHRcdFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4rXHRcdH07XG4gXHR9O1xuIC8qIHByaXZhdGU6ICovXG4gXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuQEAgLTEwNjUsNyArMTA3Myw3IEBAIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIHVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuLXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuK3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LCBib29sIG12LFxuIFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIFxuIGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ1Y2IzNjcwMTlhZS4uZDlkNTZmNGJlMWE5NyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtNDY5LDExICs0NjksMTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4gICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbiAgKiBAbGFzdDpcdGlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuXG4rICogQG12Olx0XHR1c2UgbW92aW5nIHN1bS5cbiAgKiBAY3R4Olx0Y29udGV4dCBvZiBcdTAwMjZyLlxuICAqXG4gICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi5cbiAgKi9cbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG5AQCAtNDgzLDYgKzQ4NCw5IEBAIHVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuIFx0XHRpZiAobGFzdClcbiBcdFx0XHRzdW0gKz0gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSsrXSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbitcdFx0ZWxzZSBpZiAobXYpXG4rXHRcdFx0c3VtICs9IGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSsrLCByLCBjdHgpICpcbitcdFx0XHRcdHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHN1bSArPSByLVx1MDAzZXByb2JlX2hpdHNbaSsrXSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiBcdH1cbkBAIC02NTQsNiArNjU4LDcgQEAgYm9vbCBkYW1vc19maWx0ZXJfZm9yX29wcyhlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUpXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfQUREUjpcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUOlxuK1x0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTEzMjgsNiArMTMzMywxMCBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcbiBcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcbiBcdFx0ZHN0LVx1MDAzZXN6X3JhbmdlID0gc3JjLVx1MDAzZXN6X3JhbmdlO1xuIFx0XHRicmVhaztcbitcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuK1x0XHRkc3QtXHUwMDNlcmFuZ2VfbWluID0gc3JjLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0ZHN0LVx1MDAzZXJhbmdlX21heCA9IHNyYy1cdTAwM2VyYW5nZV9tYXg7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjUwNiw3ICsyNTE1LDcgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuIFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGk7XG4gXHRpbnQgdGFyZ2V0X2lkeCA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHdzdW07XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbkBAIC0yNTQxLDYgKzI1NTAsMTEgQEAgc3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIGVuZCAtIHItXHUwMDNlYXIuc3RhcnQpO1xuIFx0XHRtYXRjaGVkID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbitcdFx0d3N1bSA9IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwgdHJ1ZSwgY3R4KTtcbitcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VyYW5nZV9taW4gXHUwMDNjPSB3c3VtIFx1MDAyNlx1MDAyNlxuK1x0XHRcdHdzdW0gXHUwMDNjPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0zNDQ5LDcgKzM0NjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxuIHtcbiBcdGlmICh1c2VfcHJvYmVfaGl0cylcbi1cdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xuK1x0XHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGZhbHNlLCBjdHgpO1xuIFx0aWYgKGxhc3QpXG4gXHRcdHJldHVybiByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XG4gXHRyZXR1cm4gci1cdTAwM2Vucl9hY2Nlc3NlcztcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggZDdjODE4Mjk0NDViYS4uYjhmNGQyODE2NWRkNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0fVxuIFx0cmV0dXJuIG1heF93c3VtO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggZDliODFkN2I1OTEwZS4uM2RlNGQ4MDRlMDQ5ZiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5AQCAtNTM0LDcgKzUzNCw4IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcbiBcdGJvb2wgYWxsb3c7XG4gXHRjaGFyICptZW1jZ19wYXRoO1xuIFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbi1cdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuK1x0dW5zaWduZWQgbG9uZyByYW5nZV9taW47XG4rXHR1bnNpZ25lZCBsb25nIHJhbmdlX21heDtcbiBcdGludCB0YXJnZXRfaWR4O1xuIH07XG4gXG5AQCAtNTg4LDYgKzU4OSwxMCBAQCBkYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0ge1xuIFx0XHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcbiBcdFx0Lm5hbWUgPSBcInRhcmdldFwiLFxuIFx0fSxcbitcdHtcbitcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0sXG4rXHRcdC5uYW1lID0gXCJwcm9iZV9oaXRzX3dzdW1cIixcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtNzc4LDcgKzc4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbiBcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbik7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2VyYW5nZV9taW4pO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtNzg2LDcgKzc5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuLVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbik7XG4rXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtNzk3LDcgKzgwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbiBcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2VyYW5nZV9tYXgpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtODA1LDcgKzgxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG4gXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xuLVx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCk7XG4rXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4KTtcbiBcbiBcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcbiB9XG5AQCAtMjgzNSwxMiArMjg0MCwyMCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcbiBcdFx0XHRmaWx0ZXItXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cdTAwM2V0YXJnZXRfaWR4O1xuIFx0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcbi1cdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1pbiBcdTAwM2Vcbi1cdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXN6X3JhbmdlLm1heCkge1xuK1x0XHRcdGlmIChzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzZVxuK1x0XHRcdFx0XHRzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4KSB7XG4rXHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuK1x0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXggPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHR9IGVsc2UgaWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkge1xuK1x0XHRcdGZpbHRlci1cdTAwM2VyYW5nZV9taW4gPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWluO1xuK1x0XHRcdGZpbHRlci1cdTAwM2VyYW5nZV9tYXggPSBzeXNmc19maWx0ZXItXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHRcdGlmIChmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzZSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4KSB7XG4gXHRcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGZpbHRlci1cdTAwM2Vzel9yYW5nZSA9IHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZTtcbiBcdFx0fVxuIFxuIFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggOWEzOGRjODlhMTU2ZS4uNGFlY2YzNGUzOWJlMiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC03MDQsNyArNzA0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpO1xuIFx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4gXHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG4tXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4rXHRcdFx0XHRcdFx0XHRmYWxzZSwgY3R4KSwgbWF4X3dzdW0pO1xuIFx0XHR9XG4gXHRcdGlmIChtbSlcbiBcdFx0XHRtbXB1dChtbSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMToyOTozNC42MDMyOTYxNTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDA5NjIwMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFBhdGNoIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoIGZvciB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyAoREFNT04pIHN1YnN5c3RlbS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgc29tZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGNhbGN1bGF0aW5nIHdlaWdodGVkIHN1bXMgb2YgcHJvYmUgaGl0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LlxuXG5NeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhZGRpbmcgbW9yZSBncmFudWxhcml0eSB0byBob3cgd2UgZmlsdGVyIGFuZCBhbmFseXplIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMuIFRoZSBrZXkgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIHRoZSBpbmNsdXNpb24gb2YgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAuIFRoaXMgbmV3IGZpbHRlciB0eXBlIGlzIGludHJvZHVjZWQgYWNyb3NzIHNldmVyYWwgZmlsZXMuIEluIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLCB0aGUgYWRkaXRpb25zIGluY2x1ZGUgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAsIGFsb25nIHdpdGggdXBkYXRlcyB0byB0aGUgYHN0cnVjdCBkYW1vc19maWx0ZXJgIHRvIGluY2x1ZGUgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgLCBhbmQgdGhlIHByb3RvdHlwZSBvZiBgZGFtb25fcHJvYmVfaGl0c193c3VtYC4gVGhlc2UgYWRkaXRpb25zIHBvaW50IHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2YgZmlsdGVyaW5nIGJhc2VkIG9uIGEgcmFuZ2UuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzIHNlZW1zIHRvIGJlIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBIZXJlLCBgZGFtb25fcHJvYmVfaGl0c193c3VtYCBpcyB1cGRhdGVkIHRvIGFjY2VwdCBhIGBib29sIG12YCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGxpa2VseSBmb3IgYSBcIm1vdmluZyBzdW1cIi4gVGhpcywgYWxvbmdzaWRlIHRoZSBjaGFuZ2VzIHRvIGBkYW1vc19maWx0ZXJfZm9yX29wc2AsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AsIGFuZCBgZGFtb3NfZmlsdGVyX21hdGNoYCwgaW5kaWNhdGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1vdmluZyBzdW0gY2FsY3VsYXRpb24gYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgZmlsdGVyaW5nIG1lY2hhbmlzbS4gSSBzZWUgYSBjb25uZWN0aW9uIG9mIHRoaXMgd2l0aCB0aGUgYGRhbW9uX21lcmdlX3Njb3JlYCBmdW5jdGlvbiwgd2hpY2ggbm93IGNhbGxzIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBhbmQgd2l0aGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCB3ZSBzZWUgdGhlIGNhbGxzIHRvIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIHdpdGggdGhlIGBmYWxzZWAgb3B0aW9uLlxuXG5GaW5hbGx5LCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCwgd2UgZ2V0IHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgbmV3IGZpbHRlci4gV2Ugc2VlIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIChcInByb2JlX2hpdHNfd3N1bVwiKSBhZGRlZCB0byB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24sIGFuZCBgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGJlaW5nIHJlZmFjdG9yZWQuIFRoZSByZXBsYWNlbWVudHMgb2YgYHN6X3JhbmdlYCB3aXRoIGByYW5nZV9taW5gIGFuZCBgcmFuZ2VfbWF4YCwgYWxvbmdzaWRlIHRoZSB1cGRhdGVzIHRvIHRoZSBgbWluX3Nob3dgLCBgbWluX3N0b3JlYCwgYG1heF9zaG93YCwgYG1heF9zdG9yZWAgZnVuY3Rpb25zLCBhcmUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbmV3IGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIGl0IGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGEgc29saWQgZW5oYW5jZW1lbnQgdG8gdGhlIERBTU9OIHN1YnN5c3RlbSwgd2hpY2ggbGlrZWx5IGltcHJvdmVzIGl0cyBhYmlsaXR5IHRvIGlkZW50aWZ5IGFuZCBvcHRpbWl6ZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTQxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6Mjk6NDEuMDEyOTE5NDkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzE3MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjQxLjA2MjI0MTAyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0Njk4MzAxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIE1ha2VmaWxlIGFuZCBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBidWlsZCBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBvcGVuIHVwIGBtbS9kYW1vbi9NYWtlZmlsZWAgYW5kIGBtbS9kYW1vbi9LY29uZmlnYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBidWlsZCBydWxlcyBhbmQgbGlrZWx5IHRoZSBtb2R1bGUgZGVmaW5pdGlvbnMgaW4gdGhlIE1ha2VmaWxlLiBGcm9tIGEgS2NvbmZpZyBwZXJzcGVjdGl2ZSwgSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIERBTU9OJ3MgZmVhdHVyZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBydW50aW1lIGJlaGF2aW9ycyB0aGF0IGFyZSBjb250cm9sbGVkIHRocm91Z2gga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgREFNT04gYW5kIHRvIHNlZSB0aGUgbW9kdWxhcml0eSBvZiB0aGUgZGVzaWduLCB3aGljaCBtaWdodCByZXZlYWwgYXNwZWN0cyByZWxhdGVkIHRvIGl0cyBzY2FsYWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5LiBBbmFseXppbmcgdGhlIE1ha2VmaWxlIHdpbGwgcXVpY2tseSBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcywgd2hpbGUgS2NvbmZpZyB3aWxsIGlsbHVtaW5hdGUgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGJha2VkIGludG8gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjQ1LjUzMjA3NDkzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjQ1LjUzMjEyODgwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMTg0ODQ5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgZmllbGQgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgREFNT04ncyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgREFNT04gc3Vic3lzdGVtLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY3J1Y2lhbCBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhleSBpbnRlcnJlbGF0ZSBpcyBlc3NlbnRpYWwuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGEgZmV3IGtleSBmZWF0dXJlczogYERBTU9OX1NZU0ZTYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1ZBRERSYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBvdmVyYXJjaGluZyBgREFNT05gIG9wdGlvbiBpdHNlbGYuIEkgd2FudCB0byBzZWUgd2hpY2ggb2YgdGhlc2UgYXJlIHJlcXVpcmVkIHRvIGJlIGVuYWJsZWQgZm9yIG90aGVycywgaWYgYW55IGhhdmUgZXh0ZXJuYWwgcHJlcmVxdWlzaXRlcyBvciBpbnRlcm5hbCBjb25mbGljdHMsIGFuZCBob3cgYWxsIHRoaXMgaW1wYWN0cyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIG1lbnRhbGx5IG1hcCB0aGUgY29uZmlndXJhdGlvbiBoaWVyYXJjaHkgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI4MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6Mjk6NDkuNTUwNjE2MjE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6Mjk6NDkuNTUwNzAzMzI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc3ODg1NDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogREFNT04gTU0gU3Vic3lzdGVtIEVuaGFuY2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBuZXcgZmVhdHVyZSBiZWluZyBhZGRlZCB0byBEQU1PTiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChNTSkgc3Vic3lzdGVtLiBUaGlzIGluY2x1ZGVzIGEgbmV3IGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gIERBTU9TIGZpbHRlciB0eXBlLiBJJ20gYWxzbyBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PUyBzY2hlbWUgZmlsdGVycywgc3BlY2lmaWNhbGx5IHRoZSBgbWluYCBhbmQgYG1heGAgYXR0cmlidXRlcy4gVGhpcyBhbHNvIG1lYW5zIHVwZGF0ZXMgdG8gY29yZSBmdW5jdGlvbnMgbGlrZSBgZGFtb25fcHJvYmVfaGl0c193c3VtYCwgYGRhbW9zX2ZpbHRlcl9tYXRjaGAsIGBkYW1vc19jb21taXRfZmlsdGVyX2FyZ2AsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzYCwgYW1vbmcgb3RoZXJzLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIHNvbWV0aGluZyBTeXprYWxsZXIgY2FuIGFjdHVhbGx5IHRhcmdldD8gVGhlIGdvb2QgbmV3cyBpcywgYWJzb2x1dGVseSwgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBpcyByZWFjaGFibGUgdGhyb3VnaCBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYCwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGludGVyZmFjZSBTeXprYWxsZXIgbG92ZXMgdG8gaW50ZXJhY3Qgd2l0aC4gQ3J1Y2lhbGx5LCB0aGlzIHRvdWNoZXMgY29yZSBEQU1PTiBjb2RlIGFuZCB0aGUgcGFyc2luZyBhbmQgbWF0Y2hpbmcgbG9naWMgZm9yIHRob3NlIHN5c2ZzIHNjaGVtZSBmaWx0ZXJzLlxuXG5UaGVyZWZvcmUsIHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuIE5vdywgbGV0J3MgZHJpbGwgZG93biBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGNoYW5nZWQgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgbmV3IGF0dGFjayBzdXJmYWNlIGxpZXMuIFRpbWUgdG8gZmluZCB0aGUga2V5IHN5bWJvbHMuXG5cbkxldCdzIGluc3BlY3QgdGhlIGRpZmYgYW5kIGxvb2sgYXQgdGhlIGNoYW5nZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBvZiBpbnRlcmVzdDpcbjEuICBgZGFtb25fcHJvYmVfaGl0c193c3VtYCAoaW4gbW0vZGFtb24vY29yZS5jKVxuMi4gIGBkYW1vc19maWx0ZXJfZm9yX29wc2AgKGluIG1tL2RhbW9uL2NvcmUuYylcbjMuICBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgIChpbiBtbS9kYW1vbi9jb3JlLmMpXG40LiAgYGRhbW9zX2ZpbHRlcl9tYXRjaGAgKGluIG1tL2RhbW9uL2NvcmUuYylcbjUuICBgZGFtb25fbWVyZ2Vfc2NvcmVgIChpbiBtbS9kYW1vbi9jb3JlLmMpXG42LiAgYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AgKGluIG1tL2RhbW9uL3BhZGRyLmMpXG43LiAgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgKGluIG1tL2RhbW9uL3ZhZGRyLmMpXG44LiAgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AgKGluIG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYylcbjkuICBgbWluX3N0b3JlYCAvIGBtYXhfc3RvcmVgIC8gYG1pbl9zaG93YCAvIGBtYXhfc2hvd2AgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgKHRob3VnaCBzdGF0aWMpXG5cbkknbGwgYWxzbyBoYXZlIHRvIGRvdWJsZS1jaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCBhbmQgYG1tL2RhbW9uL2NvcmUuY2AgZm9yIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgb3IgZW50cnkgcG9pbnRzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkIGR1cmluZyB0aGlzIHVwZGF0ZS4gTmVlZCB0byBnZXQgYSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTg5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6Mjk6NTUuMzI5NTYwNjYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY4MDkxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfZmlsdGVyX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNDk5PXN0YXRpYyB2b2lkIGRhbW9zX3VwZGF0ZV9zdGF0KHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNTEwLVxcbm1tL2RhbW9uL2NvcmUuYzoyNTExOnN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTI1MTItXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI1NjU9c3RhdGljIGJvb2wgZGFtb3NfY29yZV9maWx0ZXJfb3V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNTcxLVxcdGRhbW9zX2Zvcl9lYWNoX2NvcmVfZmlsdGVyKGZpbHRlciwgcykge1xcbm1tL2RhbW9uL2NvcmUuYzoyNTcyOlxcdFxcdGlmIChkYW1vc19maWx0ZXJfbWF0Y2goY3R4LCB0LCByLCBmaWx0ZXIsIGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMjU3My1cXHRcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VhbGxvdylcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTcwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU5NC1cXHQvKiByZWdpb24gaW4gdGhlIHJhbmdlICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1OTU6XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU5Ni1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYwMS1cXHRLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTYwMjpcXHRcXHRcXHRkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjAzLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAxKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjA4LVxcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNjA5OlxcdFxcdFxcdGRhbW9zX2ZpbHRlcl9tYXRjaChOVUxMLCB0LCByLCBmLCAxKSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MTAtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDEpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MTQtXFx0ci1cXHUwMDNlYXIuZW5kID0gNDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTYxNTpcXHRLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCwgZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYxNi1cXHQvKiBmaWx0ZXIgc2hvdWxkIGhhdmUgc3BsaXQgdGhlIHJlZ2lvbiAqL1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MzAtXFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTYzMTpcXHRcXHRcXHRkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjMyLVxcdC8qIGZpbHRlciBzaG91bGQgaGF2ZSBzcGxpdCB0aGUgcmVnaW9uICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjU1LjQzNjM4MDYzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDIxMjI1Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBzeXNmcy1zY2hlbWVzLmNgIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlsdGVyaW5nIHNjaGVtZXMgYXJlIGJlaW5nIGFkZGVkIGFuZCB1dGlsaXplZCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGludGVyYWN0aW9uIHdpdGggYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AgYW5kIGFueSBleHBvcnRlZCBmdW5jdGlvbnMgd2l0aGluIGBzeXNmcy1zY2hlbWVzLmNgLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBzeXN0ZW0gcmVzb3VyY2UgbWFuYWdlbWVudCwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gZW5zdXJlIHByb3BlciB1c2FnZSBhbmQgYXZvaWQgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLiBJJ2xsIGxpa2VseSBzdGFydCBieSBsaXN0aW5nIGFsbCBjYWxsZXJzIHRvIHRoYXQgZnVuY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBCZXlvbmQgdGhpcyBJIHdpbGwgYWxzbyBsb29rIGF0IGZ1bmN0aW9ucyBleHBvcnRlZCB3aXRoaW4gdGhlIHNvdXJjZSwgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgY2FsbHMgb3JpZ2luYXRpbmcgZnJvbSB2YXJpb3VzIHN1YnN5c3RlbSBkcml2ZXJzLCBwcm9iYWJseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHJlc291cmNlIGNvbnRyb2wsIGJhc2VkIG9uIHRoZSBgZGFtb25gIHByZWZpeC4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIGtub3cgYWxsIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6Mjk6NTguODU3NjA4MjI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTYyNDM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4MDM9Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MDgtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MDk6c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpzY2hlbWUsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MTAtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJzICpzeXNmc19maWx0ZXJzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5ODc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMzYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwMzc6XFx0ZXJyID0gZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHNjaGVtZSwgc3lzZnNfc2NoZW1lLVxcdTAwM2Vjb3JlX2ZpbHRlcnMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDM4LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQxLVxcdH1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0MjpcXHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc2NoZW1lLCBzeXNmc19zY2hlbWUtXFx1MDAzZW9wc19maWx0ZXJzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0Ni1cXHR9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNDc6XFx0ZXJyID0gZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzKHNjaGVtZSwgc3lzZnNfc2NoZW1lLVxcdTAwM2VmaWx0ZXJzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0OC1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjI5OjU4LjkwNzIzNjkxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzgyMjMyODYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gREFNT04gU3lzZnMgQ2FsbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gdW5kZXJzdGFuZGluZyB0aGUgdXNhZ2Ugb2YgdGhlIGBkYW1vbl9zeXNmc19ta19zY2hlbWVgIGFuZCBgZGFtb25fc3lzZnNfc2V0X3NjaGVtZXNgIHN5c3RlbSBjYWxscyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBmcmFtZXdvcmsuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIGNvbmZpZ3VyaW5nIGFuZCBtb2RpZnlpbmcgbW9uaXRvcmluZyBzY2hlbWVzIOKAkyBlc3NlbnRpYWxseSwgaG93IERBTU9OIGRlZmluZXMgYW5kIHRyYWNrcyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aG8ncyAqY2FsbGluZyogdGhlc2UgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGhlcmUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIFdoYXQncyB0cmlnZ2VyaW5nIHRoZXNlIGNhbGxzPyBJcyBpdCB1c2VyLXNwYWNlIHRvb2xzIGludGVyYWN0aW5nIHdpdGggc3lzZnMgZGlyZWN0bHk/IEFyZSB0aGV5IGJlaW5nIGluaXRpYXRlZCBieSBzb21lIGtlcm5lbC1sZXZlbCBjb21wb25lbnRzIG9yIG1vZHVsZXM/IFRoZSBcIndoeVwiIGlzIGFsc28gaW1wb3J0YW50OiAqd2h5KiBhcmUgdGhlc2Ugc2NoZW1lcyBiZWluZyBjcmVhdGVkIG9yIGFsdGVyZWQ/IEFyZSB0aGV5IGR5bmFtaWNhbGx5IGFkYXB0aW5nIGJhc2VkIG9uIHJ1bnRpbWUgY29uZGl0aW9ucywgb3IgYXJlIHRoZXkgc3RhdGljYWxseSBkZWZpbmVkIGF0IGJvb3Q/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlciBhbmQgdGhlIHRyaWdnZXJpbmcgY29uZGl0aW9ucyBpcyB0aGUga2V5IHRvIHRydWx5IHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGJlaGF2aW5nIGFuZCBwZXJmb3JtaW5nIHVuZGVyIHRoZSBob29kLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCBpbiBhbmFseXppbmcgYW55IERBTU9OIHJlbGF0ZWQgaXNzdWUgb3Igb3B0aW1pemF0aW9uIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMDoxMi43Mjk1Njk3MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjQyNTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N5c2ZzX21rX3NjaGVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk2Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9taWdyYXRlX2Rlc3Qoc3RydWN0IGRhbW9zICpzY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk4Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk4NzpzdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5ODgtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMwNjE9aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDY4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDY5OlxcdFxcdHNjaGVtZSA9IGRhbW9uX3N5c2ZzX21rX3NjaGVtZShzeXNmc19zY2hlbWVzLVxcdTAwM2VzY2hlbWVzX2FycltpXSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNzAtXFx0XFx0aWYgKCFzY2hlbWUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzA6MTIuNzc5MjE3MjI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNjI0Nzc2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGtleSBhcmVhcyBmb3IgZnVydGhlciBleGFtaW5hdGlvbiB3aXRoaW4gdGhlIGBtbS9kYW1vbmAgZnJhbWV3b3JrLCBhbmQgSSB0aGluayBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIGl0IG5vdy4gSSd2ZSBwaW5wb2ludGVkIHNldmVyYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29kZSB0aGF0IGxvb2sgbGlrZSBwcmltZSB0YXJnZXRzIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZXNlIFwiRm9jdXNTeW1ib2xzXCI6IGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb3NfZmlsdGVyX21hdGNoYCAoYW5kL29yIGBkYW1vc19jb3JlX2ZpbHRlcl9vdXRgKSwgYGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc2AsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGBkYW1vbl9tZXJnZV9zY29yZWAsIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AuIFRoZXNlIHNlZW0gY2VudHJhbCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSd2ZSBpZGVudGlmaWVkIGBEQU1PTmAgKHRoZSBjb3JlIGZyYW1ld29yayksIGBEQU1PTl9TWVNGU2AgKHRoZSBzeXNmcyBpbnRlcmZhY2UpLCBgREFNT05fUEFERFJgIChmb3IgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zKSwgYW5kIGBEQU1PTl9WQUREUmAgKGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucykuIEkndmUgYWxzbyB2ZXJpZmllZCB0aGVpciBkZXBlbmRlbmNpZXM6IGBEQU1PTl9TWVNGU2AgbmVlZHMgYERBTU9OYCBhbmQgYFNZU0ZTYCwgYW5kIGJvdGggYERBTU9OX1BBRERSYCBhbmQgYERBTU9OX1ZBRERSYCByZXF1aXJlIGBEQU1PTmAgYW5kIGBNTVVgLiBUaGlzIGFsbCBjaGVja3Mgb3V0LlxuXG5UbyBiZSBleHRyYSB0aG9yb3VnaCwgSSd2ZSBqdXN0IGRvbmUgYSBmaW5hbCBzd2VlcCB0byBjb25maXJtIGFsbCB0aGUgZGV0YWlscyBhcmUgYWNjdXJhdGUuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgYWxsIHJlcXVpcmVkIGFuZCB0aGUgc3ltYm9scyBsaXN0ZWQgYXJlIGluZGVlZCBpbXBvcnRhbnQuXG5cbkkndmUgYWxzbyBwZXJmb3JtZWQgYSBzYW5pdHkgY2hlY2sgb24gbXkgcmVhc29uaW5nLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmlsdGVyIHR5cGUsIGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gLCB3aGljaCBpcyBhbGwgYWJvdXQgbWF0Y2hpbmcgYW5kIGZpbHRlcmluZyBtZW1vcnkgcmVnaW9ucyBiYXNlZCBvbiBhIG1vdmluZyBzdW0gb2Ygd2VpZ2h0ZWQgcHJvYmUgaGl0cy4gVGhhdCdzIGEgbmV3IGxheWVyIG9mIGNvbXBsZXhpdHkgd2l0aGluIERBTU9OLCBhbmQgaXQgdG91Y2hlcyBjb3JlLCBwYWRkciwgdmFkZHIgYW5kIHN5c2ZzIHNjaGVtZSBpbnRlcmZhY2VzLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvZGUgZXhlY3V0aW9uIHBhdGhzLCBhbmQgcG90ZW50aWFsbHksIG5ldyBhcmVhcyBmb3IgZXhwbG9yYXRpb24uXG5cbldpdGggbXkgYXNzZXNzbWVudCBjb21wbGV0ZSwgSSdtIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODg3LCJPdXRwdXRUb2tlbnMiOjI0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMDo0My40MDM5OTY3MjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjU2MDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9wcm9iZV9oaXRzX3dzdW1cIixcbiAgICBcImRhbW9zX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVyc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9uX21lcmdlX3Njb3JlXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSkgYW5kIGFkZHMgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIG1vbml0b3JpbmcgcmVnaW9ucyBiYXNlZCBvbiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMuIEl0IHVwZGF0ZXMgY29yZSBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMsIGNvbW1pdCBmaWx0ZXIgYXJndW1lbnQgaGFuZGxpbmcsIG1vdmluZyBzdW0gcHJvYmUgaGl0IGNhbGN1bGF0aW9uLCBhbmQgdGhlIERBTU9OIHN5c2ZzIHNjaGVtZSBmaWx0ZXIgaW50ZXJmYWNlLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGV4cG9zZWQgdmlhIHN5c2ZzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3Byb2JlX2hpdHNfd3N1bVwiLFxuICAgIFwiZGFtb3NfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vc19jb21taXRfZmlsdGVyX2FyZ1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZV9maWx0ZXJzXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fbWVyZ2Vfc2NvcmVcIixcbiAgICBcImRhbW9uX3BhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fdmFfYXBwbHlfcHJvYmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZSAoREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNKSBhbmQgYWRkcyBzdXBwb3J0IGZvciBmaWx0ZXJpbmcgbW9uaXRvcmluZyByZWdpb25zIGJhc2VkIG9uIHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cy4gSXQgdXBkYXRlcyBjb3JlIERBTU9OIGZpbHRlciBtYXRjaGluZyBsb2dpYywgY29tbWl0IGZpbHRlciBhcmd1bWVudCBoYW5kbGluZywgbW92aW5nIHN1bSBwcm9iZSBoaXQgY2FsY3VsYXRpb24sIGFuZCB0aGUgREFNT04gc3lzZnMgc2NoZW1lIGZpbHRlciBpbnRlcmZhY2UuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZXhwb3NlZCB2aWEgc3lzZnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMDo0My40OTA1NjU0NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzk2NTQ0NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzA6NDMuNDkxMjY5OTk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDc3OTU4MzUzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgREFNT1MgZmlsdGVyIHR5cGUgKGBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU1gKSBhbmQgcmVmYWN0b3JzIHN5c2ZzIGZpbHRlciBtaW4vbWF4IGhhbmRsaW5nIHRvIHN1cHBvcnQgcHJvYmUgaGl0IHdlaWdodGVkIHN1bSByYW5nZXMgYWxvbmdzaWRlIGh1Z2VwYWdlIHNpemVzLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHN5c2ZzIGZpbHRlciBzdHJ1Y3R1cmVzIChgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcmApIGFyZSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gV2hlbiBjb252ZXJ0aW5nIHRvIGtlcm5lbCBmaWx0ZXJzIChgZGFtb3NfZmlsdGVyYCksIHRoZSByYW5nZSBmaWVsZHMgKGByYW5nZV9taW5gLCBgcmFuZ2VfbWF4YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBzeXNmcyBmaWx0ZXJzLiBTeXNmcyBzaG93IGF0dHJpYnV0ZXMgdXNlIGBzeXNmc19lbWl0KClgIHRvIG91dHB1dCBmb3JtYXR0ZWQgdW5zaWduZWQgbG9uZyBpbnRlZ2VycywgcHJlY2x1ZGluZyBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQuXFxuLSBLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnMgYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBhbnkgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiBwcm9iZSBhcnJheXMsIG9yIGFsbG9jYXRpb24gaXNzdWVzLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTc3NDU0MmQ4Y2Q4NDZiNTI4ZGU2NzgxNWJlNjhjOTAwMGIyNDA1ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAxOjI5OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggMDIzYzYzMzQwMjRmOC4uZDNlMzc0MDAzNjdiZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTU1MSw2ICs1NTEsMTAgQEAgYW5kIGBgZGFtb25fdGFyZ2V0X2lkeGBgLiAgVG8gYGB0eXBlYGAgZmlsZSwgeW91IGNhbiB3cml0ZSB0aGUgdHlwZSBvZiB0aGVcbiBmaWx0ZXIuICBSZWZlciB0byA6cmVmOmB0aGUgZGVzaWduIGRvYyBcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVyc1x1MDAzZWAgZm9yXG4gYXZhaWxhYmxlIHR5cGUgbmFtZXMsIHRoZWlyIG1lYW5pbmcgYW5kIG9uIHdoYXQgbGF5ZXIgdGhvc2UgYXJlIGhhbmRsZWQuXG4gXG4rRm9yIGBgcHJvYmVfaGl0c193c3VtYGAgdHlwZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb2JlXG4raGl0cyB3ZWlnaHRlZCBzdW0gdmFsdWUgZm9yIHRoZSBmaWx0ZXIgdG8gYGBtaW5gYCBhbmQgYGBtYXhgYCBmaWxlcyxcbityZXNwZWN0aXZlbHkuXG4rXG4gRm9yIGBgbWVtY2dgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1lbW9yeSBjZ3JvdXAgb2YgdGhlIGludGVyZXN0IGJ5XG4gd3JpdGluZyB0aGUgcGF0aCBvZiB0aGUgbWVtb3J5IGNncm91cCBmcm9tIHRoZSBjZ3JvdXBzIG1vdW50IHBvaW50IHRvXG4gYGBtZW1jZ19wYXRoYGAgZmlsZS4gIEZvciBgYGFkZHJgYCB0eXBlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmRcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbmluZGV4IGFhYzg0ZGUyNjFhYTguLjhlOTgwZGRlMzYyZGUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTgyMiw2ICs4MjIsOSBAQCBCZWxvdyBgYHR5cGVgYCBvZiBmaWx0ZXJzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgICAgICAgLSBBcHBsaWVkIHRvIHBhZ2VzIHRoYXQgYmVsb25naW5nIHRvIGEgZ2l2ZW4gYWRkcmVzcyByYW5nZS5cbiAgICAgLSB0YXJnZXRcbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGJlbG9uZ2luZyB0byBhIGdpdmVuIERBTU9OIG1vbml0b3JpbmcgdGFyZ2V0LlxuKyAgICAtIHByb2JlX2hpdHNfd3N1bVxuKyAgICAgICAgLSBNYXRjaGVzIHRvIG1vbml0b3JpbmcgcmVnaW9ucyBoYXZpbmcgYSBnaXZlbiByYW5nZSBvZiA6cmVmOmBwcm9iZVxuKyAgICAgICAgICBoaXRzIHdlaWdodGVkIHN1bSBcdTAwM2NkYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nXHUwMDNlYCB2YWx1ZS5cbiAtIE9wZXJhdGlvbnMgbGF5ZXIgaGFuZGxlZCwgc3VwcG9ydGVkIGJ5IG9ubHkgYGBwYWRkcmBgIG9wZXJhdGlvbnMgc2V0LlxuICAgICAtIGFub25cbiAgICAgICAgIC0gQXBwbGllZCB0byBwYWdlcyB0aGF0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IG5vdCBzdG9yZWQgaW4gZmlsZXMuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCA4NzFkMjZhZGY2YWU1Li40YTM2ZjM0NGJiYzdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0zOTksMTQgKzM5OSwxNSBAQCBzdHJ1Y3QgZGFtb3Nfc3RhdCB7XG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVEOlx0VW5tYXBwZWQgcGFnZXMuXG4gICogQERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XHRBZGRyZXNzIHJhbmdlLlxuICAqIEBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XHREYXRhIEFjY2VzcyBNb25pdG9yaW5nIHRhcmdldC5cbisgKiBAREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlx0cHJvYmVfaGl0cyB3ZWlnaHRlZCBzdW0gcmFuZ2UuXG4gICogQE5SX0RBTU9TX0ZJTFRFUl9UWVBFUzpcdE51bWJlciBvZiBmaWx0ZXIgdHlwZXMuXG4gICpcbi0gKiBBbGwgdHlwZXMgZXhjZXB0IFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX0FERFIgYW5kIFx1MDAyNkRBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVFxuLSAqIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGFzIGEgcGFydCBvZiBzY2hlbWVcbi0gKiBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZCBhcyAndHJpZWQnLiAgSW4gY29udHJhc3QsXG4tICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmQgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfVEFSR0VUIGZpbHRlcnMgYXJlIGhhbmRsZWRcbi0gKiBieSB0aGUgY29yZSBsYXllciBiZWZvcmUgdHJ5aW5nIG9mIHRoZSBhY3Rpb24sIGFuZCB0aGVyZWZvcmUgbm90IGFjY291bnRlZFxuLSAqIGFzICd0cmllZCcuXG4rICogQWxsIHR5cGVzIGV4Y2VwdCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9BRERSLCBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgYW5kXG4rICogXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNIGFyZSBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdFxuKyAqIGRhbW9uX29wZXJhdGlvbnMgYXMgYSBwYXJ0IG9mIHNjaGVtZSBhY3Rpb24gdHJ5aW5nLCBhbmQgdGhlcmVmb3JlIGFjY291bnRlZFxuKyAqIGFzICd0cmllZCcuICBJbiBjb250cmFzdCwgXHUwMDI2REFNT1NfRklMVEVSX1RZUEVfQUREUiBhbmRcbisgKiBcdTAwMjZEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQgZmlsdGVycyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSBsYXllciBiZWZvcmVcbisgKiB0cnlpbmcgb2YgdGhlIGFjdGlvbiwgYW5kIHRoZXJlZm9yZSBub3QgYWNjb3VudGVkIGFzICd0cmllZCcuXG4gICpcbiAgKiBTdXBwb3J0IGZvciB0aGUgb3BlcmF0aW9ucy1oYW5kbGVkIGZpbHRlcnMgZGVwZW5kcyBvbiB0aGUgcnVubmluZ1xuICAqIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLlxuQEAgLTQyMCw2ICs0MjEsNyBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHtcbiBcdERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVELFxuIFx0REFNT1NfRklMVEVSX1RZUEVfQUREUixcbiBcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcbitcdERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTSxcbiBcdE5SX0RBTU9TX0ZJTFRFUl9UWVBFUyxcbiB9O1xuIFxuQEAgLTQzNCw2ICs0MzYsOCBAQCBlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHtcbiAgKlx0XHRcdTAwMjZkYW1vbl9jdHgtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpc1xuICAqXHRcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC5cbiAgKiBAc3pfcmFuZ2U6XHRTaXplIHJhbmdlIGlmIEB0eXBlIGlzIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUuXG4rICogQHJhbmdlX21pbjpcdE1pbmltdW0gdmFsdWUgb2YgcmFuZ2UgYXJndW1lbnRzLlxuKyAqIEByYW5nZV9tYXg6XHRNYXhpbXVtIHZhbHVlIG9mIHJhbmdlIGFyZ3VtZW50cy5cbiAgKlxuICAqIEJlZm9yZSBhcHBseWluZyB0aGUgXHUwMDI2ZGFtb3MtXHUwMDNlYWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2hcbiAgKiBieXRlIG9mIHRoZSByZWdpb24gbWF0Y2hlcyB0byB0aGlzIGdpdmVuIGNvbmRpdGlvbiBhbmQgYXZvaWQgYXBwbHlpbmcgdGhlXG5AQCAtNDUwLDYgKzQ1NCwxMCBAQCBzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcbiBcdFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbiBcdFx0aW50IHRhcmdldF9pZHg7XG4gXHRcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWF4O1xuK1x0XHR9O1xuIFx0fTtcbiAvKiBwcml2YXRlOiAqL1xuIFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbkBAIC0xMDY1LDcgKzEwNzMsNyBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiBcbiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NWNiMzY3MDE5YWUuLmQ5ZDU2ZjRiZTFhOTcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTQ2OSwxMSArNDY5LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxuICAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG4gICogQGxhc3Q6XHRpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLlxuKyAqIEBtdjpcdFx0dXNlIG1vdmluZyBzdW0uXG4gICogQGN0eDpcdGNvbnRleHQgb2YgXHUwMDI2ci5cbiAgKlxuICAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXG4gICovXG4tdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4rdW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsIGJvb2wgbXYsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xuQEAgLTQ4Myw2ICs0ODQsOSBAQCB1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbiBcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbiBcdFx0aWYgKGxhc3QpXG4gXHRcdFx0c3VtICs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4rXHRcdGVsc2UgaWYgKG12KVxuK1x0XHRcdHN1bSArPSBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGkrKywgciwgY3R4KSAqXG4rXHRcdFx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHRcdGVsc2VcbiBcdFx0XHRzdW0gKz0gci1cdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHR9XG5AQCAtNjU0LDYgKzY1OCw3IEBAIGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuIFx0c3dpdGNoICh0eXBlKSB7XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcbitcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbkBAIC0xMzI4LDYgKzEzMzMsMTAgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG4gXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkU6XG4gXHRcdGRzdC1cdTAwM2Vzel9yYW5nZSA9IHNyYy1cdTAwM2Vzel9yYW5nZTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTTpcbitcdFx0ZHN0LVx1MDAzZXJhbmdlX21pbiA9IHNyYy1cdTAwM2VyYW5nZV9taW47XG4rXHRcdGRzdC1cdTAwM2VyYW5nZV9tYXggPSBzcmMtXHUwMDNlcmFuZ2VfbWF4O1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1MDYsNyArMjUxNSw3IEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xuIFx0aW50IHRhcmdldF9pZHggPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCB3c3VtO1xuIFxuIFx0c3dpdGNoIChmaWx0ZXItXHUwMDNldHlwZSkge1xuIFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG5AQCAtMjU0MSw2ICsyNTUwLDExIEBAIHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBlbmQgLSByLVx1MDAzZWFyLnN0YXJ0KTtcbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU06XG4rXHRcdHdzdW0gPSBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsIHRydWUsIGN0eCk7XG4rXHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluIFx1MDAzYz0gd3N1bSBcdTAwMjZcdTAwMjZcbitcdFx0XHR3c3VtIFx1MDAzYz0gZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtMzQ0OSw3ICszNDYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4gXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcbiB7XG4gXHRpZiAodXNlX3Byb2JlX2hpdHMpXG4tXHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcbitcdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBmYWxzZSwgY3R4KTtcbiBcdGlmIChsYXN0KVxuIFx0XHRyZXR1cm4gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xuIFx0cmV0dXJuIHItXHUwMDNlbnJfYWNjZXNzZXM7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IGQ3YzgxODI5NDQ1YmEuLmI4ZjRkMjgxNjVkZDcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbiBcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbi1cdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbitcdFx0XHRcdFx0XHRcdGZhbHNlLCBjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiBtYXhfd3N1bTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbmluZGV4IGQ5YjgxZDdiNTkxMGUuLjNkZTRkODA0ZTA0OWYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTUzNCw3ICs1MzQsOCBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XG4gXHRib29sIGFsbG93O1xuIFx0Y2hhciAqbWVtY2dfcGF0aDtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4tXHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbitcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xuK1x0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XG4gXHRpbnQgdGFyZ2V0X2lkeDtcbiB9O1xuIFxuQEAgLTU4OCw2ICs1ODksMTAgQEAgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbiBcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsXG4gXHRcdC5uYW1lID0gXCJ0YXJnZXRcIixcbiBcdH0sXG4rXHR7XG4rXHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNLFxuK1x0XHQubmFtZSA9IFwicHJvYmVfaGl0c193c3VtXCIsXG4rXHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc3OCw3ICs3ODMsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsdVxcblwiLCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWluKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTc4Niw3ICs3OTEsNyBAQCBzdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4pO1xuK1x0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXJhbmdlX21pbik7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7XG4gfVxuQEAgLTc5Nyw3ICs4MDIsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG4gXG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIGZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsdVxcblwiLCBmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4KTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTgwNSw3ICs4MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxuIFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbi1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpO1xuK1x0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXJhbmdlX21heCk7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7XG4gfVxuQEAgLTI4MzUsMTIgKzI4NDAsMjAgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpzY2hlbWUsXG4gXHRcdH0gZWxzZSBpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VUKSB7XG4gXHRcdFx0ZmlsdGVyLVx1MDAzZXRhcmdldF9pZHggPSBzeXNmc19maWx0ZXItXHUwMDNldGFyZ2V0X2lkeDtcbiBcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFKSB7XG4tXHRcdFx0aWYgKHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZS5taW4gXHUwMDNlXG4tXHRcdFx0XHRcdHN5c2ZzX2ZpbHRlci1cdTAwM2Vzel9yYW5nZS5tYXgpIHtcbitcdFx0XHRpZiAoc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2VcbitcdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuK1x0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbitcdFx0fSBlbHNlIGlmIChmaWx0ZXItXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcbitcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21pbjtcbitcdFx0XHRmaWx0ZXItXHUwMDNlcmFuZ2VfbWF4ID0gc3lzZnNfZmlsdGVyLVx1MDAzZXJhbmdlX21heDtcbitcdFx0XHRpZiAoZmlsdGVyLVx1MDAzZXJhbmdlX21pbiBcdTAwM2UgZmlsdGVyLVx1MDAzZXJhbmdlX21heCkge1xuIFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRmaWx0ZXItXHUwMDNlc3pfcmFuZ2UgPSBzeXNmc19maWx0ZXItXHUwMDNlc3pfcmFuZ2U7XG4gXHRcdH1cbiBcbiBcdFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IDlhMzhkYzg5YTE1NmUuLjRhZWNmMzRlMzliZTIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNzA0LDcgKzcwNCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbiBcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuIFx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuLVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0XHRpZiAobW0pXG4gXHRcdFx0bW1wdXQobW0pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzA6NDMuNDkxMjcxMzE2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxMTM3NzE2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byByZWFsbHkgZGlnIGludG8gd2hhdCdzIGJlaW5nIGFkZGVkIGFuZCBjaGFuZ2VkLlxuXG5JdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlOiBgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCBmb3IgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy4gVGhlIGNvZGUgY2hhbmdlcyBzZWVtIHByZXR0eSBmb2N1c2VkLCB3aGljaCBpcyBnb29kLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpbiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgdGhlIGVudW0gYGRhbW9zX2ZpbHRlcl90eXBlYCBub3cgaW5jbHVkZXMgdGhlIG5ldyB0eXBlLCBhbmQgdGhlIGBzdHJ1Y3QgZGFtb3NfZmlsdGVyYCBpcyB1cGRhdGVkIHdpdGggYSByYW5nZSBzdHJ1Y3R1cmUgKGByYW5nZV9taW5gLCBgcmFuZ2VfbWF4YCkgaW5zaWRlIHRoZSB1bmlvbi4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCB0ZWxscyB1cyB0aGUgZGF0YSB0aGF0IGlzIG5lZWRlZCBmb3IgdGhlIGZpbHRlci4gQWxzbywgdGhlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIHNpZ25hdHVyZSBpcyB1cGRhdGVkIHdpdGggYGJvb2wgbXZgIHdoaWNoIGluZGljYXRlcyB0aGVyZSBhcmUgb3B0aW9ucyBpbiBpdHMgYmVoYXZpb3VyLlxuXG5JbiBgbW0vZGFtb24vY29yZS5jYCwgdGhlIGNoYW5nZXMgc2hvdyBob3cgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpYCBpcyBtb2RpZmllZCB0byBoYW5kbGUgdGhlIG5ldyBgYm9vbCBtdmAgYXJndW1lbnQuIEludGVyZXN0aW5nIHRoYXQgYGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKClgIHJldHVybnMgZmFsc2UgZm9yIHRoaXMgZmlsdGVyIHR5cGUsIHdoaWNoIGlzIGdvb2QgaW4gdGhhdCBpdCBpbmRpY2F0ZXMgdGhpcyBpcyBhIG5ldyB0eXBlLiBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoKWAgaXMgYWxzbyB1cGRhdGVkIHRvIGNvcHkgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIHdoaWNoIGlzIGltcG9ydGFudCBpbiBob3cgdGhlIGZpbHRlciBpcyBjb25maWd1cmVkLCBhbmQgYGRhbW9zX2ZpbHRlcl9tYXRjaCgpYCBoYW5kbGVzIHRoZSBuZXcgYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWAgYnkgY29tcGFyaW5nIGEgd2VpZ2h0ZWQgc3VtIHRvIHRoZSBzcGVjaWZpZWQgcmFuZ2UuIEFsc28sIHRoZSBgZGFtb25fbWVyZ2Vfc2NvcmUoKWAgZnVuY3Rpb24gaXMgdXBkYXRlZCB0byB1c2UgdGhlIHVwZGF0ZWQgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAuXG5cblRoZSBwYXRjaCBhbHNvIHVwZGF0ZXMgY2FsbHMgdG8gYGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpYCB3aXRoIGBmYWxzZWAgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgdmFkZHIuY2AuIFRoaXMgaXNuJ3QgdGhhdCBpbXBvcnRhbnQgYXMgaXQganVzdCBtb2RpZmllcyB0aGUgb3RoZXIgZmlsZXMgdG8gdXNlIHRoZSB1cGRhdGVkIGZ1bmN0aW9uLlxuXG5GaW5hbGx5LCBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCB1cGRhdGVzIHRoZSBgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcmAgc3RydWN0dXJlIGFuZCB0aGUgcmVsYXRlZCBzeXNmcyBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHVzZSBgcmFuZ2VfbWluYCBhbmQgYHJhbmdlX21heGAgaW5zdGVhZCBvZiBgc3pfcmFuZ2UubWluYCBhbmQgYHN6X3JhbmdlLm1heGAsIHdoaWNoIGlzIGV4cGVjdGVkLlxuXG5Ob3csIGEga2V5IGNvbmNlcm46IGhvdyBhcmUgYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGFuZCBgZGFtb3NfZmlsdGVyYCBjcmVhdGVkLCBpbml0aWFsaXplZCwgYW5kIGNvcGllZD8gSSBuZWVkIHRvIHVzZSBncmVwcGVyIHRvIHRyYWNrIHRoZXNlIHN0cnVjdHVyZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkncmUgYmVpbmcgdXNlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHdoZXJlIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMgY291bGQgYXJpc2Ug4oCTIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluY29ycmVjdCBoYW5kbGluZyBvZiB0aGUgbmV3IHJhbmdlIHBhcmFtZXRlcnMuIEkgd2lsbCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBlcnJvcnMgd2l0aGluIERBTU9OLiBCYXNlZCBvbiB0aGUgZmluZGluZ3MgZnJvbSBncmVwcGVyLCBJIGNhbiBhc3Nlc3MgdGhlIG5lZWQgZm9yIGZvY3VzZWQgS01TQU4gdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMwOjUyLjYwNTA0NTUxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5Mjg1ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2N8ZGFtb3NfbmV3X2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NTQzPWludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYzMy1cXG5tbS9kYW1vbi9jb3JlLmM6NjM0OnN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX25ld19maWx0ZXIoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlLFxcbm1tL2RhbW9uL2NvcmUuYy02MzUtXFx0XFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzU0PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM3MC1cXG5tbS9kYW1vbi9jb3JlLmM6MTM3MTpcXHRcXHRuZXdfZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihcXG5tbS9kYW1vbi9jb3JlLmMtMTM3Mi1cXHRcXHRcXHRcXHRzcmNfZmlsdGVyLVxcdTAwM2V0eXBlLCBzcmNfZmlsdGVyLVxcdTAwM2VtYXRjaGluZyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzgyPXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzk4LVxcbm1tL2RhbW9uL2NvcmUuYzoxMzk5OlxcdFxcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxcbm1tL2RhbW9uL2NvcmUuYy0xNDAwLVxcdFxcdFxcdFxcdHNyY19maWx0ZXItXFx1MDAzZXR5cGUsIHNyY19maWx0ZXItXFx1MDAzZW1hdGNoaW5nLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI1Ny1cXHQvKiBkaXNhbGxvdyBwcmlvcml0aXppbmcgbm90LXlvdW5nIHBhZ2VzICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNTg6XFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9ZT1VORywgZmFsc2UsIGZhbHNlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI1OS1cXHRpZiAoIWZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjYzLVxcdC8qIGRpc2FibGxvdyBkZS1wcmlvcml0aXppbmcgeW91bmcgcGFnZXMgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI2NDpcXHRmaWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HLCB0cnVlLCBmYWxzZSk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNjUtXFx0aWYgKCFmaWx0ZXIpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTIzOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTI1Ni1cXHRpZiAoaW5zdGFsbF95b3VuZ19maWx0ZXIpIHtcXG5tbS9kYW1vbi9wYWRkci5jOjI1NzpcXHRcXHRmaWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxcbm1tL2RhbW9uL3BhZGRyLmMtMjU4LVxcdFxcdFxcdFxcdERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HLCB0cnVlLCBmYWxzZSk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjUxLVxcdGlmIChza2lwX2Fub24pIHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjUyOlxcdFxcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgZmFsc2UpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNTMtXFx0XFx0aWYgKCFmaWx0ZXIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTI5PXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDEtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0MjpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My1cXHRcXHRlbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIgbGF5ZXIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTMwPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnNfYWRkX2RpcnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTQ2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9maWx0ZXJzOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6OTQ3OlxcdFxcdGZpbHRlciA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk0OC1cXHRcXHRcXHRcXHRmaWx0ZXJzLVxcdTAwM2VoYW5kbGVfbGF5ZXIpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4MDk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpzY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgxNy1cXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODE4OlxcdFxcdFxcdGRhbW9zX25ld19maWx0ZXIoc3lzZnNfZmlsdGVyLVxcdTAwM2V0eXBlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE5LVxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NzkwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfbmV3X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzkzLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3OTQ6XFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc5NS1cXHRpZiAoIWZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTcwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU3NS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU3NjpcXHRmID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BRERSLCB0cnVlLCBmYWxzZSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NzctXFx0aWYgKCFmKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE2Nzk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY5NC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTY5NTpcXHR0YXJnZXRfZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQsIHRydWUsIHRydWUpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjk2LVxcdGlmICghdGFyZ2V0X2ZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNzIxLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzIyOlxcdGFub25fZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCB0cnVlKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyMy1cXHRpZiAoIWFub25fZmlsdGVyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMwOjUzLjEwNDMzODg1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzExNTU2OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW06XG5cbioqRGlnZ2luZyBpbnRvIERBTU9OJ3MgRmlsdGVyIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZpbHRlciBhbGxvY2F0aW9uIHdpdGhpbiBEQU1PTi4gTGV0J3Mgc2VlLi4uIEknbSBmb2N1c2luZyBvbiBgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvY2AgYW5kIGBkYW1vc19uZXdfZmlsdGVyYCBpbiBgbW0vZGFtb25gLiBSaWdodCwgYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2NgIGxpa2VseSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBmaWx0ZXIgc3RydWN0dXJlIGl0c2VsZiwgcHJvYmFibHkgaW4gcmVzcG9uc2UgdG8gYSBzeXNmcyByZXF1ZXN0IG9yIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCBhbmQgcHJvYmFibHkgdGllZCB0byBhIHBhcnRpY3VsYXIgbW9uaXRvcmluZyBzY2hlbWUuIEkgaW1hZ2luZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIGZpbHRlcidzIG1ldGFkYXRhLCBzZXR0aW5nIHVwIGFueSBuZWNlc3NhcnkgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcGVyaGFwcyBsaW5raW5nIGl0IGludG8gdGhlIG92ZXJhbGwgREFNT04gc2NoZW1lJ3MgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBJIHNob3VsZCBjaGVjayBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHNjaGVtZSdzIGFsbG9jYXRpb24vZnJlZWluZyBtZWNoYW5pc21zLlxuXG5UaGVuIHRoZXJlJ3MgYGRhbW9zX25ld19maWx0ZXJgLiBUaGlzIHNvdW5kcyBsaWtlIHRoZSBsb3ctbGV2ZWwgcHJpbWl0aXZlIGZvciBjcmVhdGluZyBhIGZpbHRlci4gTGlrZWx5IGNhbGxlZCBieSB0aGUgYWJvdmUgbWVudGlvbmVkIGZ1bmN0aW9uLCBgZGFtb3NfbmV3X2ZpbHRlcmAgaXMgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IGFsbG9jYXRpbmcgdGhlIG1lbW9yeSBmb3IgdGhlIGZpbHRlciBvYmplY3QgZnJvbSBhIGtlcm5lbCBtZW1vcnkgcG9vbC4gSSdkIGV4cGVjdCBpdCB0byBoYW5kbGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIGFueSBmaWVsZHMgcmVsYXRlZCB0byB0aGUgZmlsdGVyJ3MgaWRlbnRpdHksIHN0YXR1cyAoYWN0aXZlLCBpbmFjdGl2ZSwgZXRjLiksIGFuZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3aWxsIHN0b3JlIHRoZSBtb25pdG9yZWQgcmVnaW9uIGluZm9ybWF0aW9uLiBJIHdpbGwgYmUgc3VyZSB0byBvYnNlcnZlIHRoZSB1c2FnZSBvZiB0aGUgcmV0dXJuZWQgcG9pbnRlci5cblxuSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdG8gdHJhY2sgd2hlcmUgdGhlIGZpbHRlcnMgYXJlIGZyZWVkIGFuZCBob3cgdGhhdCBwcm9jZXNzIGlzIHRyaWdnZXJlZC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBmaWx0ZXIgYWxsb2NhdGlvbiwgZGVzdHJ1Y3Rpb24sIGFuZCBtb25pdG9yaW5nIG9wZXJhdGlvbnMuIERBTU9OJ3MgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZSwgc28gY2xlYW4gYW5kIGNvcnJlY3QgZmlsdGVyIGhhbmRsaW5nIGlzIHBhcmFtb3VudCB0byBpdHMgcmVsaWFiaWxpdHkuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMTQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMDo1Ny40MTU5MDAyMloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzNTpcXHRcXHRjaGFyICptZW1jZ19wYXRoO1xcbiA1MzY6XFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcXG4gNTM3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmFuZ2VfbWluO1xcbiA1Mzg6XFx0XFx0dW5zaWduZWQgbG9uZyByYW5nZV9tYXg7XFxuIDUzOTpcXHRcXHRpbnQgdGFyZ2V0X2lkeDtcXG4gNTQwOlxcdH07XFxuIDU0MTpcXHRcXG4gNTQyOlxcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcXG4gNTQzOlxcdFxcdFxcdGVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciBsYXllcilcXG4gNTQ0OlxcdHtcXG4gNTQ1OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXI7XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdFxcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyKTtcXG4gNTQ4OlxcdFxcdGlmIChmaWx0ZXIpXFxuIDU0OTpcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZWhhbmRsZV9sYXllciA9IGxheWVyO1xcbiA1NTA6XFx0XFx0cmV0dXJuIGZpbHRlcjtcXG4gNTUxOlxcdH1cXG4gNTUyOlxcdFxcbiA1NTM6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWUge1xcbiA1NTQ6XFx0XFx0ZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlO1xcbiA1NTU6XFx0XFx0Y2hhciAqbmFtZTtcXG4gNTU2OlxcdH07XFxuIDU1NzpcXHRcXG4gNTU4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZVxcbiA1NTk6XFx0ZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcXG4gNTYwOlxcdFxcdHtcXG4gNTYxOlxcdFxcdFxcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfQU5PTixcXG4gNTYyOlxcdFxcdFxcdC5uYW1lID0gXFxcImFub25cXFwiLFxcbiA1NjM6XFx0XFx0fSxcXG4gNTY0OlxcdFxcdHtcXG4gNTY1OlxcdFxcdFxcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfQUNUSVZFLFxcbiA1NjY6XFx0XFx0XFx0Lm5hbWUgPSBcXFwiYWN0aXZlXFxcIixcXG4gNTY3OlxcdFxcdH0sXFxuIDU2ODpcXHRcXHR7XFxuIDU2OTpcXHRcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHLFxcbiA1NzA6XFx0XFx0XFx0Lm5hbWUgPSBcXFwibWVtY2dcXFwiLFxcbiA1NzE6XFx0XFx0fSxcXG4gNTcyOlxcdFxcdHtcXG4gNTczOlxcdFxcdFxcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfWU9VTkcsXFxuIDU3NDpcXHRcXHRcXHQubmFtZSA9IFxcXCJ5b3VuZ1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMwOjU3LjQxNjA3ODg3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyODIzNDA0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGRhbW9zX25ld19maWx0ZXJgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBkYW1vc19uZXdfZmlsdGVyYCBmdW5jdGlvbi4gTG9va3MgbGlrZSBpdCdzIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IGZpbHRlcmluZyBtZWNoYW5pc20gaXMgYmVpbmcgaW1wbGVtZW50ZWQuIFdoYXQncyB0aGUgY29yZSBsb2dpYyBoZXJlPyBJJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgaG93IG5ldyByZWdpb25zIGFyZSBiZWluZyBpZGVudGlmaWVkIG9yIGNsYXNzaWZpZWQgYW5kIGhvdyB0aGUgZmlsdGVyaW5nIGlzIGFwcGxpZWQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBEQU1PTiBmcmFtZXdvcmsgaXMgb3JjaGVzdHJhdGluZyB0aGlzIHRvIHBvdGVudGlhbGx5IHJlZHVjZSBvdmVyaGVhZC4gV2hhdCBwYXJhbWV0ZXJzIGFyZSBnb2luZyBpbnRvIGBkYW1vc19uZXdfZmlsdGVyYD8gQW5kLCB3aGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBmdW5jdGlvbj8gSSBiZXQgaXQgZGVhbHMgd2l0aCBhbGxvY2F0aW9uIGFuZCBzZXR0aW5nIHVwIHNvbWUgc29ydCBvZiBmaWx0ZXIgZm9yIHRyYWNraW5nIG1lbW9yeSBhY2Nlc3MuIEZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlIEkgd2FudCB0byB1bmRlcnN0YW5kOlxuKiAgIEhvdyB0aGUgZmlsdGVyIGludGVyYWN0cyB3aXRoIHRoZSBhZGRyZXNzIHNwYWNlLlxuKiAgIFRoZSBjb21wdXRhdGlvbmFsIGNvbXBsZXhpdHkgb2YgZmlsdGVyIG9wZXJhdGlvbnMuXG4qICAgSG93IHdlbGwgdGhlIGZpbHRlciBwbGF5cyB3aXRoIHRoZSBzeXN0ZW0uXG4qICAgUG90ZW50aWFsIGJvdHRsZW5lY2tzLlxuKiAgIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZSBuZXcgZmlsdGVyIGlzIHVzaW5nLlxuXG5MZXQncyBnZXQgY3JhY2tpbmcsIGxpbmUgYnkgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMxOjAyLjY5ODQyMjUwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzMDpcXHRcXHR9XFxuIDYzMTpcXHRcXHRyZXR1cm4gMDtcXG4gNjMyOlxcdH1cXG4gNjMzOlxcdFxcbiA2MzQ6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXFxuIDYzNTpcXHRcXHRcXHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxcbiA2MzY6XFx0e1xcbiA2Mzc6XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbiA2Mzg6XFx0XFxuIDYzOTpcXHRcXHRmaWx0ZXIgPSBrbWFsbG9jX29iaigqZmlsdGVyKTtcXG4gNjQwOlxcdFxcdGlmICghZmlsdGVyKVxcbiA2NDE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY0MjpcXHRcXHRmaWx0ZXItXFx1MDAzZXR5cGUgPSB0eXBlO1xcbiA2NDM6XFx0XFx0ZmlsdGVyLVxcdTAwM2VtYXRjaGluZyA9IG1hdGNoaW5nO1xcbiA2NDQ6XFx0XFx0ZmlsdGVyLVxcdTAwM2VhbGxvdyA9IGFsbG93O1xcbiA2NDU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmZpbHRlci1cXHUwMDNlbGlzdCk7XFxuIDY0NjpcXHRcXHRyZXR1cm4gZmlsdGVyO1xcbiA2NDc6XFx0fVxcbiA2NDg6XFx0XFxuIDY0OTpcXHQvKipcXG4gNjUwOlxcdCAqIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKCkgLSBSZXR1cm4gaWYgdGhlIGZpbHRlciBpcyBvcHMtaGFuZGxlZCBvbmUuXFxuIDY1MTpcXHQgKiBAdHlwZTpcXHR0eXBlIG9mIHRoZSBmaWx0ZXIuXFxuIDY1MjpcXHQgKlxcbiA2NTM6XFx0ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBmaWx0ZXIgb2YgQHR5cGUgbmVlZHMgdG8gYmUgaGFuZGxlZCBieSBvcHMgbGF5ZXIsIGZhbHNlXFxuIDY1NDpcXHQgKiBvdGhlcndpc2UuXFxuIDY1NTpcXHQgKi9cXG4gNjU2OlxcdGJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxcbiA2NTc6XFx0e1xcbiA2NTg6XFx0XFx0c3dpdGNoICh0eXBlKSB7XFxuIDY1OTpcXHRcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMxOjAyLjY5ODYwODgwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDc5Nzg5MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnNgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnNgLiBJIGtub3cgd2hhdCBEQU1PTiBpcywgYW5kIEknbSBmYW1pbGlhciB3aXRoIHN5c2ZzLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgaW52b2x2ZWQgaW4gYWRkaW5nIGZpbHRlcmluZyBtZWNoYW5pc21zIG9yIHBhcmFtZXRlcnMgdG8gREFNT04gdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBTcGVjaWZpY2FsbHksIEkgaW1hZ2luZSBpdCdzIGFib3V0IHNldHRpbmcgdXAgdGhlIHNjaGVtZXMgZm9yIG1vbml0b3JpbmcuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGRlZmluaW5nIHdoYXQgbWVtb3J5IHJlZ2lvbnMgb3IgdHlwZXMgREFNT04gc2hvdWxkIGZvY3VzIG9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0J3MgZG9pbmcgaW4gZGV0YWlsLCBsaWtlOiBXaGF0IGtpbmQgb2YgZmlsdGVycyBpcyBpdCBhZGRpbmc/IEFyZSB0aGV5IGJhc2VkIG9uIGFkZHJlc3MgcmFuZ2VzLCBtZW1vcnkgdHlwZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBIb3cgaXMgaXQgaGFuZGxpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZD8gSXMgdGhlcmUgZXJyb3IgY2hlY2tpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0byBjb25zaWRlciB3aGVuIGRlYWxpbmcgd2l0aCBzeXNmcyBhbmQgREFNT04ncyBpbnRlcm5hbCBzdGF0ZT8gTGV0J3MgZ2V0IHRvIHdvcmsgYW5kIGZpbmQgdGhlIHNvdXJjZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzE6MDYuMTc4NDAwOTEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgxMCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgxMDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnMgKnN5c2ZzX2ZpbHRlcnMpXFxuMjgxMTpcXHR7XFxuMjgxMjpcXHRcXHRpbnQgaTtcXG4yODEzOlxcdFxcbjI4MTQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN5c2ZzX2ZpbHRlcnMtXFx1MDAzZW5yOyBpKyspIHtcXG4yODE1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpzeXNmc19maWx0ZXIgPVxcbjI4MTY6XFx0XFx0XFx0XFx0c3lzZnNfZmlsdGVycy1cXHUwMDNlZmlsdGVyc19hcnJbaV07XFxuMjgxNzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIgPVxcbjI4MTg6XFx0XFx0XFx0XFx0ZGFtb3NfbmV3X2ZpbHRlcihzeXNmc19maWx0ZXItXFx1MDAzZXR5cGUsXFxuMjgxOTpcXHRcXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZW1hdGNoaW5nLFxcbjI4MjA6XFx0XFx0XFx0XFx0XFx0XFx0c3lzZnNfZmlsdGVyLVxcdTAwM2VhbGxvdyk7XFxuMjgyMTpcXHRcXHRcXHRpbnQgZXJyO1xcbjI4MjI6XFx0XFxuMjgyMzpcXHRcXHRcXHRpZiAoIWZpbHRlcilcXG4yODI0OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjI4MjU6XFx0XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRykge1xcbjI4MjY6XFx0XFx0XFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChcXG4yODI3OlxcdFxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlbWVtY2dfcGF0aCxcXG4yODI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZmaWx0ZXItXFx1MDAzZW1lbWNnX2lkKTtcXG4yODI5OlxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4yODMwOlxcdFxcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XFxuMjgzMTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI4MzI6XFx0XFx0XFx0XFx0fVxcbjI4MzM6XFx0XFx0XFx0fSBlbHNlIGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfQUREUikge1xcbjI4MzQ6XFx0XFx0XFx0XFx0aWYgKHN5c2ZzX2ZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZS5lbmQgXFx1MDAzY1xcbjI4MzU6XFx0XFx0XFx0XFx0XFx0XFx0c3lzZnNfZmlsdGVyLVxcdTAwM2VhZGRyX3JhbmdlLnN0YXJ0KSB7XFxuMjgzNjpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbjI4Mzc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjgzODpcXHRcXHRcXHRcXHR9XFxuMjgzOTpcXHRcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZWFkZHJfcmFuZ2UgPSBzeXNmc19maWx0ZXItXFx1MDAzZWFkZHJfcmFuZ2U7XFxuMjg0MDpcXHRcXHRcXHR9IGVsc2UgaWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQpIHtcXG4yODQxOlxcdFxcdFxcdFxcdGZpbHRlci1cXHUwMDNldGFyZ2V0X2lkeCA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNldGFyZ2V0X2lkeDtcXG4yODQyOlxcdFxcdFxcdH0gZWxzZSBpZiAoZmlsdGVyLVxcdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX0hVR0VQQUdFX1NJWkUpIHtcXG4yODQzOlxcdFxcdFxcdFxcdGlmIChzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21pbiBcXHUwMDNlXFxuMjg0NDpcXHRcXHRcXHRcXHRcXHRcXHRzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21heCkge1xcbjI4NDU6XFx0XFx0XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcXG4yODQ2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI4NDc6XFx0XFx0XFx0XFx0fVxcbjI4NDg6XFx0XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2Vzel9yYW5nZS5taW4gPSBzeXNmc19maWx0ZXItXFx1MDAzZXJhbmdlX21pbjtcXG4yODQ5OlxcdFxcdFxcdFxcdGZpbHRlci1cXHUwMDNlc3pfcmFuZ2UubWF4ID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXg7XFxuMjg1MDpcXHRcXHRcXHR9IGVsc2UgaWYgKGZpbHRlci1cXHUwMDNldHlwZSA9PSBEQU1PU19GSUxURVJfVFlQRV9QUk9CRV9ISVRTX1dTVU0pIHtcXG4yODUxOlxcdFxcdFxcdFxcdGZpbHRlci1cXHUwMDNlcmFuZ2VfbWluID0gc3lzZnNfZmlsdGVyLVxcdTAwM2VyYW5nZV9taW47XFxuMjg1MjpcXHRcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXJhbmdlX21heCA9IHN5c2ZzX2ZpbHRlci1cXHUwMDNlcmFuZ2VfbWF4O1xcbjI4NTM6XFx0XFx0XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlcmFuZ2VfbWluIFxcdTAwM2UgZmlsdGVyLVxcdTAwM2VyYW5nZV9tYXgpIHtcXG4yODU0OlxcdFxcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XFxuMjg1NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODU2OlxcdFxcdFxcdFxcdH1cXG4yODU3OlxcdFxcdFxcdH1cXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XFxuMjg2MDpcXHRcXHR9XFxuMjg2MTpcXHRcXHRyZXR1cm4gMDtcXG4yODYyOlxcdH1cXG4yODYzOlxcdFxcbjI4NjQ6XFx0c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMxOjA2LjE3ODU2MjIyMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTIyMjA4MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgRGF0YSB3aXRoICdkYW1vbl9wcm9iZV9oaXRzX212c3VtJyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGludmVzdGlnYXRlIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYC4gVGhpcyB2YXJpYWJsZSBsaWtlbHkgaG9sZHMgc29tZSBjcml0aWNhbCBkYXRhIHJlbGF0ZWQgdG8gRGFtb24sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyB0byBzZWUgd2hlcmUgaXQncyB1c2VkIGFuZCBob3cgaXQncyBkZWZpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUgbmFtZS4gTGV0J3MgZmlyZSB1cCBhIGBncmVwYCBjb21tYW5kIHRvIGxvb2sgZm9yIGFueSBpbnN0YW5jZXMgb2YgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gIGluIHRoZSBjb2RlYmFzZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgaXRzIHVzYWdlIGFuZCBwdXJwb3NlLiBJIG5lZWQgdG8gZ2V0IGEgbGlzdCBvZiB0aGUgb2NjdXJyZW5jZXMgc28gSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMxOjA4LjEwMDc3MzAwMloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3ODUwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcHJvYmVfaGl0c19tdnN1bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0OC1cXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0zNTAtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ3Nz11bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwgYm9vbCBtdixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00ODctXFx0XFx0ZWxzZSBpZiAobXYpXFxubW0vZGFtb24vY29yZS5jOjQ4ODpcXHRcXHRcXHRzdW0gKz0gZGFtb25fcHJvYmVfaGl0c19tdnN1bShpKyssIHIsIGN0eCkgKlxcbm1tL2RhbW9uL2NvcmUuYy00ODktXFx0XFx0XFx0XFx0cHJvYmUtXFx1MDAzZXdlaWdodDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEzLVxcdFxcdHN5c19wcm9iZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XFx0XFx0XFx0XFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTUtXFx0XFx0aWYgKCFzeXNfcHJvYmUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzE6MDguMTUxNTYzODYxWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NTAwODQ3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgREFNT04gcHJvYmUgaGl0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gIGFuZCBgZGFtb25fcHJvYmVfaGl0c193c3VtYCBmdW5jdGlvbnMuIEl0IHNlZW1zIHRoZXkncmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0IG9mIERBTU9OLCBhbmQgSSBzdXNwZWN0IHRoZXkncmUgaW52b2x2ZWQgaW4gaG93IHRoZSBtb25pdG9yIGFnZ3JlZ2F0ZXMgYW5kIHdlaWdocyBkYXRhIGZyb20gcHJvYmVzLiBJJ20gZ3Vlc3NpbmcgdGhleSdyZSBib3RoIGRlZmluZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLCBzbyBJJ2xsIGdvIHN0cmFpZ2h0IHRvIHRoYXQgZmlsZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdpbGwgbGlrZWx5IHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29yZSBsb2dpYyBiZWhpbmQgREFNT04ncyBvcGVyYXRpb24sIGFuZCBob3BlZnVsbHkgd2lsbCBwcm92aWRlIHNvbWUgaW5zaWdodHMgaW50byBob3cgdGhpcyBtb2R1bGUga2VlcHMgdHJhY2sgb2YgYW5kIHVzZXMgcHJvYmUgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMToxMS44MDE2NTA4MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDU6XFx0XFx0cmV0dXJuIGRhbW9uX212c3VtKHItXFx1MDAzZW5yX2FjY2Vzc2VzLCByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzLFxcbiAzNDY6XFx0XFx0XFx0XFx0bGVmdF93aW5kb3dfYnApO1xcbiAzNDc6XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHR1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gMzUwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gMzUxOlxcdHtcXG4gMzUyOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsLCBhZ2dyX2ludGVydmFsO1xcbiAzNTM6XFx0XFx0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XFxuIDM1NDpcXHRcXG4gMzU1OlxcdFxcdHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxO1xcbiAzNTY6XFx0XFx0YWdncl9pbnRlcnZhbCA9ICBjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPyA6IDE7XFxuIDM1NzpcXHRcXHR3aW5kb3dfbGVuID0gYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbDtcXG4gMzU4OlxcdFxcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXFxuIDM1OTpcXHRcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzKSlcXG4gMzYwOlxcdFxcdFxcdGxlZnRfd2luZG93ID0gMDtcXG4gMzYxOlxcdFxcdGVsc2VcXG4gMzYyOlxcdFxcdFxcdGxlZnRfd2luZG93ID0gY3R4LVxcdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyAtXFxuIDM2MzpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzO1xcbiAzNjQ6XFx0XFx0bGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTtcXG4gMzY1OlxcdFxcbiAzNjY6XFx0XFx0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxcbiAzNjc6XFx0XFx0XFx0cmV0dXJuIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdO1xcbiAzNjg6XFx0XFxuIDM2OTpcXHRcXHRyZXR1cm4gZGFtb25fbXZzdW0oci1cXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxcbiAzNzA6XFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF0sIGxlZnRfd2luZG93X2JwKTtcXG4gMzcxOlxcdH1cXG4gMzcyOlxcdFxcbiAzNzM6XFx0I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG4gMzc0OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiAzNzU6XFx0e1xcbiAzNzY6XFx0XFx0V0FSTl9PTkNFKHN0YXJ0IFxcdTAwM2U9IGVuZCwgXFxcInN0YXJ0ICVsdSBcXHUwMDNlPSBlbmQgJWx1XFxcXG5cXFwiLCBzdGFydCwgZW5kKTtcXG4gMzc3OlxcdH1cXG4gMzc4OlxcdCNlbHNlXFxuIDM3OTpcXHRzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gMzgwOlxcdHtcXG4gMzgxOlxcdH1cXG4gMzgyOlxcdCNlbmRpZlxcbiAzODM6XFx0XFxuIDM4NDpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTozMToxMS44MDE4Mzk3NjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAzOTU0NDU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgIGluIHRoZSBEQU1PTiBDb3JlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBEQU1PTiBjb3JlIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgbW0vZGFtb24vY29yZS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgb3V0IHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmdgLiBJJ20gYXNzdW1pbmcgaXQncyBwcm9iYWJseSBhbiBhcmd1bWVudCByZWxhdGVkIHRvIGZpbHRlcmluZyBjb21taXRzLCBsaWtlbHkgdXNlZCB3aGVuIERBTU9OIGlzIHRyeWluZyB0byBkZXRlcm1pbmUgd2hpY2ggbWVtb3J5IHJlZ2lvbnMgdG8gYWN0IHVwb24uIEl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIGFzcGVjdCBvZiBjb21taXQgYmVoYXZpb3IsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCB3b3JrcyBiZWNhdXNlIGl0J3Mga2V5IHRvIGVpdGhlciBwZXJmb3JtYW5jZSB0dW5pbmcgb3IgZGVidWdnaW5nIGEgYmVoYXZpb3IgaW4gYSBkYW1vbi1yZWxhdGVkIGNvbnRleHQuIElzIGl0IGEgYml0bWFzaz8gQSBmbGFnPyBEb2VzIGl0IHJlbGF0ZSB0byBhIGNvbW1pdCB0aHJlc2hvbGQ/IEEgc3BlY2lmaWMgdHlwZSBvZiBjb21taXQgb3BlcmF0aW9uPyBJJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgaXRzIHB1cnBvc2UgYW5kIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIERBTU9OIGVjb3N5c3RlbS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWhpbmQgdGhlIHNjZW5lcyByZWdhcmRpbmcgaG93IHRoaXMgcGFyYW1ldGVyIGd1aWRlcyB0aGUgY29tbWl0IGxvZ2ljIHNvIEkgY2FuIHNvbHZlIHRoZSBpc3N1ZSBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzE6MTUuODQxMzg2OTEyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMyMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMyMDpcXHRzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcXG4xMzIxOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxcbjEzMjI6XFx0e1xcbjEzMjM6XFx0XFx0c3dpdGNoIChkc3QtXFx1MDAzZXR5cGUpIHtcXG4xMzI0OlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XFxuMTMyNTpcXHRcXHRcXHRkc3QtXFx1MDAzZW1lbWNnX2lkID0gc3JjLVxcdTAwM2VtZW1jZ19pZDtcXG4xMzI2OlxcdFxcdFxcdGJyZWFrO1xcbjEzMjc6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxcbjEzMjg6XFx0XFx0XFx0ZHN0LVxcdTAwM2VhZGRyX3JhbmdlID0gc3JjLVxcdTAwM2VhZGRyX3JhbmdlO1xcbjEzMjk6XFx0XFx0XFx0YnJlYWs7XFxuMTMzMDpcXHRcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcXG4xMzMxOlxcdFxcdFxcdGRzdC1cXHUwMDNldGFyZ2V0X2lkeCA9IHNyYy1cXHUwMDNldGFyZ2V0X2lkeDtcXG4xMzMyOlxcdFxcdFxcdGJyZWFrO1xcbjEzMzM6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9IVUdFUEFHRV9TSVpFOlxcbjEzMzQ6XFx0XFx0XFx0ZHN0LVxcdTAwM2Vzel9yYW5nZSA9IHNyYy1cXHUwMDNlc3pfcmFuZ2U7XFxuMTMzNTpcXHRcXHRcXHRicmVhaztcXG4xMzM2OlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNOlxcbjEzMzc6XFx0XFx0XFx0ZHN0LVxcdTAwM2VyYW5nZV9taW4gPSBzcmMtXFx1MDAzZXJhbmdlX21pbjtcXG4xMzM4OlxcdFxcdFxcdGRzdC1cXHUwMDNlcmFuZ2VfbWF4ID0gc3JjLVxcdTAwM2VyYW5nZV9tYXg7XFxuMTMzOTpcXHRcXHRcXHRicmVhaztcXG4xMzQwOlxcdFxcdGRlZmF1bHQ6XFxuMTM0MTpcXHRcXHRcXHRicmVhaztcXG4xMzQyOlxcdFxcdH1cXG4xMzQzOlxcdH1cXG4xMzQ0OlxcdFxcbjEzNDU6XFx0c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcihcXG4xMzQ2OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxcbjEzNDc6XFx0e1xcbjEzNDg6XFx0XFx0ZHN0LVxcdTAwM2V0eXBlID0gc3JjLVxcdTAwM2V0eXBlO1xcbjEzNDk6XFx0XFx0ZHN0LVxcdTAwM2VtYXRjaGluZyA9IHNyYy1cXHUwMDNlbWF0Y2hpbmc7XFxuMTM1MDpcXHRcXHRkc3QtXFx1MDAzZWFsbG93ID0gc3JjLVxcdTAwM2VhbGxvdztcXG4xMzUxOlxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKGRzdCwgc3JjKTtcXG4xMzUyOlxcdH1cXG4xMzUzOlxcdFxcbjEzNTQ6XFx0c3RhdGljIGludCBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MzE6MTUuODQxODk3NTAzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NDQ1MTg2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBJbnRyb2R1Y2VkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIGJlZW4gZXhhbWluaW5nIHRoZSBgbWluX3Nob3dgIGFuZCBgbWF4X3Nob3dgIG9wZXJhdGlvbnMgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBhdmVudWVzIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIG90aGVyIG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0aWVzLlxuXG5GaXJzdCwgSSBleGFtaW5lZCBob3cgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIHN0cnVjdHVyZS4gTXkgcmV2aWV3IHJldmVhbHM6XG5cbiogICBUaGUgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMga2V5LiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBhbGwgZmllbGRzLCBpbmNsdWRpbmcgYHJhbmdlX21pbmAgYW5kIGByYW5nZV9tYXhgLCBhcmUgemVyby1pbml0aWFsaXplZCBmcm9tIHRoZSBzdGFydC4gVGhhdCdzIGEgZ29vZCBmaXJzdCBzdGVwLlxuKiAgIFdoZW4gdmFsdWVzIGFyZSB3cml0dGVuIHZpYSBzeXNmcyAoYG1pbl9zdG9yZWAsIGBtYXhfc3RvcmVgKSwgYGtzdHJ0b3VsYCBjb3JyZWN0bHkgcGFyc2VzIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHN0b3JlcyB0aGUgcGFyc2VkIHVuc2lnbmVkIGxvbmcgdmFsdWVzIGRpcmVjdGx5IGludG8gYFx1MDAyNmZpbHRlci1cdTAwM2VyYW5nZV9taW5gIGFuZCBgXHUwMDI2ZmlsdGVyLVx1MDAzZXJhbmdlX21heGAuXG4qICAgV2hlbiByZWFkIHZpYSBzeXNmcyAoYG1pbl9zaG93YCwgYG1heF9zaG93YCksIGBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZmlsdGVyLVx1MDAzZXJhbmdlX21pbilgIGlzIHVzZWQgdG8gb3V0cHV0IHRoZSB2YWx1ZXMuIFRoaXMgaXMgZm9ybWF0dGVkIG91dHB1dCBvZiBhIGRlZmluZWQgdmFsdWUsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3VsZCBiZSBwcmVzZW50ZWQuXG4qICAgV2hlbiBhcHBseWluZyB0aGUgZmlsdGVyLCB0aGUgcmFuZ2UgaXMgY29waWVkIGNvcnJlY3RseS5cblxuSSd2ZSBkb3VibGUtY2hlY2tlZCBhbGwgdGhlIHJlbGV2YW50IGFzcGVjdHMgdGhvcm91Z2hseTpcblxuMS4gICoqS2VybmVsLXRvLVVzZXJzcGFjZSBEYXRhIFRyYW5zZmVyOioqIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgb3IgZmllbGRzIGFyZSBsZWFrZWQgdG8gdXNlcnNwYWNlIGJlY2F1c2UgYG1pbl9zaG93YCBhbmQgYG1heF9zaG93YCB1c2UgZm9ybWF0dGVkIG91dHB1dCBvZiBpbml0aWFsaXplZCB2YWx1ZXMuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBObyBjb25kaXRpb25hbCBicmFuY2hpbmcgb3IgbG9naWMgaXMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gYGt6YWxsb2NgIGlzIHVzZWQsIGFuZCBmaWx0ZXIgZmllbGQgYXNzaWdubWVudCBpcyBleHBsaWNpdC5cbjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuXG40LiAgKipCb3VuZHMgQ2hlY2tzL0xlbmd0aDoqKiBObyBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgdGhlIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXMuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoICoqZG9lcyBub3QqKiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyB0aGF0IG1pZ2h0IGFyaXNlLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGNoZWNrZXJzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuXG5cbk5vdywgbGV0J3MgY29udHJhc3QgS0FTQU4gYW5kIEtNU0FOIHRvIGZvcm11bGF0ZSBhIGNsZWFyIEtNU0FOIHJlYXNvbmluZzpcblxuKiAgICoqS0FTQU4gXHUwMDI2IFN0YW5kYXJkIENoZWNrZXJzOioqIERldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgYW5kIHNpbWlsYXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBUaGVzZSBhcmUgbm90IGluIHBsYXkgaGVyZS5cbiogICAqKktNU0FOOioqIFNwZWNpZmljYWxseSBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIFRoaXMgaXMgd2hhdCBJIHdhcyBpbnZlc3RpZ2F0aW5nLlxuKiAgICoqVGhlIFBhdGNoOioqIEFkZHMgYSBuZXcgREFNT04gZmlsdGVyIHR5cGUgKGBwcm9iZV9oaXRzX3dzdW1gKSBhbmQgdXBkYXRlcyBzeXNmcyBtaW4vbWF4IGhhbmRsZXJzLiBJJ3ZlIHNjcnV0aW5pemVkIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLlxuKiAgICoqQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246KiogYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAgdG8gaW5pdGlhbGl6ZSBhbGwgZmllbGRzIGFuZCBgZGFtb3NfbmV3X2ZpbHRlcmAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCwgZW5zdXJpbmcgZGVmaW5lZCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBwbGF5LlxuKiAgICoqU3lzZnMgT3V0cHV0OioqICBTeXNmcyBzaG93IGZ1bmN0aW9ucyBwcm92aWRlIGZvcm1hdHRlZCBpbnRlZ2VyIG91dHB1dCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuKiAgICoqQ29uY2x1c2lvbjoqKiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZC4gVGhlIGNvZGUgaXMgc2FmZS5cblxuSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTE3LCJPdXRwdXRUb2tlbnMiOjI1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjMxOjMxLjI4NzA4Nzg4MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBEQU1PUyBmaWx0ZXIgdHlwZSAoYERBTU9TX0ZJTFRFUl9UWVBFX1BST0JFX0hJVFNfV1NVTWApIGFuZCByZWZhY3RvcnMgc3lzZnMgZmlsdGVyIG1pbi9tYXggaGFuZGxpbmcgdG8gc3VwcG9ydCBwcm9iZSBoaXQgd2VpZ2h0ZWQgc3VtIHJhbmdlcyBhbG9uZ3NpZGUgaHVnZXBhZ2Ugc2l6ZXMuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgc3lzZnMgZmlsdGVyIHN0cnVjdHVyZXMgKGBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBXaGVuIGNvbnZlcnRpbmcgdG8ga2VybmVsIGZpbHRlcnMgKGBkYW1vc19maWx0ZXJgKSwgdGhlIHJhbmdlIGZpZWxkcyAoYHJhbmdlX21pbmAsIGByYW5nZV9tYXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIHN5c2ZzIGZpbHRlcnMuIFN5c2ZzIHNob3cgYXR0cmlidXRlcyB1c2UgYHN5c2ZzX2VtaXQoKWAgdG8gb3V0cHV0IGZvcm1hdHRlZCB1bnNpZ25lZCBsb25nIGludGVnZXJzLCBwcmVjbHVkaW5nIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZC5cXG4tIEtBU0FOIC8gc3RhbmRhcmQgc2FuaXRpemVycyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIHByb2JlIGFycmF5cywgb3IgYWxsb2NhdGlvbiBpc3N1ZXMuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IERBTU9TIGZpbHRlciB0eXBlIChgREFNT1NfRklMVEVSX1RZUEVfUFJPQkVfSElUU19XU1VNYCkgYW5kIHJlZmFjdG9ycyBzeXNmcyBmaWx0ZXIgbWluL21heCBoYW5kbGluZyB0byBzdXBwb3J0IHByb2JlIGhpdCB3ZWlnaHRlZCBzdW0gcmFuZ2VzIGFsb25nc2lkZSBodWdlcGFnZSBzaXplcy5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBzeXNmcyBmaWx0ZXIgc3RydWN0dXJlcyAoYGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJgKSBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFdoZW4gY29udmVydGluZyB0byBrZXJuZWwgZmlsdGVycyAoYGRhbW9zX2ZpbHRlcmApLCB0aGUgcmFuZ2UgZmllbGRzIChgcmFuZ2VfbWluYCwgYHJhbmdlX21heGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gc3lzZnMgZmlsdGVycy4gU3lzZnMgc2hvdyBhdHRyaWJ1dGVzIHVzZSBgc3lzZnNfZW1pdCgpYCB0byBvdXRwdXQgZm9ybWF0dGVkIHVuc2lnbmVkIGxvbmcgaW50ZWdlcnMsIHByZWNsdWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkLlxcbi0gS0FTQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgYW55IGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gcHJvYmUgYXJyYXlzLCBvciBhbGxvY2F0aW9uIGlzc3Vlcy5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowcmvf6[1] Phase: Succeeded StartedAt: 2026-09-11 01:31:42 +0000 UTC FinishedAt: 2026-09-11 01:31:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 01:31:42 +0000 UTC FinishedAt: 2026-09-11 01:31:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2] Phase: Succeeded StartedAt: 2026-09-11 01:31:42 +0000 UTC FinishedAt: 2026-09-11 05:10:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:31:42 +0000 UTC FinishedAt: 2026-09-11 05:10:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:31:42 +0000 UTC FinishedAt: 2026-09-11 01:31:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:31:42 +0000 UTC FinishedAt: 2026-09-11 01:31:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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-workflowcmvf6/series-workflowcmvf6-convert-artifact-308132292/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:31:52 +0000 UTC FinishedAt: 2026-09-11 01:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:31:52 +0000 UTC FinishedAt: 2026-09-11 01:48:29 +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:*03fff850-64fb-4720-831d-fa10b08c5c98,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-workflowcmvf6/series-workflowcmvf6-convert-artifact-308132292/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": "d660717c-e699-48c9-91e2-a4a723f98c8d", "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-workflowcmvf6/series-workflowcmvf6-build-action-4256431362/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:31:52 +0000 UTC FinishedAt: 2026-09-11 01:48:19 +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:*03fff850-64fb-4720-831d-fa10b08c5c98,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-workflowcmvf6/series-workflowcmvf6-convert-artifact-308132292/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": "d660717c-e699-48c9-91e2-a4a723f98c8d", "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-workflowcmvf6/series-workflowcmvf6-build-action-4256431362/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:48:29 +0000 UTC FinishedAt: 2026-09-11 01:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:48:29 +0000 UTC FinishedAt: 2026-09-11 01:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:48:29 +0000 UTC FinishedAt: 2026-09-11 01:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:48:29 +0000 UTC FinishedAt: 2026-09-11 01:48:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-workflowcmvf6/series-workflowcmvf6-convert-artifact-3025293123/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:48:39 +0000 UTC FinishedAt: 2026-09-11 01:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:48:39 +0000 UTC FinishedAt: 2026-09-11 01:50:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d660717c-e699-48c9-91e2-a4a723f98c8d,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-workflowcmvf6/series-workflowcmvf6-build-action-4256431362/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-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:50:37 +0000 UTC FinishedAt: 2026-09-11 01:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:50:37 +0000 UTC FinishedAt: 2026-09-11 01:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:50:37 +0000 UTC FinishedAt: 2026-09-11 02:07:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:50:37 +0000 UTC FinishedAt: 2026-09-11 02:07:08 +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:*03fff850-64fb-4720-831d-fa10b08c5c98,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-workflowcmvf6/series-workflowcmvf6-convert-artifact-3025293123/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": "ba4792e6-6a3b-4ab5-b1df-e04682bf8863", "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-workflowcmvf6/series-workflowcmvf6-build-action-85047799/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 01:50:37 +0000 UTC FinishedAt: 2026-09-11 02:06:58 +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:*03fff850-64fb-4720-831d-fa10b08c5c98,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-workflowcmvf6/series-workflowcmvf6-convert-artifact-3025293123/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": "ba4792e6-6a3b-4ab5-b1df-e04682bf8863", "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-workflowcmvf6/series-workflowcmvf6-build-action-85047799/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:07:08 +0000 UTC FinishedAt: 2026-09-11 02:07:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:07:08 +0000 UTC FinishedAt: 2026-09-11 02:07:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:07:08 +0000 UTC FinishedAt: 2026-09-11 02:09:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:07:08 +0000 UTC FinishedAt: 2026-09-11 02:08:55 +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:*ba4792e6-6a3b-4ab5-b1df-e04682bf8863,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-workflowcmvf6/series-workflowcmvf6-build-action-85047799/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-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:09:05 +0000 UTC FinishedAt: 2026-09-11 05:10:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:09:05 +0000 UTC FinishedAt: 2026-09-11 05:10:55 +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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"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:*d660717c-e699-48c9-91e2-a4a723f98c8d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ba4792e6-6a3b-4ab5-b1df-e04682bf8863,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-workflowcmvf6/series-workflowcmvf6-build-action-4256431362/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-workflowcmvf6/series-workflowcmvf6-build-action-85047799/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:09:05 +0000 UTC FinishedAt: 2026-09-11 02:09:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:09:05 +0000 UTC FinishedAt: 2026-09-11 02:09:09 +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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"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-workflowcmvf6/series-workflowcmvf6-convert-artifact-1560911196/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:09:05 +0000 UTC FinishedAt: 2026-09-11 02:09:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:09:05 +0000 UTC FinishedAt: 2026-09-11 02:09:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:09:05 +0000 UTC FinishedAt: 2026-09-11 02:09:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:09:15 +0000 UTC FinishedAt: 2026-09-11 05:10:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmvf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","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_commit_filter_arg","damon_sysfs_add_scheme_filters","damon_sysfs_add_schemes","damon_merge_score","damon_pa_apply_probes","damon_va_apply_probes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"4f728551-3469-45f8-aa0a-95656ea8b126","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-11 02:09:15 +0000 UTC FinishedAt: 2026-09-11 05:10:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d660717c-e699-48c9-91e2-a4a723f98c8d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ba4792e6-6a3b-4ab5-b1df-e04682bf8863,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-workflowcmvf6/series-workflowcmvf6-build-action-4256431362/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-workflowcmvf6/series-workflowcmvf6-build-action-85047799/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-workflowcmvf6/series-workflowcmvf6-convert-artifact-1560911196/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,}