Name: series-workflowtrzm5 Phase: Succeeded StartedAt: 2026-07-26 18:32:31 +0000 UTC FinishedAt: 2026-07-27 00:24:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[0] Phase: Succeeded StartedAt: 2026-07-26 18:32:31 +0000 UTC FinishedAt: 2026-07-26 18:56:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 18:32:31 +0000 UTC FinishedAt: 2026-07-26 18:56:01 +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": "40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON_SYSFS", "DAMON_PADDR" ], "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": "40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON_SYSFS", "DAMON_PADDR" ], "series_id": "3282b298-bbd5-45c6-9e54-502fc08a41e4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_new_prep", "damon_add_prep" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbmV3X3ByZXAmIzM0OywKICAgICYjMzQ7ZGFtb25fYWRkX3ByZXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIGFsbG93aW5nIHVzZXJzIHRvIGNvbmZpZ3VyZSBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgKGUuZy4sIGBzZXRfcGdpZGxlYCkgYW5kIGEgbmV3IGZpbHRlciB0eXBlIChgcGdpZGxlX3Vuc2V0YCkgdmlhIHN5c2ZzLiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucywgbWFraW5nIGl0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGNhYjhmMTMxNDViMzZlYWE1MjU3ZWU0MmJmOGM2NWZmOTUwMzQyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE4OjUzOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbmluZGV4IGU2NzVhNTcxNDVlMzZkLi42ZDU5NmZiN2ZhMWZmYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuQEAgLTE3Myw2ICYjNDM7MTczLDE5IEBAIENvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbiBEZXNjcmlwdGlvbjpcdFdyaXRpbmcgdG8gYW5kIHJlYWRpbmcgZnJvbSB0aGlzIGZpbGUgc2V0cyBhbmQgZ2V0cyB0aGVcbiBcdFx0cGVyLXByb2JlIGF0dHJpYnV0ZSB3ZWlnaHQuXG4gXG4mIzQzO1doYXQ6XHRcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1x1MDAzY0tcdTAwM2UvY29udGV4dHMvXHUwMDNjQ1x1MDAzZS9tb25pdG9yaW5nX2F0dHJzL3Byb2Jlcy9cdTAwM2NQXHUwMDNlL3ByZXBzL25yX3ByZXBzXG4mIzQzO0RhdGU6XHRcdEp1biAyMDI2XG4mIzQzO0NvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbiYjNDM7RGVzY3JpcHRpb246XHRXcml0aW5nIGEgbnVtYmVyICYjMzk7TiYjMzk7IHRvIHRoaXMgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2ZcbiYjNDM7XHRcdGRpcmVjdG9yaWVzIGZvciBlYWNoIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uIG5hbWVkICYjMzk7MCYjMzk7XG4mIzQzO1x0XHR0byAmIzM5O04tMSYjMzk7IHVuZGVyIHRoZSBwcmVwcy8gZGlyZWN0b3J5LlxuJiM0MztcbiYjNDM7V2hhdDpcdFx0L3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjS1x1MDAzZS9jb250ZXh0cy9cdTAwM2NDXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1x1MDAzY1BcdTAwM2UvcHJlcC9cdTAwM2NSXHUwMDNlL2FjdGlvblxuJiM0MztEYXRlOlx0XHRKdW4gMjAyNlxuJiM0MztDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4mIzQzO0Rlc2NyaXB0aW9uOlx0V3JpdGluZyB0byBhbmQgcmVhZGluZyBmcm9tIHRoaXMgZmlsZSBzZXRzIGFuZCBnZXRzIHRoZSBwcm9iaW5nXG4mIzQzO1x0XHRwcmVlcGFyYXRpb24gYWN0aW9uLlxuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXHUwMDNjUFx1MDAzZS9maWx0ZXJzL25yX2ZpbHRlcnNcbiBEYXRlOlx0XHRNYXkgMjAyNlxuIENvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCBkYTVmOWFmZDA4YWVmOC4uMWY1YTM5ZTFmYzM4ZGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbkBAIC03NCw2ICYjNDM7NzQsOSBAQCBjb21tYSAoXCYjMzQ7LFwmIzM0OykuXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIG5yX3JlZ2lvbnMvbWluLG1heFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBwcm9iZXMgXHUwMDNjZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzXHUwMDNlYC9ucl9wcm9iZXNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvd2VpZ2h0XG4mIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIHByZXBzL25yX3ByZXBzXG4mIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3ByZXBfYWN0aW9uXG4mIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBmaWx0ZXJzL25yX2ZpbHRlcnNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGhcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uXG5AQCAtMjgzLDkgJiM0MzsyODYsMTggQEAgSW4gdGhlIGJlZ2lubmluZywgdGhpcyBkaXJlY3RvcnkgaGFzIG9ubHkgb25lIGZpbGUsIGBgbnJfcHJvYmVzYGAuICBXcml0aW5nIGFcbiBudW1iZXIgKGBgTmBgKSB0byB0aGUgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGQgZGlyZWN0b3JpZXMgbmFtZWQgYGAwYGBcbiB0byBgYE4tMWBgLiAgRWFjaCBkaXJlY3RvcnkgcmVwcmVzZW50cyBlYWNoIG1vbml0b3JpbmcgcHJvYmUuXG4gXG4tSW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIG9uZSBkaXJlY3RvcnksIGBgZmlsdGVyc2BgIGV4aXN0cy4gIFRoZSBkaXJlY3Rvcnlcbi1jb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBmaWx0ZXJzIGZvciB0aGUgcHJvYmUsIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmVcbi10aGUgZGF0YSBhdHRyaWJ1dGUgZm9yIHRoZSBwcm9iZS5cbiYjNDM7SW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIHR3byBkaXJlY3RvcmllcywgYGBwcmVwc2BgIGFuZCBgYGZpbHRlcnNgYCBleGlzdHMuXG4mIzQzO1RoZSBkaXJlY3RvcmllcyBjb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgYW5kXG4mIzQzO2ZpbHRlcnMgZm9yIHRoZSBwcm9iZSwgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgZGF0YSBhdHRyaWJ1dGUgZm9yIHRoZVxuJiM0Mztwcm9iZS5cbiYjNDM7XG4mIzQzO0luIHRoZSBiZWdpbm5pbmcsIGBgcHJlcHNgYCBkaXJlY3RvcnkgaGFzIG9ubHkgb25lIGZpbGUsIGBgbnJfcHJlcHNgYC5cbiYjNDM7V3JpdGlpbmcgYSBudW1iZXIgKGBgTmBgKSB0byB0aGUgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGQgZGlyZWN0b3JpZXNcbiYjNDM7bmFtZXMgYGAwYGAgdG8gYGBOLTFgYC4gIEVhY2ggZGlyZWN0b3J5IHJlcHJlc2VudHMgZWFjaCBwcmVwYXJhdGlvbiBhY3Rpb24uXG4mIzQzO0VhY2ggZGlyZWN0b3J5IGhhcyBvbmUgZmlsZSwgYGBwcmVwX2FjdGlvbmBgLiAgVGhlIHByZXBhcmF0aW9uIGFjdGlvbiBjYW4gYmVcbiYjNDM7c2VsZWN0ZWQgYnkgd3JpdGluZyB0aGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIHRoZSBgYHByZXBfYWN0aW9uYGAgZmlsZS4gIFJlZmVyXG4mIzQzO3RvIHRoZSA6cmVmOmBkZXNpZ24gZG9jIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcdTAwM2VgIGZvciB0aGUgbGlzdCBvZlxuJiM0MztzdXBwb3J0ZWQgYWN0aW9ucy5cbiBcbiBFYWNoIHByb2JlIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zIGBgd2VpZ2h0YGAgZmlsZS4gIFJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZ1xuIHRvIHRoZSBmaWxlIGdldHMgYW5kIHNldHMgdGhlIDpyZWY6YGF0dHJpYnV0ZXMtb25seSBtb25pdG9yaW5nXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCBhZWQ2Y2IxY2Y0ODMxMC4uMDZmZmZlNWUzNzgxOWUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTI5Myw4ICYjNDM7MjkzLDE0IEBAIHJlZ2lzdHJhdGlvbiBpcyBtYWRlIGJ5IHNwZWNpZnlpbmcgYSBwcm9iZSBwZXIgYXR0cmlidXRlLiAgRWFjaCBvZiB0aGUgcHJvYmVcbiBzcGVjaWZpZXMgYSBydWxlIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIG1lbW9yeSByZWdpb24gaGFzIHRoZSByZWxhdGVkXG4gYXR0cmlidXRlLiAgVGhlIHJ1bGUgaXMgY29uc3RydWN0ZWQgd2l0aCBtdWx0aXBsZSBmaWx0ZXJzLiAgVGhlIGZpbHRlcnMgd29ya1xuIHNhbWUgdG8gOnJlZjpgREFNT1MgZmlsdGVycyBcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVyc1x1MDAzZWAgZXhjZXB0IHRoZSBzdXBwb3J0ZWRcbi1maWx0ZXIgdHlwZXMuICBDdXJyZW50bHkgb25seSBgYGFub25gYCBhbmQgYGBtZW1jZ2BgIGZpbHRlciB0eXBlcyBhcmUgc3VwcG9ydGVkXG4tZm9yIGRhdGEgYXR0cmlidXRlcyBtb25pdG9yaW5nLlxuJiM0MztmaWx0ZXIgdHlwZXMuICBDdXJyZW50bHkgYmVsb3cgZml0bGVyIHR5cGVzIGFyZSBzdXBwb3J0ZWQuXG4mIzQzO1xuJiM0MzstIGBgYW5vbmBgOiBTYW1lIHRvIHRoYXQgZm9yIERBTU9TIGZpbHRlcnMuXG4mIzQzOy0gYGBtZW1jZ2BgOiBTYW1lIHRvIHRoYXQgZm9yIERBTU9TIGZpbHRlcnMuXG4mIzQzOy0gYGBwZ2lkbGVfdW5zZXRgYDogTWF0Y2hlcyBpZiB0aGUgcGFnZSBmb3IgdGhlIG1lbW9yeSBpcyBtYXJrZWQgYXMgbm90XG4mIzQzOyAgYWNjZXNzLWlkbGUuXG4mIzQzOyAgTWF0Y2hlcyBpZiB0aGUgbWVtb3J5IGlzIG5vdCBiYWNrZWQgYnkgcGFnZXMgdGhhdCBEQU1PTiBjYW4gaWRuZXRpZnlcbiYjNDM7ICBpZGxlbmVzcy5cbiBcbiBJZiBzdWNoIHByb2JlcyBhcmUgcmVnaXN0ZXJlZCwgREFNT04gZXhlY3V0ZXMgdGhlIHByb2JlcyBmb3IgZWFjaCByZWdpb24mIzM5O3NcbiBzYW1wbGluZyBtZW1vcnkgd2hlbiBpdCBkb2VzIHRoZSBhY2Nlc3MgOnJlZjpgc2FtcGxpbmdcbkBAIC0zMDUsNiAmIzQzOzMxMSwxMyBAQCBVc2VycyBjYW4gdGhlcmVmb3JlIGtub3cgaG93IG11Y2ggb2YgYSBnaXZlbiBEQU1PTiByZWdpb24gaGFzIGEgc3BlY2lmaWMgZGF0YVxuIGF0dHJpYnV0ZSBieSByZWFkaW5nIHRoZSBwZXItcmVnaW9uIHBlci1wcm9iZSBwcm9iZSBoaXRzIGNvdW50ZXIgYWZ0ZXIgZWFjaFxuIGFnZ3JlZ2F0aW9uIGludGVydmFsLlxuIFxuJiM0MztVc2VycyBjYW4gb3B0aW9uYWxseSByZWdpc3RlciBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgcGVyIHByb2JlLiAgSWYgc3VjaFxuJiM0MzthY3Rpb25zIGFyZSByZWdpc3RlcmVkLCBEQU1PTiBhcHBsaWVzIHRoZSBhY3Rpb25zIHRvIGVhY2ggcmVnaW9uJiMzOTtzIHNhbXBsaW5nXG4mIzQzO21lbW9yeSBiZWZvcmUgc3RhcnRpbmcgdGhlIG5leHQgc2FtcGxpbmcgaW50ZXJ2YWwuICBDdXJyZW50bHkgb25seSBvbmUgYWN0aW9uLFxuJiM0MztgYHNldF9wZ2lkbGVgYCBpcyBzdXBwb3J0ZWQuICBUaGUgYWN0aW9uIG1hcmtzIHRoZSBwYWdlIGZvciB0aGUgcHJvYmluZyB0YXJnZXRcbiYjNDM7bWVtb3J5IGFzIGFjY2Vzcy1pZGxlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aFxuJiM0MztgYHBnaWRsZV91bnNldGBgIHByb2JlIGZpbHRlci5cbiYjNDM7XG4gVGhpcyBpcyBhIHNhbXBsaW5nIGJhc2VkIG1lY2hhbmlzbS4gIEhlbmNlLCBpdCBpcyBsaWdodHdlaWdodCBidXQgdGhlIG91dHB1dFxuIG1heSBpbmNsdWRlIHNvbWUgbWVhc3VyZW1lbnQgZXJyb3JzLiAgVGhlIG91dHB1dCBzaG91bGQgYmUgdXNlZCB3aXRoIGdvb2RcbiB1bmRlcnN0YW5kaW5nIG9mIHN0YXRpc3RpY3MuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCAwYzhiN2RkZWY5YWJiMy4uZmUyYzZiNTZkMWQ1MzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTYyNyw2ICYjNDM7NjI3LDcgQEAgZW51bSBkYW1vbl9vcHNfaWQge1xuICAqIEB1cGRhdGU6XHRcdFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXG4gICogQHByZXBhcmVfYWNjZXNzX2NoZWNrczpcdFByZXBhcmUgbmV4dCBhY2Nlc3MgY2hlY2sgb2YgdGFyZ2V0IHJlZ2lvbnMuXG4gICogQGNoZWNrX2FjY2Vzc2VzOlx0XHRDaGVjayB0aGUgYWNjZXNzZXMgdG8gdGFyZ2V0IHJlZ2lvbnMuXG4mIzQzOyAqIEBwcmVwX3Byb2JlczpcdFx0UHJlcGFyZSBhcHBseWluZyBwcm9iZXMgZm9yIGVhY2ggcmVnaW9uLlxuICAqIEBhcHBseV9wcm9iZXM6XHRcdEFwcGx5IHByb2JlcyBmb3IgZWFjaCByZWdpb24uXG4gICogQGdldF9zY2hlbWVfc2NvcmU6XHRcdEdldCB0aGUgc2NvcmUgb2YgYSByZWdpb24gZm9yIGEgc2NoZW1lLlxuICAqIEBhcHBseV9zY2hlbWU6XHRcdEFwcGx5IGEgREFNT04tYmFzZWQgb3BlcmF0aW9uIHNjaGVtZS5cbkBAIC02NTQsNiAmIzQzOzY1NSw4IEBAIGVudW0gZGFtb25fb3BzX2lkIHtcbiAgKiBsYXN0IHByZXBhcmF0aW9uIGFuZCB1cGRhdGUgdGhlIG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyBvZiBlYWNoIHJlZ2lvbi5cbiAgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4IG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyB0aGF0IG1hZGUgYXMgYSByZXN1bHRcbiAgKiBvZiBpdHMgdXBkYXRlLiAgVGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBmb3IgcmVnaW9ucyBhZGp1c3RtZW50IHRocmVzaG9sZC5cbiYjNDM7ICogQHByZXBfcHJvYmVzIHNob3VsZCBleGVjdXRlIHJlcXVpcmVkIFx1MDAyNnN0cnVjdCBkYW1vbl9wcmVwIGZvciBuZXh0IFx1MDAyNnN0cnVjdFxuJiM0MzsgKiBkYW1vbl9wcm9iZSBhcHBsaWNhdGlvbnMgdG8gZWFjaCByZWdpb24uXG4gICogQGFwcGx5X3Byb2JlcyBzaG91bGQgYXBwbHkgdGhlIGRhdGEgYXR0cmlidXRlIHByb2JlcyB0byBlYWNoIHJlZ2lvbiBhbmRcbiAgKiBhY2NvcmRpbmdseSB1cGRhdGUgdGhlIHByb2JlIGhpdHMgY291bnRlciBvZiB0aGUgcmVnaW9uLiAgSXQgc2hvdWxkIGFsc29cbiAgKiBzZXQgXHUwMDI2ZGFtb25fcmVnaW9uLVx1MDAzZXNhbXBsaW5nX2FkZHIgb2YgZWFjaCByZWdpb24gaWYgYGBzZXRfc2FtcGxlc2BgIGlzIHRydWUuXG5AQCAtNjc2LDYgJiM0Mzs2NzksNyBAQCBzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyB7XG4gXHR2b2lkICgqdXBkYXRlKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbiBcdHZvaWQgKCpwcmVwYXJlX2FjY2Vzc19jaGVja3MpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xuIFx0dW5zaWduZWQgaW50ICgqY2hlY2tfYWNjZXNzZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xuJiM0MztcdHZvaWQgKCpwcmVwX3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCwgYm9vbCBzZXRfc2FtcGxlcyk7XG4gXHR1bnNpZ25lZCBpbnQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG4gXHRcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pO1xuIFx0aW50ICgqZ2V0X3NjaGVtZV9zY29yZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbkBAIC03MzksMTUgJiM0Mzs3NDMsMzggQEAgc3RydWN0IGRhbW9uX2ludGVydmFsc19nb2FsIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X3NhbXBsZV91cztcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZW51bSBkYW1vbl9wcmVwX2FjdGlvbiAtIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBAREFNT05fUFJFUF9TRVRfUEdJRExFOlx0U2V0IHRoZSBwcm9iaW5nIG1lbW9yeSBhcyBpZGxlIHBhZ2UuXG4mIzQzOyAqL1xuJiM0MztlbnVtIGRhbW9uX3ByZXBfYWN0aW9uIHtcbiYjNDM7XHREQU1PTl9QUkVQX1NFVF9QR0lETEUsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGRhbW9uX3ByZXAgLSBEQU1PTiBwcm9iaW5nIHByZXBhcmF0aW9uIHJlcXVlc3QuXG4mIzQzOyAqXG4mIzQzOyAqIEBhY3Rpb246XHRBY3Rpb24gdG8gZG8gdG8gdGhlIHByb2JpbmcgbWVtb3J5IGZvciB0aGUgcHJlcGFyYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgZGFtb25fcHJlcCB7XG4mIzQzO1x0ZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb247XG4mIzQzOy8qIHByaXZhdGU6ICovXG4mIzQzO1x0Lyogc2libGluZ3MgbGlzdC4gKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIGVudW0gZGFtb25fZmlsdGVyX3R5cGUgLSBUeXBlIG9mIFx1MDAyNnN0cnVjdCBkYW1vbl9maWx0ZXJcbiAgKlxuLSAqIEBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlx0QW5vbnltb3VzIHBhZ2VzLlxuLSAqIEBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcdFNwZWNpZmljIG1lbWNnJiMzOTtzIHBhZ2VzLlxuJiM0MzsgKiBAREFNT05fRklMVEVSX1RZUEVfQU5PTjpcdFx0QW5vbnltb3VzIHBhZ2VzLlxuJiM0MzsgKiBAREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XHRcdFNwZWNpZmljIG1lbWNnJiMzOTtzIHBhZ2VzLlxuJiM0MzsgKiBAREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlx0UGdpZGxlIGlzIHVuc2V0LlxuICAqL1xuIGVudW0gZGFtb25fZmlsdGVyX3R5cGUge1xuIFx0REFNT05fRklMVEVSX1RZUEVfQU5PTixcbiBcdERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHLFxuJiM0MztcdERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVCxcbiB9O1xuIFxuIC8qKlxuQEAgLTc3OCw2ICYjNDM7ODA1LDggQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gc3RydWN0IGRhbW9uX3Byb2JlIHtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XG4gLyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBQcmVwYXJhdGlvbiBhY3Rpb25zIHRvIGFwcGx5IHRvIGVhY2ggcHJvYmluZyBtZW1vcnkuICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBwcmVwcztcbiBcdC8qIEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcbiBcdC8qIFNpYmxpbmdzIGxpc3QuICovXG5AQCAtOTU3LDYgJiM0Mzs5ODYsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3N6X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuIFx0cmV0dXJuIHItXHUwMDNlYXIuZW5kIC0gci1cdTAwM2Vhci5zdGFydDtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcmVwKSBcXFxuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2KHByZXApLVx1MDAzZXByZXBzLCBsaXN0KVxuJiM0MztcbiYjNDM7I2RlZmluZSBkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUocCwgbmV4dCwgcHJlcCkgXFxcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgXHUwMDI2KHByZXApLVx1MDAzZXByZXBzLCBsaXN0KVxuJiM0MztcbiAjZGVmaW5lIGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSBcXFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmLCBcdTAwMjYocCktXHUwMDNlZmlsdGVycywgbGlzdClcbiBcbkBAIC0xMDEwLDYgJiM0MzsxMDQ1LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3N6X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuIFxuICNpZmRlZiBDT05GSUdfREFNT05cbiBcbiYjNDM7c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKTtcbiYjNDM7dm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKTtcbiYjNDM7XG4gc3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG4gXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpO1xuIHZvaWQgZGFtb25fYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjA2Li5kNWIxZTBiNTg1MWExYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTExLDYgJiM0MzsxMTEsNjMgQEAgaW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbmV3X3ByZXAoZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcbiYjNDM7XG4mIzQzO1x0cHJlcCA9IGttYWxsb2Nfb2JqKCpwcmVwKTtcbiYjNDM7XHRpZiAoIXByZXApXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRwcmVwLVx1MDAzZWFjdGlvbiA9IGFjdGlvbjtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcmVwLVx1MDAzZWxpc3QpO1xuJiM0MztcdHJldHVybiBwcmVwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXG4mIzQzO3tcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNnByZXAtXHUwMDNlbGlzdCwgXHUwMDI2cC1cdTAwM2VwcmVwcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2RlbF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxuJiM0Mzt7XG4mIzQzO1x0bGlzdF9kZWwoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxuJiM0Mzt7XG4mIzQzO1x0a2ZyZWUocCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqcClcbiYjNDM7e1xuJiM0MztcdGRhbW9uX2RlbF9wcmVwKHApO1xuJiM0MztcdGRhbW9uX2ZyZWVfcHJlcChwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkYW1vbl9wcmVwICpkYW1vbl9udGhfcHJlcChpbnQgbiwgc3RydWN0IGRhbW9uX3Byb2JlICpwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcmVwKHByZXAsIHApIHtcbiYjNDM7XHRcdGlmIChpJiM0MzsmIzQzOyA9PSBuKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJlcDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgYykge1xuJiM0MztcdFx0ZGFtb25fZm9yX2VhY2hfcHJlcChwcmVwLCBwcm9iZSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbiBcdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbiB7XG5AQCAtMTY3LDYgJiM0MzsyMjQsNyBAQCBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxuIFx0aWYgKCFwKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdHAtXHUwMDNld2VpZ2h0ID0gMDtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZXByZXBzKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnAtXHUwMDNlZmlsdGVycyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuIFx0cmV0dXJuIHA7XG5AQCAtMTg0LDggJiM0MzsyNDIsMTEgQEAgc3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbiB7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3ByZXAgKnByZXAsICpwcmVwX25leHQ7XG4gXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmLCAqbmV4dDtcbiBcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUocHJlcCwgcHJlcF9uZXh0LCBwKVxuJiM0MztcdFx0ZGFtb25fZnJlZV9wcmVwKHByZXApO1xuIFx0ZGFtb25fZm9yX2VhY2hfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcClcbiBcdFx0ZGFtb25fZnJlZV9maWx0ZXIoZik7XG4gXHRrZnJlZShwKTtcbkBAIC0xNjY2LDYgJiM0MzsxNzI3LDM2IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKmRzdCwgc3RydWN0IGRhbW9uX3ByZXAgKnNyYylcbiYjNDM7e1xuJiM0MztcdGRzdC1cdTAwM2VhY3Rpb24gPSBzcmMtXHUwMDNlYWN0aW9uO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCwgc3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqZHN0X3ByZXAsICpuZXh0LCAqc3JjX3ByZXAsICpuZXdfcHJlcDtcbiYjNDM7XHRpbnQgaSA9IDAsIGogPSAwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUoZHN0X3ByZXAsIG5leHQsIGRzdCkge1xuJiM0MztcdFx0c3JjX3ByZXAgPSBkYW1vbl9udGhfcHJlcChpJiM0MzsmIzQzOywgc3JjKTtcbiYjNDM7XHRcdGlmIChzcmNfcHJlcClcbiYjNDM7XHRcdFx0ZGFtb25fY29tbWl0X3ByZXAoZHN0X3ByZXAsIHNyY19wcmVwKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZGFtb25fZGVzdHJveV9wcmVwKGRzdF9wcmVwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShzcmNfcHJlcCwgbmV4dCwgc3JjKSB7XG4mIzQzO1x0XHRpZiAoaiYjNDM7JiM0MzsgXHUwMDNjIGkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG5ld19wcmVwID0gZGFtb25fbmV3X3ByZXAoc3JjX3ByZXAtXHUwMDNlYWN0aW9uKTtcbiYjNDM7XHRcdGlmICghbmV3X3ByZXApXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0ZGFtb25fYWRkX3ByZXAoZHN0LCBuZXdfcHJlcCk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxuIFx0XHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXG4ge1xuQEAgLTE3MjQsNiAmIzQzOzE4MTUsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRcdHNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShpJiM0MzsmIzQzOywgc3JjKTtcbiBcdFx0aWYgKHNyY19wcm9iZSkge1xuIFx0XHRcdGRzdF9wcm9iZS1cdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXHUwMDNld2VpZ2h0O1xuJiM0MztcdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE3NDEsNiAmIzQzOzE4MzUsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdGRhbW9uX2FkZF9wcm9iZShkc3QsIG5ld19wcm9iZSk7XG4gXHRcdG5ld19wcm9iZS1cdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXHUwMDNld2VpZ2h0O1xuJiM0MztcdFx0ZXJyID0gZGFtb25fY29tbWl0X3ByZXBzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTM3ODUsNiAmIzQzOzM4ODIsNyBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiBcdFx0dW5zaWduZWQgbG9uZyBuZXh0X29wc191cGRhdGVfc2lzID0gY3R4LVx1MDAzZW5leHRfb3BzX3VwZGF0ZV9zaXM7XG4gXHRcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcbiBcdFx0Ym9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xuJiM0MztcdFx0Ym9vbCBoYXNfcHJlcCA9IGRhbW9uX2hhc19wcmVwKGN0eCk7XG4gXHRcdHVuc2lnbmVkIGludCBtYXhfbWVyZ2Vfc2NvcmUgPSAwLCBtYXhfd3N1bTtcbiBcdFx0Ym9vbCBnZXRfbWF4X3dzdW07XG4gXG5AQCAtMzc5Myw2ICYjNDM7Mzg5MSw4IEBAIHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuIFxuIFx0XHRpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MpXG4gXHRcdFx0Y3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MoY3R4KTtcbiYjNDM7XHRcdGlmIChjdHgtXHUwMDNlb3BzLnByZXBfcHJvYmVzKVxuJiM0MztcdFx0XHRjdHgtXHUwMDNlb3BzLnByZXBfcHJvYmVzKGN0eCwgaGFzX3ByZXApO1xuIFxuIFx0XHRrZGFtb25kX3VzbGVlcChzYW1wbGVfaW50ZXJ2YWwpO1xuIFx0XHRjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMmIzQzOyYjNDM7O1xuQEAgLTM4MDcsNyAmIzQzOzM5MDcsOCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRnZXRfbWF4X3dzdW0gPSBmYWxzZTtcbiBcdFx0XHRtYXhfd3N1bSA9IGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcbi1cdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkLCBnZXRfbWF4X3dzdW0pO1xuJiM0MztcdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiAhaGFzX3ByZXAsXG4mIzQzO1x0XHRcdFx0XHRnZXRfbWF4X3dzdW0pO1xuIFx0XHRcdGlmIChnZXRfbWF4X3dzdW0pXG4gXHRcdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgPSBtYXhfd3N1bTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCA1YTZhNzgwNTQ3ODRhZi4uOGQ4ZmNkMTM2OWU1NjggMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMTA1LDYgJiM0MzsxMDUsNDAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gbWF4X25yX2FjY2Vzc2VzO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkge1xuJiM0MztcdFx0c3dpdGNoIChwLVx1MDAzZWFjdGlvbikge1xuJiM0MztcdFx0Y2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6XG4mIzQzO1x0XHRcdGRhbW9uX3BhX21rb2xkKGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZXNhbXBsaW5nX2FkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQpKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG4mIzQzO1xuJiM0MztcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbiYjNDM7XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4mIzQzO1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbiYjNDM7XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbiYjNDM7XHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuJiM0MztcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG4mIzQzO1x0XHRcdFx0ZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHIsIHAsIGN0eCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuQEAgLTEzMiw2ICYjNDM7MTY2LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlxuJiM0MztcdFx0aWYgKCFmb2xpbylcbiYjNDM7XHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC00NDAsNiAmIzQzOzQ4MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXG4gXHRcdC51cGRhdGUgPSBOVUxMLFxuIFx0XHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxuIFx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyxcbiYjNDM7XHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3BhX3ByZXBfcHJvYmVzLFxuIFx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxuIFx0XHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcbiBcdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMjcuLmQ0NGQ1YmI5ZThmYmY4IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTc1MCw2ICYjNDM7NzUwLDIxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XG4gXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ3JvdXBzLFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIHByZXAgZGlyZWN0b3J5XG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAge1xuJiM0MztcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4mIzQzO1x0ZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb247XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKmRhbW9uX3N5c2ZzX3ByZXBfYWxsb2Modm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpwcmVwO1xuJiM0MztcbiYjNDM7XHRwcmVwID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXApO1xuJiM0MztcdGlmICghcHJlcClcbiYjNDM7XHRcdHJldHVybiBwcmVwO1xuJiM0MztcdHByZXAtXHUwMDNlYWN0aW9uID0gREFNT05fUFJFUF9TRVRfUEdJRExFO1xuJiM0MztcdHJldHVybiBwcmVwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSB7XG4mIzQzO1x0ZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb247XG4mIzQzO1x0Y2hhciAqbmFtZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZVxuJiM0MztkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lc1tdID0ge1xuJiM0MztcdHtcbiYjNDM7XHRcdC5hY3Rpb24gPSBEQU1PTl9QUkVQX1NFVF9QR0lETEUsXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3NldF9wZ2lkbGVcJiMzNDssXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHByZXBfYWN0aW9uX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpwcmVwID0gY29udGFpbmVyX29mKGtvYmosXG4mIzQzO1x0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwLCBrb2JqKTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSAqYWN0aW9uX25hbWU7XG4mIzQzO1xuJiM0MztcdFx0YWN0aW9uX25hbWUgPSBcdTAwMjZkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lc1tpXTtcbiYjNDM7XHRcdGlmIChhY3Rpb25fbmFtZS1cdTAwM2VhY3Rpb24gPT0gcHJlcC1cdTAwM2VhY3Rpb24pXG4mIzQzO1x0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssIGFjdGlvbl9uYW1lLVx1MDAzZW5hbWUpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgcHJlcF9hY3Rpb25fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXAgPSBjb250YWluZXJfb2Yoa29iaixcbiYjNDM7XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAsIGtvYmopO1xuJiM0MztcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSAqYWN0aW9uX25hbWU7XG4mIzQzO1xuJiM0MztcdFx0YWN0aW9uX25hbWUgPSBcdTAwMjZkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lc1tpXTtcbiYjNDM7XHRcdGlmIChzeXNmc19zdHJlcShidWYsIGFjdGlvbl9uYW1lLVx1MDAzZW5hbWUpKSB7XG4mIzQzO1x0XHRcdHByZXAtXHUwMDNlYWN0aW9uID0gYWN0aW9uX25hbWUtXHUwMDNlYWN0aW9uO1xuJiM0MztcdFx0XHRyZXQgPSBjb3VudDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpwcmVwID0gY29udGFpbmVyX29mKGtvYmosXG4mIzQzO1x0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwLCBrb2JqKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUocHJlcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcHJlcF9wcmVwX2FjdGlvbl9hdHRyID1cbiYjNDM7XHRcdF9fQVRUUl9SV19NT0RFKHByZXBfYWN0aW9uLCAwNjAwKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19wcmVwX2F0dHJzW10gPSB7XG4mIzQzO1x0XHUwMDI2ZGFtb25fc3lzZnNfcHJlcF9wcmVwX2FjdGlvbl9hdHRyLmF0dHIsXG4mIzQzO1x0TlVMTCxcbiYjNDM7fTtcbiYjNDM7QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19wcmVwKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBfa3R5cGUgPSB7XG4mIzQzO1x0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2UsXG4mIzQzO1x0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxuJiM0MztcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3ByZXBfZ3JvdXBzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogcHJlcHMgZGlyZWN0b3J5XG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzIHtcbiYjNDM7XHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICoqcHJlcHNfYXJyO1xuJiM0MztcdGludCBucjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKmRhbW9uX3N5c2ZzX3ByZXBzX2FsbG9jKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKipwcmVwc19hcnIgPSBwcmVwcy1cdTAwM2VwcmVwc19hcnI7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByZXBzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0a29iamVjdF9kZWwoXHUwMDI2cHJlcHNfYXJyW2ldLVx1MDAzZWtvYmopO1xuJiM0MztcdFx0a29iamVjdF9wdXQoXHUwMDI2cHJlcHNfYXJyW2ldLVx1MDAzZWtvYmopO1xuJiM0MztcdH1cbiYjNDM7XHRwcmVwcy1cdTAwM2VuciA9IDA7XG4mIzQzO1x0a2ZyZWUocHJlcHNfYXJyKTtcbiYjNDM7XHRwcmVwcy1cdTAwM2VwcmVwc19hcnIgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHMsXG4mIzQzO1x0XHRpbnQgbnJfcHJlcHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqKnByZXBzX2FyciwgKnByZXA7XG4mIzQzO1x0aW50IGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7XG4mIzQzO1x0aWYgKCFucl9wcmVwcylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRwcmVwc19hcnIgPSBrbWFsbG9jX29ianMoKnByZXBzX2FyciwgbnJfcHJlcHMsXG4mIzQzO1x0XHRcdFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4mIzQzO1x0aWYgKCFwcmVwc19hcnIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRwcmVwcy1cdTAwM2VwcmVwc19hcnIgPSBwcmVwc19hcnI7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ByZXBzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cHJlcCA9IGRhbW9uX3N5c2ZzX3ByZXBfYWxsb2MoKTtcbiYjNDM7XHRcdGlmICghcHJlcCkge1xuJiM0MztcdFx0XHRkYW1vbl9zeXNmc19wcmVwc19ybV9kaXJzKHByZXBzKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2cHJlcC1cdTAwM2Vrb2JqLFxuJiM0MztcdFx0XHRcdFx1MDAyNmRhbW9uX3N5c2ZzX3ByZXBfa3R5cGUsIFx1MDAyNnByZXBzLVx1MDAzZWtvYmosIFwmIzM0OyVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGkpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRrb2JqZWN0X3B1dChcdTAwMjZwcmVwLVx1MDAzZWtvYmopO1xuJiM0MztcdFx0XHRkYW1vbl9zeXNmc19wcmVwc19ybV9kaXJzKHByZXBzKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRwcmVwc19hcnJbaV0gPSBwcmVwO1xuJiM0MztcdFx0cHJlcHMtXHUwMDNlbnImIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgbnJfcHJlcHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0Y2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxuJiM0MztcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCBwcmVwcy1cdTAwM2Vucik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG5yX3ByZXBzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuJiM0MztcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHM7XG4mIzQzO1x0aW50IG5yLCBlcnIgPSBrc3RydG9pbnQoYnVmLCAwLCBcdTAwMjZucik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdGlmIChuciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRwcmVwcyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopO1xuJiM0MztcbiYjNDM7XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdGVyciA9IGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzKHByZXBzLCBucik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4mIzQzO3tcbiYjNDM7XHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzLCBrb2JqKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcHJlcHNfbnJfYXR0ciA9XG4mIzQzO1x0XHRfX0FUVFJfUldfTU9ERShucl9wcmVwcywgMDYwMCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfcHJlcHNfYXR0cnNbXSA9IHtcbiYjNDM7XHRcdTAwMjZkYW1vbl9zeXNmc19wcmVwc19ucl9hdHRyLmF0dHIsXG4mIzQzO1x0TlVMTCxcbiYjNDM7fTtcbiYjNDM7QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19wcmVwcyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcmVwc19rdHlwZSA9IHtcbiYjNDM7XHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2UsXG4mIzQzO1x0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxuJiM0MztcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3ByZXBzX2dyb3VwcyxcbiYjNDM7fTtcbiYjNDM7XG4gLypcbiAgKiBmaWx0ZXIgZGlyZWN0b3J5XG4gICovXG5AQCAtNzgyLDYgJiM0Mzs5OTUsMTAgQEAgZGFtb25fc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbiBcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcbiBcdFx0Lm5hbWUgPSBcJiMzNDttZW1jZ1wmIzM0OyxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQsXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3BnaWRsZV91bnNldFwmIzM0OyxcbiYjNDM7XHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTEwNjYsNiAmIzQzOzEyODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlID0ge1xuIHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSB7XG4gXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuIFx0dW5zaWduZWQgaW50IHdlaWdodDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzO1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKmZpbHRlcnM7XG4gfTtcbiBcbkBAIC0xMDc2LDI1ICYjNDM7MTI5NCw1MCBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpkYW1vbl9zeXNmc19wcm9iZV9hbGxvYyh2b2lkKVxuIFxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcHJvYmVfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSlcbiB7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcztcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzICpmaWx0ZXJzO1xuIFx0aW50IGVycjtcbiBcbi1cdGZpbHRlcnMgPSBkYW1vbl9zeXNmc19maWx0ZXJzX2FsbG9jKCk7XG4tXHRpZiAoIWZpbHRlcnMpXG4mIzQzO1x0cHJlcHMgPSBkYW1vbl9zeXNmc19wcmVwc19hbGxvYygpO1xuJiM0MztcdGlmICghcHJlcHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdHByb2JlLVx1MDAzZXByZXBzID0gcHJlcHM7XG4mIzQzO1xuJiM0MztcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFx1MDAyNnByZXBzLVx1MDAzZWtvYmosIFx1MDAyNmRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlLFxuJiM0MztcdFx0XHRcdTAwMjZwcm9iZS1cdTAwM2Vrb2JqLCBcJiMzNDtwcmVwc1wmIzM0Oyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gcHV0X3ByZXBzX291dDtcbiYjNDM7XG4mIzQzO1x0ZmlsdGVycyA9IGRhbW9uX3N5c2ZzX2ZpbHRlcnNfYWxsb2MoKTtcbiYjNDM7XHRpZiAoIWZpbHRlcnMpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGRlbF9wcmVwc19vdXQ7XG4mIzQzO1x0fVxuIFx0cHJvYmUtXHUwMDNlZmlsdGVycyA9IGZpbHRlcnM7XG4gXG4gXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZmaWx0ZXJzLVx1MDAzZWtvYmosIFx1MDAyNmRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUsXG4gXHRcdFx0XHUwMDI2cHJvYmUtXHUwMDNla29iaiwgXCYjMzQ7ZmlsdGVyc1wmIzM0Oyk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGtvYmplY3RfcHV0KFx1MDAyNmZpbHRlcnMtXHUwMDNla29iaik7XG4tXHRcdHByb2JlLVx1MDAzZWZpbHRlcnMgPSBOVUxMO1xuLVx0fVxuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIHB1dF9maWx0ZXJzX291dDtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7cHV0X2ZpbHRlcnNfb3V0OlxuJiM0MztcdGtvYmplY3RfcHV0KFx1MDAyNmZpbHRlcnMtXHUwMDNla29iaik7XG4mIzQzO1x0cHJvYmUtXHUwMDNlZmlsdGVycyA9IE5VTEw7XG4mIzQzO2RlbF9wcmVwc19vdXQ6XG4mIzQzO1x0a29iamVjdF9kZWwoXHUwMDI2cHJlcHMtXHUwMDNla29iaik7XG4mIzQzO3B1dF9wcmVwc19vdXQ6XG4mIzQzO1x0a29iamVjdF9wdXQoXHUwMDI2cHJlcHMtXHUwMDNla29iaik7XG4mIzQzO1x0cHJvYmUtXHUwMDNlcHJlcHMgPSBOVUxMO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJvYmVfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlKVxuIHtcbiYjNDM7XHRpZiAocHJvYmUtXHUwMDNlcHJlcHMpIHtcbiYjNDM7XHRcdGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMocHJvYmUtXHUwMDNlcHJlcHMpO1xuJiM0MztcdFx0a29iamVjdF9wdXQoXHUwMDI2cHJvYmUtXHUwMDNlcHJlcHMtXHUwMDNla29iaik7XG4mIzQzO1x0fVxuIFx0aWYgKHByb2JlLVx1MDAzZWZpbHRlcnMpIHtcbiBcdFx0ZGFtb25fc3lzZnNfZmlsdGVyc19ybV9kaXJzKHByb2JlLVx1MDAzZWZpbHRlcnMpO1xuIFx0XHRrb2JqZWN0X3B1dChcdTAwMjZwcm9iZS1cdTAwM2VmaWx0ZXJzLVx1MDAzZWtvYmopO1xuQEAgLTE5MzMsNiAmIzQzOzIxNzYsMjMgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3ByZXBzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnN5c19wcmVwcylcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNfcHJlcHMtXHUwMDNlbnI7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqc3lzX3ByZXAgPSBzeXNfcHJlcHMtXHUwMDNlcHJlcHNfYXJyW2ldO1xuJiM0MztcdFx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XG4mIzQzO1xuJiM0MztcdFx0cHJlcCA9IGRhbW9uX25ld19wcmVwKHN5c19wcmVwLVx1MDAzZWFjdGlvbik7XG4mIzQzO1x0XHRpZiAoIXByZXApXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0ZGFtb25fYWRkX3ByZXAocHJvYmUsIHByZXApO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXG4gXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzICpzeXNfZmlsdGVycylcbiB7XG5AQCAtMTk2OCw3ICYjNDM7MjIyOCwxNSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuIFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnN5c19wcm9iZSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqc3lzX2ZpbHRlcnM7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpzeXNfcHJlcHM7XG4mIzQzO1x0aW50IGVycjtcbiBcbiYjNDM7XHRzeXNfcHJlcHMgPSBzeXNfcHJvYmUtXHUwMDNlcHJlcHM7XG4mIzQzO1x0aWYgKHN5c19wcmVwcykge1xuJiM0MztcdFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3ByZXBzKHByb2JlLCBzeXNfcHJlcHMpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXHRzeXNfZmlsdGVycyA9IHN5c19wcm9iZS1cdTAwM2VmaWx0ZXJzO1xuIFx0aWYgKCFzeXNfZmlsdGVycylcbiBcdFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaFxuaW5kZXggZjdmYjk0Yjg0ZTcxNmQuLmRkZWJkZTZlZGFiZTRlIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXG5AQCAtMzYxLDYgJiM0MzszNjEsMzIgQEAgdGVzdF9pbnRlcnZhbHMoKVxuIFx0dGVzdF9pbnRlcnZhbHNfZ29hbCBcJiMzNDskaW50ZXJ2YWxzX2Rpci9pbnRlcnZhbHNfZ29hbFwmIzM0O1xuIH1cbiBcbiYjNDM7dGVzdF9kYW1vbl9wcmVwKClcbiYjNDM7e1xuJiM0MztcdGRhbW9uX3ByZXBfZGlyPSQxXG4mIzQzO1x0ZW5zdXJlX2ZpbGUgXCYjMzQ7JGRhbW9uX3ByZXBfZGlyL3ByZXBfYWN0aW9uXCYjMzQ7IFwmIzM0O2V4aXN0XCYjMzQ7IFwmIzM0OzYwMFwmIzM0O1xuJiM0MztcdGVuc3VyZV93cml0ZV9zdWNjIFwmIzM0OyRkYW1vbl9wcmVwX2Rpci9wcmVwX2FjdGlvblwmIzM0OyBcJiMzNDtzZXRfcGdpZGxlXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDt2YWxpZCBpbnB1dFwmIzM0O1xuJiM0MztcdGVuc3VyZV93cml0ZV9mYWlsIFwmIzM0OyRkYW1vbl9wcmVwX2Rpci9wcmVwX2FjdGlvblwmIzM0OyBcJiMzNDtmb29cJiMzNDsgXCYjMzQ7aW52YWxpZCBpbnB1dFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0ZXN0X2RhbW9uX3ByZXBzKClcbiYjNDM7e1xuJiM0MztcdHByZXBzX2Rpcj0kMVxuJiM0MztcdGVuc3VyZV9kaXIgXCYjMzQ7JHByZXBzX2RpclwmIzM0OyBcJiMzNDtleGlzdFwmIzM0O1xuJiM0MztcdGVuc3VyZV9maWxlIFwmIzM0OyRwcmVwc19kaXIvbnJfcHJlcHNcJiMzNDsgXCYjMzQ7ZXhpc3RcJiMzNDsgXCYjMzQ7NjAwXCYjMzQ7XG4mIzQzO1x0ZW5zdXJlX3dyaXRlX3N1Y2MgXCYjMzQ7JHByZXBzX2Rpci9ucl9wcmVwc1wmIzM0OyBcJiMzNDsxXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4mIzQzO1x0dGVzdF9kYW1vbl9wcmVwIFwmIzM0OyRwcmVwc19kaXIvMFwmIzM0O1xuJiM0MztcbiYjNDM7XHRlbnN1cmVfd3JpdGVfc3VjYyAgXCYjMzQ7JHByZXBzX2Rpci9ucl9wcmVwc1wmIzM0OyBcJiMzNDsyXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4mIzQzO1x0dGVzdF9kYW1vbl9wcmVwIFwmIzM0OyRwcmVwc19kaXIvMFwmIzM0O1xuJiM0MztcdHRlc3RfZGFtb25fcHJlcCBcJiMzNDskcHJlcHNfZGlyLzFcJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZW5zdXJlX3dyaXRlX3N1Y2MgXCYjMzQ7JHByZXBzX2Rpci9ucl9wcmVwc1wmIzM0OyBcJiMzNDswXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4mIzQzO1x0ZW5zdXJlX2RpciBcJiMzNDskcHJlcHNfZGlyLzBcJiMzNDsgXCYjMzQ7bm90X2V4aXN0XCYjMzQ7XG4mIzQzO1x0ZW5zdXJlX2RpciBcJiMzNDskcHJlcHNfZGlyLzFcJiMzNDsgXCYjMzQ7bm90X2V4aXN0XCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4gdGVzdF9kYW1vbl9maWx0ZXIoKVxuIHtcbiBcdGRhbW9uX2ZpbHRlcl9kaXI9JDFcbkBAIC0zOTIsNiAmIzQzOzQxOCw3IEBAIHRlc3RfcHJvYmUoKVxuIHtcbiBcdHByb2JlX2Rpcj0kMVxuIFx0ZW5zdXJlX2RpciBcJiMzNDskcHJvYmVfZGlyXCYjMzQ7IFwmIzM0O2V4aXN0XCYjMzQ7XG4mIzQzO1x0dGVzdF9kYW1vbl9wcmVwcyBcJiMzNDskcHJvYmVfZGlyL3ByZXBzXCYjMzQ7XG4gXHR0ZXN0X2RhbW9uX2ZpbHRlcnMgXCYjMzQ7JHByb2JlX2Rpci9maWx0ZXJzXCYjMzQ7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX25ld19wcmVwJiMzNDssCiAgICAmIzM0O2RhbW9uX2FkZF9wcmVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgREFNT04gc3Vic3lzdGVtLCBhbGxvd2luZyB1c2VycyB0byBjb25maWd1cmUgcHJvYmluZyBwcmVwYXJhdGlvbiBhY3Rpb25zIChlLmcuLCBgc2V0X3BnaWRsZWApIGFuZCBhIG5ldyBmaWx0ZXIgdHlwZSAoYHBnaWRsZV91bnNldGApIHZpYSBzeXNmcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRjYWI4ZjEzMTQ1YjM2ZWFhNTI1N2VlNDJiZjhjNjVmZjk1MDM0MjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAyNiAxODo1Mzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24KaW5kZXggZTY3NWE1NzE0NWUzNmQuLjZkNTk2ZmI3ZmExZmZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgpAQCAtMTczLDYgJiM0MzsxNzMsMTkgQEAgQ29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKIERlc2NyaXB0aW9uOglXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlCiAJCXBlci1wcm9iZSBhdHRyaWJ1dGUgd2VpZ2h0LgogCiYjNDM7V2hhdDoJCS9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLyZsdDtLJmd0Oy9jb250ZXh0cy8mbHQ7QyZndDsvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvJmx0O1AmZ3Q7L3ByZXBzL25yX3ByZXBzCiYjNDM7RGF0ZToJCUp1biAyMDI2CiYjNDM7Q29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKJiM0MztEZXNjcmlwdGlvbjoJV3JpdGluZyBhIG51bWJlciAmIzM5O04mIzM5OyB0byB0aGlzIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mCiYjNDM7CQlkaXJlY3RvcmllcyBmb3IgZWFjaCBEQU1PTiBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbiBuYW1lZCAmIzM5OzAmIzM5OwomIzQzOwkJdG8gJiMzOTtOLTEmIzM5OyB1bmRlciB0aGUgcHJlcHMvIGRpcmVjdG9yeS4KJiM0MzsKJiM0MztXaGF0OgkJL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvJmx0O0smZ3Q7L2NvbnRleHRzLyZsdDtDJmd0Oy9tb25pdG9yaW5nX2F0dHJzL3Byb2Jlcy8mbHQ7UCZndDsvcHJlcC8mbHQ7UiZndDsvYWN0aW9uCiYjNDM7RGF0ZToJCUp1biAyMDI2CiYjNDM7Q29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKJiM0MztEZXNjcmlwdGlvbjoJV3JpdGluZyB0byBhbmQgcmVhZGluZyBmcm9tIHRoaXMgZmlsZSBzZXRzIGFuZCBnZXRzIHRoZSBwcm9iaW5nCiYjNDM7CQlwcmVlcGFyYXRpb24gYWN0aW9uLgomIzQzOwogV2hhdDoJCS9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLyZsdDtLJmd0Oy9jb250ZXh0cy8mbHQ7QyZndDsvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvJmx0O1AmZ3Q7L2ZpbHRlcnMvbnJfZmlsdGVycwogRGF0ZToJCU1heSAyMDI2CiBDb250YWN0OglTSiBQYXJrICZsdDtzakBrZXJuZWwub3JnJmd0OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdAppbmRleCBkYTVmOWFmZDA4YWVmOC4uMWY1YTM5ZTFmYzM4ZGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0CkBAIC03NCw2ICYjNDM7NzQsOSBAQCBjb21tYSAoJiMzNDssJiMzNDspLgogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIG5yX3JlZ2lvbnMvbWluLG1heAogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YHByb2JlcyAmbHQ7ZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzJmd0O2AvbnJfcHJvYmVzCiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvd2VpZ2h0CiYjNDM7ICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgcHJlcHMvbnJfcHJlcHMKJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9wcmVwX2FjdGlvbgomIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi4KICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIGZpbHRlcnMvbnJfZmlsdGVycwogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvdHlwZSxtYXRjaGluZyxhbGxvdyxwYXRoCiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uCkBAIC0yODMsOSAmIzQzOzI4NiwxOCBAQCBJbiB0aGUgYmVnaW5uaW5nLCB0aGlzIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcm9iZXNgYC4gIFdyaXRpbmcgYQogbnVtYmVyIChgYE5gYCkgdG8gdGhlIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mIGNoaWxkIGRpcmVjdG9yaWVzIG5hbWVkIGBgMGBgCiB0byBgYE4tMWBgLiAgRWFjaCBkaXJlY3RvcnkgcmVwcmVzZW50cyBlYWNoIG1vbml0b3JpbmcgcHJvYmUuCiAKLUluIGVhY2ggcHJvYmUgZGlyZWN0b3J5LCBvbmUgZGlyZWN0b3J5LCBgYGZpbHRlcnNgYCBleGlzdHMuICBUaGUgZGlyZWN0b3J5Ci1jb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBmaWx0ZXJzIGZvciB0aGUgcHJvYmUsIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUKLXRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlIHByb2JlLgomIzQzO0luIGVhY2ggcHJvYmUgZGlyZWN0b3J5LCB0d28gZGlyZWN0b3JpZXMsIGBgcHJlcHNgYCBhbmQgYGBmaWx0ZXJzYGAgZXhpc3RzLgomIzQzO1RoZSBkaXJlY3RvcmllcyBjb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgYW5kCiYjNDM7ZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlCiYjNDM7cHJvYmUuCiYjNDM7CiYjNDM7SW4gdGhlIGJlZ2lubmluZywgYGBwcmVwc2BgIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcmVwc2BgLgomIzQzO1dyaXRpaW5nIGEgbnVtYmVyIChgYE5gYCkgdG8gdGhlIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mIGNoaWxkIGRpcmVjdG9yaWVzCiYjNDM7bmFtZXMgYGAwYGAgdG8gYGBOLTFgYC4gIEVhY2ggZGlyZWN0b3J5IHJlcHJlc2VudHMgZWFjaCBwcmVwYXJhdGlvbiBhY3Rpb24uCiYjNDM7RWFjaCBkaXJlY3RvcnkgaGFzIG9uZSBmaWxlLCBgYHByZXBfYWN0aW9uYGAuICBUaGUgcHJlcGFyYXRpb24gYWN0aW9uIGNhbiBiZQomIzQzO3NlbGVjdGVkIGJ5IHdyaXRpbmcgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byB0aGUgYGBwcmVwX2FjdGlvbmBgIGZpbGUuICBSZWZlcgomIzQzO3RvIHRoZSA6cmVmOmBkZXNpZ24gZG9jICZsdDtkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nJmd0O2AgZm9yIHRoZSBsaXN0IG9mCiYjNDM7c3VwcG9ydGVkIGFjdGlvbnMuCiAKIEVhY2ggcHJvYmUgZGlyZWN0b3J5IGFsc28gY29udGFpbnMgYGB3ZWlnaHRgYCBmaWxlLiAgUmVhZGluZyBmcm9tIGFuZCB3cml0aW5nCiB0byB0aGUgZmlsZSBnZXRzIGFuZCBzZXRzIHRoZSA6cmVmOmBhdHRyaWJ1dGVzLW9ubHkgbW9uaXRvcmluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CmluZGV4IGFlZDZjYjFjZjQ4MzEwLi4wNmZmZmU1ZTM3ODE5ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdApAQCAtMjkzLDggJiM0MzsyOTMsMTQgQEAgcmVnaXN0cmF0aW9uIGlzIG1hZGUgYnkgc3BlY2lmeWluZyBhIHByb2JlIHBlciBhdHRyaWJ1dGUuICBFYWNoIG9mIHRoZSBwcm9iZQogc3BlY2lmaWVzIGEgcnVsZSB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbiBtZW1vcnkgcmVnaW9uIGhhcyB0aGUgcmVsYXRlZAogYXR0cmlidXRlLiAgVGhlIHJ1bGUgaXMgY29uc3RydWN0ZWQgd2l0aCBtdWx0aXBsZSBmaWx0ZXJzLiAgVGhlIGZpbHRlcnMgd29yawogc2FtZSB0byA6cmVmOmBEQU1PUyBmaWx0ZXJzICZsdDtkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVycyZndDtgIGV4Y2VwdCB0aGUgc3VwcG9ydGVkCi1maWx0ZXIgdHlwZXMuICBDdXJyZW50bHkgb25seSBgYGFub25gYCBhbmQgYGBtZW1jZ2BgIGZpbHRlciB0eXBlcyBhcmUgc3VwcG9ydGVkCi1mb3IgZGF0YSBhdHRyaWJ1dGVzIG1vbml0b3JpbmcuCiYjNDM7ZmlsdGVyIHR5cGVzLiAgQ3VycmVudGx5IGJlbG93IGZpdGxlciB0eXBlcyBhcmUgc3VwcG9ydGVkLgomIzQzOwomIzQzOy0gYGBhbm9uYGA6IFNhbWUgdG8gdGhhdCBmb3IgREFNT1MgZmlsdGVycy4KJiM0MzstIGBgbWVtY2dgYDogU2FtZSB0byB0aGF0IGZvciBEQU1PUyBmaWx0ZXJzLgomIzQzOy0gYGBwZ2lkbGVfdW5zZXRgYDogTWF0Y2hlcyBpZiB0aGUgcGFnZSBmb3IgdGhlIG1lbW9yeSBpcyBtYXJrZWQgYXMgbm90CiYjNDM7ICBhY2Nlc3MtaWRsZS4KJiM0MzsgIE1hdGNoZXMgaWYgdGhlIG1lbW9yeSBpcyBub3QgYmFja2VkIGJ5IHBhZ2VzIHRoYXQgREFNT04gY2FuIGlkbmV0aWZ5CiYjNDM7ICBpZGxlbmVzcy4KIAogSWYgc3VjaCBwcm9iZXMgYXJlIHJlZ2lzdGVyZWQsIERBTU9OIGV4ZWN1dGVzIHRoZSBwcm9iZXMgZm9yIGVhY2ggcmVnaW9uJiMzOTtzCiBzYW1wbGluZyBtZW1vcnkgd2hlbiBpdCBkb2VzIHRoZSBhY2Nlc3MgOnJlZjpgc2FtcGxpbmcKQEAgLTMwNSw2ICYjNDM7MzExLDEzIEBAIFVzZXJzIGNhbiB0aGVyZWZvcmUga25vdyBob3cgbXVjaCBvZiBhIGdpdmVuIERBTU9OIHJlZ2lvbiBoYXMgYSBzcGVjaWZpYyBkYXRhCiBhdHRyaWJ1dGUgYnkgcmVhZGluZyB0aGUgcGVyLXJlZ2lvbiBwZXItcHJvYmUgcHJvYmUgaGl0cyBjb3VudGVyIGFmdGVyIGVhY2gKIGFnZ3JlZ2F0aW9uIGludGVydmFsLgogCiYjNDM7VXNlcnMgY2FuIG9wdGlvbmFsbHkgcmVnaXN0ZXIgcHJvYmluZyBwcmVwYXJhdGlvbiBhY3Rpb25zIHBlciBwcm9iZS4gIElmIHN1Y2gKJiM0MzthY3Rpb25zIGFyZSByZWdpc3RlcmVkLCBEQU1PTiBhcHBsaWVzIHRoZSBhY3Rpb25zIHRvIGVhY2ggcmVnaW9uJiMzOTtzIHNhbXBsaW5nCiYjNDM7bWVtb3J5IGJlZm9yZSBzdGFydGluZyB0aGUgbmV4dCBzYW1wbGluZyBpbnRlcnZhbC4gIEN1cnJlbnRseSBvbmx5IG9uZSBhY3Rpb24sCiYjNDM7YGBzZXRfcGdpZGxlYGAgaXMgc3VwcG9ydGVkLiAgVGhlIGFjdGlvbiBtYXJrcyB0aGUgcGFnZSBmb3IgdGhlIHByb2JpbmcgdGFyZ2V0CiYjNDM7bWVtb3J5IGFzIGFjY2Vzcy1pZGxlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAomIzQzO2BgcGdpZGxlX3Vuc2V0YGAgcHJvYmUgZmlsdGVyLgomIzQzOwogVGhpcyBpcyBhIHNhbXBsaW5nIGJhc2VkIG1lY2hhbmlzbS4gIEhlbmNlLCBpdCBpcyBsaWdodHdlaWdodCBidXQgdGhlIG91dHB1dAogbWF5IGluY2x1ZGUgc29tZSBtZWFzdXJlbWVudCBlcnJvcnMuICBUaGUgb3V0cHV0IHNob3VsZCBiZSB1c2VkIHdpdGggZ29vZAogdW5kZXJzdGFuZGluZyBvZiBzdGF0aXN0aWNzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDBjOGI3ZGRlZjlhYmIzLi5mZTJjNmI1NmQxZDUzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaApAQCAtNjI3LDYgJiM0Mzs2MjcsNyBAQCBlbnVtIGRhbW9uX29wc19pZCB7CiAgKiBAdXBkYXRlOgkJCVVwZGF0ZSBvcGVyYXRpb25zLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLgogICogQHByZXBhcmVfYWNjZXNzX2NoZWNrczoJUHJlcGFyZSBuZXh0IGFjY2VzcyBjaGVjayBvZiB0YXJnZXQgcmVnaW9ucy4KICAqIEBjaGVja19hY2Nlc3NlczoJCUNoZWNrIHRoZSBhY2Nlc3NlcyB0byB0YXJnZXQgcmVnaW9ucy4KJiM0MzsgKiBAcHJlcF9wcm9iZXM6CQlQcmVwYXJlIGFwcGx5aW5nIHByb2JlcyBmb3IgZWFjaCByZWdpb24uCiAgKiBAYXBwbHlfcHJvYmVzOgkJQXBwbHkgcHJvYmVzIGZvciBlYWNoIHJlZ2lvbi4KICAqIEBnZXRfc2NoZW1lX3Njb3JlOgkJR2V0IHRoZSBzY29yZSBvZiBhIHJlZ2lvbiBmb3IgYSBzY2hlbWUuCiAgKiBAYXBwbHlfc2NoZW1lOgkJQXBwbHkgYSBEQU1PTi1iYXNlZCBvcGVyYXRpb24gc2NoZW1lLgpAQCAtNjU0LDYgJiM0Mzs2NTUsOCBAQCBlbnVtIGRhbW9uX29wc19pZCB7CiAgKiBsYXN0IHByZXBhcmF0aW9uIGFuZCB1cGRhdGUgdGhlIG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyBvZiBlYWNoIHJlZ2lvbi4KICAqIEl0IHNob3VsZCBhbHNvIHJldHVybiBtYXggbnVtYmVyIG9mIG9ic2VydmVkIGFjY2Vzc2VzIHRoYXQgbWFkZSBhcyBhIHJlc3VsdAogICogb2YgaXRzIHVwZGF0ZS4gIFRoZSB2YWx1ZSB3aWxsIGJlIHVzZWQgZm9yIHJlZ2lvbnMgYWRqdXN0bWVudCB0aHJlc2hvbGQuCiYjNDM7ICogQHByZXBfcHJvYmVzIHNob3VsZCBleGVjdXRlIHJlcXVpcmVkICZhbXA7c3RydWN0IGRhbW9uX3ByZXAgZm9yIG5leHQgJmFtcDtzdHJ1Y3QKJiM0MzsgKiBkYW1vbl9wcm9iZSBhcHBsaWNhdGlvbnMgdG8gZWFjaCByZWdpb24uCiAgKiBAYXBwbHlfcHJvYmVzIHNob3VsZCBhcHBseSB0aGUgZGF0YSBhdHRyaWJ1dGUgcHJvYmVzIHRvIGVhY2ggcmVnaW9uIGFuZAogICogYWNjb3JkaW5nbHkgdXBkYXRlIHRoZSBwcm9iZSBoaXRzIGNvdW50ZXIgb2YgdGhlIHJlZ2lvbi4gIEl0IHNob3VsZCBhbHNvCiAgKiBzZXQgJmFtcDtkYW1vbl9yZWdpb24tJmd0O3NhbXBsaW5nX2FkZHIgb2YgZWFjaCByZWdpb24gaWYgYGBzZXRfc2FtcGxlc2BgIGlzIHRydWUuCkBAIC02NzYsNiAmIzQzOzY3OSw3IEBAIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIHsKIAl2b2lkICgqdXBkYXRlKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTsKIAl2b2lkICgqcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTsKIAl1bnNpZ25lZCBpbnQgKCpjaGVja19hY2Nlc3Nlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7CiYjNDM7CXZvaWQgKCpwcmVwX3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCwgYm9vbCBzZXRfc2FtcGxlcyk7CiAJdW5zaWduZWQgaW50ICgqYXBwbHlfcHJvYmVzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LAogCQkJYm9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pOwogCWludCAoKmdldF9zY2hlbWVfc2NvcmUpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsCkBAIC03MzksMTUgJiM0Mzs3NDMsMzggQEAgc3RydWN0IGRhbW9uX2ludGVydmFsc19nb2FsIHsKIAl1bnNpZ25lZCBsb25nIG1heF9zYW1wbGVfdXM7CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogZW51bSBkYW1vbl9wcmVwX2FjdGlvbiAtIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uLgomIzQzOyAqCiYjNDM7ICogQERBTU9OX1BSRVBfU0VUX1BHSURMRToJU2V0IHRoZSBwcm9iaW5nIG1lbW9yeSBhcyBpZGxlIHBhZ2UuCiYjNDM7ICovCiYjNDM7ZW51bSBkYW1vbl9wcmVwX2FjdGlvbiB7CiYjNDM7CURBTU9OX1BSRVBfU0VUX1BHSURMRSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBkYW1vbl9wcmVwIC0gREFNT04gcHJvYmluZyBwcmVwYXJhdGlvbiByZXF1ZXN0LgomIzQzOyAqCiYjNDM7ICogQGFjdGlvbjoJQWN0aW9uIHRvIGRvIHRvIHRoZSBwcm9iaW5nIG1lbW9yeSBmb3IgdGhlIHByZXBhcmF0aW9uLgomIzQzOyAqLwomIzQzO3N0cnVjdCBkYW1vbl9wcmVwIHsKJiM0MzsJZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb247CiYjNDM7LyogcHJpdmF0ZTogKi8KJiM0MzsJLyogc2libGluZ3MgbGlzdC4gKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzO307CiYjNDM7CiAvKioKICAqIGVudW0gZGFtb25fZmlsdGVyX3R5cGUgLSBUeXBlIG9mICZhbXA7c3RydWN0IGRhbW9uX2ZpbHRlcgogICoKLSAqIEBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOglBbm9ueW1vdXMgcGFnZXMuCi0gKiBAREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6CVNwZWNpZmljIG1lbWNnJiMzOTtzIHBhZ2VzLgomIzQzOyAqIEBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOgkJQW5vbnltb3VzIHBhZ2VzLgomIzQzOyAqIEBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzoJCVNwZWNpZmljIG1lbWNnJiMzOTtzIHBhZ2VzLgomIzQzOyAqIEBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6CVBnaWRsZSBpcyB1bnNldC4KICAqLwogZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7CiAJREFNT05fRklMVEVSX1RZUEVfQU5PTiwKIAlEQU1PTl9GSUxURVJfVFlQRV9NRU1DRywKJiM0MzsJREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VULAogfTsKIAogLyoqCkBAIC03NzgsNiAmIzQzOzgwNSw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIgewogc3RydWN0IGRhbW9uX3Byb2JlIHsKIAl1bnNpZ25lZCBpbnQgd2VpZ2h0OwogLyogcHJpdmF0ZTogKi8KJiM0MzsJLyogUHJlcGFyYXRpb24gYWN0aW9ucyB0byBhcHBseSB0byBlYWNoIHByb2JpbmcgbWVtb3J5LiAqLwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIHByZXBzOwogCS8qIEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7CiAJLyogU2libGluZ3MgbGlzdC4gKi8KQEAgLTk1Nyw2ICYjNDM7OTg2LDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcikKIAlyZXR1cm4gci0mZ3Q7YXIuZW5kIC0gci0mZ3Q7YXIuc3RhcnQ7CiB9CiAKJiM0MzsjZGVmaW5lIGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJlcCkgXAomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZhbXA7KHByZXApLSZndDtwcmVwcywgbGlzdCkKJiM0MzsKJiM0MzsjZGVmaW5lIGRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShwLCBuZXh0LCBwcmVwKSBcCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCAmYW1wOyhwcmVwKS0mZ3Q7cHJlcHMsIGxpc3QpCiYjNDM7CiAjZGVmaW5lIGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSBcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCAmYW1wOyhwKS0mZ3Q7ZmlsdGVycywgbGlzdCkKIApAQCAtMTAxMCw2ICYjNDM7MTA0NSw5IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcikKIAogI2lmZGVmIENPTkZJR19EQU1PTgogCiYjNDM7c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKTsKJiM0Mzt2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApOwomIzQzOwogc3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsCiAJCWJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpOwogdm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjA2Li5kNWIxZTBiNTg1MWExYSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMTExLDYgJiM0MzsxMTEsNjMgQEAgaW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCkKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3ByZXAgKnByZXA7CiYjNDM7CiYjNDM7CXByZXAgPSBrbWFsbG9jX29iaigqcHJlcCk7CiYjNDM7CWlmICghcHJlcCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlwcmVwLSZndDthY3Rpb24gPSBhY3Rpb247CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7cHJlcC0mZ3Q7bGlzdCk7CiYjNDM7CXJldHVybiBwcmVwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApCiYjNDM7ewomIzQzOwlsaXN0X2FkZF90YWlsKCZhbXA7cHJlcC0mZ3Q7bGlzdCwgJmFtcDtwLSZndDtwcmVwcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2RlbF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKQomIzQzO3sKJiM0MzsJbGlzdF9kZWwoJmFtcDtwLSZndDtsaXN0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKQomIzQzO3sKJiM0MzsJa2ZyZWUocCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqcCkKJiM0Mzt7CiYjNDM7CWRhbW9uX2RlbF9wcmVwKHApOwomIzQzOwlkYW1vbl9mcmVlX3ByZXAocCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbnRoX3ByZXAoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcmVwICpwcmVwOwomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcCkgewomIzQzOwkJaWYgKGkmIzQzOyYjNDM7ID09IG4pCiYjNDM7CQkJcmV0dXJuIHByZXA7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDsKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpIHsKJiM0MzsJCWRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcHJvYmUpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLAogCQlib29sIG1hdGNoaW5nLCBib29sIGFsbG93KQogewpAQCAtMTY3LDYgJiM0MzsyMjQsNyBAQCBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKQogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CiAJcC0mZ3Q7d2VpZ2h0ID0gMDsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtwLSZndDtwcmVwcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtwLSZndDtmaWx0ZXJzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3AtJmd0O2xpc3QpOwogCXJldHVybiBwOwpAQCAtMTg0LDggJiM0MzsyNDIsMTEgQEAgc3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCkKIAogc3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApCiB7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcmVwICpwcmVwLCAqcHJlcF9uZXh0OwogCXN0cnVjdCBkYW1vbl9maWx0ZXIgKmYsICpuZXh0OwogCiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShwcmVwLCBwcmVwX25leHQsIHApCiYjNDM7CQlkYW1vbl9mcmVlX3ByZXAocHJlcCk7CiAJZGFtb25fZm9yX2VhY2hfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcCkKIAkJZGFtb25fZnJlZV9maWx0ZXIoZik7CiAJa2ZyZWUocCk7CkBAIC0xNjY2LDYgJiM0MzsxNzI3LDM2IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpkc3QsIHN0cnVjdCBkYW1vbl9wcmVwICpzcmMpCiYjNDM7ewomIzQzOwlkc3QtJmd0O2FjdGlvbiA9IHNyYy0mZ3Q7YWN0aW9uOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCwgc3RydWN0IGRhbW9uX3Byb2JlICpzcmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fcHJlcCAqZHN0X3ByZXAsICpuZXh0LCAqc3JjX3ByZXAsICpuZXdfcHJlcDsKJiM0MzsJaW50IGkgPSAwLCBqID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJlcF9zYWZlKGRzdF9wcmVwLCBuZXh0LCBkc3QpIHsKJiM0MzsJCXNyY19wcmVwID0gZGFtb25fbnRoX3ByZXAoaSYjNDM7JiM0MzssIHNyYyk7CiYjNDM7CQlpZiAoc3JjX3ByZXApCiYjNDM7CQkJZGFtb25fY29tbWl0X3ByZXAoZHN0X3ByZXAsIHNyY19wcmVwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlkYW1vbl9kZXN0cm95X3ByZXAoZHN0X3ByZXApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShzcmNfcHJlcCwgbmV4dCwgc3JjKSB7CiYjNDM7CQlpZiAoaiYjNDM7JiM0MzsgJmx0OyBpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJbmV3X3ByZXAgPSBkYW1vbl9uZXdfcHJlcChzcmNfcHJlcC0mZ3Q7YWN0aW9uKTsKJiM0MzsJCWlmICghbmV3X3ByZXApCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlkYW1vbl9hZGRfcHJlcChkc3QsIG5ld19wcmVwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCwKIAkJc3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKQogewpAQCAtMTcyNCw2ICYjNDM7MTgxNSw5IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYykKIAkJc3JjX3Byb2JlID0gZGFtb25fbnRoX3Byb2JlKGkmIzQzOyYjNDM7LCBzcmMpOwogCQlpZiAoc3JjX3Byb2JlKSB7CiAJCQlkc3RfcHJvYmUtJmd0O3dlaWdodCA9IHNyY19wcm9iZS0mZ3Q7d2VpZ2h0OwomIzQzOwkJCWVyciA9IGRhbW9uX2NvbW1pdF9wcmVwcyhkc3RfcHJvYmUsIHNyY19wcm9iZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKIAkJCWVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKQEAgLTE3NDEsNiAmIzQzOzE4MzUsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZGFtb25fYWRkX3Byb2JlKGRzdCwgbmV3X3Byb2JlKTsKIAkJbmV3X3Byb2JlLSZndDt3ZWlnaHQgPSBzcmNfcHJvYmUtJmd0O3dlaWdodDsKJiM0MzsJCWVyciA9IGRhbW9uX2NvbW1pdF9wcmVwcyhuZXdfcHJvYmUsIHNyY19wcm9iZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiAJCWVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CkBAIC0zNzg1LDYgJiM0MzszODgyLDcgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpCiAJCXVuc2lnbmVkIGxvbmcgbmV4dF9vcHNfdXBkYXRlX3NpcyA9IGN0eC0mZ3Q7bmV4dF9vcHNfdXBkYXRlX3NpczsKIAkJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbDsKIAkJYm9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpOwomIzQzOwkJYm9vbCBoYXNfcHJlcCA9IGRhbW9uX2hhc19wcmVwKGN0eCk7CiAJCXVuc2lnbmVkIGludCBtYXhfbWVyZ2Vfc2NvcmUgPSAwLCBtYXhfd3N1bTsKIAkJYm9vbCBnZXRfbWF4X3dzdW07CiAKQEAgLTM3OTMsNiAmIzQzOzM4OTEsOCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSkKIAogCQlpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCAmYW1wOyZhbXA7IGN0eC0mZ3Q7b3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcykKIAkJCWN0eC0mZ3Q7b3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcyhjdHgpOwomIzQzOwkJaWYgKGN0eC0mZ3Q7b3BzLnByZXBfcHJvYmVzKQomIzQzOwkJCWN0eC0mZ3Q7b3BzLnByZXBfcHJvYmVzKGN0eCwgaGFzX3ByZXApOwogCiAJCWtkYW1vbmRfdXNsZWVwKHNhbXBsZV9pbnRlcnZhbCk7CiAJCWN0eC0mZ3Q7cGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMmIzQzOyYjNDM7OwpAQCAtMzgwNyw3ICYjNDM7MzkwNyw4IEBAIHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKQogCQkJZWxzZQogCQkJCWdldF9tYXhfd3N1bSA9IGZhbHNlOwogCQkJbWF4X3dzdW0gPSBjdHgtJmd0O29wcy5hcHBseV9wcm9iZXMoY3R4LAotCQkJCQlhY2Nlc3NfY2hlY2tfZGlzYWJsZWQsIGdldF9tYXhfd3N1bSk7CiYjNDM7CQkJCQlhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgJmFtcDsmYW1wOyAhaGFzX3ByZXAsCiYjNDM7CQkJCQlnZXRfbWF4X3dzdW0pOwogCQkJaWYgKGdldF9tYXhfd3N1bSkKIAkJCQltYXhfbWVyZ2Vfc2NvcmUgPSBtYXhfd3N1bTsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggNWE2YTc4MDU0Nzg0YWYuLjhkOGZjZDEzNjllNTY4IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTEwNSw2ICYjNDM7MTA1LDQwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCXJldHVybiBtYXhfbnJfYWNjZXNzZXM7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKJiM0MzsJCXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcmVwICpwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcmVwKHAsIHByb2JlKSB7CiYjNDM7CQlzd2l0Y2ggKHAtJmd0O2FjdGlvbikgewomIzQzOwkJY2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6CiYjNDM7CQkJZGFtb25fcGFfbWtvbGQoZGFtb25fcGFfcGh5c19hZGRyKHItJmd0O3NhbXBsaW5nX2FkZHIsCiYjNDM7CQkJCQkJY3R4LSZndDthZGRyX3VuaXQpKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7CiYjNDM7CQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkgewomIzQzOwkJCWlmIChzZXRfc2FtcGxlcykKJiM0MzsJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLSZndDthci5zdGFydCwKJiM0MzsJCQkJCQlyLSZndDthci5lbmQpOwomIzQzOwkJCWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkKJiM0MzsJCQkJZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHIsIHAsIGN0eCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewpAQCAtMTMyLDYgJiM0MzsxNjYsMTIgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKIAkJCW1hdGNoZWQgPSBmaWx0ZXItJmd0O21lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOgomIzQzOwkJaWYgKCFmb2xpbykKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWF0Y2hlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTQ0MCw2ICYjNDM7NDgwLDcgQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZCkKIAkJLnVwZGF0ZSA9IE5VTEwsCiAJCS5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsCiAJCS5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLAomIzQzOwkJLnByZXBfcHJvYmVzID0gZGFtb25fcGFfcHJlcF9wcm9iZXMsCiAJCS5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsCiAJCS50YXJnZXRfdmFsaWQgPSBOVUxMLAogCQkuYXBwbHlfc2NoZW1lID0gZGFtb25fcGFfYXBwbHlfc2NoZW1lLApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmMKaW5kZXggZTM4NThmZmFiNGIyMjcuLmQ0NGQ1YmI5ZThmYmY4IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmMKQEAgLTc1MCw2ICYjNDM7NzUwLDIxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7CiAJLmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dyb3VwcywKIH07CiAKJiM0MzsvKgomIzQzOyAqIHByZXAgZGlyZWN0b3J5CiYjNDM7ICovCiYjNDM7CiYjNDM7c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgewomIzQzOwlzdHJ1Y3Qga29iamVjdCBrb2JqOwomIzQzOwllbnVtIGRhbW9uX3ByZXBfYWN0aW9uIGFjdGlvbjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqZGFtb25fc3lzZnNfcHJlcF9hbGxvYyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXA7CiYjNDM7CiYjNDM7CXByZXAgPSBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCk7CiYjNDM7CWlmICghcHJlcCkKJiM0MzsJCXJldHVybiBwcmVwOwomIzQzOwlwcmVwLSZndDthY3Rpb24gPSBEQU1PTl9QUkVQX1NFVF9QR0lETEU7CiYjNDM7CXJldHVybiBwcmVwOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSB7CiYjNDM7CWVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uOwomIzQzOwljaGFyICpuYW1lOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lCiYjNDM7ZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXNbXSA9IHsKJiM0MzsJewomIzQzOwkJLmFjdGlvbiA9IERBTU9OX1BSRVBfU0VUX1BHSURMRSwKJiM0MzsJCS5uYW1lID0gJiMzNDtzZXRfcGdpZGxlJiMzNDssCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBwcmVwX2FjdGlvbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqcHJlcCA9IGNvbnRhaW5lcl9vZihrb2JqLAomIzQzOwkJCXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwLCBrb2JqKTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWVzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lICphY3Rpb25fbmFtZTsKJiM0MzsKJiM0MzsJCWFjdGlvbl9uYW1lID0gJmFtcDtkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lc1tpXTsKJiM0MzsJCWlmIChhY3Rpb25fbmFtZS0mZ3Q7YWN0aW9uID09IHByZXAtJmd0O2FjdGlvbikKJiM0MzsJCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBhY3Rpb25fbmFtZS0mZ3Q7bmFtZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHByZXBfYWN0aW9uX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpwcmVwID0gY29udGFpbmVyX29mKGtvYmosCiYjNDM7CQkJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAsIGtvYmopOwomIzQzOwlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSAqYWN0aW9uX25hbWU7CiYjNDM7CiYjNDM7CQlhY3Rpb25fbmFtZSA9ICZhbXA7ZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXNbaV07CiYjNDM7CQlpZiAoc3lzZnNfc3RyZXEoYnVmLCBhY3Rpb25fbmFtZS0mZ3Q7bmFtZSkpIHsKJiM0MzsJCQlwcmVwLSZndDthY3Rpb24gPSBhY3Rpb25fbmFtZS0mZ3Q7YWN0aW9uOwomIzQzOwkJCXJldCA9IGNvdW50OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpwcmVwID0gY29udGFpbmVyX29mKGtvYmosCiYjNDM7CQkJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAsIGtvYmopOwomIzQzOwomIzQzOwlrZnJlZShwcmVwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19wcmVwX3ByZXBfYWN0aW9uX2F0dHIgPQomIzQzOwkJX19BVFRSX1JXX01PREUocHJlcF9hY3Rpb24sIDA2MDApOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19wcmVwX2F0dHJzW10gPSB7CiYjNDM7CSZhbXA7ZGFtb25fc3lzZnNfcHJlcF9wcmVwX2FjdGlvbl9hdHRyLmF0dHIsCiYjNDM7CU5VTEwsCiYjNDM7fTsKJiM0MztBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3ByZXApOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBfa3R5cGUgPSB7CiYjNDM7CS5yZWxlYXNlID0gZGFtb25fc3lzZnNfcHJlcF9yZWxlYXNlLAomIzQzOwkuc3lzZnNfb3BzID0gJmFtcDtrb2JqX3N5c2ZzX29wcywKJiM0MzsJLmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcHJlcF9ncm91cHMsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIHByZXBzIGRpcmVjdG9yeQomIzQzOyAqLwomIzQzOwomIzQzO3N0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyB7CiYjNDM7CXN0cnVjdCBrb2JqZWN0IGtvYmo7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICoqcHJlcHNfYXJyOwomIzQzOwlpbnQgbnI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpkYW1vbl9zeXNmc19wcmVwc19hbGxvYyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICoqcHJlcHNfYXJyID0gcHJlcHMtJmd0O3ByZXBzX2FycjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwcmVwcy0mZ3Q7bnI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlrb2JqZWN0X2RlbCgmYW1wO3ByZXBzX2FycltpXS0mZ3Q7a29iaik7CiYjNDM7CQlrb2JqZWN0X3B1dCgmYW1wO3ByZXBzX2FycltpXS0mZ3Q7a29iaik7CiYjNDM7CX0KJiM0MzsJcHJlcHMtJmd0O25yID0gMDsKJiM0MzsJa2ZyZWUocHJlcHNfYXJyKTsKJiM0MzsJcHJlcHMtJmd0O3ByZXBzX2FyciA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGFtb25fc3lzZnNfcHJlcHNfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcywKJiM0MzsJCWludCBucl9wcmVwcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICoqcHJlcHNfYXJyLCAqcHJlcDsKJiM0MzsJaW50IGVyciwgaTsKJiM0MzsKJiM0MzsJZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7CiYjNDM7CWlmICghbnJfcHJlcHMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcHJlcHNfYXJyID0ga21hbGxvY19vYmpzKCpwcmVwc19hcnIsIG5yX3ByZXBzLAomIzQzOwkJCQkgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKJiM0MzsJaWYgKCFwcmVwc19hcnIpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJcHJlcHMtJmd0O3ByZXBzX2FyciA9IHByZXBzX2FycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ByZXBzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcHJlcCA9IGRhbW9uX3N5c2ZzX3ByZXBfYWxsb2MoKTsKJiM0MzsJCWlmICghcHJlcCkgewomIzQzOwkJCWRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMocHJlcHMpOwomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoJmFtcDtwcmVwLSZndDtrb2JqLAomIzQzOwkJCQkmYW1wO2RhbW9uX3N5c2ZzX3ByZXBfa3R5cGUsICZhbXA7cHJlcHMtJmd0O2tvYmosICYjMzQ7JWQmIzM0OywKJiM0MzsJCQkJaSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJa29iamVjdF9wdXQoJmFtcDtwcmVwLSZndDtrb2JqKTsKJiM0MzsJCQlkYW1vbl9zeXNmc19wcmVwc19ybV9kaXJzKHByZXBzKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcHJlcHNfYXJyW2ldID0gcHJlcDsKJiM0MzsJCXByZXBzLSZndDtuciYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IG5yX3ByZXBzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCWNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHMgPSBjb250YWluZXJfb2Yoa29iaiwKJiM0MzsJCQlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopOwomIzQzOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWRcbiYjMzQ7LCBwcmVwcy0mZ3Q7bnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBucl9wcmVwc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKJiM0MzsJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzOwomIzQzOwlpbnQgbnIsIGVyciA9IGtzdHJ0b2ludChidWYsIDAsICZhbXA7bnIpOwomIzQzOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJaWYgKG5yICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlwcmVwcyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopOwomIzQzOwomIzQzOwlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDtkYW1vbl9zeXNmc19sb2NrKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CWVyciA9IGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzKHByZXBzLCBucik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RhbW9uX3N5c2ZzX2xvY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19wcmVwc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQomIzQzO3sKJiM0MzsJa2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcywga29iaikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3ByZXBzX25yX2F0dHIgPQomIzQzOwkJX19BVFRSX1JXX01PREUobnJfcHJlcHMsIDA2MDApOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19wcmVwc19hdHRyc1tdID0gewomIzQzOwkmYW1wO2RhbW9uX3N5c2ZzX3ByZXBzX25yX2F0dHIuYXR0ciwKJiM0MzsJTlVMTCwKJiM0Mzt9OwomIzQzO0FUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfcHJlcHMpOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlID0gewomIzQzOwkucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2UsCiYjNDM7CS5zeXNmc19vcHMgPSAmYW1wO2tvYmpfc3lzZnNfb3BzLAomIzQzOwkuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcmVwc19ncm91cHMsCiYjNDM7fTsKJiM0MzsKIC8qCiAgKiBmaWx0ZXIgZGlyZWN0b3J5CiAgKi8KQEAgLTc4Miw2ICYjNDM7OTk1LDEwIEBAIGRhbW9uX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7CiAJCS50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csCiAJCS5uYW1lID0gJiMzNDttZW1jZyYjMzQ7LAogCX0sCiYjNDM7CXsKJiM0MzsJCS50eXBlID0gREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VULAomIzQzOwkJLm5hbWUgPSAmIzM0O3BnaWRsZV91bnNldCYjMzQ7LAomIzQzOwl9LAogfTsKIAogc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLApAQCAtMTA2Niw2ICYjNDM7MTI4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUgPSB7CiBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgewogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CiAJdW5zaWduZWQgaW50IHdlaWdodDsKJiM0MzsJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwczsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVyczsKIH07CiAKQEAgLTEwNzYsMjUgJiM0MzsxMjk0LDUwIEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKmRhbW9uX3N5c2ZzX3Byb2JlX2FsbG9jKHZvaWQpCiAKIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcHJvYmVfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSkKIHsKJiM0MzsJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwczsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVyczsKIAlpbnQgZXJyOwogCi0JZmlsdGVycyA9IGRhbW9uX3N5c2ZzX2ZpbHRlcnNfYWxsb2MoKTsKLQlpZiAoIWZpbHRlcnMpCiYjNDM7CXByZXBzID0gZGFtb25fc3lzZnNfcHJlcHNfYWxsb2MoKTsKJiM0MzsJaWYgKCFwcmVwcykKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXByb2JlLSZndDtwcmVwcyA9IHByZXBzOwomIzQzOwomIzQzOwllcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmYW1wO3ByZXBzLSZndDtrb2JqLCAmYW1wO2RhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlLAomIzQzOwkJCSZhbXA7cHJvYmUtJmd0O2tvYmosICYjMzQ7cHJlcHMmIzM0Oyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIHB1dF9wcmVwc19vdXQ7CiYjNDM7CiYjNDM7CWZpbHRlcnMgPSBkYW1vbl9zeXNmc19maWx0ZXJzX2FsbG9jKCk7CiYjNDM7CWlmICghZmlsdGVycykgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZGVsX3ByZXBzX291dDsKJiM0MzsJfQogCXByb2JlLSZndDtmaWx0ZXJzID0gZmlsdGVyczsKIAogCWVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZhbXA7ZmlsdGVycy0mZ3Q7a29iaiwgJmFtcDtkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlLAogCQkJJmFtcDtwcm9iZS0mZ3Q7a29iaiwgJiMzNDtmaWx0ZXJzJiMzNDspOwotCWlmIChlcnIpIHsKLQkJa29iamVjdF9wdXQoJmFtcDtmaWx0ZXJzLSZndDtrb2JqKTsKLQkJcHJvYmUtJmd0O2ZpbHRlcnMgPSBOVUxMOwotCX0KJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gcHV0X2ZpbHRlcnNfb3V0OwomIzQzOwlyZXR1cm4gZXJyOwomIzQzOwomIzQzO3B1dF9maWx0ZXJzX291dDoKJiM0MzsJa29iamVjdF9wdXQoJmFtcDtmaWx0ZXJzLSZndDtrb2JqKTsKJiM0MzsJcHJvYmUtJmd0O2ZpbHRlcnMgPSBOVUxMOwomIzQzO2RlbF9wcmVwc19vdXQ6CiYjNDM7CWtvYmplY3RfZGVsKCZhbXA7cHJlcHMtJmd0O2tvYmopOwomIzQzO3B1dF9wcmVwc19vdXQ6CiYjNDM7CWtvYmplY3RfcHV0KCZhbXA7cHJlcHMtJmd0O2tvYmopOwomIzQzOwlwcm9iZS0mZ3Q7cHJlcHMgPSBOVUxMOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Byb2JlX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSkKIHsKJiM0MzsJaWYgKHByb2JlLSZndDtwcmVwcykgewomIzQzOwkJZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcm9iZS0mZ3Q7cHJlcHMpOwomIzQzOwkJa29iamVjdF9wdXQoJmFtcDtwcm9iZS0mZ3Q7cHJlcHMtJmd0O2tvYmopOwomIzQzOwl9CiAJaWYgKHByb2JlLSZndDtmaWx0ZXJzKSB7CiAJCWRhbW9uX3N5c2ZzX2ZpbHRlcnNfcm1fZGlycyhwcm9iZS0mZ3Q7ZmlsdGVycyk7CiAJCWtvYmplY3RfcHV0KCZhbXA7cHJvYmUtJmd0O2ZpbHRlcnMtJmd0O2tvYmopOwpAQCAtMTkzMyw2ICYjNDM7MjE3NiwyMyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJcmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsICZhbXA7YXR0cnMpOwogfQogCiYjNDM7c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwKJiM0MzsJCXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqc3lzX3ByZXBzKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBzeXNfcHJlcHMtJmd0O25yOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnN5c19wcmVwID0gc3lzX3ByZXBzLSZndDtwcmVwc19hcnJbaV07CiYjNDM7CQlzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDsKJiM0MzsKJiM0MzsJCXByZXAgPSBkYW1vbl9uZXdfcHJlcChzeXNfcHJlcC0mZ3Q7YWN0aW9uKTsKJiM0MzsJCWlmICghcHJlcCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCWRhbW9uX2FkZF9wcmVwKHByb2JlLCBwcmVwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsCiAJCXN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzICpzeXNfZmlsdGVycykKIHsKQEAgLTE5NjgsNyAmIzQzOzIyMjgsMTUgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwKIAkJc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpzeXNfcHJvYmUpCiB7CiAJc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKnN5c19maWx0ZXJzOwomIzQzOwlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnN5c19wcmVwczsKJiM0MzsJaW50IGVycjsKIAomIzQzOwlzeXNfcHJlcHMgPSBzeXNfcHJvYmUtJmd0O3ByZXBzOwomIzQzOwlpZiAoc3lzX3ByZXBzKSB7CiYjNDM7CQllcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJlcHMocHJvYmUsIHN5c19wcmVwcyk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KIAlzeXNfZmlsdGVycyA9IHN5c19wcm9iZS0mZ3Q7ZmlsdGVyczsKIAlpZiAoIXN5c19maWx0ZXJzKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2gKaW5kZXggZjdmYjk0Yjg0ZTcxNmQuLmRkZWJkZTZlZGFiZTRlIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaApAQCAtMzYxLDYgJiM0MzszNjEsMzIgQEAgdGVzdF9pbnRlcnZhbHMoKQogCXRlc3RfaW50ZXJ2YWxzX2dvYWwgJiMzNDskaW50ZXJ2YWxzX2Rpci9pbnRlcnZhbHNfZ29hbCYjMzQ7CiB9CiAKJiM0Mzt0ZXN0X2RhbW9uX3ByZXAoKQomIzQzO3sKJiM0MzsJZGFtb25fcHJlcF9kaXI9JDEKJiM0MzsJZW5zdXJlX2ZpbGUgJiMzNDskZGFtb25fcHJlcF9kaXIvcHJlcF9hY3Rpb24mIzM0OyAmIzM0O2V4aXN0JiMzNDsgJiMzNDs2MDAmIzM0OwomIzQzOwllbnN1cmVfd3JpdGVfc3VjYyAmIzM0OyRkYW1vbl9wcmVwX2Rpci9wcmVwX2FjdGlvbiYjMzQ7ICYjMzQ7c2V0X3BnaWRsZSYjMzQ7IFwKJiM0MzsJCSYjMzQ7dmFsaWQgaW5wdXQmIzM0OwomIzQzOwllbnN1cmVfd3JpdGVfZmFpbCAmIzM0OyRkYW1vbl9wcmVwX2Rpci9wcmVwX2FjdGlvbiYjMzQ7ICYjMzQ7Zm9vJiMzNDsgJiMzNDtpbnZhbGlkIGlucHV0JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7dGVzdF9kYW1vbl9wcmVwcygpCiYjNDM7ewomIzQzOwlwcmVwc19kaXI9JDEKJiM0MzsJZW5zdXJlX2RpciAmIzM0OyRwcmVwc19kaXImIzM0OyAmIzM0O2V4aXN0JiMzNDsKJiM0MzsJZW5zdXJlX2ZpbGUgJiMzNDskcHJlcHNfZGlyL25yX3ByZXBzJiMzNDsgJiMzNDtleGlzdCYjMzQ7ICYjMzQ7NjAwJiMzNDsKJiM0MzsJZW5zdXJlX3dyaXRlX3N1Y2MgJiMzNDskcHJlcHNfZGlyL25yX3ByZXBzJiMzNDsgJiMzNDsxJiMzNDsgJiMzNDt2YWxpZCBpbnB1dCYjMzQ7CiYjNDM7CXRlc3RfZGFtb25fcHJlcCAmIzM0OyRwcmVwc19kaXIvMCYjMzQ7CiYjNDM7CiYjNDM7CWVuc3VyZV93cml0ZV9zdWNjICAmIzM0OyRwcmVwc19kaXIvbnJfcHJlcHMmIzM0OyAmIzM0OzImIzM0OyAmIzM0O3ZhbGlkIGlucHV0JiMzNDsKJiM0MzsJdGVzdF9kYW1vbl9wcmVwICYjMzQ7JHByZXBzX2Rpci8wJiMzNDsKJiM0MzsJdGVzdF9kYW1vbl9wcmVwICYjMzQ7JHByZXBzX2Rpci8xJiMzNDsKJiM0MzsKJiM0MzsJZW5zdXJlX3dyaXRlX3N1Y2MgJiMzNDskcHJlcHNfZGlyL25yX3ByZXBzJiMzNDsgJiMzNDswJiMzNDsgJiMzNDt2YWxpZCBpbnB1dCYjMzQ7CiYjNDM7CWVuc3VyZV9kaXIgJiMzNDskcHJlcHNfZGlyLzAmIzM0OyAmIzM0O25vdF9leGlzdCYjMzQ7CiYjNDM7CWVuc3VyZV9kaXIgJiMzNDskcHJlcHNfZGlyLzEmIzM0OyAmIzM0O25vdF9leGlzdCYjMzQ7CiYjNDM7fQomIzQzOwogdGVzdF9kYW1vbl9maWx0ZXIoKQogewogCWRhbW9uX2ZpbHRlcl9kaXI9JDEKQEAgLTM5Miw2ICYjNDM7NDE4LDcgQEAgdGVzdF9wcm9iZSgpCiB7CiAJcHJvYmVfZGlyPSQxCiAJZW5zdXJlX2RpciAmIzM0OyRwcm9iZV9kaXImIzM0OyAmIzM0O2V4aXN0JiMzNDsKJiM0MzsJdGVzdF9kYW1vbl9wcmVwcyAmIzM0OyRwcm9iZV9kaXIvcHJlcHMmIzM0OwogCXRlc3RfZGFtb25fZmlsdGVycyAmIzM0OyRwcm9iZV9kaXIvZmlsdGVycyYjMzQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUHJvYmUgUHJlcCBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQgYWRkcyAmIzM0O3Byb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9ucyYjMzQ7IG9yICYjMzQ7cHJlcHMmIzM0OyB0byB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIHN1YnN5c3RlbSBpbiB0aGUgTGludXgga2VybmVsLiBJdCBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYy4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogdGhlIGRvY3VtZW50YXRpb24sIGBkYW1vbi5oYCwgdGhlIGNvcmUgREFNT04gZmlsZXMgKGBjb3JlLmNgLCBgcGFkZHIuY2AsIGBzeXNmcy5jYCksIGFuZCBhIHNlbGZ0ZXN0IHNjcmlwdCAoYHN5c2ZzLnNoYCkuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmljYXRpb25zIGZvciBhIGZlYXR1cmUgbGlrZSB0aGlzLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMsICYjMzQ7SXMgdGhpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlPyYjMzQ7IERBTU9OIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSBzeXNmcywgd2hpY2ggaXMgZ29vZC4gVGhhdCBvcGVucyBpdCB1cCBuaWNlbHkgZm9yIGZ1enppbmcuIFRoZXNlIG5ldyBzeXNmcyBpbnRlcmZhY2VzIGFyZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSB0YXJnZXRzIGhlcmUuCgpJJiMzOTt2ZSBpZGVudGlmaWVkIGEgZmV3IGtleSBmdW5jdGlvbnMgYWNyb3NzIHRoZSBtb2RpZmllZCBmaWxlcy4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGBkYW1vbl9uZXdfcHJlcGAsIGBkYW1vbl9hZGRfcHJlcGAsIGBkYW1vbl9jb21taXRfcHJlcHNgLCBgZGFtb25fY29tbWl0X3Byb2Jlc2AgKHdoaWNoIGlzIG1vZGlmaWVkKSwgYW5kIGBrZGFtb25kX2ZuYCAoYWxzbyBtb2RpZmllZCkuIFRoZW4sIGluIGBtbS9kYW1vbi9wYWRkci5jYCwgdGhlIGBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb25gLCBgZGFtb25fcGFfcHJlcF9wcm9iZXNgLCBhbmQgbW9kaWZpZWQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAgYXJlIG9mIGludGVyZXN0LiBGaW5hbGx5LCBpbiBgbW0vZGFtb24vc3lzZnMuY2AsIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIHByZXAgY29uZmlndXJhdGlvbiBsaWtlIGBwcmVwX2FjdGlvbl9zaG93YCwgYHByZXBfYWN0aW9uX3N0b3JlYCwgYGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzYCwgYG5yX3ByZXBzX3Nob3dgLCBgbnJfcHJlcHNfc3RvcmVgLCBgZGFtb25fc3lzZnNfc2V0X3ByZXBzYCBhbmQgdGhlIG1vZGlmaWVkIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVgIGFyZSBkZWZpbml0ZWx5IG9uIHRoZSBsaXN0LgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlncyBmb3Igc3lzZnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19EQU1PTl9TWVNGU2AgaXMgbmVlZGVkLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBpbiBgbW0vZGFtb24vS2NvbmZpZ2AuIEkmIzM5O2xsIGFsc28gZW5zdXJlIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgYXJlIHNldC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYWN0dWFsbHkgYmVpbmcgYWJsZSB0byB1c2UgYW5kIGZ1enogdGhlIG5ldyBpbnRlcmZhY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB2YWx1ZXMgYW5kIGNvbWJpbmF0aW9ucyB3aWxsIHlpZWxkIHRoZSBtb3N0IGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9TWVNGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBmaWd1cmluZyBvdXQgd2hhdCBgREFNT05fU1lTRlNgIGRlcGVuZHMgb24sIHByZXNlbnRlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24uCgoqKkludmVzdGlnYXRpbmcgREFNT05fU1lTRlMgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYERBTU9OX1NZU0ZTYC4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgcGFydCBvZiBkeW5hbWljIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHksIHRoaXMgdGhpbmcgY2FsbGVkIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplci4gU28sIHdoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbmFsaXR5IHNpdCBpbiB0aGUgZ3JhbmQgc2NoZW1lPyBXaGF0IG90aGVyIGtlcm5lbCBtb2R1bGVzLCBzdWJzeXN0ZW1zLCBvciBjb25maWd1cmF0aW9ucyBkb2VzIGl0IGxlYW4gb24gdG8gb3BlcmF0ZSBjb3JyZWN0bHk/IFRoYXQmIzM5O3MgdGhlIHF1ZXN0aW9uIEkgbmVlZCBhbnN3ZXJlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIHJlcXVpcmVtZW50cyBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTE1PWNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy0xOC1cdGhlbHBcbi0tXG5tbS9kYW1vbi9LY29uZmlnPTI2PWNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjI4Olx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy0yOS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZz0zOD1jb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy00MS1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuLS1cbm1tL2RhbW9uL0tjb25maWc9NDc9Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjQ5Olx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG5tbS9kYW1vbi9LY29uZmlnLTUwLVx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4tLVxubW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjU4Olx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy01OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZz02OD1jb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo3MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTcxLVx0ZGVmYXVsdCBEQU1PTlxuLS1cbm1tL2RhbW9uL0tjb25maWc9NzY9Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy03OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZz04OD1jb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTkxLVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWc9MTAwPWNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTAyOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy0xMDMtXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZz0xMDg9Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWc9MTE2PWNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTExOS1cdGRlZmF1bHQgREFNT05fU1RBVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjYxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgdGhlIERBTU9OIERlcGVuZGVuY3kgU3RydWN0dXJlKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBgREFNT05fU1lTRlNgIGZlYXR1cmUgaGluZ2VzIG9uIGJvdGggYERBTU9OYCBhbmQgYFNZU0ZTYCBiZWluZyBwcmVzZW50LiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2suIEFuZCwgdGhlIGluY2x1c2lvbiBvZiBgREFNT05fUEFERFJgIGlzIGZsYWdnZWQgYXMgYmVpbmcgZXNzZW50aWFsIGJlY2F1c2Ugd2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBpbiBgbW0vZGFtb24vcGFkZHIuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBgREFNT05fUEFERFJgIGRpcmVjdGx5IGltcGFjdHMgaG93IHBoeXNpY2FsIGFkZHJlc3NlcyBhcmUgaGFuZGxlZCB3aXRoaW4gREFNT04uIE5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRydWUgYW5kIHRoYXQgYHBhZGRyLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYERBTU9OX1BBRERSYCBpcyBzZXQuIFRvIGRvIHRoYXQsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHJ1bGVzLCBhbmQgY29uZmlybSBteSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGU9ND1vYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbm1tL2RhbW9uL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyBwYWRkci5vXG5tbS9kYW1vbi9NYWtlZmlsZS02LW9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjY1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQU1PTiBQYXRjaCBGdW5jdGlvbiBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYERBTU9OX1BBRERSYCBpcyBpbmRlZWQgYSBuZWNlc3NhcnkgcGFydCBvZiB0aGlzLiBSaWdodCwgY29uZmlybWVkLiBOb3csIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlOiBgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uYCwgYGRhbW9uX3BhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzYCwgYG5yX3ByZXBzX3N0b3JlYCwgYHByZXBfYWN0aW9uX3N0b3JlYCwgYGRhbW9uX3N5c2ZzX3NldF9wcmVwc2AsIGFuZCBgZGFtb25fY29tbWl0X3ByZXBzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHBsYXkgYSByb2xlIGluIHRoZSBjaGFuZ2VzLgoKSG1tLCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhleSBhcmUgYWxsIHN0YXRpYy4gWWVzLCB0aGV5IGFyZS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBJZiB0aGV5IGFyZSBhbGwgc3RhdGljLCB0aGV5JiMzOTtyZSBwcm9iYWJseSBub3QgdGhlIGJlc3QgY2FuZGlkYXRlcyBmb3IgZGlyZWN0IEZvY3VzU3ltYm9sIGFuYWx5c2lzIHdpdGhpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGV5IG1pZ2h0IGJlIGluZGlyZWN0bHkgaW1wb3J0YW50LCBidXQgSSBuZWVkIHRvIGZpbmQgdGhlIHB1YmxpY2x5IHZpc2libGUgZnVuY3Rpb25zLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNoaWZ0IGZvY3VzIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgcGF0Y2guIEFoLCBoZXJlIHdlIGdvOiBgZGFtb25fbmV3X3ByZXBgIGFuZCBgZGFtb25fYWRkX3ByZXBgLiBUaGVzZSBhcmUgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSBhcmUgbm9uLXN0YXRpYy4gVGhvc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgd2hlbiBpdCBjb21lcyB0byB0aGUgc3ltYm9sIGFuYWx5c2lzLgoKSSBzaG91bGQgcHJvYmFibHkgY3Jvc3MgcmVmZXJlbmNlIHdpdGggYG1tL2RhbW9uL2NvcmUuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9uZXdfcHJlcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9OTg9aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEzLVxubW0vZGFtb24vY29yZS5jOjExNDpzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbmV3X3ByZXAoZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb24pXG5tbS9kYW1vbi9jb3JlLmMtMTE1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTczNT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCwgc3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NTEtXG5tbS9kYW1vbi9jb3JlLmM6MTc1MjpcdFx0bmV3X3ByZXAgPSBkYW1vbl9uZXdfcHJlcChzcmNfcHJlcC1cdTAwM2VhY3Rpb24pO1xubW0vZGFtb24vY29yZS5jLTE3NTMtXHRcdGlmICghbmV3X3ByZXApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipOb24tU3RhdGljIEZ1bmN0aW9uIENvbnNpZGVyYXRpb25zKioKCkhtbSwgSSYjMzk7bSBhbmFseXppbmcgdGhlIGNvZGViYXNlLCBhbmQgbXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBmb2N1c2VkIG9uIGZ1bmN0aW9uIGRlc2lnbi4gQXJlIHRoZXJlICphbnkqIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3Qgc3RhdGljPyBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIHN0YXRpYyBvbmVzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXMgSSBjb25zaWRlciBkZXNpZ24gcGF0dGVybnMgYW5kIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZWlyIHNjb3BlLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIG92ZXJhbGwgYmVoYXZpb3IgY291bGQgYmUgZGlmZmVyZW50LCBpbXBhY3RpbmcgcGVyZm9ybWFuY2UgYW5kIGhvdyBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGludGVyYWN0IHdpdGggdGhlbS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdG8gY29uc2lkZXIgdGhlaXIgZWZmZWN0IG9uIHRoZSBncmVhdGVyIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9hZGRfcHJlcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTE0PXN0cnVjdCBkYW1vbl9wcmVwICpkYW1vbl9uZXdfcHJlcChlbnVtIGRhbW9uX3ByZXBfYWN0aW9uIGFjdGlvbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI1LVxubW0vZGFtb24vY29yZS5jOjEyNjp2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXG5tbS9kYW1vbi9jb3JlLmMtMTI3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTczNT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCwgc3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NTQtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTc1NTpcdFx0ZGFtb25fYWRkX3ByZXAoZHN0LCBuZXdfcHJlcCk7XG5tbS9kYW1vbi9jb3JlLmMtMTc1Ni1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NjkKCQkJCQkJCW91dHB1dDogNzAKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBEQU1PTiBDb2RlJiMzOTtzIFN5bWJvbCBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZSBhZ2FpbiwgYW5kIEkmIzM5O20gaGl0dGluZyBhIGJpdCBvZiBhIHdhbGwgaW4gbXkgdW5kZXJzdGFuZGluZy4gSSBrZWVwIHNlZWluZyB0aGVzZSBmdW5jdGlvbiBuYW1lcywgbGlrZSBgZGFtb25fc3lzZnNfc2V0X3Byb2JlYCBhbmQgYGRhbW9uX2NvbW1pdF9wcm9iZXNgLCBidXQgdGhleSYjMzk7cmUgKnN0YXRpYyouIFRoYXQmIzM5O3MgYSBwcm9ibGVtLiBJZiBhbGwgdGhlIGludGVyZXN0aW5nLCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgaG93IGRvIEkgYnVpbGQgYSBnb29kIGBGb2N1c1N5bWJvbHNgIGxpc3Q/IEkgbmVlZCBzb21ldGhpbmcgdG8gZm9jdXMgb24uCgpBbHJpZ2h0LCBJIGNhbiBkZWZpbml0ZWx5IGluY2x1ZGUgYGRhbW9uX25ld19wcmVwYCBhbmQgYGRhbW9uX2FkZF9wcmVwYDsgdGhvc2UgbG9vayBwcm9taXNpbmcuIEFuZCwgdGhlcmUmIzM5O3MgYGtkYW1vbmRfZm5gLCBidXQgdGhhdCYjMzk7cyBhIHRocmVhZCBmdW5jdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhhdCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIFRpbWUgdG8gY2hlY2sgYG1tL2RhbW9uL3N5c2ZzLmNgLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlcmUgdGhhdCBJJiMzOTt2ZSBtaXNzZWQsIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIG1vZGlmaWVkIGFuZCwgdGhlcmVmb3JlLCBtb3JlIHVzZWZ1bCB0byBtZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGdldHRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSpcXHMmIzQzO1xcKipbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDE5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIGBtbS9kYW1vbi9zeXNmcy5jYCBmb3IgRGF0YSBTdHJ1Y3R1cmVzKioKCkFscmlnaHQsIEkgbmVlZCB0byBxdWlja2x5IGdldCBhIGxheSBvZiB0aGUgbGFuZCBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdGhlIGNsYXNzaWMsIHF1aWNrIGFuZCBkaXJ0eSBtZXRob2Q6IGxldCYjMzk7cyB1c2UgYGdyZXBgLiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgZGVjbGFyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHNlYXJjaCBmb3IgbGluZXMgdGhhdCAqYmVnaW4qIHdpdGggYGludCBgLCBgdm9pZCBgLCBvciBgc3RydWN0IGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZmlyc3QgcGFzcywgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IGludGVnZXIgdmFyaWFibGVzLCB2b2lkIHJldHVybiB0eXBlcyAod2hpY2ggb2Z0ZW4gaGludCBhdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2l0aCBzaWRlIGVmZmVjdHMpLCBhbmQgYHN0cnVjdGAgZGVmaW5pdGlvbnMsIHdoaWNoIGFyZSBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgZGF0YSBvcmdhbml6YXRpb24gaW4gdGhlIG1vZHVsZS4gSXQmIzM5O3MgYSBwcmFnbWF0aWMsIHByZWxpbWluYXJ5IHNjYW4gYmVmb3JlIEkgZGl2ZSBkZWVwZXIgd2l0aCBjdGFncyBvciBldmVuIHN0YXJ0IHB1bGxpbmcgdXAgdGhlIGRlZmluaXRpb25zIGluIGFuIElERS4gSSYjMzk7bSBlc3NlbnRpYWxseSB1c2luZyBgZ3JlcGAgYXMgYSB2ZXJ5IHRhcmdldGVkIGNvZGUgaW5kZXhlciBmb3IgYSBxdWljaywgaW5pdGlhbCBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZHxzdHJ1Y3R8c3NpemVfdCkgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jLTE1LVxubW0vZGFtb24vc3lzZnMuYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtOTEtXG5tbS9kYW1vbi9zeXNmcy5jOjkyOnN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zIHtcbm1tL2RhbW9uL3N5c2ZzLmMtOTMtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTAtXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0zMTctXG5tbS9kYW1vbi9zeXNmcy5jOjMxODpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyB7XG5tbS9kYW1vbi9zeXNmcy5jLTMxOS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz00MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0c19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTQ0NS1cbm1tL2RhbW9uL3N5c2ZzLmM6NDQ2OnN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbCB7XG5tbS9kYW1vbi9zeXNmcy5jLTQ0Ny1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy02MDItXG5tbS9kYW1vbi9zeXNmcy5jOjYwMzpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtNjA0LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy03NTYtXG5tbS9kYW1vbi9zeXNmcy5jOjc1NzpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCB7XG5tbS9kYW1vbi9zeXNmcy5jLTc1OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz03NjI9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpkYW1vbl9zeXNmc19wcmVwX2FsbG9jKHZvaWQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy03NzItXG5tbS9kYW1vbi9zeXNmcy5jOjc3MzpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSB7XG5tbS9kYW1vbi9zeXNmcy5jLTc3NC1cdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy04NTAtXG5tbS9kYW1vbi9zeXNmcy5jOjg1MTpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMge1xubW0vZGFtb24vc3lzZnMuYy04NTItXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9OTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtOTY5LVxubW0vZGFtb24vc3lzZnMuYzo5NzA6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciB7XG5tbS9kYW1vbi9zeXNmcy5jLTk3MS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz05Nzg9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXIgKmRhbW9uX3N5c2ZzX2ZpbHRlcl9hbGxvYyh2b2lkKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtOTgyLVxubW0vZGFtb24vc3lzZnMuYzo5ODM6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWUge1xubW0vZGFtb24vc3lzZnMuYy05ODQtXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcl9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTExNjMtXG5tbS9kYW1vbi9zeXNmcy5jOjExNjQ6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMge1xubW0vZGFtb24vc3lzZnMuYy0xMTY1LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEyNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTEyODItXG5tbS9kYW1vbi9zeXNmcy5jOjEyODM6c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTI4NC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2JlX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTM4OS1cbm1tL2RhbW9uL3N5c2ZzLmM6MTM5MDpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmVzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTM5MS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNTA5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE1MTgtXG5tbS9kYW1vbi9zeXNmcy5jOjE1MTk6c3RydWN0IGRhbW9uX3N5c2ZzX2F0dHJzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTUyMC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2F0dHJzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTYyNC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTYyNTpzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUge1xubW0vZGFtb24vc3lzZnMuYy0xNjI2LVx0ZW51bSBkYW1vbl9vcHNfaWQgb3BzX2lkO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTYzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIGRhbW9uX3N5c2ZzX29wc19uYW1lc1tdID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTY0NC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTY0NTpzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCB7XG5tbS9kYW1vbi9zeXNmcy5jLTE2NDYtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTg5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19jb250ZXh0X2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTkwMC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTkwMTpzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMge1xubW0vZGFtb24vc3lzZnMuYy0xOTAyLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDI5LVxubW0vZGFtb24vc3lzZnMuYzoyMDMwOnN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzMS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTY5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfZGFtb25fY2FsbChpbnQgKCpmbikodm9pZCAqZGF0YSksXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNTgyLVxubW0vZGFtb24vc3lzZnMuYzoyNTgzOnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzX3dhbGtfZGF0YSB7XG5tbS9kYW1vbi9zeXNmcy5jLTI1ODQtXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI3Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZF9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI3NzYtXG5tbS9kYW1vbi9zeXNmcy5jOjI3Nzc6c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjc3OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yOTEyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjkyMS1cbm1tL2RhbW9uL3N5c2ZzLmM6MjkyMjpzdHJ1Y3QgZGFtb25fc3lzZnNfdWlfZGlyIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjkyMy1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTgyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIFN5c2ZzIEludGVyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgREFNT04gY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIG5vdGljaW5nIGlzIHRoYXQgZXZlcnkgc2luZ2xlIHN5c2ZzIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIFRoYXQmIzM5O3MgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2UsIGFuZCBpdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBzY29wZSBhbmQgcG90ZW50aWFsIGV4dGVybmFsIGludGVyYWN0aW9ucy4gQnV0IHRoZW4gSSBzZWUgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9jb3JlLmNgIOKAkyBzcGVjaWZpY2FsbHkgYGRhbW9uX25ld19wcmVwYCBhbmQgYGRhbW9uX2FkZF9wcmVwYCDigJMgdGhhdCBhcmVuJiMzOTt0IHN0YXRpYy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgZWl0aGVyIG9mIHRoZW0gYXJlIGV4cG9ydGVkLiBBcmUgdGhleSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgb2YgdGhlIGNvcmUgREFNT04gY29tcG9uZW50PyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBUaW1lIHRvIGNoZWNrIHRoZSBleHBvcnQgc3RhdHVzLCBhbmQgZGV0ZXJtaW5lIHRoZWlyIGludGVuZGVkIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qZGFtb25fbmV3X3ByZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI1OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgU2NvcGUgYW5kIFZpc2liaWxpdHkqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgdmFyaWFibGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBhdCBsZWFzdCBub3QgZGlyZWN0bHkgdGhyb3VnaCBzdGFuZGFyZCBleHBvcnRzLiBUaGF0JiMzOTtzIGZpbmUsIGJ1dCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHJhaXNlcyBhIGZsYWcuIEl0IGltcGxpZXMgYSBkZWdyZWUgb2YgYWNjZXNzaWJpbGl0eSBiZXlvbmQgYSBwdXJlbHkgaW50ZXJuYWwgc2NvcGUuIFRoaXMgbWVhbnMgaXQgKmNvdWxkKiBiZSBhY2Nlc3NlZCBvciBsaW5rZWQgdG8gZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UsIG9yIHBlcmhhcHMgZXZlbiBkeW5hbWljYWxseSBsb2FkZWQsIGRlcGVuZGluZyBvbiB0aGUgYnVpbGQgYW5kIGxpbmtpbmcgc3RyYXRlZ3kuCgpUaGVuLCB0aGUga2V5IHF1ZXN0aW9uIGFyaXNlczogaXMgdGhpcyBgZGFtb25fYWRkX3ByZXBgIGZ1bmN0aW9uIOKAkyAqdGhpcyogc3BlY2lmaWMgZW50aXR5IOKAkyBhY3R1YWxseSBleHBvcnRlZCBieSBhbnkgb3RoZXIgbWVhbnM/IElzIGl0IGV4cG9zZWQgaW4gYSB3YXkgdGhhdCwgd2hpbGUgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gYSB0eXBpY2FsIGhlYWRlciBvciBleHBvcnQgbGlzdCwgaXMgc3RpbGwgYWNjZXNzaWJsZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVjaGFuaXNtPyBQZXJoYXBzIGEgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHN5bWJvbCB0YWJsZT8gS25vd2luZyB0aGlzIGFuc3dlciBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlbmRlZCB1c2UgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBhYm91dCBmaWd1cmluZyBvdXQgdGhlIGFjdHVhbCBlZmZlY3RpdmUgYm91bmRhcnkgb2YgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmRhbW9uX2FkZF9wcmVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1ODEKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogNjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEQU1PTiBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGxvb2tzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiYjMzQ7IFdoaWxlIHRoZSBjb3JlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHBhdGNoIGFyZW4mIzM5O3QgZGlyZWN0bHkgc3RhdGljLCB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBicm9hZGVyIERBTU9OIGZyYW1ld29yaywgYW5kIHNwZWNpZmljYWxseSwgdGhleSBhcmUgcmVsYXRlZCB0byBGb2N1c1N5bWJvbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSB0aGUgY29ycmVjdCBwb2ludHMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4KCk15IGZpcnN0IGNoZWNrIHdhcyB3aGV0aGVyIGBkYW1vbl9zeXNmc19zZXRfcHJlcHNgIGFuZCBgZGFtb25fcGFfcHJlcF9wcm9iZXNgIHdlcmUgc3RhdGljLiBZZXMsIHRoZXkgYXJlLiBCdXQgSSByZWFsaXplZCB0aGF0IHNpbmNlIHRoaXMgaXMgYSBzeXNmcyBpbnRlcmZhY2UsIHRoZSByZWFsIGVudHJ5IHBvaW50cyBhcmUgdGhlIHN5c2ZzIHN0b3JlIGFuZCBzaG93IGZ1bmN0aW9ucy4gU28sIGFmdGVyIGEgbGl0dGxlIHRob3VnaHQsIEkmIzM5O20gZ29pbmcgdG8gbGlzdCBgZGFtb25fbmV3X3ByZXBgIGFuZCBgZGFtb25fYWRkX3ByZXBgIGFzIG15IEZvY3VzU3ltYm9scy4gSSBhbHNvIGNvbnNpZGVyZWQgYGtkYW1vbmRfZm5gLCB0aGUgdGhyZWFkIGZ1bmN0aW9uLCBidXQgZGVjaWRlZCBhZ2FpbnN0IGl0LCBhcyBpdCYjMzk7cyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCB0aGUgbWFpbiBsb29wLCBhbmQgbm90IGEgZGlyZWN0IGVudHJ5IHBvaW50LgoKTmV4dCwgSSBuZWVkZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHNlZSB0aGF0IGBEQU1PTl9TWVNGU2AgYW5kIGBEQU1PTl9QQUREUmAgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzLiBBZGRpdGlvbmFsbHksIGBEQU1PTmAsIGBTWVNGU2AsIGBNTVVgLCBhbmQgYFBBR0VfSURMRV9GTEFHYCBhcmUgaW1wbGllZC4gU28sIG15IEVuYWJsZUNvbmZpZ3MgbGlzdCB3aWxsIGJlIGBEQU1PTl9TWVNGU2AgYW5kIGBEQU1PTl9QQUREUmAuIEkgY29uZmlybWVkIHRoYXQgYG1tL2RhbW9uL3N5c2ZzLmNgIGNvbXBpbGVzIHdoZW4gYENPTkZJR19EQU1PTl9TWVNGU2AgaXMgc2V0LCBhbmQgYG1tL2RhbW9uL3BhZGRyLmNgIGNvbXBpbGVzIHdoZW4gYENPTkZJR19EQU1PTl9QQUREUmAgaXMgc2V0LgoKUmV2aWV3aW5nIHRoZSBwYXRjaCBhZ2FpbiwgSSBzZWUgdGhhdCBpdCBhZGRzIGEgYHByZXBzYCBkaXJlY3RvcnkgdW5kZXIgYHByb2Jlcy8mbHQ7UCZndDsvYCB3aXRoaW4gdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhpcyBhbGxvd3Mgc2V0dGluZyBgcHJlcF9hY3Rpb25gIHRvIGBzZXRfcGdpZGxlYCBhbmQgYWRkcyBhIG5ldyBmaWx0ZXIgdHlwZSBjYWxsZWQgYHBnaWRsZV91bnNldGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgYWxsb3dzIHVzZXJzIHRvIHNldCBwYWdlIGlkbGUgZmxhZ3MgcHJpb3IgdG8gcHJvYmluZyBhbmQgdGhlbiBmaWx0ZXIgcmVzdWx0cy4gVGhpcyBzaWduaWZpY2FudGx5IG1vZGlmaWVzIERBTU9OJiMzOTtzIGNvcmUgYmVoYXZpb3IsIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXNmcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbi4KClNvLCB0byBzdW1tYXJpemUgZm9yIGZ1enppbmcgcHVycG9zZXM6CgoqICAgKipGb2N1c1N5bWJvbHM6KiogYGRhbW9uX25ld19wcmVwYCwgYGRhbW9uX2FkZF9wcmVwYAoqICAgKipFbmFibGVDb25maWdzOioqIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAKCkZpbmFsbHksIGxldCBtZSByZS12ZXJpZnkgdGhhdCBgZGFtb25fbmV3X3ByZXBgIGFuZCBgZGFtb25fYWRkX3ByZXBgIGFyZSB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLCB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9ucyBhZGRlZCBieSB0aGUgcGF0Y2guIFllcCwgdGhhdCYjMzk7cyB3aGF0IEkgd2FudC4gVGhleSBhcmUgdGhlIGJlc3Qgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX25ld19wcmVwJiMzNDssCiAgICAmIzM0O2RhbW9uX2FkZF9wcmVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgREFNT04gc3Vic3lzdGVtLCBhbGxvd2luZyB1c2VycyB0byBjb25maWd1cmUgcHJvYmluZyBwcmVwYXJhdGlvbiBhY3Rpb25zIChlLmcuLCBgc2V0X3BnaWRsZWApIGFuZCBhIG5ldyBmaWx0ZXIgdHlwZSAoYHBnaWRsZV91bnNldGApIHZpYSBzeXNmcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9uZXdfcHJlcCYjMzQ7LAogICAgJiMzNDtkYW1vbl9hZGRfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gdGhlIERBTU9OIHN1YnN5c3RlbSwgYWxsb3dpbmcgdXNlcnMgdG8gY29uZmlndXJlIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9ucyAoZS5nLiwgYHNldF9wZ2lkbGVgKSBhbmQgYSBuZXcgZmlsdGVyIHR5cGUgKGBwZ2lkbGVfdW5zZXRgKSB2aWEgc3lzZnMuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgYW5kIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zLCBtYWtpbmcgaXQgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1Mzo1OC4wMTczNzc5OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA1ODkyOTU2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbmV3X3ByZXBcIixcbiAgICBcImRhbW9uX2FkZF9wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIGFsbG93aW5nIHVzZXJzIHRvIGNvbmZpZ3VyZSBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgKGUuZy4sIGBzZXRfcGdpZGxlYCkgYW5kIGEgbmV3IGZpbHRlciB0eXBlIChgcGdpZGxlX3Vuc2V0YCkgdmlhIHN5c2ZzLiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucywgbWFraW5nIGl0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1Mzo1OC4wMTczODYyODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTM1NDE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRjYWI4ZjEzMTQ1YjM2ZWFhNTI1N2VlNDJiZjhjNjVmZjk1MDM0MjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMTg6NTM6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbmluZGV4IGU2NzVhNTcxNDVlMzZkLi42ZDU5NmZiN2ZhMWZmYSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXFxuQEAgLTE3Myw2ICsxNzMsMTkgQEAgQ29udGFjdDpcXHRTSiBQYXJrIFxcdTAwM2NzakBrZXJuZWwub3JnXFx1MDAzZVxcbiBEZXNjcmlwdGlvbjpcXHRXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlXFxuIFxcdFxcdHBlci1wcm9iZSBhdHRyaWJ1dGUgd2VpZ2h0LlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cXHUwMDNjS1xcdTAwM2UvY29udGV4dHMvXFx1MDAzY0NcXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1xcdTAwM2NQXFx1MDAzZS9wcmVwcy9ucl9wcmVwc1xcbitEYXRlOlxcdFxcdEp1biAyMDI2XFxuK0NvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG4rRGVzY3JpcHRpb246XFx0V3JpdGluZyBhIG51bWJlciAnTicgdG8gdGhpcyBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZlxcbitcXHRcXHRkaXJlY3RvcmllcyBmb3IgZWFjaCBEQU1PTiBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbiBuYW1lZCAnMCdcXG4rXFx0XFx0dG8gJ04tMScgdW5kZXIgdGhlIHByZXBzLyBkaXJlY3RvcnkuXFxuK1xcbitXaGF0OlxcdFxcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NLXFx1MDAzZS9jb250ZXh0cy9cXHUwMDNjQ1xcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXFx1MDAzY1BcXHUwMDNlL3ByZXAvXFx1MDAzY1JcXHUwMDNlL2FjdGlvblxcbitEYXRlOlxcdFxcdEp1biAyMDI2XFxuK0NvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG4rRGVzY3JpcHRpb246XFx0V3JpdGluZyB0byBhbmQgcmVhZGluZyBmcm9tIHRoaXMgZmlsZSBzZXRzIGFuZCBnZXRzIHRoZSBwcm9iaW5nXFxuK1xcdFxcdHByZWVwYXJhdGlvbiBhY3Rpb24uXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NLXFx1MDAzZS9jb250ZXh0cy9cXHUwMDNjQ1xcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXFx1MDAzY1BcXHUwMDNlL2ZpbHRlcnMvbnJfZmlsdGVyc1xcbiBEYXRlOlxcdFxcdE1heSAyMDI2XFxuIENvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbmluZGV4IGRhNWY5YWZkMDhhZWY4Li4xZjVhMzllMWZjMzhkYSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuQEAgLTc0LDYgKzc0LDkgQEAgY29tbWEgKFxcXCIsXFxcIikuXFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBucl9yZWdpb25zL21pbixtYXhcXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YHByb2JlcyBcXHUwMDNjZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzXFx1MDAzZWAvbnJfcHJvYmVzXFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC93ZWlnaHRcXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgcHJlcHMvbnJfcHJlcHNcXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvcHJlcF9hY3Rpb25cXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLlxcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBmaWx0ZXJzL25yX2ZpbHRlcnNcXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvdHlwZSxtYXRjaGluZyxhbGxvdyxwYXRoXFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cXG5AQCAtMjgzLDkgKzI4NiwxOCBAQCBJbiB0aGUgYmVnaW5uaW5nLCB0aGlzIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcm9iZXNgYC4gIFdyaXRpbmcgYVxcbiBudW1iZXIgKGBgTmBgKSB0byB0aGUgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGQgZGlyZWN0b3JpZXMgbmFtZWQgYGAwYGBcXG4gdG8gYGBOLTFgYC4gIEVhY2ggZGlyZWN0b3J5IHJlcHJlc2VudHMgZWFjaCBtb25pdG9yaW5nIHByb2JlLlxcbiBcXG4tSW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIG9uZSBkaXJlY3RvcnksIGBgZmlsdGVyc2BgIGV4aXN0cy4gIFRoZSBkaXJlY3RvcnlcXG4tY29udGFpbnMgZmlsZXMgZm9yIGluc3RhbGxpbmcgZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lXFxuLXRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlIHByb2JlLlxcbitJbiBlYWNoIHByb2JlIGRpcmVjdG9yeSwgdHdvIGRpcmVjdG9yaWVzLCBgYHByZXBzYGAgYW5kIGBgZmlsdGVyc2BgIGV4aXN0cy5cXG4rVGhlIGRpcmVjdG9yaWVzIGNvbnRhaW5zIGZpbGVzIGZvciBpbnN0YWxsaW5nIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9ucyBhbmRcXG4rZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlXFxuK3Byb2JlLlxcbitcXG4rSW4gdGhlIGJlZ2lubmluZywgYGBwcmVwc2BgIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcmVwc2BgLlxcbitXcml0aWluZyBhIG51bWJlciAoYGBOYGApIHRvIHRoZSBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZiBjaGlsZCBkaXJlY3Rvcmllc1xcbituYW1lcyBgYDBgYCB0byBgYE4tMWBgLiAgRWFjaCBkaXJlY3RvcnkgcmVwcmVzZW50cyBlYWNoIHByZXBhcmF0aW9uIGFjdGlvbi5cXG4rRWFjaCBkaXJlY3RvcnkgaGFzIG9uZSBmaWxlLCBgYHByZXBfYWN0aW9uYGAuICBUaGUgcHJlcGFyYXRpb24gYWN0aW9uIGNhbiBiZVxcbitzZWxlY3RlZCBieSB3cml0aW5nIHRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gdGhlIGBgcHJlcF9hY3Rpb25gYCBmaWxlLiAgUmVmZXJcXG4rdG8gdGhlIDpyZWY6YGRlc2lnbiBkb2MgXFx1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcXHUwMDNlYCBmb3IgdGhlIGxpc3Qgb2ZcXG4rc3VwcG9ydGVkIGFjdGlvbnMuXFxuIFxcbiBFYWNoIHByb2JlIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zIGBgd2VpZ2h0YGAgZmlsZS4gIFJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZ1xcbiB0byB0aGUgZmlsZSBnZXRzIGFuZCBzZXRzIHRoZSA6cmVmOmBhdHRyaWJ1dGVzLW9ubHkgbW9uaXRvcmluZ1xcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG5pbmRleCBhZWQ2Y2IxY2Y0ODMxMC4uMDZmZmZlNWUzNzgxOWUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuQEAgLTI5Myw4ICsyOTMsMTQgQEAgcmVnaXN0cmF0aW9uIGlzIG1hZGUgYnkgc3BlY2lmeWluZyBhIHByb2JlIHBlciBhdHRyaWJ1dGUuICBFYWNoIG9mIHRoZSBwcm9iZVxcbiBzcGVjaWZpZXMgYSBydWxlIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIG1lbW9yeSByZWdpb24gaGFzIHRoZSByZWxhdGVkXFxuIGF0dHJpYnV0ZS4gIFRoZSBydWxlIGlzIGNvbnN0cnVjdGVkIHdpdGggbXVsdGlwbGUgZmlsdGVycy4gIFRoZSBmaWx0ZXJzIHdvcmtcXG4gc2FtZSB0byA6cmVmOmBEQU1PUyBmaWx0ZXJzIFxcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVyc1xcdTAwM2VgIGV4Y2VwdCB0aGUgc3VwcG9ydGVkXFxuLWZpbHRlciB0eXBlcy4gIEN1cnJlbnRseSBvbmx5IGBgYW5vbmBgIGFuZCBgYG1lbWNnYGAgZmlsdGVyIHR5cGVzIGFyZSBzdXBwb3J0ZWRcXG4tZm9yIGRhdGEgYXR0cmlidXRlcyBtb25pdG9yaW5nLlxcbitmaWx0ZXIgdHlwZXMuICBDdXJyZW50bHkgYmVsb3cgZml0bGVyIHR5cGVzIGFyZSBzdXBwb3J0ZWQuXFxuK1xcbistIGBgYW5vbmBgOiBTYW1lIHRvIHRoYXQgZm9yIERBTU9TIGZpbHRlcnMuXFxuKy0gYGBtZW1jZ2BgOiBTYW1lIHRvIHRoYXQgZm9yIERBTU9TIGZpbHRlcnMuXFxuKy0gYGBwZ2lkbGVfdW5zZXRgYDogTWF0Y2hlcyBpZiB0aGUgcGFnZSBmb3IgdGhlIG1lbW9yeSBpcyBtYXJrZWQgYXMgbm90XFxuKyAgYWNjZXNzLWlkbGUuXFxuKyAgTWF0Y2hlcyBpZiB0aGUgbWVtb3J5IGlzIG5vdCBiYWNrZWQgYnkgcGFnZXMgdGhhdCBEQU1PTiBjYW4gaWRuZXRpZnlcXG4rICBpZGxlbmVzcy5cXG4gXFxuIElmIHN1Y2ggcHJvYmVzIGFyZSByZWdpc3RlcmVkLCBEQU1PTiBleGVjdXRlcyB0aGUgcHJvYmVzIGZvciBlYWNoIHJlZ2lvbidzXFxuIHNhbXBsaW5nIG1lbW9yeSB3aGVuIGl0IGRvZXMgdGhlIGFjY2VzcyA6cmVmOmBzYW1wbGluZ1xcbkBAIC0zMDUsNiArMzExLDEzIEBAIFVzZXJzIGNhbiB0aGVyZWZvcmUga25vdyBob3cgbXVjaCBvZiBhIGdpdmVuIERBTU9OIHJlZ2lvbiBoYXMgYSBzcGVjaWZpYyBkYXRhXFxuIGF0dHJpYnV0ZSBieSByZWFkaW5nIHRoZSBwZXItcmVnaW9uIHBlci1wcm9iZSBwcm9iZSBoaXRzIGNvdW50ZXIgYWZ0ZXIgZWFjaFxcbiBhZ2dyZWdhdGlvbiBpbnRlcnZhbC5cXG4gXFxuK1VzZXJzIGNhbiBvcHRpb25hbGx5IHJlZ2lzdGVyIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9ucyBwZXIgcHJvYmUuICBJZiBzdWNoXFxuK2FjdGlvbnMgYXJlIHJlZ2lzdGVyZWQsIERBTU9OIGFwcGxpZXMgdGhlIGFjdGlvbnMgdG8gZWFjaCByZWdpb24ncyBzYW1wbGluZ1xcbittZW1vcnkgYmVmb3JlIHN0YXJ0aW5nIHRoZSBuZXh0IHNhbXBsaW5nIGludGVydmFsLiAgQ3VycmVudGx5IG9ubHkgb25lIGFjdGlvbixcXG4rYGBzZXRfcGdpZGxlYGAgaXMgc3VwcG9ydGVkLiAgVGhlIGFjdGlvbiBtYXJrcyB0aGUgcGFnZSBmb3IgdGhlIHByb2JpbmcgdGFyZ2V0XFxuK21lbW9yeSBhcyBhY2Nlc3MtaWRsZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGhcXG4rYGBwZ2lkbGVfdW5zZXRgYCBwcm9iZSBmaWx0ZXIuXFxuK1xcbiBUaGlzIGlzIGEgc2FtcGxpbmcgYmFzZWQgbWVjaGFuaXNtLiAgSGVuY2UsIGl0IGlzIGxpZ2h0d2VpZ2h0IGJ1dCB0aGUgb3V0cHV0XFxuIG1heSBpbmNsdWRlIHNvbWUgbWVhc3VyZW1lbnQgZXJyb3JzLiAgVGhlIG91dHB1dCBzaG91bGQgYmUgdXNlZCB3aXRoIGdvb2RcXG4gdW5kZXJzdGFuZGluZyBvZiBzdGF0aXN0aWNzLlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5pbmRleCAwYzhiN2RkZWY5YWJiMy4uZmUyYzZiNTZkMWQ1MzAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXFxuQEAgLTYyNyw2ICs2MjcsNyBAQCBlbnVtIGRhbW9uX29wc19pZCB7XFxuICAqIEB1cGRhdGU6XFx0XFx0XFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXFxuICAqIEBwcmVwYXJlX2FjY2Vzc19jaGVja3M6XFx0UHJlcGFyZSBuZXh0IGFjY2VzcyBjaGVjayBvZiB0YXJnZXQgcmVnaW9ucy5cXG4gICogQGNoZWNrX2FjY2Vzc2VzOlxcdFxcdENoZWNrIHRoZSBhY2Nlc3NlcyB0byB0YXJnZXQgcmVnaW9ucy5cXG4rICogQHByZXBfcHJvYmVzOlxcdFxcdFByZXBhcmUgYXBwbHlpbmcgcHJvYmVzIGZvciBlYWNoIHJlZ2lvbi5cXG4gICogQGFwcGx5X3Byb2JlczpcXHRcXHRBcHBseSBwcm9iZXMgZm9yIGVhY2ggcmVnaW9uLlxcbiAgKiBAZ2V0X3NjaGVtZV9zY29yZTpcXHRcXHRHZXQgdGhlIHNjb3JlIG9mIGEgcmVnaW9uIGZvciBhIHNjaGVtZS5cXG4gICogQGFwcGx5X3NjaGVtZTpcXHRcXHRBcHBseSBhIERBTU9OLWJhc2VkIG9wZXJhdGlvbiBzY2hlbWUuXFxuQEAgLTY1NCw2ICs2NTUsOCBAQCBlbnVtIGRhbW9uX29wc19pZCB7XFxuICAqIGxhc3QgcHJlcGFyYXRpb24gYW5kIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIG9ic2VydmVkIGFjY2Vzc2VzIG9mIGVhY2ggcmVnaW9uLlxcbiAgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4IG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyB0aGF0IG1hZGUgYXMgYSByZXN1bHRcXG4gICogb2YgaXRzIHVwZGF0ZS4gIFRoZSB2YWx1ZSB3aWxsIGJlIHVzZWQgZm9yIHJlZ2lvbnMgYWRqdXN0bWVudCB0aHJlc2hvbGQuXFxuKyAqIEBwcmVwX3Byb2JlcyBzaG91bGQgZXhlY3V0ZSByZXF1aXJlZCBcXHUwMDI2c3RydWN0IGRhbW9uX3ByZXAgZm9yIG5leHQgXFx1MDAyNnN0cnVjdFxcbisgKiBkYW1vbl9wcm9iZSBhcHBsaWNhdGlvbnMgdG8gZWFjaCByZWdpb24uXFxuICAqIEBhcHBseV9wcm9iZXMgc2hvdWxkIGFwcGx5IHRoZSBkYXRhIGF0dHJpYnV0ZSBwcm9iZXMgdG8gZWFjaCByZWdpb24gYW5kXFxuICAqIGFjY29yZGluZ2x5IHVwZGF0ZSB0aGUgcHJvYmUgaGl0cyBjb3VudGVyIG9mIHRoZSByZWdpb24uICBJdCBzaG91bGQgYWxzb1xcbiAgKiBzZXQgXFx1MDAyNmRhbW9uX3JlZ2lvbi1cXHUwMDNlc2FtcGxpbmdfYWRkciBvZiBlYWNoIHJlZ2lvbiBpZiBgYHNldF9zYW1wbGVzYGAgaXMgdHJ1ZS5cXG5AQCAtNjc2LDYgKzY3OSw3IEBAIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIHtcXG4gXFx0dm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XFxuIFxcdHZvaWQgKCpwcmVwYXJlX2FjY2Vzc19jaGVja3MpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xcbiBcXHR1bnNpZ25lZCBpbnQgKCpjaGVja19hY2Nlc3Nlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XFxuK1xcdHZvaWQgKCpwcmVwX3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCwgYm9vbCBzZXRfc2FtcGxlcyk7XFxuIFxcdHVuc2lnbmVkIGludCAoKmFwcGx5X3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcXG4gXFx0XFx0XFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pO1xcbiBcXHRpbnQgKCpnZXRfc2NoZW1lX3Njb3JlKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbkBAIC03MzksMTUgKzc0MywzOCBAQCBzdHJ1Y3QgZGFtb25faW50ZXJ2YWxzX2dvYWwge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1heF9zYW1wbGVfdXM7XFxuIH07XFxuIFxcbisvKipcXG4rICogZW51bSBkYW1vbl9wcmVwX2FjdGlvbiAtIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uLlxcbisgKlxcbisgKiBAREFNT05fUFJFUF9TRVRfUEdJRExFOlxcdFNldCB0aGUgcHJvYmluZyBtZW1vcnkgYXMgaWRsZSBwYWdlLlxcbisgKi9cXG4rZW51bSBkYW1vbl9wcmVwX2FjdGlvbiB7XFxuK1xcdERBTU9OX1BSRVBfU0VUX1BHSURMRSxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgZGFtb25fcHJlcCAtIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gcmVxdWVzdC5cXG4rICpcXG4rICogQGFjdGlvbjpcXHRBY3Rpb24gdG8gZG8gdG8gdGhlIHByb2JpbmcgbWVtb3J5IGZvciB0aGUgcHJlcGFyYXRpb24uXFxuKyAqL1xcbitzdHJ1Y3QgZGFtb25fcHJlcCB7XFxuK1xcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xcbisvKiBwcml2YXRlOiAqL1xcbitcXHQvKiBzaWJsaW5ncyBsaXN0LiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK307XFxuK1xcbiAvKipcXG4gICogZW51bSBkYW1vbl9maWx0ZXJfdHlwZSAtIFR5cGUgb2YgXFx1MDAyNnN0cnVjdCBkYW1vbl9maWx0ZXJcXG4gICpcXG4tICogQERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XFx0QW5vbnltb3VzIHBhZ2VzLlxcbi0gKiBAREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XFx0U3BlY2lmaWMgbWVtY2cncyBwYWdlcy5cXG4rICogQERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XFx0XFx0QW5vbnltb3VzIHBhZ2VzLlxcbisgKiBAREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XFx0XFx0U3BlY2lmaWMgbWVtY2cncyBwYWdlcy5cXG4rICogQERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcXHRQZ2lkbGUgaXMgdW5zZXQuXFxuICAqL1xcbiBlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHtcXG4gXFx0REFNT05fRklMVEVSX1RZUEVfQU5PTixcXG4gXFx0REFNT05fRklMVEVSX1RZUEVfTUVNQ0csXFxuK1xcdERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVCxcXG4gfTtcXG4gXFxuIC8qKlxcbkBAIC03NzgsNiArODA1LDggQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuIHN0cnVjdCBkYW1vbl9wcm9iZSB7XFxuIFxcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XFxuIC8qIHByaXZhdGU6ICovXFxuK1xcdC8qIFByZXBhcmF0aW9uIGFjdGlvbnMgdG8gYXBwbHkgdG8gZWFjaCBwcm9iaW5nIG1lbW9yeS4gKi9cXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBwcmVwcztcXG4gXFx0LyogRmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7XFxuIFxcdC8qIFNpYmxpbmdzIGxpc3QuICovXFxuQEAgLTk1Nyw2ICs5ODYsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3N6X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbiBcXHRyZXR1cm4gci1cXHUwMDNlYXIuZW5kIC0gci1cXHUwMDNlYXIuc3RhcnQ7XFxuIH1cXG4gXFxuKyNkZWZpbmUgZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcmVwKSBcXFxcXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXFx1MDAyNihwcmVwKS1cXHUwMDNlcHJlcHMsIGxpc3QpXFxuK1xcbisjZGVmaW5lIGRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShwLCBuZXh0LCBwcmVwKSBcXFxcXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBcXHUwMDI2KHByZXApLVxcdTAwM2VwcmVwcywgbGlzdClcXG4rXFxuICNkZWZpbmUgZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIFxcXFxcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmLCBcXHUwMDI2KHApLVxcdTAwM2VmaWx0ZXJzLCBsaXN0KVxcbiBcXG5AQCAtMTAxMCw2ICsxMDQ1LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3N6X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbiBcXG4gI2lmZGVmIENPTkZJR19EQU1PTlxcbiBcXG4rc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKTtcXG4rdm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKTtcXG4rXFxuIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxcbiBcXHRcXHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KTtcXG4gdm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwNi4uZDViMWUwYjU4NTFhMWEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTExMSw2ICsxMTEsNjMgQEAgaW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xcbitcXG4rXFx0cHJlcCA9IGttYWxsb2Nfb2JqKCpwcmVwKTtcXG4rXFx0aWYgKCFwcmVwKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cHJlcC1cXHUwMDNlYWN0aW9uID0gYWN0aW9uO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cHJlcC1cXHUwMDNlbGlzdCk7XFxuK1xcdHJldHVybiBwcmVwO1xcbit9XFxuK1xcbit2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXFxuK3tcXG4rXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cHJlcC1cXHUwMDNlbGlzdCwgXFx1MDAyNnAtXFx1MDAzZXByZXBzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fZGVsX3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKnApXFxuK3tcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNnAtXFx1MDAzZWxpc3QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKnApXFxuK3tcXG4rXFx0a2ZyZWUocCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqcClcXG4re1xcbitcXHRkYW1vbl9kZWxfcHJlcChwKTtcXG4rXFx0ZGFtb25fZnJlZV9wcmVwKHApO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX250aF9wcmVwKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XFxuK1xcdGludCBpID0gMDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcCkge1xcbitcXHRcXHRpZiAoaSsrID09IG4pXFxuK1xcdFxcdFxcdHJldHVybiBwcmVwO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJlcChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xcbitcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpIHtcXG4rXFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJlcChwcmVwLCBwcm9iZSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG4gXFx0XFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcXG4ge1xcbkBAIC0xNjcsNiArMjI0LDcgQEAgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcXG4gXFx0aWYgKCFwKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0cC1cXHUwMDNld2VpZ2h0ID0gMDtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnAtXFx1MDAzZXByZXBzKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnAtXFx1MDAzZWZpbHRlcnMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cC1cXHUwMDNlbGlzdCk7XFxuIFxcdHJldHVybiBwO1xcbkBAIC0xODQsOCArMjQyLDExIEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RlbF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxuIFxcbiBzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG4ge1xcbitcXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcCwgKnByZXBfbmV4dDtcXG4gXFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZiwgKm5leHQ7XFxuIFxcbitcXHRkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUocHJlcCwgcHJlcF9uZXh0LCBwKVxcbitcXHRcXHRkYW1vbl9mcmVlX3ByZXAocHJlcCk7XFxuIFxcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcl9zYWZlKGYsIG5leHQsIHApXFxuIFxcdFxcdGRhbW9uX2ZyZWVfZmlsdGVyKGYpO1xcbiBcXHRrZnJlZShwKTtcXG5AQCAtMTY2Niw2ICsxNzI3LDM2IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpkc3QsIHN0cnVjdCBkYW1vbl9wcmVwICpzcmMpXFxuK3tcXG4rXFx0ZHN0LVxcdTAwM2VhY3Rpb24gPSBzcmMtXFx1MDAzZWFjdGlvbjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcmVwICpkc3RfcHJlcCwgKm5leHQsICpzcmNfcHJlcCwgKm5ld19wcmVwO1xcbitcXHRpbnQgaSA9IDAsIGogPSAwO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJlcF9zYWZlKGRzdF9wcmVwLCBuZXh0LCBkc3QpIHtcXG4rXFx0XFx0c3JjX3ByZXAgPSBkYW1vbl9udGhfcHJlcChpKyssIHNyYyk7XFxuK1xcdFxcdGlmIChzcmNfcHJlcClcXG4rXFx0XFx0XFx0ZGFtb25fY29tbWl0X3ByZXAoZHN0X3ByZXAsIHNyY19wcmVwKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3ByZXAoZHN0X3ByZXApO1xcbitcXHR9XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUoc3JjX3ByZXAsIG5leHQsIHNyYykge1xcbitcXHRcXHRpZiAoaisrIFxcdTAwM2MgaSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRuZXdfcHJlcCA9IGRhbW9uX25ld19wcmVwKHNyY19wcmVwLVxcdTAwM2VhY3Rpb24pO1xcbitcXHRcXHRpZiAoIW5ld19wcmVwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0ZGFtb25fYWRkX3ByZXAoZHN0LCBuZXdfcHJlcCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXFxuIHtcXG5AQCAtMTcyNCw2ICsxODE1LDkgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbiBcXHRcXHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSsrLCBzcmMpO1xcbiBcXHRcXHRpZiAoc3JjX3Byb2JlKSB7XFxuIFxcdFxcdFxcdGRzdF9wcm9iZS1cXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuK1xcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9wcmVwcyhkc3RfcHJvYmUsIHNyY19wcm9iZSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTc0MSw2ICsxODM1LDkgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0ZGFtb25fYWRkX3Byb2JlKGRzdCwgbmV3X3Byb2JlKTtcXG4gXFx0XFx0bmV3X3Byb2JlLVxcdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXFx1MDAzZXdlaWdodDtcXG4rXFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3ByZXBzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC0zNzg1LDYgKzM4ODIsNyBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0X29wc191cGRhdGVfc2lzID0gY3R4LVxcdTAwM2VuZXh0X29wc191cGRhdGVfc2lzO1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsO1xcbiBcXHRcXHRib29sIGFjY2Vzc19jaGVja19kaXNhYmxlZCA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XFxuK1xcdFxcdGJvb2wgaGFzX3ByZXAgPSBkYW1vbl9oYXNfcHJlcChjdHgpO1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XFxuIFxcdFxcdGJvb2wgZ2V0X21heF93c3VtO1xcbiBcXG5AQCAtMzc5Myw2ICszODkxLDggQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuIFxcbiBcXHRcXHRpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCBcXHUwMDI2XFx1MDAyNiBjdHgtXFx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MpXFxuIFxcdFxcdFxcdGN0eC1cXHUwMDNlb3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcyhjdHgpO1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VvcHMucHJlcF9wcm9iZXMpXFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlb3BzLnByZXBfcHJvYmVzKGN0eCwgaGFzX3ByZXApO1xcbiBcXG4gXFx0XFx0a2RhbW9uZF91c2xlZXAoc2FtcGxlX2ludGVydmFsKTtcXG4gXFx0XFx0Y3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscysrO1xcbkBAIC0zODA3LDcgKzM5MDcsOCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRnZXRfbWF4X3dzdW0gPSBmYWxzZTtcXG4gXFx0XFx0XFx0bWF4X3dzdW0gPSBjdHgtXFx1MDAzZW9wcy5hcHBseV9wcm9iZXMoY3R4LFxcbi1cXHRcXHRcXHRcXHRcXHRhY2Nlc3NfY2hlY2tfZGlzYWJsZWQsIGdldF9tYXhfd3N1bSk7XFxuK1xcdFxcdFxcdFxcdFxcdGFjY2Vzc19jaGVja19kaXNhYmxlZCBcXHUwMDI2XFx1MDAyNiAhaGFzX3ByZXAsXFxuK1xcdFxcdFxcdFxcdFxcdGdldF9tYXhfd3N1bSk7XFxuIFxcdFxcdFxcdGlmIChnZXRfbWF4X3dzdW0pXFxuIFxcdFxcdFxcdFxcdG1heF9tZXJnZV9zY29yZSA9IG1heF93c3VtO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXFxuaW5kZXggNWE2YTc4MDU0Nzg0YWYuLjhkOGZjZDEzNjllNTY4IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXFxuQEAgLTEwNSw2ICsxMDUsNDAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiBtYXhfbnJfYWNjZXNzZXM7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3ByZXAgKnA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcmVwKHAsIHByb2JlKSB7XFxuK1xcdFxcdHN3aXRjaCAocC1cXHUwMDNlYWN0aW9uKSB7XFxuK1xcdFxcdGNhc2UgREFNT05fUFJFUF9TRVRfUEdJRExFOlxcbitcXHRcXHRcXHRkYW1vbl9wYV9ta29sZChkYW1vbl9wYV9waHlzX2FkZHIoci1cXHUwMDNlc2FtcGxpbmdfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQpKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuK1xcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcXG4rXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4rXFx0XFx0XFx0aWYgKHNldF9zYW1wbGVzKVxcbitcXHRcXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXFx1MDAzZWFyLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbitcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXFxuK1xcdFxcdFxcdFxcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbkBAIC0xMzIsNiArMTY2LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuIFxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlxcbitcXHRcXHRpZiAoIWZvbGlvKVxcbitcXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bWF0Y2hlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQ0MCw2ICs0ODAsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxcbiBcXHRcXHQudXBkYXRlID0gTlVMTCxcXG4gXFx0XFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcXG4gXFx0XFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMsXFxuK1xcdFxcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3BhX3ByZXBfcHJvYmVzLFxcbiBcXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxcbiBcXHRcXHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcXG4gXFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBlMzg1OGZmYWI0YjIyNy4uZDQ0ZDViYjllOGZiZjggMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5AQCAtNzUwLDYgKzc1MCwyMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2t0eXBlID0ge1xcbiBcXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ3JvdXBzLFxcbiB9O1xcbiBcXG4rLypcXG4rICogcHJlcCBkaXJlY3RvcnlcXG4rICovXFxuK1xcbitzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCB7XFxuK1xcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuK1xcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpkYW1vbl9zeXNmc19wcmVwX2FsbG9jKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXA7XFxuK1xcbitcXHRwcmVwID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXApO1xcbitcXHRpZiAoIXByZXApXFxuK1xcdFxcdHJldHVybiBwcmVwO1xcbitcXHRwcmVwLVxcdTAwM2VhY3Rpb24gPSBEQU1PTl9QUkVQX1NFVF9QR0lETEU7XFxuK1xcdHJldHVybiBwcmVwO1xcbit9XFxuK1xcbitzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSB7XFxuK1xcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xcbitcXHRjaGFyICpuYW1lO1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lXFxuK2RhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWVzW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0LmFjdGlvbiA9IERBTU9OX1BSRVBfU0VUX1BHSURMRSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwic2V0X3BnaWRsZVxcXCIsXFxuK1xcdH0sXFxuK307XFxuK1xcbitzdGF0aWMgc3NpemVfdCBwcmVwX2FjdGlvbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbitcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqcHJlcCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbitcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCwga29iaik7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWUgKmFjdGlvbl9uYW1lO1xcbitcXG4rXFx0XFx0YWN0aW9uX25hbWUgPSBcXHUwMDI2ZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXNbaV07XFxuK1xcdFxcdGlmIChhY3Rpb25fbmFtZS1cXHUwMDNlYWN0aW9uID09IHByZXAtXFx1MDAzZWFjdGlvbilcXG4rXFx0XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIGFjdGlvbl9uYW1lLVxcdTAwM2VuYW1lKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gLUVJTlZBTDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgcHJlcF9hY3Rpb25fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXAgPSBjb250YWluZXJfb2Yoa29iaixcXG4rXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAsIGtvYmopO1xcbitcXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWUgKmFjdGlvbl9uYW1lO1xcbitcXG4rXFx0XFx0YWN0aW9uX25hbWUgPSBcXHUwMDI2ZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXNbaV07XFxuK1xcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIGFjdGlvbl9uYW1lLVxcdTAwM2VuYW1lKSkge1xcbitcXHRcXHRcXHRwcmVwLVxcdTAwM2VhY3Rpb24gPSBhY3Rpb25fbmFtZS1cXHUwMDNlYWN0aW9uO1xcbitcXHRcXHRcXHRyZXQgPSBjb3VudDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXAgPSBjb250YWluZXJfb2Yoa29iaixcXG4rXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAsIGtvYmopO1xcbitcXG4rXFx0a2ZyZWUocHJlcCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcHJlcF9wcmVwX2FjdGlvbl9hdHRyID1cXG4rXFx0XFx0X19BVFRSX1JXX01PREUocHJlcF9hY3Rpb24sIDA2MDApO1xcbitcXG4rc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3ByZXBfYXR0cnNbXSA9IHtcXG4rXFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3ByZXBfcHJlcF9hY3Rpb25fYXR0ci5hdHRyLFxcbitcXHROVUxMLFxcbit9O1xcbitBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3ByZXApO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJlcF9rdHlwZSA9IHtcXG4rXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2UsXFxuK1xcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxuK1xcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3ByZXBfZ3JvdXBzLFxcbit9O1xcbitcXG4rLypcXG4rICogcHJlcHMgZGlyZWN0b3J5XFxuKyAqL1xcbitcXG4rc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzIHtcXG4rXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKipwcmVwc19hcnI7XFxuK1xcdGludCBucjtcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKmRhbW9uX3N5c2ZzX3ByZXBzX2FsbG9jKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqKnByZXBzX2FyciA9IHByZXBzLVxcdTAwM2VwcmVwc19hcnI7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHByZXBzLVxcdTAwM2VucjsgaSsrKSB7XFxuK1xcdFxcdGtvYmplY3RfZGVsKFxcdTAwMjZwcmVwc19hcnJbaV0tXFx1MDAzZWtvYmopO1xcbitcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2cHJlcHNfYXJyW2ldLVxcdTAwM2Vrb2JqKTtcXG4rXFx0fVxcbitcXHRwcmVwcy1cXHUwMDNlbnIgPSAwO1xcbitcXHRrZnJlZShwcmVwc19hcnIpO1xcbitcXHRwcmVwcy1cXHUwMDNlcHJlcHNfYXJyID0gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkYW1vbl9zeXNmc19wcmVwc19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzLFxcbitcXHRcXHRpbnQgbnJfcHJlcHMpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKipwcmVwc19hcnIsICpwcmVwO1xcbitcXHRpbnQgZXJyLCBpO1xcbitcXG4rXFx0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7XFxuK1xcdGlmICghbnJfcHJlcHMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cHJlcHNfYXJyID0ga21hbGxvY19vYmpzKCpwcmVwc19hcnIsIG5yX3ByZXBzLFxcbitcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0aWYgKCFwcmVwc19hcnIpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRwcmVwcy1cXHUwMDNlcHJlcHNfYXJyID0gcHJlcHNfYXJyO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ByZXBzOyBpKyspIHtcXG4rXFx0XFx0cHJlcCA9IGRhbW9uX3N5c2ZzX3ByZXBfYWxsb2MoKTtcXG4rXFx0XFx0aWYgKCFwcmVwKSB7XFxuK1xcdFxcdFxcdGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMocHJlcHMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXFx1MDAyNnByZXAtXFx1MDAzZWtvYmosXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9zeXNmc19wcmVwX2t0eXBlLCBcXHUwMDI2cHJlcHMtXFx1MDAzZWtvYmosIFxcXCIlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdGkpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZwcmVwLVxcdTAwM2Vrb2JqKTtcXG4rXFx0XFx0XFx0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7XFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHByZXBzX2FycltpXSA9IHByZXA7XFxuK1xcdFxcdHByZXBzLVxcdTAwM2VucisrO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBucl9wcmVwc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuK1xcdFxcdGNoYXIgKmJ1ZilcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzID0gY29udGFpbmVyX29mKGtvYmosXFxuK1xcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcywga29iaik7XFxuK1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgcHJlcHMtXFx1MDAzZW5yKTtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgbnJfcHJlcHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcztcXG4rXFx0aW50IG5yLCBlcnIgPSBrc3RydG9pbnQoYnVmLCAwLCBcXHUwMDI2bnIpO1xcbitcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0aWYgKG5yIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRwcmVwcyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopO1xcbitcXG4rXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0ZXJyID0gZGFtb25fc3lzZnNfcHJlcHNfYWRkX2RpcnMocHJlcHMsIG5yKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJldHVybiBjb3VudDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJlcHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG4re1xcbitcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzLCBrb2JqKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcHJlcHNfbnJfYXR0ciA9XFxuK1xcdFxcdF9fQVRUUl9SV19NT0RFKG5yX3ByZXBzLCAwNjAwKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19wcmVwc19hdHRyc1tdID0ge1xcbitcXHRcXHUwMDI2ZGFtb25fc3lzZnNfcHJlcHNfbnJfYXR0ci5hdHRyLFxcbitcXHROVUxMLFxcbit9O1xcbitBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3ByZXBzKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlID0ge1xcbitcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2UsXFxuK1xcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxuK1xcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3ByZXBzX2dyb3VwcyxcXG4rfTtcXG4rXFxuIC8qXFxuICAqIGZpbHRlciBkaXJlY3RvcnlcXG4gICovXFxuQEAgLTc4Miw2ICs5OTUsMTAgQEAgZGFtb25fc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcXG4gXFx0XFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcXG4gXFx0XFx0Lm5hbWUgPSBcXFwibWVtY2dcXFwiLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VULFxcbitcXHRcXHQubmFtZSA9IFxcXCJwZ2lkbGVfdW5zZXRcXFwiLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbkBAIC0xMDY2LDYgKzEyODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlID0ge1xcbiBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUge1xcbiBcXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbiBcXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzO1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVycztcXG4gfTtcXG4gXFxuQEAgLTEwNzYsMjUgKzEyOTQsNTAgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSAqZGFtb25fc3lzZnNfcHJvYmVfYWxsb2Modm9pZClcXG4gXFxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcHJvYmVfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSlcXG4ge1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzO1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVycztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGZpbHRlcnMgPSBkYW1vbl9zeXNmc19maWx0ZXJzX2FsbG9jKCk7XFxuLVxcdGlmICghZmlsdGVycylcXG4rXFx0cHJlcHMgPSBkYW1vbl9zeXNmc19wcmVwc19hbGxvYygpO1xcbitcXHRpZiAoIXByZXBzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cHJvYmUtXFx1MDAzZXByZXBzID0gcHJlcHM7XFxuK1xcbitcXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcXHUwMDI2cHJlcHMtXFx1MDAzZWtvYmosIFxcdTAwMjZkYW1vbl9zeXNmc19wcmVwc19rdHlwZSxcXG4rXFx0XFx0XFx0XFx1MDAyNnByb2JlLVxcdTAwM2Vrb2JqLCBcXFwicHJlcHNcXFwiKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBwdXRfcHJlcHNfb3V0O1xcbitcXG4rXFx0ZmlsdGVycyA9IGRhbW9uX3N5c2ZzX2ZpbHRlcnNfYWxsb2MoKTtcXG4rXFx0aWYgKCFmaWx0ZXJzKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZGVsX3ByZXBzX291dDtcXG4rXFx0fVxcbiBcXHRwcm9iZS1cXHUwMDNlZmlsdGVycyA9IGZpbHRlcnM7XFxuIFxcbiBcXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcXHUwMDI2ZmlsdGVycy1cXHUwMDNla29iaiwgXFx1MDAyNmRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUsXFxuIFxcdFxcdFxcdFxcdTAwMjZwcm9iZS1cXHUwMDNla29iaiwgXFxcImZpbHRlcnNcXFwiKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2ZmlsdGVycy1cXHUwMDNla29iaik7XFxuLVxcdFxcdHByb2JlLVxcdTAwM2VmaWx0ZXJzID0gTlVMTDtcXG4tXFx0fVxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIHB1dF9maWx0ZXJzX291dDtcXG4rXFx0cmV0dXJuIGVycjtcXG4rXFxuK3B1dF9maWx0ZXJzX291dDpcXG4rXFx0a29iamVjdF9wdXQoXFx1MDAyNmZpbHRlcnMtXFx1MDAzZWtvYmopO1xcbitcXHRwcm9iZS1cXHUwMDNlZmlsdGVycyA9IE5VTEw7XFxuK2RlbF9wcmVwc19vdXQ6XFxuK1xcdGtvYmplY3RfZGVsKFxcdTAwMjZwcmVwcy1cXHUwMDNla29iaik7XFxuK3B1dF9wcmVwc19vdXQ6XFxuK1xcdGtvYmplY3RfcHV0KFxcdTAwMjZwcmVwcy1cXHUwMDNla29iaik7XFxuK1xcdHByb2JlLVxcdTAwM2VwcmVwcyA9IE5VTEw7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Byb2JlX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSlcXG4ge1xcbitcXHRpZiAocHJvYmUtXFx1MDAzZXByZXBzKSB7XFxuK1xcdFxcdGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMocHJvYmUtXFx1MDAzZXByZXBzKTtcXG4rXFx0XFx0a29iamVjdF9wdXQoXFx1MDAyNnByb2JlLVxcdTAwM2VwcmVwcy1cXHUwMDNla29iaik7XFxuK1xcdH1cXG4gXFx0aWYgKHByb2JlLVxcdTAwM2VmaWx0ZXJzKSB7XFxuIFxcdFxcdGRhbW9uX3N5c2ZzX2ZpbHRlcnNfcm1fZGlycyhwcm9iZS1cXHUwMDNlZmlsdGVycyk7XFxuIFxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZwcm9iZS1cXHUwMDNlZmlsdGVycy1cXHUwMDNla29iaik7XFxuQEAgLTE5MzMsNiArMjE3NiwyMyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdHJldHVybiBkYW1vbl9zZXRfYXR0cnMoY3R4LCBcXHUwMDI2YXR0cnMpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnN5c19wcmVwcylcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzeXNfcHJlcHMtXFx1MDAzZW5yOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnN5c19wcmVwID0gc3lzX3ByZXBzLVxcdTAwM2VwcmVwc19hcnJbaV07XFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xcbitcXG4rXFx0XFx0cHJlcCA9IGRhbW9uX25ld19wcmVwKHN5c19wcmVwLVxcdTAwM2VhY3Rpb24pO1xcbitcXHRcXHRpZiAoIXByZXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRkYW1vbl9hZGRfcHJlcChwcm9iZSwgcHJlcCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSxcXG4gXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKnN5c19maWx0ZXJzKVxcbiB7XFxuQEAgLTE5NjgsNyArMjIyOCwxNSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnN5c19wcm9iZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqc3lzX2ZpbHRlcnM7XFxuK1xcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqc3lzX3ByZXBzO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4rXFx0c3lzX3ByZXBzID0gc3lzX3Byb2JlLVxcdTAwM2VwcmVwcztcXG4rXFx0aWYgKHN5c19wcmVwcykge1xcbitcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJlcHMocHJvYmUsIHN5c19wcmVwcyk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4gXFx0c3lzX2ZpbHRlcnMgPSBzeXNfcHJvYmUtXFx1MDAzZWZpbHRlcnM7XFxuIFxcdGlmICghc3lzX2ZpbHRlcnMpXFxuIFxcdFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXFxuaW5kZXggZjdmYjk0Yjg0ZTcxNmQuLmRkZWJkZTZlZGFiZTRlIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcXG5AQCAtMzYxLDYgKzM2MSwzMiBAQCB0ZXN0X2ludGVydmFscygpXFxuIFxcdHRlc3RfaW50ZXJ2YWxzX2dvYWwgXFxcIiRpbnRlcnZhbHNfZGlyL2ludGVydmFsc19nb2FsXFxcIlxcbiB9XFxuIFxcbit0ZXN0X2RhbW9uX3ByZXAoKVxcbit7XFxuK1xcdGRhbW9uX3ByZXBfZGlyPSQxXFxuK1xcdGVuc3VyZV9maWxlIFxcXCIkZGFtb25fcHJlcF9kaXIvcHJlcF9hY3Rpb25cXFwiIFxcXCJleGlzdFxcXCIgXFxcIjYwMFxcXCJcXG4rXFx0ZW5zdXJlX3dyaXRlX3N1Y2MgXFxcIiRkYW1vbl9wcmVwX2Rpci9wcmVwX2FjdGlvblxcXCIgXFxcInNldF9wZ2lkbGVcXFwiIFxcXFxcXG4rXFx0XFx0XFxcInZhbGlkIGlucHV0XFxcIlxcbitcXHRlbnN1cmVfd3JpdGVfZmFpbCBcXFwiJGRhbW9uX3ByZXBfZGlyL3ByZXBfYWN0aW9uXFxcIiBcXFwiZm9vXFxcIiBcXFwiaW52YWxpZCBpbnB1dFxcXCJcXG4rfVxcbitcXG4rdGVzdF9kYW1vbl9wcmVwcygpXFxuK3tcXG4rXFx0cHJlcHNfZGlyPSQxXFxuK1xcdGVuc3VyZV9kaXIgXFxcIiRwcmVwc19kaXJcXFwiIFxcXCJleGlzdFxcXCJcXG4rXFx0ZW5zdXJlX2ZpbGUgXFxcIiRwcmVwc19kaXIvbnJfcHJlcHNcXFwiIFxcXCJleGlzdFxcXCIgXFxcIjYwMFxcXCJcXG4rXFx0ZW5zdXJlX3dyaXRlX3N1Y2MgXFxcIiRwcmVwc19kaXIvbnJfcHJlcHNcXFwiIFxcXCIxXFxcIiBcXFwidmFsaWQgaW5wdXRcXFwiXFxuK1xcdHRlc3RfZGFtb25fcHJlcCBcXFwiJHByZXBzX2Rpci8wXFxcIlxcbitcXG4rXFx0ZW5zdXJlX3dyaXRlX3N1Y2MgIFxcXCIkcHJlcHNfZGlyL25yX3ByZXBzXFxcIiBcXFwiMlxcXCIgXFxcInZhbGlkIGlucHV0XFxcIlxcbitcXHR0ZXN0X2RhbW9uX3ByZXAgXFxcIiRwcmVwc19kaXIvMFxcXCJcXG4rXFx0dGVzdF9kYW1vbl9wcmVwIFxcXCIkcHJlcHNfZGlyLzFcXFwiXFxuK1xcbitcXHRlbnN1cmVfd3JpdGVfc3VjYyBcXFwiJHByZXBzX2Rpci9ucl9wcmVwc1xcXCIgXFxcIjBcXFwiIFxcXCJ2YWxpZCBpbnB1dFxcXCJcXG4rXFx0ZW5zdXJlX2RpciBcXFwiJHByZXBzX2Rpci8wXFxcIiBcXFwibm90X2V4aXN0XFxcIlxcbitcXHRlbnN1cmVfZGlyIFxcXCIkcHJlcHNfZGlyLzFcXFwiIFxcXCJub3RfZXhpc3RcXFwiXFxuK31cXG4rXFxuIHRlc3RfZGFtb25fZmlsdGVyKClcXG4ge1xcbiBcXHRkYW1vbl9maWx0ZXJfZGlyPSQxXFxuQEAgLTM5Miw2ICs0MTgsNyBAQCB0ZXN0X3Byb2JlKClcXG4ge1xcbiBcXHRwcm9iZV9kaXI9JDFcXG4gXFx0ZW5zdXJlX2RpciBcXFwiJHByb2JlX2RpclxcXCIgXFxcImV4aXN0XFxcIlxcbitcXHR0ZXN0X2RhbW9uX3ByZXBzIFxcXCIkcHJvYmVfZGlyL3ByZXBzXFxcIlxcbiBcXHR0ZXN0X2RhbW9uX2ZpbHRlcnMgXFxcIiRwcm9iZV9kaXIvZmlsdGVyc1xcXCJcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTM6NTguODg3OTM4NzQyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5NzE4NzE3NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25ld19wcmVwXCIsXG4gICAgXCJkYW1vbl9hZGRfcHJlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgREFNT04gc3Vic3lzdGVtLCBhbGxvd2luZyB1c2VycyB0byBjb25maWd1cmUgcHJvYmluZyBwcmVwYXJhdGlvbiBhY3Rpb25zIChlLmcuLCBgc2V0X3BnaWRsZWApIGFuZCBhIG5ldyBmaWx0ZXIgdHlwZSAoYHBnaWRsZV91bnNldGApIHZpYSBzeXNmcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGNhYjhmMTMxNDViMzZlYWE1MjU3ZWU0MmJmOGM2NWZmOTUwMzQyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE4OjUzOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuaW5kZXggZTY3NWE1NzE0NWUzNmQuLjZkNTk2ZmI3ZmExZmZhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5AQCAtMTczLDYgKzE3MywxOSBAQCBDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4gRGVzY3JpcHRpb246XHRXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlXG4gXHRcdHBlci1wcm9iZSBhdHRyaWJ1dGUgd2VpZ2h0LlxuIFxuK1doYXQ6XHRcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1x1MDAzY0tcdTAwM2UvY29udGV4dHMvXHUwMDNjQ1x1MDAzZS9tb25pdG9yaW5nX2F0dHJzL3Byb2Jlcy9cdTAwM2NQXHUwMDNlL3ByZXBzL25yX3ByZXBzXG4rRGF0ZTpcdFx0SnVuIDIwMjZcbitDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4rRGVzY3JpcHRpb246XHRXcml0aW5nIGEgbnVtYmVyICdOJyB0byB0aGlzIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mXG4rXHRcdGRpcmVjdG9yaWVzIGZvciBlYWNoIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uIG5hbWVkICcwJ1xuK1x0XHR0byAnTi0xJyB1bmRlciB0aGUgcHJlcHMvIGRpcmVjdG9yeS5cbitcbitXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXHUwMDNjUFx1MDAzZS9wcmVwL1x1MDAzY1JcdTAwM2UvYWN0aW9uXG4rRGF0ZTpcdFx0SnVuIDIwMjZcbitDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4rRGVzY3JpcHRpb246XHRXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlIHByb2JpbmdcbitcdFx0cHJlZXBhcmF0aW9uIGFjdGlvbi5cbitcbiBXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXHUwMDNjUFx1MDAzZS9maWx0ZXJzL25yX2ZpbHRlcnNcbiBEYXRlOlx0XHRNYXkgMjAyNlxuIENvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCBkYTVmOWFmZDA4YWVmOC4uMWY1YTM5ZTFmYzM4ZGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbkBAIC03NCw2ICs3NCw5IEBAIGNvbW1hIChcIixcIikuXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIG5yX3JlZ2lvbnMvbWluLG1heFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBwcm9iZXMgXHUwMDNjZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzXHUwMDNlYC9ucl9wcm9iZXNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvd2VpZ2h0XG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgcHJlcHMvbnJfcHJlcHNcbisgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9wcmVwX2FjdGlvblxuKyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBmaWx0ZXJzL25yX2ZpbHRlcnNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGhcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uXG5AQCAtMjgzLDkgKzI4NiwxOCBAQCBJbiB0aGUgYmVnaW5uaW5nLCB0aGlzIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcm9iZXNgYC4gIFdyaXRpbmcgYVxuIG51bWJlciAoYGBOYGApIHRvIHRoZSBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZiBjaGlsZCBkaXJlY3RvcmllcyBuYW1lZCBgYDBgYFxuIHRvIGBgTi0xYGAuICBFYWNoIGRpcmVjdG9yeSByZXByZXNlbnRzIGVhY2ggbW9uaXRvcmluZyBwcm9iZS5cbiBcbi1JbiBlYWNoIHByb2JlIGRpcmVjdG9yeSwgb25lIGRpcmVjdG9yeSwgYGBmaWx0ZXJzYGAgZXhpc3RzLiAgVGhlIGRpcmVjdG9yeVxuLWNvbnRhaW5zIGZpbGVzIGZvciBpbnN0YWxsaW5nIGZpbHRlcnMgZm9yIHRoZSBwcm9iZSwgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZVxuLXRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlIHByb2JlLlxuK0luIGVhY2ggcHJvYmUgZGlyZWN0b3J5LCB0d28gZGlyZWN0b3JpZXMsIGBgcHJlcHNgYCBhbmQgYGBmaWx0ZXJzYGAgZXhpc3RzLlxuK1RoZSBkaXJlY3RvcmllcyBjb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgYW5kXG4rZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlXG4rcHJvYmUuXG4rXG4rSW4gdGhlIGJlZ2lubmluZywgYGBwcmVwc2BgIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcmVwc2BgLlxuK1dyaXRpaW5nIGEgbnVtYmVyIChgYE5gYCkgdG8gdGhlIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mIGNoaWxkIGRpcmVjdG9yaWVzXG4rbmFtZXMgYGAwYGAgdG8gYGBOLTFgYC4gIEVhY2ggZGlyZWN0b3J5IHJlcHJlc2VudHMgZWFjaCBwcmVwYXJhdGlvbiBhY3Rpb24uXG4rRWFjaCBkaXJlY3RvcnkgaGFzIG9uZSBmaWxlLCBgYHByZXBfYWN0aW9uYGAuICBUaGUgcHJlcGFyYXRpb24gYWN0aW9uIGNhbiBiZVxuK3NlbGVjdGVkIGJ5IHdyaXRpbmcgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byB0aGUgYGBwcmVwX2FjdGlvbmBgIGZpbGUuICBSZWZlclxuK3RvIHRoZSA6cmVmOmBkZXNpZ24gZG9jIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcdTAwM2VgIGZvciB0aGUgbGlzdCBvZlxuK3N1cHBvcnRlZCBhY3Rpb25zLlxuIFxuIEVhY2ggcHJvYmUgZGlyZWN0b3J5IGFsc28gY29udGFpbnMgYGB3ZWlnaHRgYCBmaWxlLiAgUmVhZGluZyBmcm9tIGFuZCB3cml0aW5nXG4gdG8gdGhlIGZpbGUgZ2V0cyBhbmQgc2V0cyB0aGUgOnJlZjpgYXR0cmlidXRlcy1vbmx5IG1vbml0b3JpbmdcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbmluZGV4IGFlZDZjYjFjZjQ4MzEwLi4wNmZmZmU1ZTM3ODE5ZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtMjkzLDggKzI5MywxNCBAQCByZWdpc3RyYXRpb24gaXMgbWFkZSBieSBzcGVjaWZ5aW5nIGEgcHJvYmUgcGVyIGF0dHJpYnV0ZS4gIEVhY2ggb2YgdGhlIHByb2JlXG4gc3BlY2lmaWVzIGEgcnVsZSB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbiBtZW1vcnkgcmVnaW9uIGhhcyB0aGUgcmVsYXRlZFxuIGF0dHJpYnV0ZS4gIFRoZSBydWxlIGlzIGNvbnN0cnVjdGVkIHdpdGggbXVsdGlwbGUgZmlsdGVycy4gIFRoZSBmaWx0ZXJzIHdvcmtcbiBzYW1lIHRvIDpyZWY6YERBTU9TIGZpbHRlcnMgXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnNcdTAwM2VgIGV4Y2VwdCB0aGUgc3VwcG9ydGVkXG4tZmlsdGVyIHR5cGVzLiAgQ3VycmVudGx5IG9ubHkgYGBhbm9uYGAgYW5kIGBgbWVtY2dgYCBmaWx0ZXIgdHlwZXMgYXJlIHN1cHBvcnRlZFxuLWZvciBkYXRhIGF0dHJpYnV0ZXMgbW9uaXRvcmluZy5cbitmaWx0ZXIgdHlwZXMuICBDdXJyZW50bHkgYmVsb3cgZml0bGVyIHR5cGVzIGFyZSBzdXBwb3J0ZWQuXG4rXG4rLSBgYGFub25gYDogU2FtZSB0byB0aGF0IGZvciBEQU1PUyBmaWx0ZXJzLlxuKy0gYGBtZW1jZ2BgOiBTYW1lIHRvIHRoYXQgZm9yIERBTU9TIGZpbHRlcnMuXG4rLSBgYHBnaWRsZV91bnNldGBgOiBNYXRjaGVzIGlmIHRoZSBwYWdlIGZvciB0aGUgbWVtb3J5IGlzIG1hcmtlZCBhcyBub3RcbisgIGFjY2Vzcy1pZGxlLlxuKyAgTWF0Y2hlcyBpZiB0aGUgbWVtb3J5IGlzIG5vdCBiYWNrZWQgYnkgcGFnZXMgdGhhdCBEQU1PTiBjYW4gaWRuZXRpZnlcbisgIGlkbGVuZXNzLlxuIFxuIElmIHN1Y2ggcHJvYmVzIGFyZSByZWdpc3RlcmVkLCBEQU1PTiBleGVjdXRlcyB0aGUgcHJvYmVzIGZvciBlYWNoIHJlZ2lvbidzXG4gc2FtcGxpbmcgbWVtb3J5IHdoZW4gaXQgZG9lcyB0aGUgYWNjZXNzIDpyZWY6YHNhbXBsaW5nXG5AQCAtMzA1LDYgKzMxMSwxMyBAQCBVc2VycyBjYW4gdGhlcmVmb3JlIGtub3cgaG93IG11Y2ggb2YgYSBnaXZlbiBEQU1PTiByZWdpb24gaGFzIGEgc3BlY2lmaWMgZGF0YVxuIGF0dHJpYnV0ZSBieSByZWFkaW5nIHRoZSBwZXItcmVnaW9uIHBlci1wcm9iZSBwcm9iZSBoaXRzIGNvdW50ZXIgYWZ0ZXIgZWFjaFxuIGFnZ3JlZ2F0aW9uIGludGVydmFsLlxuIFxuK1VzZXJzIGNhbiBvcHRpb25hbGx5IHJlZ2lzdGVyIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9ucyBwZXIgcHJvYmUuICBJZiBzdWNoXG4rYWN0aW9ucyBhcmUgcmVnaXN0ZXJlZCwgREFNT04gYXBwbGllcyB0aGUgYWN0aW9ucyB0byBlYWNoIHJlZ2lvbidzIHNhbXBsaW5nXG4rbWVtb3J5IGJlZm9yZSBzdGFydGluZyB0aGUgbmV4dCBzYW1wbGluZyBpbnRlcnZhbC4gIEN1cnJlbnRseSBvbmx5IG9uZSBhY3Rpb24sXG4rYGBzZXRfcGdpZGxlYGAgaXMgc3VwcG9ydGVkLiAgVGhlIGFjdGlvbiBtYXJrcyB0aGUgcGFnZSBmb3IgdGhlIHByb2JpbmcgdGFyZ2V0XG4rbWVtb3J5IGFzIGFjY2Vzcy1pZGxlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aFxuK2BgcGdpZGxlX3Vuc2V0YGAgcHJvYmUgZmlsdGVyLlxuK1xuIFRoaXMgaXMgYSBzYW1wbGluZyBiYXNlZCBtZWNoYW5pc20uICBIZW5jZSwgaXQgaXMgbGlnaHR3ZWlnaHQgYnV0IHRoZSBvdXRwdXRcbiBtYXkgaW5jbHVkZSBzb21lIG1lYXN1cmVtZW50IGVycm9ycy4gIFRoZSBvdXRwdXQgc2hvdWxkIGJlIHVzZWQgd2l0aCBnb29kXG4gdW5kZXJzdGFuZGluZyBvZiBzdGF0aXN0aWNzLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggMGM4YjdkZGVmOWFiYjMuLmZlMmM2YjU2ZDFkNTMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC02MjcsNiArNjI3LDcgQEAgZW51bSBkYW1vbl9vcHNfaWQge1xuICAqIEB1cGRhdGU6XHRcdFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXG4gICogQHByZXBhcmVfYWNjZXNzX2NoZWNrczpcdFByZXBhcmUgbmV4dCBhY2Nlc3MgY2hlY2sgb2YgdGFyZ2V0IHJlZ2lvbnMuXG4gICogQGNoZWNrX2FjY2Vzc2VzOlx0XHRDaGVjayB0aGUgYWNjZXNzZXMgdG8gdGFyZ2V0IHJlZ2lvbnMuXG4rICogQHByZXBfcHJvYmVzOlx0XHRQcmVwYXJlIGFwcGx5aW5nIHByb2JlcyBmb3IgZWFjaCByZWdpb24uXG4gICogQGFwcGx5X3Byb2JlczpcdFx0QXBwbHkgcHJvYmVzIGZvciBlYWNoIHJlZ2lvbi5cbiAgKiBAZ2V0X3NjaGVtZV9zY29yZTpcdFx0R2V0IHRoZSBzY29yZSBvZiBhIHJlZ2lvbiBmb3IgYSBzY2hlbWUuXG4gICogQGFwcGx5X3NjaGVtZTpcdFx0QXBwbHkgYSBEQU1PTi1iYXNlZCBvcGVyYXRpb24gc2NoZW1lLlxuQEAgLTY1NCw2ICs2NTUsOCBAQCBlbnVtIGRhbW9uX29wc19pZCB7XG4gICogbGFzdCBwcmVwYXJhdGlvbiBhbmQgdXBkYXRlIHRoZSBudW1iZXIgb2Ygb2JzZXJ2ZWQgYWNjZXNzZXMgb2YgZWFjaCByZWdpb24uXG4gICogSXQgc2hvdWxkIGFsc28gcmV0dXJuIG1heCBudW1iZXIgb2Ygb2JzZXJ2ZWQgYWNjZXNzZXMgdGhhdCBtYWRlIGFzIGEgcmVzdWx0XG4gICogb2YgaXRzIHVwZGF0ZS4gIFRoZSB2YWx1ZSB3aWxsIGJlIHVzZWQgZm9yIHJlZ2lvbnMgYWRqdXN0bWVudCB0aHJlc2hvbGQuXG4rICogQHByZXBfcHJvYmVzIHNob3VsZCBleGVjdXRlIHJlcXVpcmVkIFx1MDAyNnN0cnVjdCBkYW1vbl9wcmVwIGZvciBuZXh0IFx1MDAyNnN0cnVjdFxuKyAqIGRhbW9uX3Byb2JlIGFwcGxpY2F0aW9ucyB0byBlYWNoIHJlZ2lvbi5cbiAgKiBAYXBwbHlfcHJvYmVzIHNob3VsZCBhcHBseSB0aGUgZGF0YSBhdHRyaWJ1dGUgcHJvYmVzIHRvIGVhY2ggcmVnaW9uIGFuZFxuICAqIGFjY29yZGluZ2x5IHVwZGF0ZSB0aGUgcHJvYmUgaGl0cyBjb3VudGVyIG9mIHRoZSByZWdpb24uICBJdCBzaG91bGQgYWxzb1xuICAqIHNldCBcdTAwMjZkYW1vbl9yZWdpb24tXHUwMDNlc2FtcGxpbmdfYWRkciBvZiBlYWNoIHJlZ2lvbiBpZiBgYHNldF9zYW1wbGVzYGAgaXMgdHJ1ZS5cbkBAIC02NzYsNiArNjc5LDcgQEAgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMge1xuIFx0dm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XG4gXHR2b2lkICgqcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbiBcdHVuc2lnbmVkIGludCAoKmNoZWNrX2FjY2Vzc2VzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbitcdHZvaWQgKCpwcmVwX3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCwgYm9vbCBzZXRfc2FtcGxlcyk7XG4gXHR1bnNpZ25lZCBpbnQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG4gXHRcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pO1xuIFx0aW50ICgqZ2V0X3NjaGVtZV9zY29yZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbkBAIC03MzksMTUgKzc0MywzOCBAQCBzdHJ1Y3QgZGFtb25faW50ZXJ2YWxzX2dvYWwge1xuIFx0dW5zaWduZWQgbG9uZyBtYXhfc2FtcGxlX3VzO1xuIH07XG4gXG4rLyoqXG4rICogZW51bSBkYW1vbl9wcmVwX2FjdGlvbiAtIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uLlxuKyAqXG4rICogQERBTU9OX1BSRVBfU0VUX1BHSURMRTpcdFNldCB0aGUgcHJvYmluZyBtZW1vcnkgYXMgaWRsZSBwYWdlLlxuKyAqL1xuK2VudW0gZGFtb25fcHJlcF9hY3Rpb24ge1xuK1x0REFNT05fUFJFUF9TRVRfUEdJRExFLFxuK307XG4rXG4rLyoqXG4rICogc3RydWN0IGRhbW9uX3ByZXAgLSBEQU1PTiBwcm9iaW5nIHByZXBhcmF0aW9uIHJlcXVlc3QuXG4rICpcbisgKiBAYWN0aW9uOlx0QWN0aW9uIHRvIGRvIHRvIHRoZSBwcm9iaW5nIG1lbW9yeSBmb3IgdGhlIHByZXBhcmF0aW9uLlxuKyAqL1xuK3N0cnVjdCBkYW1vbl9wcmVwIHtcbitcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBzaWJsaW5ncyBsaXN0LiAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK307XG4rXG4gLyoqXG4gICogZW51bSBkYW1vbl9maWx0ZXJfdHlwZSAtIFR5cGUgb2YgXHUwMDI2c3RydWN0IGRhbW9uX2ZpbHRlclxuICAqXG4tICogQERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XHRBbm9ueW1vdXMgcGFnZXMuXG4tICogQERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlx0U3BlY2lmaWMgbWVtY2cncyBwYWdlcy5cbisgKiBAREFNT05fRklMVEVSX1RZUEVfQU5PTjpcdFx0QW5vbnltb3VzIHBhZ2VzLlxuKyAqIEBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcdFx0U3BlY2lmaWMgbWVtY2cncyBwYWdlcy5cbisgKiBAREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlx0UGdpZGxlIGlzIHVuc2V0LlxuICAqL1xuIGVudW0gZGFtb25fZmlsdGVyX3R5cGUge1xuIFx0REFNT05fRklMVEVSX1RZUEVfQU5PTixcbiBcdERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHLFxuK1x0REFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VULFxuIH07XG4gXG4gLyoqXG5AQCAtNzc4LDYgKzgwNSw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xuIHN0cnVjdCBkYW1vbl9wcm9iZSB7XG4gXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xuIC8qIHByaXZhdGU6ICovXG4rXHQvKiBQcmVwYXJhdGlvbiBhY3Rpb25zIHRvIGFwcGx5IHRvIGVhY2ggcHJvYmluZyBtZW1vcnkuICovXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIHByZXBzO1xuIFx0LyogRmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmaWx0ZXJzO1xuIFx0LyogU2libGluZ3MgbGlzdC4gKi9cbkBAIC05NTcsNiArOTg2LDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbiBcdHJldHVybiByLVx1MDAzZWFyLmVuZCAtIHItXHUwMDNlYXIuc3RhcnQ7XG4gfVxuIFxuKyNkZWZpbmUgZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcmVwKSBcXFxuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjYocHJlcCktXHUwMDNlcHJlcHMsIGxpc3QpXG4rXG4rI2RlZmluZSBkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUocCwgbmV4dCwgcHJlcCkgXFxcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBcdTAwMjYocHJlcCktXHUwMDNlcHJlcHMsIGxpc3QpXG4rXG4gI2RlZmluZSBkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkgXFxcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZiwgXHUwMDI2KHApLVx1MDAzZWZpbHRlcnMsIGxpc3QpXG4gXG5AQCAtMTAxMCw2ICsxMDQ1LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3N6X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuIFxuICNpZmRlZiBDT05GSUdfREFNT05cbiBcbitzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbmV3X3ByZXAoZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb24pO1xuK3ZvaWQgZGFtb25fYWRkX3ByZXAoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcCk7XG4rXG4gc3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG4gXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpO1xuIHZvaWQgZGFtb25fYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjA2Li5kNWIxZTBiNTg1MWExYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTExLDYgKzExMSw2MyBAQCBpbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xuK1xuK1x0cHJlcCA9IGttYWxsb2Nfb2JqKCpwcmVwKTtcbitcdGlmICghcHJlcClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRwcmVwLVx1MDAzZWFjdGlvbiA9IGFjdGlvbjtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnByZXAtXHUwMDNlbGlzdCk7XG4rXHRyZXR1cm4gcHJlcDtcbit9XG4rXG4rdm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKVxuK3tcbitcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHJlcC1cdTAwM2VsaXN0LCBcdTAwMjZwLVx1MDAzZXByZXBzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fZGVsX3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKnApXG4re1xuK1x0bGlzdF9kZWwoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxuK3tcbitcdGtmcmVlKHApO1xuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKnApXG4re1xuK1x0ZGFtb25fZGVsX3ByZXAocCk7XG4rXHRkYW1vbl9mcmVlX3ByZXAocCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbnRoX3ByZXAoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcbitcdGludCBpID0gMDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcCkge1xuK1x0XHRpZiAoaSsrID09IG4pXG4rXHRcdFx0cmV0dXJuIHByZXA7XG4rXHR9XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGJvb2wgZGFtb25faGFzX3ByZXAoc3RydWN0IGRhbW9uX2N0eCAqYylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgYykge1xuK1x0XHRkYW1vbl9mb3JfZWFjaF9wcmVwKHByZXAsIHByb2JlKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbiBcdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbiB7XG5AQCAtMTY3LDYgKzIyNCw3IEBAIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXG4gXHRpZiAoIXApXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0cC1cdTAwM2V3ZWlnaHQgPSAwO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cC1cdTAwM2VwcmVwcyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWZpbHRlcnMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiBcdHJldHVybiBwO1xuQEAgLTE4NCw4ICsyNDIsMTEgQEAgc3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbiB7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcCwgKnByZXBfbmV4dDtcbiBcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYsICpuZXh0O1xuIFxuK1x0ZGFtb25fZm9yX2VhY2hfcHJlcF9zYWZlKHByZXAsIHByZXBfbmV4dCwgcClcbitcdFx0ZGFtb25fZnJlZV9wcmVwKHByZXApO1xuIFx0ZGFtb25fZm9yX2VhY2hfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcClcbiBcdFx0ZGFtb25fZnJlZV9maWx0ZXIoZik7XG4gXHRrZnJlZShwKTtcbkBAIC0xNjY2LDYgKzE3MjcsMzYgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpkc3QsIHN0cnVjdCBkYW1vbl9wcmVwICpzcmMpXG4re1xuK1x0ZHN0LVx1MDAzZWFjdGlvbiA9IHNyYy1cdTAwM2VhY3Rpb247XG4rfVxuK1xuK3N0YXRpYyBpbnQgZGFtb25fY29tbWl0X3ByZXBzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnNyYylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqZHN0X3ByZXAsICpuZXh0LCAqc3JjX3ByZXAsICpuZXdfcHJlcDtcbitcdGludCBpID0gMCwgaiA9IDA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUoZHN0X3ByZXAsIG5leHQsIGRzdCkge1xuK1x0XHRzcmNfcHJlcCA9IGRhbW9uX250aF9wcmVwKGkrKywgc3JjKTtcbitcdFx0aWYgKHNyY19wcmVwKVxuK1x0XHRcdGRhbW9uX2NvbW1pdF9wcmVwKGRzdF9wcmVwLCBzcmNfcHJlcCk7XG4rXHRcdGVsc2VcbitcdFx0XHRkYW1vbl9kZXN0cm95X3ByZXAoZHN0X3ByZXApO1xuK1x0fVxuK1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJlcF9zYWZlKHNyY19wcmVwLCBuZXh0LCBzcmMpIHtcbitcdFx0aWYgKGorKyBcdTAwM2MgaSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bmV3X3ByZXAgPSBkYW1vbl9uZXdfcHJlcChzcmNfcHJlcC1cdTAwM2VhY3Rpb24pO1xuK1x0XHRpZiAoIW5ld19wcmVwKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRkYW1vbl9hZGRfcHJlcChkc3QsIG5ld19wcmVwKTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcbiBcdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxuIHtcbkBAIC0xNzI0LDYgKzE4MTUsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRcdHNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShpKyssIHNyYyk7XG4gXHRcdGlmIChzcmNfcHJvYmUpIHtcbiBcdFx0XHRkc3RfcHJvYmUtXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVx1MDAzZXdlaWdodDtcbitcdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbkBAIC0xNzQxLDYgKzE4MzUsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdGRhbW9uX2FkZF9wcm9iZShkc3QsIG5ld19wcm9iZSk7XG4gXHRcdG5ld19wcm9iZS1cdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXHUwMDNld2VpZ2h0O1xuK1x0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4gXHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTM3ODUsNiArMzg4Miw3IEBAIHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuIFx0XHR1bnNpZ25lZCBsb25nIG5leHRfb3BzX3VwZGF0ZV9zaXMgPSBjdHgtXHUwMDNlbmV4dF9vcHNfdXBkYXRlX3NpcztcbiBcdFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsO1xuIFx0XHRib29sIGFjY2Vzc19jaGVja19kaXNhYmxlZCA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XG4rXHRcdGJvb2wgaGFzX3ByZXAgPSBkYW1vbl9oYXNfcHJlcChjdHgpO1xuIFx0XHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XG4gXHRcdGJvb2wgZ2V0X21heF93c3VtO1xuIFxuQEAgLTM3OTMsNiArMzg5MSw4IEBAIHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuIFxuIFx0XHRpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MpXG4gXHRcdFx0Y3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MoY3R4KTtcbitcdFx0aWYgKGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXMpXG4rXHRcdFx0Y3R4LVx1MDAzZW9wcy5wcmVwX3Byb2JlcyhjdHgsIGhhc19wcmVwKTtcbiBcbiBcdFx0a2RhbW9uZF91c2xlZXAoc2FtcGxlX2ludGVydmFsKTtcbiBcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzKys7XG5AQCAtMzgwNyw3ICszOTA3LDggQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0Z2V0X21heF93c3VtID0gZmFsc2U7XG4gXHRcdFx0bWF4X3dzdW0gPSBjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2JlcyhjdHgsXG4tXHRcdFx0XHRcdGFjY2Vzc19jaGVja19kaXNhYmxlZCwgZ2V0X21heF93c3VtKTtcbitcdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiAhaGFzX3ByZXAsXG4rXHRcdFx0XHRcdGdldF9tYXhfd3N1bSk7XG4gXHRcdFx0aWYgKGdldF9tYXhfd3N1bSlcbiBcdFx0XHRcdG1heF9tZXJnZV9zY29yZSA9IG1heF93c3VtO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDVhNmE3ODA1NDc4NGFmLi44ZDhmY2QxMzY5ZTU2OCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0xMDUsNiArMTA1LDQwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIG1heF9ucl9hY2Nlc3NlcztcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4rXHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHtcbitcdFx0c3dpdGNoIChwLVx1MDAzZWFjdGlvbikge1xuK1x0XHRjYXNlIERBTU9OX1BSRVBfU0VUX1BHSURMRTpcbitcdFx0XHRkYW1vbl9wYV9ta29sZChkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2VzYW1wbGluZ19hZGRyLFxuK1x0XHRcdFx0XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQpKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4rXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4rXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4rXHRcdFx0aWYgKHNldF9zYW1wbGVzKVxuK1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4rXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuK1x0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eClcbitcdFx0XHRcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuQEAgLTEzMiw2ICsxNjYsMTIgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0XHRtYXRjaGVkID0gZmlsdGVyLVx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbitcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdGVsc2VcbitcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQ0MCw2ICs0ODAsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuIFx0XHQudXBkYXRlID0gTlVMTCxcbiBcdFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcbiBcdFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMsXG4rXHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3BhX3ByZXBfcHJvYmVzLFxuIFx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxuIFx0XHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcbiBcdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMjcuLmQ0NGQ1YmI5ZThmYmY4IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTc1MCw2ICs3NTAsMjE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ludGVydmFsc19rdHlwZSA9IHtcbiBcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2ludGVydmFsc19ncm91cHMsXG4gfTtcbiBcbisvKlxuKyAqIHByZXAgZGlyZWN0b3J5XG4rICovXG4rXG4rc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAge1xuK1x0c3RydWN0IGtvYmplY3Qga29iajtcbitcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpkYW1vbl9zeXNmc19wcmVwX2FsbG9jKHZvaWQpXG4re1xuK1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXA7XG4rXG4rXHRwcmVwID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXApO1xuK1x0aWYgKCFwcmVwKVxuK1x0XHRyZXR1cm4gcHJlcDtcbitcdHByZXAtXHUwMDNlYWN0aW9uID0gREFNT05fUFJFUF9TRVRfUEdJRExFO1xuK1x0cmV0dXJuIHByZXA7XG4rfVxuK1xuK3N0cnVjdCBkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lIHtcbitcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xuK1x0Y2hhciAqbmFtZTtcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZVxuK2RhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWVzW10gPSB7XG4rXHR7XG4rXHRcdC5hY3Rpb24gPSBEQU1PTl9QUkVQX1NFVF9QR0lETEUsXG4rXHRcdC5uYW1lID0gXCJzZXRfcGdpZGxlXCIsXG4rXHR9LFxuK307XG4rXG4rc3RhdGljIHNzaXplX3QgcHJlcF9hY3Rpb25fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXAgPSBjb250YWluZXJfb2Yoa29iaixcbitcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCwga29iaik7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWUgKmFjdGlvbl9uYW1lO1xuK1xuK1x0XHRhY3Rpb25fbmFtZSA9IFx1MDAyNmRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWVzW2ldO1xuK1x0XHRpZiAoYWN0aW9uX25hbWUtXHUwMDNlYWN0aW9uID09IHByZXAtXHUwMDNlYWN0aW9uKVxuK1x0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlc1xcblwiLCBhY3Rpb25fbmFtZS1cdTAwM2VuYW1lKTtcbitcdH1cbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCBwcmVwX2FjdGlvbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqcHJlcCA9IGNvbnRhaW5lcl9vZihrb2JqLFxuK1x0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwLCBrb2JqKTtcbitcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lcyk7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSAqYWN0aW9uX25hbWU7XG4rXG4rXHRcdGFjdGlvbl9uYW1lID0gXHUwMDI2ZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXNbaV07XG4rXHRcdGlmIChzeXNmc19zdHJlcShidWYsIGFjdGlvbl9uYW1lLVx1MDAzZW5hbWUpKSB7XG4rXHRcdFx0cHJlcC1cdTAwM2VhY3Rpb24gPSBhY3Rpb25fbmFtZS1cdTAwM2VhY3Rpb247XG4rXHRcdFx0cmV0ID0gY291bnQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqcHJlcCA9IGNvbnRhaW5lcl9vZihrb2JqLFxuK1x0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwLCBrb2JqKTtcbitcbitcdGtmcmVlKHByZXApO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3ByZXBfcHJlcF9hY3Rpb25fYXR0ciA9XG4rXHRcdF9fQVRUUl9SV19NT0RFKHByZXBfYWN0aW9uLCAwNjAwKTtcbitcbitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfcHJlcF9hdHRyc1tdID0ge1xuK1x0XHUwMDI2ZGFtb25fc3lzZnNfcHJlcF9wcmVwX2FjdGlvbl9hdHRyLmF0dHIsXG4rXHROVUxMLFxuK307XG4rQVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19wcmVwKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcmVwX2t0eXBlID0ge1xuK1x0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2UsXG4rXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG4rXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcmVwX2dyb3Vwcyxcbit9O1xuK1xuKy8qXG4rICogcHJlcHMgZGlyZWN0b3J5XG4rICovXG4rXG4rc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzIHtcbitcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqKnByZXBzX2FycjtcbitcdGludCBucjtcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKmRhbW9uX3N5c2ZzX3ByZXBzX2FsbG9jKHZvaWQpXG4re1xuK1x0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqKnByZXBzX2FyciA9IHByZXBzLVx1MDAzZXByZXBzX2FycjtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJlcHMtXHUwMDNlbnI7IGkrKykge1xuK1x0XHRrb2JqZWN0X2RlbChcdTAwMjZwcmVwc19hcnJbaV0tXHUwMDNla29iaik7XG4rXHRcdGtvYmplY3RfcHV0KFx1MDAyNnByZXBzX2FycltpXS1cdTAwM2Vrb2JqKTtcbitcdH1cbitcdHByZXBzLVx1MDAzZW5yID0gMDtcbitcdGtmcmVlKHByZXBzX2Fycik7XG4rXHRwcmVwcy1cdTAwM2VwcmVwc19hcnIgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHMsXG4rXHRcdGludCBucl9wcmVwcylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqKnByZXBzX2FyciwgKnByZXA7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7XG4rXHRpZiAoIW5yX3ByZXBzKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHByZXBzX2FyciA9IGttYWxsb2Nfb2JqcygqcHJlcHNfYXJyLCBucl9wcmVwcyxcbitcdFx0XHRcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuK1x0aWYgKCFwcmVwc19hcnIpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0cHJlcHMtXHUwMDNlcHJlcHNfYXJyID0gcHJlcHNfYXJyO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcHJlcHM7IGkrKykge1xuK1x0XHRwcmVwID0gZGFtb25fc3lzZnNfcHJlcF9hbGxvYygpO1xuK1x0XHRpZiAoIXByZXApIHtcbitcdFx0XHRkYW1vbl9zeXNmc19wcmVwc19ybV9kaXJzKHByZXBzKTtcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0fVxuK1xuK1x0XHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZwcmVwLVx1MDAzZWtvYmosXG4rXHRcdFx0XHRcdTAwMjZkYW1vbl9zeXNmc19wcmVwX2t0eXBlLCBcdTAwMjZwcmVwcy1cdTAwM2Vrb2JqLCBcIiVkXCIsXG4rXHRcdFx0XHRpKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGtvYmplY3RfcHV0KFx1MDAyNnByZXAtXHUwMDNla29iaik7XG4rXHRcdFx0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRwcmVwc19hcnJbaV0gPSBwcmVwO1xuK1x0XHRwcmVwcy1cdTAwM2VucisrO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IG5yX3ByZXBzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbitcdFx0Y2hhciAqYnVmKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHMgPSBjb250YWluZXJfb2Yoa29iaixcbitcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopO1xuK1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIHByZXBzLVx1MDAzZW5yKTtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgbnJfcHJlcHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4rXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcztcbitcdGludCBuciwgZXJyID0ga3N0cnRvaW50KGJ1ZiwgMCwgXHUwMDI2bnIpO1xuK1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcdGlmIChuciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRwcmVwcyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopO1xuK1xuK1x0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0ZXJyID0gZGFtb25fc3lzZnNfcHJlcHNfYWRkX2RpcnMocHJlcHMsIG5yKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4re1xuK1x0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcywga29iaikpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3ByZXBzX25yX2F0dHIgPVxuK1x0XHRfX0FUVFJfUldfTU9ERShucl9wcmVwcywgMDYwMCk7XG4rXG4rc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3ByZXBzX2F0dHJzW10gPSB7XG4rXHRcdTAwMjZkYW1vbl9zeXNmc19wcmVwc19ucl9hdHRyLmF0dHIsXG4rXHROVUxMLFxuK307XG4rQVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19wcmVwcyk7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJlcHNfa3R5cGUgPSB7XG4rXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2UsXG4rXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG4rXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcmVwc19ncm91cHMsXG4rfTtcbitcbiAvKlxuICAqIGZpbHRlciBkaXJlY3RvcnlcbiAgKi9cbkBAIC03ODIsNiArOTk1LDEwIEBAIGRhbW9uX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XG4gXHRcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csXG4gXHRcdC5uYW1lID0gXCJtZW1jZ1wiLFxuIFx0fSxcbitcdHtcbitcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQsXG4rXHRcdC5uYW1lID0gXCJwZ2lkbGVfdW5zZXRcIixcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtMTA2Niw2ICsxMjgzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcbiBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUge1xuIFx0c3RydWN0IGtvYmplY3Qga29iajtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzO1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKmZpbHRlcnM7XG4gfTtcbiBcbkBAIC0xMDc2LDI1ICsxMjk0LDUwIEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKmRhbW9uX3N5c2ZzX3Byb2JlX2FsbG9jKHZvaWQpXG4gXG4gc3RhdGljIGludCBkYW1vbl9zeXNmc19wcm9iZV9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlKVxuIHtcbitcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHM7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVycztcbiBcdGludCBlcnI7XG4gXG4tXHRmaWx0ZXJzID0gZGFtb25fc3lzZnNfZmlsdGVyc19hbGxvYygpO1xuLVx0aWYgKCFmaWx0ZXJzKVxuK1x0cHJlcHMgPSBkYW1vbl9zeXNmc19wcmVwc19hbGxvYygpO1xuK1x0aWYgKCFwcmVwcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRwcm9iZS1cdTAwM2VwcmVwcyA9IHByZXBzO1xuK1xuK1x0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2cHJlcHMtXHUwMDNla29iaiwgXHUwMDI2ZGFtb25fc3lzZnNfcHJlcHNfa3R5cGUsXG4rXHRcdFx0XHUwMDI2cHJvYmUtXHUwMDNla29iaiwgXCJwcmVwc1wiKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gcHV0X3ByZXBzX291dDtcbitcbitcdGZpbHRlcnMgPSBkYW1vbl9zeXNmc19maWx0ZXJzX2FsbG9jKCk7XG4rXHRpZiAoIWZpbHRlcnMpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBkZWxfcHJlcHNfb3V0O1xuK1x0fVxuIFx0cHJvYmUtXHUwMDNlZmlsdGVycyA9IGZpbHRlcnM7XG4gXG4gXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZmaWx0ZXJzLVx1MDAzZWtvYmosIFx1MDAyNmRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUsXG4gXHRcdFx0XHUwMDI2cHJvYmUtXHUwMDNla29iaiwgXCJmaWx0ZXJzXCIpO1xuLVx0aWYgKGVycikge1xuLVx0XHRrb2JqZWN0X3B1dChcdTAwMjZmaWx0ZXJzLVx1MDAzZWtvYmopO1xuLVx0XHRwcm9iZS1cdTAwM2VmaWx0ZXJzID0gTlVMTDtcbi1cdH1cbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gcHV0X2ZpbHRlcnNfb3V0O1xuK1x0cmV0dXJuIGVycjtcbitcbitwdXRfZmlsdGVyc19vdXQ6XG4rXHRrb2JqZWN0X3B1dChcdTAwMjZmaWx0ZXJzLVx1MDAzZWtvYmopO1xuK1x0cHJvYmUtXHUwMDNlZmlsdGVycyA9IE5VTEw7XG4rZGVsX3ByZXBzX291dDpcbitcdGtvYmplY3RfZGVsKFx1MDAyNnByZXBzLVx1MDAzZWtvYmopO1xuK3B1dF9wcmVwc19vdXQ6XG4rXHRrb2JqZWN0X3B1dChcdTAwMjZwcmVwcy1cdTAwM2Vrb2JqKTtcbitcdHByb2JlLVx1MDAzZXByZXBzID0gTlVMTDtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Byb2JlX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSlcbiB7XG4rXHRpZiAocHJvYmUtXHUwMDNlcHJlcHMpIHtcbitcdFx0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcm9iZS1cdTAwM2VwcmVwcyk7XG4rXHRcdGtvYmplY3RfcHV0KFx1MDAyNnByb2JlLVx1MDAzZXByZXBzLVx1MDAzZWtvYmopO1xuK1x0fVxuIFx0aWYgKHByb2JlLVx1MDAzZWZpbHRlcnMpIHtcbiBcdFx0ZGFtb25fc3lzZnNfZmlsdGVyc19ybV9kaXJzKHByb2JlLVx1MDAzZWZpbHRlcnMpO1xuIFx0XHRrb2JqZWN0X3B1dChcdTAwMjZwcm9iZS1cdTAwM2VmaWx0ZXJzLVx1MDAzZWtvYmopO1xuQEAgLTE5MzMsNiArMjE3NiwyMyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gXHRyZXR1cm4gZGFtb25fc2V0X2F0dHJzKGN0eCwgXHUwMDI2YXR0cnMpO1xuIH1cbiBcbitzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuK1x0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnN5c19wcmVwcylcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN5c19wcmVwcy1cdTAwM2VucjsgaSsrKSB7XG4rXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpzeXNfcHJlcCA9IHN5c19wcmVwcy1cdTAwM2VwcmVwc19hcnJbaV07XG4rXHRcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xuK1xuK1x0XHRwcmVwID0gZGFtb25fbmV3X3ByZXAoc3lzX3ByZXAtXHUwMDNlYWN0aW9uKTtcbitcdFx0aWYgKCFwcmVwKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRkYW1vbl9hZGRfcHJlcChwcm9iZSwgcHJlcCk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfZmlsdGVycyhzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuIFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqc3lzX2ZpbHRlcnMpXG4ge1xuQEAgLTE5NjgsNyArMjIyOCwxNSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuIFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnN5c19wcm9iZSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqc3lzX2ZpbHRlcnM7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnN5c19wcmVwcztcbitcdGludCBlcnI7XG4gXG4rXHRzeXNfcHJlcHMgPSBzeXNfcHJvYmUtXHUwMDNlcHJlcHM7XG4rXHRpZiAoc3lzX3ByZXBzKSB7XG4rXHRcdGVyciA9IGRhbW9uX3N5c2ZzX3NldF9wcmVwcyhwcm9iZSwgc3lzX3ByZXBzKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuIFx0c3lzX2ZpbHRlcnMgPSBzeXNfcHJvYmUtXHUwMDNlZmlsdGVycztcbiBcdGlmICghc3lzX2ZpbHRlcnMpXG4gXHRcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcbmluZGV4IGY3ZmI5NGI4NGU3MTZkLi5kZGViZGU2ZWRhYmU0ZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaFxuQEAgLTM2MSw2ICszNjEsMzIgQEAgdGVzdF9pbnRlcnZhbHMoKVxuIFx0dGVzdF9pbnRlcnZhbHNfZ29hbCBcIiRpbnRlcnZhbHNfZGlyL2ludGVydmFsc19nb2FsXCJcbiB9XG4gXG4rdGVzdF9kYW1vbl9wcmVwKClcbit7XG4rXHRkYW1vbl9wcmVwX2Rpcj0kMVxuK1x0ZW5zdXJlX2ZpbGUgXCIkZGFtb25fcHJlcF9kaXIvcHJlcF9hY3Rpb25cIiBcImV4aXN0XCIgXCI2MDBcIlxuK1x0ZW5zdXJlX3dyaXRlX3N1Y2MgXCIkZGFtb25fcHJlcF9kaXIvcHJlcF9hY3Rpb25cIiBcInNldF9wZ2lkbGVcIiBcXFxuK1x0XHRcInZhbGlkIGlucHV0XCJcbitcdGVuc3VyZV93cml0ZV9mYWlsIFwiJGRhbW9uX3ByZXBfZGlyL3ByZXBfYWN0aW9uXCIgXCJmb29cIiBcImludmFsaWQgaW5wdXRcIlxuK31cbitcbit0ZXN0X2RhbW9uX3ByZXBzKClcbit7XG4rXHRwcmVwc19kaXI9JDFcbitcdGVuc3VyZV9kaXIgXCIkcHJlcHNfZGlyXCIgXCJleGlzdFwiXG4rXHRlbnN1cmVfZmlsZSBcIiRwcmVwc19kaXIvbnJfcHJlcHNcIiBcImV4aXN0XCIgXCI2MDBcIlxuK1x0ZW5zdXJlX3dyaXRlX3N1Y2MgXCIkcHJlcHNfZGlyL25yX3ByZXBzXCIgXCIxXCIgXCJ2YWxpZCBpbnB1dFwiXG4rXHR0ZXN0X2RhbW9uX3ByZXAgXCIkcHJlcHNfZGlyLzBcIlxuK1xuK1x0ZW5zdXJlX3dyaXRlX3N1Y2MgIFwiJHByZXBzX2Rpci9ucl9wcmVwc1wiIFwiMlwiIFwidmFsaWQgaW5wdXRcIlxuK1x0dGVzdF9kYW1vbl9wcmVwIFwiJHByZXBzX2Rpci8wXCJcbitcdHRlc3RfZGFtb25fcHJlcCBcIiRwcmVwc19kaXIvMVwiXG4rXG4rXHRlbnN1cmVfd3JpdGVfc3VjYyBcIiRwcmVwc19kaXIvbnJfcHJlcHNcIiBcIjBcIiBcInZhbGlkIGlucHV0XCJcbitcdGVuc3VyZV9kaXIgXCIkcHJlcHNfZGlyLzBcIiBcIm5vdF9leGlzdFwiXG4rXHRlbnN1cmVfZGlyIFwiJHByZXBzX2Rpci8xXCIgXCJub3RfZXhpc3RcIlxuK31cbitcbiB0ZXN0X2RhbW9uX2ZpbHRlcigpXG4ge1xuIFx0ZGFtb25fZmlsdGVyX2Rpcj0kMVxuQEAgLTM5Miw2ICs0MTgsNyBAQCB0ZXN0X3Byb2JlKClcbiB7XG4gXHRwcm9iZV9kaXI9JDFcbiBcdGVuc3VyZV9kaXIgXCIkcHJvYmVfZGlyXCIgXCJleGlzdFwiXG4rXHR0ZXN0X2RhbW9uX3ByZXBzIFwiJHByb2JlX2Rpci9wcmVwc1wiXG4gXHR0ZXN0X2RhbW9uX2ZpbHRlcnMgXCIkcHJvYmVfZGlyL2ZpbHRlcnNcIlxuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjU4Ljg4Nzk0MTc0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NzY3NDEwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUHJvYmUgUHJlcCBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0IGFkZHMgXCJwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnNcIiBvciBcInByZXBzXCIgdG8gdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBtb2RpZnlpbmcgY29yZSBrZXJuZWwgbG9naWMuIFRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIHNldmVyYWwgZmlsZXM6IHRoZSBkb2N1bWVudGF0aW9uLCBgZGFtb24uaGAsIHRoZSBjb3JlIERBTU9OIGZpbGVzIChgY29yZS5jYCwgYHBhZGRyLmNgLCBgc3lzZnMuY2ApLCBhbmQgYSBzZWxmdGVzdCBzY3JpcHQgKGBzeXNmcy5zaGApLiBUaGF0J3MgYSByZWFzb25hYmxlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmljYXRpb25zIGZvciBhIGZlYXR1cmUgbGlrZSB0aGlzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgXCJJcyB0aGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGU/XCIgREFNT04gaXMgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHN5c2ZzLCB3aGljaCBpcyBnb29kLiBUaGF0IG9wZW5zIGl0IHVwIG5pY2VseSBmb3IgZnV6emluZy4gVGhlc2UgbmV3IHN5c2ZzIGludGVyZmFjZXMgYXJlIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHRhcmdldHMgaGVyZS5cblxuSSd2ZSBpZGVudGlmaWVkIGEgZmV3IGtleSBmdW5jdGlvbnMgYWNyb3NzIHRoZSBtb2RpZmllZCBmaWxlcy4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGBkYW1vbl9uZXdfcHJlcGAsIGBkYW1vbl9hZGRfcHJlcGAsIGBkYW1vbl9jb21taXRfcHJlcHNgLCBgZGFtb25fY29tbWl0X3Byb2Jlc2AgKHdoaWNoIGlzIG1vZGlmaWVkKSwgYW5kIGBrZGFtb25kX2ZuYCAoYWxzbyBtb2RpZmllZCkuIFRoZW4sIGluIGBtbS9kYW1vbi9wYWRkci5jYCwgdGhlIGBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb25gLCBgZGFtb25fcGFfcHJlcF9wcm9iZXNgLCBhbmQgbW9kaWZpZWQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAgYXJlIG9mIGludGVyZXN0LiBGaW5hbGx5LCBpbiBgbW0vZGFtb24vc3lzZnMuY2AsIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIHByZXAgY29uZmlndXJhdGlvbiBsaWtlIGBwcmVwX2FjdGlvbl9zaG93YCwgYHByZXBfYWN0aW9uX3N0b3JlYCwgYGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzYCwgYG5yX3ByZXBzX3Nob3dgLCBgbnJfcHJlcHNfc3RvcmVgLCBgZGFtb25fc3lzZnNfc2V0X3ByZXBzYCBhbmQgdGhlIG1vZGlmaWVkIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVgIGFyZSBkZWZpbml0ZWx5IG9uIHRoZSBsaXN0LlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWdzIGZvciBzeXNmcy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0RBTU9OX1NZU0ZTYCBpcyBuZWVkZWQsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGluIGBtbS9kYW1vbi9LY29uZmlnYC4gSSdsbCBhbHNvIGVuc3VyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBzZXQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGFjdHVhbGx5IGJlaW5nIGFibGUgdG8gdXNlIGFuZCBmdXp6IHRoZSBuZXcgaW50ZXJmYWNlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB2YWx1ZXMgYW5kIGNvbWJpbmF0aW9ucyB3aWxsIHlpZWxkIHRoZSBtb3N0IGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjA2LjQ2NDY4NTQ3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDUwMzE1MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OX1NZU0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTQ6MDYuNzA5NzM0Mjk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNTAxMDc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZmlndXJpbmcgb3V0IHdoYXQgYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uLCBwcmVzZW50ZWQgYXMgaWYgaXQncyBteSBvd24uXG5cbioqSW52ZXN0aWdhdGluZyBEQU1PTl9TWVNGUyBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYERBTU9OX1NZU0ZTYC4gSSBrbm93IGl0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSwgdGhpcyB0aGluZyBjYWxsZWQgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyLiBTbywgd2hlcmUgZG9lcyB0aGlzIGZ1bmN0aW9uYWxpdHkgc2l0IGluIHRoZSBncmFuZCBzY2hlbWU/IFdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMsIHN1YnN5c3RlbXMsIG9yIGNvbmZpZ3VyYXRpb25zIGRvZXMgaXQgbGVhbiBvbiB0byBvcGVyYXRlIGNvcnJlY3RseT8gVGhhdCdzIHRoZSBxdWVzdGlvbiBJIG5lZWQgYW5zd2VyZWQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIHJlcXVpcmVtZW50cyBmb3IgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDkwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTQ6MDkuOTM0NzQ4ODg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTk4OTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTE1PWNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctMTgtXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZz0yNj1jb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjI4OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctMjktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9Mzg9Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo0MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL2RhbW9uL0tjb25maWctNDEtXFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnPTQ3PWNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQ5OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy01MC1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9NTY9Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjU4OlxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNTktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9Njg9Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy03MS1cXHRkZWZhdWx0IERBTU9OXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjc4OlxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNzktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9ODg9Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6OTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctOTEtXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZz0xMDA9Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy0xMDMtXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZz0xMDg9Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTExMS1cXHRoZWxwXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnPTExNj1jb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTE4OlxcdGRlcGVuZHMgb24gREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTE5LVxcdGRlZmF1bHQgREFNT05fU1RBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoxMC41OTA3NDM2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTQwODg3NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIHRoZSBEQU1PTiBEZXBlbmRlbmN5IFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgdGhlIGBEQU1PTl9TWVNGU2AgZmVhdHVyZSBoaW5nZXMgb24gYm90aCBgREFNT05gIGFuZCBgU1lTRlNgIGJlaW5nIHByZXNlbnQuIFRoYXQncyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBBbmQsIHRoZSBpbmNsdXNpb24gb2YgYERBTU9OX1BBRERSYCBpcyBmbGFnZ2VkIGFzIGJlaW5nIGVzc2VudGlhbCBiZWNhdXNlIHdlJ3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBpbiBgbW0vZGFtb24vcGFkZHIuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBgREFNT05fUEFERFJgIGRpcmVjdGx5IGltcGFjdHMgaG93IHBoeXNpY2FsIGFkZHJlc3NlcyBhcmUgaGFuZGxlZCB3aXRoaW4gREFNT04uIE5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRydWUgYW5kIHRoYXQgYHBhZGRyLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYERBTU9OX1BBRERSYCBpcyBzZXQuIFRvIGRvIHRoYXQsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHJ1bGVzLCBhbmQgY29uZmlybSBteSBoeXBvdGhlc2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI2MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjE0LjA0NDgzNTA2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY4NDM5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vTWFrZWZpbGU9ND1vYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbm1tL2RhbW9uL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjE0LjI2MTY4NzQ4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzYyNTAyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OIFBhdGNoIEZ1bmN0aW9uIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBEQU1PTl9QQUREUmAgaXMgaW5kZWVkIGEgbmVjZXNzYXJ5IHBhcnQgb2YgdGhpcy4gUmlnaHQsIGNvbmZpcm1lZC4gTm93LCB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMsIGxldCdzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlOiBgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uYCwgYGRhbW9uX3BhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzYCwgYG5yX3ByZXBzX3N0b3JlYCwgYHByZXBfYWN0aW9uX3N0b3JlYCwgYGRhbW9uX3N5c2ZzX3NldF9wcmVwc2AsIGFuZCBgZGFtb25fY29tbWl0X3ByZXBzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHBsYXkgYSByb2xlIGluIHRoZSBjaGFuZ2VzLlxuXG5IbW0sIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGV5IGFyZSBhbGwgc3RhdGljLiBZZXMsIHRoZXkgYXJlLiBUaGF0J3MgYSByZWQgZmxhZy4gSWYgdGhleSBhcmUgYWxsIHN0YXRpYywgdGhleSdyZSBwcm9iYWJseSBub3QgdGhlIGJlc3QgY2FuZGlkYXRlcyBmb3IgZGlyZWN0IEZvY3VzU3ltYm9sIGFuYWx5c2lzIHdpdGhpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGV5IG1pZ2h0IGJlIGluZGlyZWN0bHkgaW1wb3J0YW50LCBidXQgSSBuZWVkIHRvIGZpbmQgdGhlIHB1YmxpY2x5IHZpc2libGUgZnVuY3Rpb25zLlxuXG5BbHJpZ2h0LCBsZXQncyBzaGlmdCBmb2N1cyB0byBpZGVudGlmeSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIHBhdGNoLiBBaCwgaGVyZSB3ZSBnbzogYGRhbW9uX25ld19wcmVwYCBhbmQgYGRhbW9uX2FkZF9wcmVwYC4gVGhlc2UgYXJlIGV4cG9ydGVkLCBtZWFuaW5nIHRoZXkgYXJlIG5vbi1zdGF0aWMuIFRob3NlIGFyZSB0aGUgb25lcyBJIHNob3VsZCBiZSBsb29raW5nIGF0IHdoZW4gaXQgY29tZXMgdG8gdGhlIHN5bWJvbCBhbmFseXNpcy5cblxuSSBzaG91bGQgcHJvYmFibHkgY3Jvc3MgcmVmZXJlbmNlIHdpdGggYG1tL2RhbW9uL2NvcmUuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoxOS41OTc5NTExMjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTE2MzIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9uZXdfcHJlcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTk4PWludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEzLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTQ6c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3MzU9c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NTEtXFxubW0vZGFtb24vY29yZS5jOjE3NTI6XFx0XFx0bmV3X3ByZXAgPSBkYW1vbl9uZXdfcHJlcChzcmNfcHJlcC1cXHUwMDNlYWN0aW9uKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTc1My1cXHRcXHRpZiAoIW5ld19wcmVwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoxOS43OTcxMjAzNjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NDMxMzY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTm9uLVN0YXRpYyBGdW5jdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbkhtbSwgSSdtIGFuYWx5emluZyB0aGUgY29kZWJhc2UsIGFuZCBteSBpbml0aWFsIHF1ZXN0aW9uIGlzIGZvY3VzZWQgb24gZnVuY3Rpb24gZGVzaWduLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlbid0IHN0YXRpYz8gSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIHN0YXRpYyBvbmVzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcyBJIGNvbnNpZGVyIGRlc2lnbiBwYXR0ZXJucyBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlaXIgc2NvcGUsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgb3ZlcmFsbCBiZWhhdmlvciBjb3VsZCBiZSBkaWZmZXJlbnQsIGltcGFjdGluZyBwZXJmb3JtYW5jZSBhbmQgaG93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gaW50ZXJhY3Qgd2l0aCB0aGVtLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0byBjb25zaWRlciB0aGVpciBlZmZlY3Qgb24gdGhlIGdyZWF0ZXIgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoyMi43NDE0MzY4NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzM3NjkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9hZGRfcHJlcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTExND1zdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbmV3X3ByZXAoZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb24pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI1LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjY6dm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3MzU9c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NTQtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjE3NTU6XFx0XFx0ZGFtb25fYWRkX3ByZXAoZHN0LCBuZXdfcHJlcCk7XFxubW0vZGFtb24vY29yZS5jLTE3NTYtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoyMi44NjQ4MTk3NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3NTA1MzU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIERBTU9OIENvZGUncyBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBEQU1PTiBjb2RlIGFnYWluLCBhbmQgSSdtIGhpdHRpbmcgYSBiaXQgb2YgYSB3YWxsIGluIG15IHVuZGVyc3RhbmRpbmcuIEkga2VlcCBzZWVpbmcgdGhlc2UgZnVuY3Rpb24gbmFtZXMsIGxpa2UgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZWAgYW5kIGBkYW1vbl9jb21taXRfcHJvYmVzYCwgYnV0IHRoZXkncmUgKnN0YXRpYyouIFRoYXQncyBhIHByb2JsZW0uIElmIGFsbCB0aGUgaW50ZXJlc3RpbmcsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBob3cgZG8gSSBidWlsZCBhIGdvb2QgYEZvY3VzU3ltYm9sc2AgbGlzdD8gSSBuZWVkIHNvbWV0aGluZyB0byBmb2N1cyBvbi5cblxuQWxyaWdodCwgSSBjYW4gZGVmaW5pdGVseSBpbmNsdWRlIGBkYW1vbl9uZXdfcHJlcGAgYW5kIGBkYW1vbl9hZGRfcHJlcGA7IHRob3NlIGxvb2sgcHJvbWlzaW5nLiBBbmQsIHRoZXJlJ3MgYGtkYW1vbmRfZm5gLCBidXQgdGhhdCdzIGEgdGhyZWFkIGZ1bmN0aW9uLCBzbyBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoYXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIFRpbWUgdG8gY2hlY2sgYG1tL2RhbW9uL3N5c2ZzLmNgLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlcmUgdGhhdCBJJ3ZlIG1pc3NlZCwgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgbW9kaWZpZWQgYW5kLCB0aGVyZWZvcmUsIG1vcmUgdXNlZnVsIHRvIG1lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5NjksIk91dHB1dFRva2VucyI6NzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTQ6MjYuOTM5ODc1ODg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxMDE5MTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qXFxcXHMrXFxcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjI3LjA3Nzk4Njc2NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU0NDEzMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgYG1tL2RhbW9uL3N5c2ZzLmNgIGZvciBEYXRhIFN0cnVjdHVyZXMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBsYXkgb2YgdGhlIGxhbmQgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRoZSBjbGFzc2ljLCBxdWljayBhbmQgZGlydHkgbWV0aG9kOiBsZXQncyB1c2UgYGdyZXBgLiBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgcmVndWxhciBleHByZXNzaW9ucyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBkZWNsYXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSdsbCBzZWFyY2ggZm9yIGxpbmVzIHRoYXQgKmJlZ2luKiB3aXRoIGBpbnQgYCwgYHZvaWQgYCwgb3IgYHN0cnVjdCBgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZpcnN0IHBhc3MsIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBpbnRlZ2VyIHZhcmlhYmxlcywgdm9pZCByZXR1cm4gdHlwZXMgKHdoaWNoIG9mdGVuIGhpbnQgYXQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHdpdGggc2lkZSBlZmZlY3RzKSwgYW5kIGBzdHJ1Y3RgIGRlZmluaXRpb25zLCB3aGljaCBhcmUgYWJzb2x1dGVseSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGRhdGEgb3JnYW5pemF0aW9uIGluIHRoZSBtb2R1bGUuIEl0J3MgYSBwcmFnbWF0aWMsIHByZWxpbWluYXJ5IHNjYW4gYmVmb3JlIEkgZGl2ZSBkZWVwZXIgd2l0aCBjdGFncyBvciBldmVuIHN0YXJ0IHB1bGxpbmcgdXAgdGhlIGRlZmluaXRpb25zIGluIGFuIElERS4gSSdtIGVzc2VudGlhbGx5IHVzaW5nIGBncmVwYCBhcyBhIHZlcnkgdGFyZ2V0ZWQgY29kZSBpbmRleGVyIGZvciBhIHF1aWNrLCBpbml0aWFsIG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQxOSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjMwLjgzMjQwMzkyMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3MTMyNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8c3RydWN0fHNzaXplX3QpIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmMtMTUtXFxubW0vZGFtb24vc3lzZnMuYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTgyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbl9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTEtXFxubW0vZGFtb24vc3lzZnMuYzo5MjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9ucyB7XFxubW0vZGFtb24vc3lzZnMuYy05My1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjEwLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjExOnN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTMxNy1cXG5tbS9kYW1vbi9zeXNmcy5jOjMxODpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyB7XFxubW0vZGFtb24vc3lzZnMuYy0zMTktXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3RhcmdldHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTQ0NS1cXG5tbS9kYW1vbi9zeXNmcy5jOjQ0NjpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWwge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNDQ3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTU5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNjAyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6NjAzOnN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNjA0LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTc0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTc1Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjc1NzpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCB7XFxubW0vZGFtb24vc3lzZnMuYy03NTgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NzYyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqZGFtb25fc3lzZnNfcHJlcF9hbGxvYyh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy03NzItXFxubW0vZGFtb24vc3lzZnMuYzo3NzM6c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNzc0LVxcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz04NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJlcF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtODUwLVxcbm1tL2RhbW9uL3N5c2ZzLmM6ODUxOnN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyB7XFxubW0vZGFtb24vc3lzZnMuYy04NTItXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9OTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy05NjktXFxubW0vZGFtb24vc3lzZnMuYzo5NzA6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciB7XFxubW0vZGFtb24vc3lzZnMuYy05NzEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9OTc4PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyICpkYW1vbl9zeXNmc19maWx0ZXJfYWxsb2Modm9pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTgyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6OTgzOnN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJfdHlwZV9uYW1lIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTk4NC1cXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTExNTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xMTYzLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTE2NDpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyB7XFxubW0vZGFtb24vc3lzZnMuYy0xMTY1LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTEyNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTI4Mi1cXG5tbS9kYW1vbi9zeXNmcy5jOjEyODM6c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTEyODQtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTM4MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZV9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4OS1cXG5tbS9kYW1vbi9zeXNmcy5jOjEzOTA6c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlcyB7XFxubW0vZGFtb24vc3lzZnMuYy0xMzkxLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE1MDk9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJvYmVzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNTE4LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTUxOTpzdHJ1Y3QgZGFtb25fc3lzZnNfYXR0cnMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTUyMC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2F0dHJzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNjI0LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTYyNTpzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTYyNi1cXHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE2MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSBkYW1vbl9zeXNmc19vcHNfbmFtZXNbXSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTY0NC1cXG5tbS9kYW1vbi9zeXNmcy5jOjE2NDU6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTY0Ni1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xODkxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE5MDAtXFxubW0vZGFtb24vc3lzZnMuYzoxOTAxOnN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyB7XFxubW0vZGFtb24vc3lzZnMuYy0xOTAyLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMjktXFxubW0vZGFtb24vc3lzZnMuYzoyMDMwOnN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjU2OT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoaW50ICgqZm4pKHZvaWQgKmRhdGEpLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTgyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjU4MzpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lc193YWxrX2RhdGEge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjU4NC1cXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9Mjc2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNzc2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc3NzpzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjc3OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yOTEyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yOTIxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjkyMjpzdHJ1Y3QgZGFtb25fc3lzZnNfdWlfZGlyIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTI5MjMtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTQ6MzEuMTQ5NTQxNzEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTE1NDgzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OJ3MgU3lzZnMgSW50ZXJmYWNlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgREFNT04gY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJJ20gbm90aWNpbmcgaXMgdGhhdCBldmVyeSBzaW5nbGUgc3lzZnMgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCdzIGEgZGVsaWJlcmF0ZSBkZXNpZ24gY2hvaWNlLCBhbmQgaXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgc2NvcGUgYW5kIHBvdGVudGlhbCBleHRlcm5hbCBpbnRlcmFjdGlvbnMuIEJ1dCB0aGVuIEkgc2VlIGEgY291cGxlIG9mIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vY29yZS5jYCDigJMgc3BlY2lmaWNhbGx5IGBkYW1vbl9uZXdfcHJlcGAgYW5kIGBkYW1vbl9hZGRfcHJlcGAg4oCTIHRoYXQgYXJlbid0IHN0YXRpYy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgZWl0aGVyIG9mIHRoZW0gYXJlIGV4cG9ydGVkLiBBcmUgdGhleSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgb2YgdGhlIGNvcmUgREFNT04gY29tcG9uZW50PyBUaGF0J3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uIFRpbWUgdG8gY2hlY2sgdGhlIGV4cG9ydCBzdGF0dXMsIGFuZCBkZXRlcm1pbmUgdGhlaXIgaW50ZW5kZWQgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5ODIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDozNC40NjEwOTQyMjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTcyMDk1NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qZGFtb25fbmV3X3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDozNS4wNDY4MjU3NjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1ODk0ODA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBTY29wZSBhbmQgVmlzaWJpbGl0eSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgdmFyaWFibGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzICpub3QqIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIGF0IGxlYXN0IG5vdCBkaXJlY3RseSB0aHJvdWdoIHN0YW5kYXJkIGV4cG9ydHMuIFRoYXQncyBmaW5lLCBidXQgdGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHJhaXNlcyBhIGZsYWcuIEl0IGltcGxpZXMgYSBkZWdyZWUgb2YgYWNjZXNzaWJpbGl0eSBiZXlvbmQgYSBwdXJlbHkgaW50ZXJuYWwgc2NvcGUuIFRoaXMgbWVhbnMgaXQgKmNvdWxkKiBiZSBhY2Nlc3NlZCBvciBsaW5rZWQgdG8gZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UsIG9yIHBlcmhhcHMgZXZlbiBkeW5hbWljYWxseSBsb2FkZWQsIGRlcGVuZGluZyBvbiB0aGUgYnVpbGQgYW5kIGxpbmtpbmcgc3RyYXRlZ3kuXG5cblRoZW4sIHRoZSBrZXkgcXVlc3Rpb24gYXJpc2VzOiBpcyB0aGlzIGBkYW1vbl9hZGRfcHJlcGAgZnVuY3Rpb24g4oCTICp0aGlzKiBzcGVjaWZpYyBlbnRpdHkg4oCTIGFjdHVhbGx5IGV4cG9ydGVkIGJ5IGFueSBvdGhlciBtZWFucz8gSXMgaXQgZXhwb3NlZCBpbiBhIHdheSB0aGF0LCB3aGlsZSBub3QgZXhwbGljaXRseSBkZWNsYXJlZCBpbiBhIHR5cGljYWwgaGVhZGVyIG9yIGV4cG9ydCBsaXN0LCBpcyBzdGlsbCBhY2Nlc3NpYmxlIHRocm91Z2ggc29tZSBvdGhlciBtZWNoYW5pc20/IFBlcmhhcHMgYSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgc3ltYm9sIHRhYmxlPyBLbm93aW5nIHRoaXMgYW5zd2VyIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVuZGVkIHVzZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEl0J3MgYWJvdXQgZmlndXJpbmcgb3V0IHRoZSBhY3R1YWwgZWZmZWN0aXZlIGJvdW5kYXJ5IG9mIHRoZSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDozOC43MDU3NzgyMjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODQxMjE1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qZGFtb25fYWRkX3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDozOC45MTQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NDI5MTc4Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEQU1PTiBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiVGhpcyBsb29rcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS5cIiBXaGlsZSB0aGUgY29yZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBwYXRjaCBhcmVuJ3QgZGlyZWN0bHkgc3RhdGljLCB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBicm9hZGVyIERBTU9OIGZyYW1ld29yaywgYW5kIHNwZWNpZmljYWxseSwgdGhleSBhcmUgcmVsYXRlZCB0byBGb2N1c1N5bWJvbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSB0aGUgY29ycmVjdCBwb2ludHMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy5cblxuTXkgZmlyc3QgY2hlY2sgd2FzIHdoZXRoZXIgYGRhbW9uX3N5c2ZzX3NldF9wcmVwc2AgYW5kIGBkYW1vbl9wYV9wcmVwX3Byb2Jlc2Agd2VyZSBzdGF0aWMuIFllcywgdGhleSBhcmUuIEJ1dCBJIHJlYWxpemVkIHRoYXQgc2luY2UgdGhpcyBpcyBhIHN5c2ZzIGludGVyZmFjZSwgdGhlIHJlYWwgZW50cnkgcG9pbnRzIGFyZSB0aGUgc3lzZnMgc3RvcmUgYW5kIHNob3cgZnVuY3Rpb25zLiBTbywgYWZ0ZXIgYSBsaXR0bGUgdGhvdWdodCwgSSdtIGdvaW5nIHRvIGxpc3QgYGRhbW9uX25ld19wcmVwYCBhbmQgYGRhbW9uX2FkZF9wcmVwYCBhcyBteSBGb2N1c1N5bWJvbHMuIEkgYWxzbyBjb25zaWRlcmVkIGBrZGFtb25kX2ZuYCwgdGhlIHRocmVhZCBmdW5jdGlvbiwgYnV0IGRlY2lkZWQgYWdhaW5zdCBpdCwgYXMgaXQncyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCB0aGUgbWFpbiBsb29wLCBhbmQgbm90IGEgZGlyZWN0IGVudHJ5IHBvaW50LlxuXG5OZXh0LCBJIG5lZWRlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYERBTU9OX1NZU0ZTYCBhbmQgYERBTU9OX1BBRERSYCBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMuIEFkZGl0aW9uYWxseSwgYERBTU9OYCwgYFNZU0ZTYCwgYE1NVWAsIGFuZCBgUEFHRV9JRExFX0ZMQUdgIGFyZSBpbXBsaWVkLiBTbywgbXkgRW5hYmxlQ29uZmlncyBsaXN0IHdpbGwgYmUgYERBTU9OX1NZU0ZTYCBhbmQgYERBTU9OX1BBRERSYC4gSSBjb25maXJtZWQgdGhhdCBgbW0vZGFtb24vc3lzZnMuY2AgY29tcGlsZXMgd2hlbiBgQ09ORklHX0RBTU9OX1NZU0ZTYCBpcyBzZXQsIGFuZCBgbW0vZGFtb24vcGFkZHIuY2AgY29tcGlsZXMgd2hlbiBgQ09ORklHX0RBTU9OX1BBRERSYCBpcyBzZXQuXG5cblJldmlld2luZyB0aGUgcGF0Y2ggYWdhaW4sIEkgc2VlIHRoYXQgaXQgYWRkcyBhIGBwcmVwc2AgZGlyZWN0b3J5IHVuZGVyIGBwcm9iZXMvXHUwMDNjUFx1MDAzZS9gIHdpdGhpbiB0aGUgc3lzZnMgaW50ZXJmYWNlLiBUaGlzIGFsbG93cyBzZXR0aW5nIGBwcmVwX2FjdGlvbmAgdG8gYHNldF9wZ2lkbGVgIGFuZCBhZGRzIGEgbmV3IGZpbHRlciB0eXBlIGNhbGxlZCBgcGdpZGxlX3Vuc2V0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBpdCBhbGxvd3MgdXNlcnMgdG8gc2V0IHBhZ2UgaWRsZSBmbGFncyBwcmlvciB0byBwcm9iaW5nIGFuZCB0aGVuIGZpbHRlciByZXN1bHRzLiBUaGlzIHNpZ25pZmljYW50bHkgbW9kaWZpZXMgREFNT04ncyBjb3JlIGJlaGF2aW9yLCBhbmQgaXQncyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXNmcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbi5cblxuU28sIHRvIHN1bW1hcml6ZSBmb3IgZnV6emluZyBwdXJwb3NlczpcblxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBkYW1vbl9uZXdfcHJlcGAsIGBkYW1vbl9hZGRfcHJlcGBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYERBTU9OX1NZU0ZTYCwgYERBTU9OX1BBRERSYFxuXG5GaW5hbGx5LCBsZXQgbWUgcmUtdmVyaWZ5IHRoYXQgYGRhbW9uX25ld19wcmVwYCBhbmQgYGRhbW9uX2FkZF9wcmVwYCBhcmUgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cywgdGhlIG9ubHkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYWRkZWQgYnkgdGhlIHBhdGNoLiBZZXAsIHRoYXQncyB3aGF0IEkgd2FudC4gVGhleSBhcmUgdGhlIGJlc3Qgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1ODEsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU1OjQ4LjM0MzM4MzQzOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzI2NTU3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbmV3X3ByZXBcIixcbiAgICBcImRhbW9uX2FkZF9wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIGFsbG93aW5nIHVzZXJzIHRvIGNvbmZpZ3VyZSBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgKGUuZy4sIGBzZXRfcGdpZGxlYCkgYW5kIGEgbmV3IGZpbHRlciB0eXBlIChgcGdpZGxlX3Vuc2V0YCkgdmlhIHN5c2ZzLiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucywgbWFraW5nIGl0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25ld19wcmVwXCIsXG4gICAgXCJkYW1vbl9hZGRfcHJlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgREFNT04gc3Vic3lzdGVtLCBhbGxvd2luZyB1c2VycyB0byBjb25maWd1cmUgcHJvYmluZyBwcmVwYXJhdGlvbiBhY3Rpb25zIChlLmcuLCBgc2V0X3BnaWRsZWApIGFuZCBhIG5ldyBmaWx0ZXIgdHlwZSAoYHBnaWRsZV91bnNldGApIHZpYSBzeXNmcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowtrzm5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 18:32:31 +0000 UTC FinishedAt: 2026-07-26 18:55:50 +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": "40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON_SYSFS", "DAMON_PADDR" ], "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": "40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON_SYSFS", "DAMON_PADDR" ], "series_id": "3282b298-bbd5-45c6-9e54-502fc08a41e4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_new_prep", "damon_add_prep" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbmV3X3ByZXAmIzM0OywKICAgICYjMzQ7ZGFtb25fYWRkX3ByZXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIGFsbG93aW5nIHVzZXJzIHRvIGNvbmZpZ3VyZSBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgKGUuZy4sIGBzZXRfcGdpZGxlYCkgYW5kIGEgbmV3IGZpbHRlciB0eXBlIChgcGdpZGxlX3Vuc2V0YCkgdmlhIHN5c2ZzLiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucywgbWFraW5nIGl0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGNhYjhmMTMxNDViMzZlYWE1MjU3ZWU0MmJmOGM2NWZmOTUwMzQyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE4OjUzOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbmluZGV4IGU2NzVhNTcxNDVlMzZkLi42ZDU5NmZiN2ZhMWZmYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuQEAgLTE3Myw2ICYjNDM7MTczLDE5IEBAIENvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbiBEZXNjcmlwdGlvbjpcdFdyaXRpbmcgdG8gYW5kIHJlYWRpbmcgZnJvbSB0aGlzIGZpbGUgc2V0cyBhbmQgZ2V0cyB0aGVcbiBcdFx0cGVyLXByb2JlIGF0dHJpYnV0ZSB3ZWlnaHQuXG4gXG4mIzQzO1doYXQ6XHRcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1x1MDAzY0tcdTAwM2UvY29udGV4dHMvXHUwMDNjQ1x1MDAzZS9tb25pdG9yaW5nX2F0dHJzL3Byb2Jlcy9cdTAwM2NQXHUwMDNlL3ByZXBzL25yX3ByZXBzXG4mIzQzO0RhdGU6XHRcdEp1biAyMDI2XG4mIzQzO0NvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbiYjNDM7RGVzY3JpcHRpb246XHRXcml0aW5nIGEgbnVtYmVyICYjMzk7TiYjMzk7IHRvIHRoaXMgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2ZcbiYjNDM7XHRcdGRpcmVjdG9yaWVzIGZvciBlYWNoIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uIG5hbWVkICYjMzk7MCYjMzk7XG4mIzQzO1x0XHR0byAmIzM5O04tMSYjMzk7IHVuZGVyIHRoZSBwcmVwcy8gZGlyZWN0b3J5LlxuJiM0MztcbiYjNDM7V2hhdDpcdFx0L3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjS1x1MDAzZS9jb250ZXh0cy9cdTAwM2NDXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1x1MDAzY1BcdTAwM2UvcHJlcC9cdTAwM2NSXHUwMDNlL2FjdGlvblxuJiM0MztEYXRlOlx0XHRKdW4gMjAyNlxuJiM0MztDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4mIzQzO0Rlc2NyaXB0aW9uOlx0V3JpdGluZyB0byBhbmQgcmVhZGluZyBmcm9tIHRoaXMgZmlsZSBzZXRzIGFuZCBnZXRzIHRoZSBwcm9iaW5nXG4mIzQzO1x0XHRwcmVlcGFyYXRpb24gYWN0aW9uLlxuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXHUwMDNjUFx1MDAzZS9maWx0ZXJzL25yX2ZpbHRlcnNcbiBEYXRlOlx0XHRNYXkgMjAyNlxuIENvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCBkYTVmOWFmZDA4YWVmOC4uMWY1YTM5ZTFmYzM4ZGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbkBAIC03NCw2ICYjNDM7NzQsOSBAQCBjb21tYSAoXCYjMzQ7LFwmIzM0OykuXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIG5yX3JlZ2lvbnMvbWluLG1heFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBwcm9iZXMgXHUwMDNjZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzXHUwMDNlYC9ucl9wcm9iZXNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvd2VpZ2h0XG4mIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIHByZXBzL25yX3ByZXBzXG4mIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3ByZXBfYWN0aW9uXG4mIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBmaWx0ZXJzL25yX2ZpbHRlcnNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGhcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uXG5AQCAtMjgzLDkgJiM0MzsyODYsMTggQEAgSW4gdGhlIGJlZ2lubmluZywgdGhpcyBkaXJlY3RvcnkgaGFzIG9ubHkgb25lIGZpbGUsIGBgbnJfcHJvYmVzYGAuICBXcml0aW5nIGFcbiBudW1iZXIgKGBgTmBgKSB0byB0aGUgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGQgZGlyZWN0b3JpZXMgbmFtZWQgYGAwYGBcbiB0byBgYE4tMWBgLiAgRWFjaCBkaXJlY3RvcnkgcmVwcmVzZW50cyBlYWNoIG1vbml0b3JpbmcgcHJvYmUuXG4gXG4tSW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIG9uZSBkaXJlY3RvcnksIGBgZmlsdGVyc2BgIGV4aXN0cy4gIFRoZSBkaXJlY3Rvcnlcbi1jb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBmaWx0ZXJzIGZvciB0aGUgcHJvYmUsIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmVcbi10aGUgZGF0YSBhdHRyaWJ1dGUgZm9yIHRoZSBwcm9iZS5cbiYjNDM7SW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIHR3byBkaXJlY3RvcmllcywgYGBwcmVwc2BgIGFuZCBgYGZpbHRlcnNgYCBleGlzdHMuXG4mIzQzO1RoZSBkaXJlY3RvcmllcyBjb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgYW5kXG4mIzQzO2ZpbHRlcnMgZm9yIHRoZSBwcm9iZSwgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgZGF0YSBhdHRyaWJ1dGUgZm9yIHRoZVxuJiM0Mztwcm9iZS5cbiYjNDM7XG4mIzQzO0luIHRoZSBiZWdpbm5pbmcsIGBgcHJlcHNgYCBkaXJlY3RvcnkgaGFzIG9ubHkgb25lIGZpbGUsIGBgbnJfcHJlcHNgYC5cbiYjNDM7V3JpdGlpbmcgYSBudW1iZXIgKGBgTmBgKSB0byB0aGUgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGQgZGlyZWN0b3JpZXNcbiYjNDM7bmFtZXMgYGAwYGAgdG8gYGBOLTFgYC4gIEVhY2ggZGlyZWN0b3J5IHJlcHJlc2VudHMgZWFjaCBwcmVwYXJhdGlvbiBhY3Rpb24uXG4mIzQzO0VhY2ggZGlyZWN0b3J5IGhhcyBvbmUgZmlsZSwgYGBwcmVwX2FjdGlvbmBgLiAgVGhlIHByZXBhcmF0aW9uIGFjdGlvbiBjYW4gYmVcbiYjNDM7c2VsZWN0ZWQgYnkgd3JpdGluZyB0aGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIHRoZSBgYHByZXBfYWN0aW9uYGAgZmlsZS4gIFJlZmVyXG4mIzQzO3RvIHRoZSA6cmVmOmBkZXNpZ24gZG9jIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcdTAwM2VgIGZvciB0aGUgbGlzdCBvZlxuJiM0MztzdXBwb3J0ZWQgYWN0aW9ucy5cbiBcbiBFYWNoIHByb2JlIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zIGBgd2VpZ2h0YGAgZmlsZS4gIFJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZ1xuIHRvIHRoZSBmaWxlIGdldHMgYW5kIHNldHMgdGhlIDpyZWY6YGF0dHJpYnV0ZXMtb25seSBtb25pdG9yaW5nXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCBhZWQ2Y2IxY2Y0ODMxMC4uMDZmZmZlNWUzNzgxOWUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTI5Myw4ICYjNDM7MjkzLDE0IEBAIHJlZ2lzdHJhdGlvbiBpcyBtYWRlIGJ5IHNwZWNpZnlpbmcgYSBwcm9iZSBwZXIgYXR0cmlidXRlLiAgRWFjaCBvZiB0aGUgcHJvYmVcbiBzcGVjaWZpZXMgYSBydWxlIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIG1lbW9yeSByZWdpb24gaGFzIHRoZSByZWxhdGVkXG4gYXR0cmlidXRlLiAgVGhlIHJ1bGUgaXMgY29uc3RydWN0ZWQgd2l0aCBtdWx0aXBsZSBmaWx0ZXJzLiAgVGhlIGZpbHRlcnMgd29ya1xuIHNhbWUgdG8gOnJlZjpgREFNT1MgZmlsdGVycyBcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVyc1x1MDAzZWAgZXhjZXB0IHRoZSBzdXBwb3J0ZWRcbi1maWx0ZXIgdHlwZXMuICBDdXJyZW50bHkgb25seSBgYGFub25gYCBhbmQgYGBtZW1jZ2BgIGZpbHRlciB0eXBlcyBhcmUgc3VwcG9ydGVkXG4tZm9yIGRhdGEgYXR0cmlidXRlcyBtb25pdG9yaW5nLlxuJiM0MztmaWx0ZXIgdHlwZXMuICBDdXJyZW50bHkgYmVsb3cgZml0bGVyIHR5cGVzIGFyZSBzdXBwb3J0ZWQuXG4mIzQzO1xuJiM0MzstIGBgYW5vbmBgOiBTYW1lIHRvIHRoYXQgZm9yIERBTU9TIGZpbHRlcnMuXG4mIzQzOy0gYGBtZW1jZ2BgOiBTYW1lIHRvIHRoYXQgZm9yIERBTU9TIGZpbHRlcnMuXG4mIzQzOy0gYGBwZ2lkbGVfdW5zZXRgYDogTWF0Y2hlcyBpZiB0aGUgcGFnZSBmb3IgdGhlIG1lbW9yeSBpcyBtYXJrZWQgYXMgbm90XG4mIzQzOyAgYWNjZXNzLWlkbGUuXG4mIzQzOyAgTWF0Y2hlcyBpZiB0aGUgbWVtb3J5IGlzIG5vdCBiYWNrZWQgYnkgcGFnZXMgdGhhdCBEQU1PTiBjYW4gaWRuZXRpZnlcbiYjNDM7ICBpZGxlbmVzcy5cbiBcbiBJZiBzdWNoIHByb2JlcyBhcmUgcmVnaXN0ZXJlZCwgREFNT04gZXhlY3V0ZXMgdGhlIHByb2JlcyBmb3IgZWFjaCByZWdpb24mIzM5O3NcbiBzYW1wbGluZyBtZW1vcnkgd2hlbiBpdCBkb2VzIHRoZSBhY2Nlc3MgOnJlZjpgc2FtcGxpbmdcbkBAIC0zMDUsNiAmIzQzOzMxMSwxMyBAQCBVc2VycyBjYW4gdGhlcmVmb3JlIGtub3cgaG93IG11Y2ggb2YgYSBnaXZlbiBEQU1PTiByZWdpb24gaGFzIGEgc3BlY2lmaWMgZGF0YVxuIGF0dHJpYnV0ZSBieSByZWFkaW5nIHRoZSBwZXItcmVnaW9uIHBlci1wcm9iZSBwcm9iZSBoaXRzIGNvdW50ZXIgYWZ0ZXIgZWFjaFxuIGFnZ3JlZ2F0aW9uIGludGVydmFsLlxuIFxuJiM0MztVc2VycyBjYW4gb3B0aW9uYWxseSByZWdpc3RlciBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgcGVyIHByb2JlLiAgSWYgc3VjaFxuJiM0MzthY3Rpb25zIGFyZSByZWdpc3RlcmVkLCBEQU1PTiBhcHBsaWVzIHRoZSBhY3Rpb25zIHRvIGVhY2ggcmVnaW9uJiMzOTtzIHNhbXBsaW5nXG4mIzQzO21lbW9yeSBiZWZvcmUgc3RhcnRpbmcgdGhlIG5leHQgc2FtcGxpbmcgaW50ZXJ2YWwuICBDdXJyZW50bHkgb25seSBvbmUgYWN0aW9uLFxuJiM0MztgYHNldF9wZ2lkbGVgYCBpcyBzdXBwb3J0ZWQuICBUaGUgYWN0aW9uIG1hcmtzIHRoZSBwYWdlIGZvciB0aGUgcHJvYmluZyB0YXJnZXRcbiYjNDM7bWVtb3J5IGFzIGFjY2Vzcy1pZGxlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aFxuJiM0MztgYHBnaWRsZV91bnNldGBgIHByb2JlIGZpbHRlci5cbiYjNDM7XG4gVGhpcyBpcyBhIHNhbXBsaW5nIGJhc2VkIG1lY2hhbmlzbS4gIEhlbmNlLCBpdCBpcyBsaWdodHdlaWdodCBidXQgdGhlIG91dHB1dFxuIG1heSBpbmNsdWRlIHNvbWUgbWVhc3VyZW1lbnQgZXJyb3JzLiAgVGhlIG91dHB1dCBzaG91bGQgYmUgdXNlZCB3aXRoIGdvb2RcbiB1bmRlcnN0YW5kaW5nIG9mIHN0YXRpc3RpY3MuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCAwYzhiN2RkZWY5YWJiMy4uZmUyYzZiNTZkMWQ1MzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTYyNyw2ICYjNDM7NjI3LDcgQEAgZW51bSBkYW1vbl9vcHNfaWQge1xuICAqIEB1cGRhdGU6XHRcdFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXG4gICogQHByZXBhcmVfYWNjZXNzX2NoZWNrczpcdFByZXBhcmUgbmV4dCBhY2Nlc3MgY2hlY2sgb2YgdGFyZ2V0IHJlZ2lvbnMuXG4gICogQGNoZWNrX2FjY2Vzc2VzOlx0XHRDaGVjayB0aGUgYWNjZXNzZXMgdG8gdGFyZ2V0IHJlZ2lvbnMuXG4mIzQzOyAqIEBwcmVwX3Byb2JlczpcdFx0UHJlcGFyZSBhcHBseWluZyBwcm9iZXMgZm9yIGVhY2ggcmVnaW9uLlxuICAqIEBhcHBseV9wcm9iZXM6XHRcdEFwcGx5IHByb2JlcyBmb3IgZWFjaCByZWdpb24uXG4gICogQGdldF9zY2hlbWVfc2NvcmU6XHRcdEdldCB0aGUgc2NvcmUgb2YgYSByZWdpb24gZm9yIGEgc2NoZW1lLlxuICAqIEBhcHBseV9zY2hlbWU6XHRcdEFwcGx5IGEgREFNT04tYmFzZWQgb3BlcmF0aW9uIHNjaGVtZS5cbkBAIC02NTQsNiAmIzQzOzY1NSw4IEBAIGVudW0gZGFtb25fb3BzX2lkIHtcbiAgKiBsYXN0IHByZXBhcmF0aW9uIGFuZCB1cGRhdGUgdGhlIG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyBvZiBlYWNoIHJlZ2lvbi5cbiAgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4IG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyB0aGF0IG1hZGUgYXMgYSByZXN1bHRcbiAgKiBvZiBpdHMgdXBkYXRlLiAgVGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBmb3IgcmVnaW9ucyBhZGp1c3RtZW50IHRocmVzaG9sZC5cbiYjNDM7ICogQHByZXBfcHJvYmVzIHNob3VsZCBleGVjdXRlIHJlcXVpcmVkIFx1MDAyNnN0cnVjdCBkYW1vbl9wcmVwIGZvciBuZXh0IFx1MDAyNnN0cnVjdFxuJiM0MzsgKiBkYW1vbl9wcm9iZSBhcHBsaWNhdGlvbnMgdG8gZWFjaCByZWdpb24uXG4gICogQGFwcGx5X3Byb2JlcyBzaG91bGQgYXBwbHkgdGhlIGRhdGEgYXR0cmlidXRlIHByb2JlcyB0byBlYWNoIHJlZ2lvbiBhbmRcbiAgKiBhY2NvcmRpbmdseSB1cGRhdGUgdGhlIHByb2JlIGhpdHMgY291bnRlciBvZiB0aGUgcmVnaW9uLiAgSXQgc2hvdWxkIGFsc29cbiAgKiBzZXQgXHUwMDI2ZGFtb25fcmVnaW9uLVx1MDAzZXNhbXBsaW5nX2FkZHIgb2YgZWFjaCByZWdpb24gaWYgYGBzZXRfc2FtcGxlc2BgIGlzIHRydWUuXG5AQCAtNjc2LDYgJiM0Mzs2NzksNyBAQCBzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyB7XG4gXHR2b2lkICgqdXBkYXRlKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbiBcdHZvaWQgKCpwcmVwYXJlX2FjY2Vzc19jaGVja3MpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xuIFx0dW5zaWduZWQgaW50ICgqY2hlY2tfYWNjZXNzZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xuJiM0MztcdHZvaWQgKCpwcmVwX3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCwgYm9vbCBzZXRfc2FtcGxlcyk7XG4gXHR1bnNpZ25lZCBpbnQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG4gXHRcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pO1xuIFx0aW50ICgqZ2V0X3NjaGVtZV9zY29yZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbkBAIC03MzksMTUgJiM0Mzs3NDMsMzggQEAgc3RydWN0IGRhbW9uX2ludGVydmFsc19nb2FsIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X3NhbXBsZV91cztcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZW51bSBkYW1vbl9wcmVwX2FjdGlvbiAtIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBAREFNT05fUFJFUF9TRVRfUEdJRExFOlx0U2V0IHRoZSBwcm9iaW5nIG1lbW9yeSBhcyBpZGxlIHBhZ2UuXG4mIzQzOyAqL1xuJiM0MztlbnVtIGRhbW9uX3ByZXBfYWN0aW9uIHtcbiYjNDM7XHREQU1PTl9QUkVQX1NFVF9QR0lETEUsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGRhbW9uX3ByZXAgLSBEQU1PTiBwcm9iaW5nIHByZXBhcmF0aW9uIHJlcXVlc3QuXG4mIzQzOyAqXG4mIzQzOyAqIEBhY3Rpb246XHRBY3Rpb24gdG8gZG8gdG8gdGhlIHByb2JpbmcgbWVtb3J5IGZvciB0aGUgcHJlcGFyYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgZGFtb25fcHJlcCB7XG4mIzQzO1x0ZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb247XG4mIzQzOy8qIHByaXZhdGU6ICovXG4mIzQzO1x0Lyogc2libGluZ3MgbGlzdC4gKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIGVudW0gZGFtb25fZmlsdGVyX3R5cGUgLSBUeXBlIG9mIFx1MDAyNnN0cnVjdCBkYW1vbl9maWx0ZXJcbiAgKlxuLSAqIEBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlx0QW5vbnltb3VzIHBhZ2VzLlxuLSAqIEBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcdFNwZWNpZmljIG1lbWNnJiMzOTtzIHBhZ2VzLlxuJiM0MzsgKiBAREFNT05fRklMVEVSX1RZUEVfQU5PTjpcdFx0QW5vbnltb3VzIHBhZ2VzLlxuJiM0MzsgKiBAREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XHRcdFNwZWNpZmljIG1lbWNnJiMzOTtzIHBhZ2VzLlxuJiM0MzsgKiBAREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlx0UGdpZGxlIGlzIHVuc2V0LlxuICAqL1xuIGVudW0gZGFtb25fZmlsdGVyX3R5cGUge1xuIFx0REFNT05fRklMVEVSX1RZUEVfQU5PTixcbiBcdERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHLFxuJiM0MztcdERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVCxcbiB9O1xuIFxuIC8qKlxuQEAgLTc3OCw2ICYjNDM7ODA1LDggQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gc3RydWN0IGRhbW9uX3Byb2JlIHtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XG4gLyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBQcmVwYXJhdGlvbiBhY3Rpb25zIHRvIGFwcGx5IHRvIGVhY2ggcHJvYmluZyBtZW1vcnkuICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBwcmVwcztcbiBcdC8qIEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcbiBcdC8qIFNpYmxpbmdzIGxpc3QuICovXG5AQCAtOTU3LDYgJiM0Mzs5ODYsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3N6X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuIFx0cmV0dXJuIHItXHUwMDNlYXIuZW5kIC0gci1cdTAwM2Vhci5zdGFydDtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcmVwKSBcXFxuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2KHByZXApLVx1MDAzZXByZXBzLCBsaXN0KVxuJiM0MztcbiYjNDM7I2RlZmluZSBkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUocCwgbmV4dCwgcHJlcCkgXFxcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgXHUwMDI2KHByZXApLVx1MDAzZXByZXBzLCBsaXN0KVxuJiM0MztcbiAjZGVmaW5lIGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSBcXFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmLCBcdTAwMjYocCktXHUwMDNlZmlsdGVycywgbGlzdClcbiBcbkBAIC0xMDEwLDYgJiM0MzsxMDQ1LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3N6X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuIFxuICNpZmRlZiBDT05GSUdfREFNT05cbiBcbiYjNDM7c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKTtcbiYjNDM7dm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKTtcbiYjNDM7XG4gc3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG4gXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpO1xuIHZvaWQgZGFtb25fYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjA2Li5kNWIxZTBiNTg1MWExYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTExLDYgJiM0MzsxMTEsNjMgQEAgaW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbmV3X3ByZXAoZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcbiYjNDM7XG4mIzQzO1x0cHJlcCA9IGttYWxsb2Nfb2JqKCpwcmVwKTtcbiYjNDM7XHRpZiAoIXByZXApXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRwcmVwLVx1MDAzZWFjdGlvbiA9IGFjdGlvbjtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcmVwLVx1MDAzZWxpc3QpO1xuJiM0MztcdHJldHVybiBwcmVwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXG4mIzQzO3tcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNnByZXAtXHUwMDNlbGlzdCwgXHUwMDI2cC1cdTAwM2VwcmVwcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2RlbF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxuJiM0Mzt7XG4mIzQzO1x0bGlzdF9kZWwoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxuJiM0Mzt7XG4mIzQzO1x0a2ZyZWUocCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqcClcbiYjNDM7e1xuJiM0MztcdGRhbW9uX2RlbF9wcmVwKHApO1xuJiM0MztcdGRhbW9uX2ZyZWVfcHJlcChwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkYW1vbl9wcmVwICpkYW1vbl9udGhfcHJlcChpbnQgbiwgc3RydWN0IGRhbW9uX3Byb2JlICpwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcmVwKHByZXAsIHApIHtcbiYjNDM7XHRcdGlmIChpJiM0MzsmIzQzOyA9PSBuKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJlcDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgYykge1xuJiM0MztcdFx0ZGFtb25fZm9yX2VhY2hfcHJlcChwcmVwLCBwcm9iZSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbiBcdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbiB7XG5AQCAtMTY3LDYgJiM0MzsyMjQsNyBAQCBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxuIFx0aWYgKCFwKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdHAtXHUwMDNld2VpZ2h0ID0gMDtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZXByZXBzKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnAtXHUwMDNlZmlsdGVycyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuIFx0cmV0dXJuIHA7XG5AQCAtMTg0LDggJiM0MzsyNDIsMTEgQEAgc3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbiB7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3ByZXAgKnByZXAsICpwcmVwX25leHQ7XG4gXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmLCAqbmV4dDtcbiBcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUocHJlcCwgcHJlcF9uZXh0LCBwKVxuJiM0MztcdFx0ZGFtb25fZnJlZV9wcmVwKHByZXApO1xuIFx0ZGFtb25fZm9yX2VhY2hfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcClcbiBcdFx0ZGFtb25fZnJlZV9maWx0ZXIoZik7XG4gXHRrZnJlZShwKTtcbkBAIC0xNjY2LDYgJiM0MzsxNzI3LDM2IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKmRzdCwgc3RydWN0IGRhbW9uX3ByZXAgKnNyYylcbiYjNDM7e1xuJiM0MztcdGRzdC1cdTAwM2VhY3Rpb24gPSBzcmMtXHUwMDNlYWN0aW9uO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCwgc3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqZHN0X3ByZXAsICpuZXh0LCAqc3JjX3ByZXAsICpuZXdfcHJlcDtcbiYjNDM7XHRpbnQgaSA9IDAsIGogPSAwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUoZHN0X3ByZXAsIG5leHQsIGRzdCkge1xuJiM0MztcdFx0c3JjX3ByZXAgPSBkYW1vbl9udGhfcHJlcChpJiM0MzsmIzQzOywgc3JjKTtcbiYjNDM7XHRcdGlmIChzcmNfcHJlcClcbiYjNDM7XHRcdFx0ZGFtb25fY29tbWl0X3ByZXAoZHN0X3ByZXAsIHNyY19wcmVwKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZGFtb25fZGVzdHJveV9wcmVwKGRzdF9wcmVwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShzcmNfcHJlcCwgbmV4dCwgc3JjKSB7XG4mIzQzO1x0XHRpZiAoaiYjNDM7JiM0MzsgXHUwMDNjIGkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG5ld19wcmVwID0gZGFtb25fbmV3X3ByZXAoc3JjX3ByZXAtXHUwMDNlYWN0aW9uKTtcbiYjNDM7XHRcdGlmICghbmV3X3ByZXApXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0ZGFtb25fYWRkX3ByZXAoZHN0LCBuZXdfcHJlcCk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxuIFx0XHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXG4ge1xuQEAgLTE3MjQsNiAmIzQzOzE4MTUsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRcdHNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShpJiM0MzsmIzQzOywgc3JjKTtcbiBcdFx0aWYgKHNyY19wcm9iZSkge1xuIFx0XHRcdGRzdF9wcm9iZS1cdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXHUwMDNld2VpZ2h0O1xuJiM0MztcdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE3NDEsNiAmIzQzOzE4MzUsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdGRhbW9uX2FkZF9wcm9iZShkc3QsIG5ld19wcm9iZSk7XG4gXHRcdG5ld19wcm9iZS1cdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXHUwMDNld2VpZ2h0O1xuJiM0MztcdFx0ZXJyID0gZGFtb25fY29tbWl0X3ByZXBzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTM3ODUsNiAmIzQzOzM4ODIsNyBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiBcdFx0dW5zaWduZWQgbG9uZyBuZXh0X29wc191cGRhdGVfc2lzID0gY3R4LVx1MDAzZW5leHRfb3BzX3VwZGF0ZV9zaXM7XG4gXHRcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcbiBcdFx0Ym9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xuJiM0MztcdFx0Ym9vbCBoYXNfcHJlcCA9IGRhbW9uX2hhc19wcmVwKGN0eCk7XG4gXHRcdHVuc2lnbmVkIGludCBtYXhfbWVyZ2Vfc2NvcmUgPSAwLCBtYXhfd3N1bTtcbiBcdFx0Ym9vbCBnZXRfbWF4X3dzdW07XG4gXG5AQCAtMzc5Myw2ICYjNDM7Mzg5MSw4IEBAIHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuIFxuIFx0XHRpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MpXG4gXHRcdFx0Y3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MoY3R4KTtcbiYjNDM7XHRcdGlmIChjdHgtXHUwMDNlb3BzLnByZXBfcHJvYmVzKVxuJiM0MztcdFx0XHRjdHgtXHUwMDNlb3BzLnByZXBfcHJvYmVzKGN0eCwgaGFzX3ByZXApO1xuIFxuIFx0XHRrZGFtb25kX3VzbGVlcChzYW1wbGVfaW50ZXJ2YWwpO1xuIFx0XHRjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMmIzQzOyYjNDM7O1xuQEAgLTM4MDcsNyAmIzQzOzM5MDcsOCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRnZXRfbWF4X3dzdW0gPSBmYWxzZTtcbiBcdFx0XHRtYXhfd3N1bSA9IGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcbi1cdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkLCBnZXRfbWF4X3dzdW0pO1xuJiM0MztcdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiAhaGFzX3ByZXAsXG4mIzQzO1x0XHRcdFx0XHRnZXRfbWF4X3dzdW0pO1xuIFx0XHRcdGlmIChnZXRfbWF4X3dzdW0pXG4gXHRcdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgPSBtYXhfd3N1bTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCA1YTZhNzgwNTQ3ODRhZi4uOGQ4ZmNkMTM2OWU1NjggMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMTA1LDYgJiM0MzsxMDUsNDAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gbWF4X25yX2FjY2Vzc2VzO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkge1xuJiM0MztcdFx0c3dpdGNoIChwLVx1MDAzZWFjdGlvbikge1xuJiM0MztcdFx0Y2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6XG4mIzQzO1x0XHRcdGRhbW9uX3BhX21rb2xkKGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZXNhbXBsaW5nX2FkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQpKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG4mIzQzO1xuJiM0MztcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbiYjNDM7XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4mIzQzO1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbiYjNDM7XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbiYjNDM7XHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuJiM0MztcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG4mIzQzO1x0XHRcdFx0ZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHIsIHAsIGN0eCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuQEAgLTEzMiw2ICYjNDM7MTY2LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlxuJiM0MztcdFx0aWYgKCFmb2xpbylcbiYjNDM7XHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC00NDAsNiAmIzQzOzQ4MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXG4gXHRcdC51cGRhdGUgPSBOVUxMLFxuIFx0XHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxuIFx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyxcbiYjNDM7XHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3BhX3ByZXBfcHJvYmVzLFxuIFx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxuIFx0XHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcbiBcdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMjcuLmQ0NGQ1YmI5ZThmYmY4IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTc1MCw2ICYjNDM7NzUwLDIxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XG4gXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ3JvdXBzLFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIHByZXAgZGlyZWN0b3J5XG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAge1xuJiM0MztcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4mIzQzO1x0ZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb247XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKmRhbW9uX3N5c2ZzX3ByZXBfYWxsb2Modm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpwcmVwO1xuJiM0MztcbiYjNDM7XHRwcmVwID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXApO1xuJiM0MztcdGlmICghcHJlcClcbiYjNDM7XHRcdHJldHVybiBwcmVwO1xuJiM0MztcdHByZXAtXHUwMDNlYWN0aW9uID0gREFNT05fUFJFUF9TRVRfUEdJRExFO1xuJiM0MztcdHJldHVybiBwcmVwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSB7XG4mIzQzO1x0ZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb247XG4mIzQzO1x0Y2hhciAqbmFtZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZVxuJiM0MztkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lc1tdID0ge1xuJiM0MztcdHtcbiYjNDM7XHRcdC5hY3Rpb24gPSBEQU1PTl9QUkVQX1NFVF9QR0lETEUsXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3NldF9wZ2lkbGVcJiMzNDssXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHByZXBfYWN0aW9uX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpwcmVwID0gY29udGFpbmVyX29mKGtvYmosXG4mIzQzO1x0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwLCBrb2JqKTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSAqYWN0aW9uX25hbWU7XG4mIzQzO1xuJiM0MztcdFx0YWN0aW9uX25hbWUgPSBcdTAwMjZkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lc1tpXTtcbiYjNDM7XHRcdGlmIChhY3Rpb25fbmFtZS1cdTAwM2VhY3Rpb24gPT0gcHJlcC1cdTAwM2VhY3Rpb24pXG4mIzQzO1x0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssIGFjdGlvbl9uYW1lLVx1MDAzZW5hbWUpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgcHJlcF9hY3Rpb25fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXAgPSBjb250YWluZXJfb2Yoa29iaixcbiYjNDM7XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAsIGtvYmopO1xuJiM0MztcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSAqYWN0aW9uX25hbWU7XG4mIzQzO1xuJiM0MztcdFx0YWN0aW9uX25hbWUgPSBcdTAwMjZkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lc1tpXTtcbiYjNDM7XHRcdGlmIChzeXNmc19zdHJlcShidWYsIGFjdGlvbl9uYW1lLVx1MDAzZW5hbWUpKSB7XG4mIzQzO1x0XHRcdHByZXAtXHUwMDNlYWN0aW9uID0gYWN0aW9uX25hbWUtXHUwMDNlYWN0aW9uO1xuJiM0MztcdFx0XHRyZXQgPSBjb3VudDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpwcmVwID0gY29udGFpbmVyX29mKGtvYmosXG4mIzQzO1x0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwLCBrb2JqKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUocHJlcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcHJlcF9wcmVwX2FjdGlvbl9hdHRyID1cbiYjNDM7XHRcdF9fQVRUUl9SV19NT0RFKHByZXBfYWN0aW9uLCAwNjAwKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19wcmVwX2F0dHJzW10gPSB7XG4mIzQzO1x0XHUwMDI2ZGFtb25fc3lzZnNfcHJlcF9wcmVwX2FjdGlvbl9hdHRyLmF0dHIsXG4mIzQzO1x0TlVMTCxcbiYjNDM7fTtcbiYjNDM7QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19wcmVwKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBfa3R5cGUgPSB7XG4mIzQzO1x0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2UsXG4mIzQzO1x0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxuJiM0MztcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3ByZXBfZ3JvdXBzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogcHJlcHMgZGlyZWN0b3J5XG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzIHtcbiYjNDM7XHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICoqcHJlcHNfYXJyO1xuJiM0MztcdGludCBucjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKmRhbW9uX3N5c2ZzX3ByZXBzX2FsbG9jKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKipwcmVwc19hcnIgPSBwcmVwcy1cdTAwM2VwcmVwc19hcnI7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByZXBzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0a29iamVjdF9kZWwoXHUwMDI2cHJlcHNfYXJyW2ldLVx1MDAzZWtvYmopO1xuJiM0MztcdFx0a29iamVjdF9wdXQoXHUwMDI2cHJlcHNfYXJyW2ldLVx1MDAzZWtvYmopO1xuJiM0MztcdH1cbiYjNDM7XHRwcmVwcy1cdTAwM2VuciA9IDA7XG4mIzQzO1x0a2ZyZWUocHJlcHNfYXJyKTtcbiYjNDM7XHRwcmVwcy1cdTAwM2VwcmVwc19hcnIgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHMsXG4mIzQzO1x0XHRpbnQgbnJfcHJlcHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqKnByZXBzX2FyciwgKnByZXA7XG4mIzQzO1x0aW50IGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7XG4mIzQzO1x0aWYgKCFucl9wcmVwcylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRwcmVwc19hcnIgPSBrbWFsbG9jX29ianMoKnByZXBzX2FyciwgbnJfcHJlcHMsXG4mIzQzO1x0XHRcdFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4mIzQzO1x0aWYgKCFwcmVwc19hcnIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRwcmVwcy1cdTAwM2VwcmVwc19hcnIgPSBwcmVwc19hcnI7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ByZXBzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cHJlcCA9IGRhbW9uX3N5c2ZzX3ByZXBfYWxsb2MoKTtcbiYjNDM7XHRcdGlmICghcHJlcCkge1xuJiM0MztcdFx0XHRkYW1vbl9zeXNmc19wcmVwc19ybV9kaXJzKHByZXBzKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2cHJlcC1cdTAwM2Vrb2JqLFxuJiM0MztcdFx0XHRcdFx1MDAyNmRhbW9uX3N5c2ZzX3ByZXBfa3R5cGUsIFx1MDAyNnByZXBzLVx1MDAzZWtvYmosIFwmIzM0OyVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGkpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRrb2JqZWN0X3B1dChcdTAwMjZwcmVwLVx1MDAzZWtvYmopO1xuJiM0MztcdFx0XHRkYW1vbl9zeXNmc19wcmVwc19ybV9kaXJzKHByZXBzKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRwcmVwc19hcnJbaV0gPSBwcmVwO1xuJiM0MztcdFx0cHJlcHMtXHUwMDNlbnImIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgbnJfcHJlcHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0Y2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcyA9IGNvbnRhaW5lcl9vZihrb2JqLFxuJiM0MztcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCBwcmVwcy1cdTAwM2Vucik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG5yX3ByZXBzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuJiM0MztcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHM7XG4mIzQzO1x0aW50IG5yLCBlcnIgPSBrc3RydG9pbnQoYnVmLCAwLCBcdTAwMjZucik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdGlmIChuciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRwcmVwcyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopO1xuJiM0MztcbiYjNDM7XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdGVyciA9IGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzKHByZXBzLCBucik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4mIzQzO3tcbiYjNDM7XHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzLCBrb2JqKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcHJlcHNfbnJfYXR0ciA9XG4mIzQzO1x0XHRfX0FUVFJfUldfTU9ERShucl9wcmVwcywgMDYwMCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfcHJlcHNfYXR0cnNbXSA9IHtcbiYjNDM7XHRcdTAwMjZkYW1vbl9zeXNmc19wcmVwc19ucl9hdHRyLmF0dHIsXG4mIzQzO1x0TlVMTCxcbiYjNDM7fTtcbiYjNDM7QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19wcmVwcyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcmVwc19rdHlwZSA9IHtcbiYjNDM7XHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2UsXG4mIzQzO1x0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxuJiM0MztcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3ByZXBzX2dyb3VwcyxcbiYjNDM7fTtcbiYjNDM7XG4gLypcbiAgKiBmaWx0ZXIgZGlyZWN0b3J5XG4gICovXG5AQCAtNzgyLDYgJiM0Mzs5OTUsMTAgQEAgZGFtb25fc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbiBcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcbiBcdFx0Lm5hbWUgPSBcJiMzNDttZW1jZ1wmIzM0OyxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQsXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3BnaWRsZV91bnNldFwmIzM0OyxcbiYjNDM7XHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTEwNjYsNiAmIzQzOzEyODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlID0ge1xuIHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSB7XG4gXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuIFx0dW5zaWduZWQgaW50IHdlaWdodDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzO1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKmZpbHRlcnM7XG4gfTtcbiBcbkBAIC0xMDc2LDI1ICYjNDM7MTI5NCw1MCBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpkYW1vbl9zeXNmc19wcm9iZV9hbGxvYyh2b2lkKVxuIFxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcHJvYmVfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSlcbiB7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcztcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzICpmaWx0ZXJzO1xuIFx0aW50IGVycjtcbiBcbi1cdGZpbHRlcnMgPSBkYW1vbl9zeXNmc19maWx0ZXJzX2FsbG9jKCk7XG4tXHRpZiAoIWZpbHRlcnMpXG4mIzQzO1x0cHJlcHMgPSBkYW1vbl9zeXNmc19wcmVwc19hbGxvYygpO1xuJiM0MztcdGlmICghcHJlcHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdHByb2JlLVx1MDAzZXByZXBzID0gcHJlcHM7XG4mIzQzO1xuJiM0MztcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFx1MDAyNnByZXBzLVx1MDAzZWtvYmosIFx1MDAyNmRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlLFxuJiM0MztcdFx0XHRcdTAwMjZwcm9iZS1cdTAwM2Vrb2JqLCBcJiMzNDtwcmVwc1wmIzM0Oyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gcHV0X3ByZXBzX291dDtcbiYjNDM7XG4mIzQzO1x0ZmlsdGVycyA9IGRhbW9uX3N5c2ZzX2ZpbHRlcnNfYWxsb2MoKTtcbiYjNDM7XHRpZiAoIWZpbHRlcnMpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGRlbF9wcmVwc19vdXQ7XG4mIzQzO1x0fVxuIFx0cHJvYmUtXHUwMDNlZmlsdGVycyA9IGZpbHRlcnM7XG4gXG4gXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZmaWx0ZXJzLVx1MDAzZWtvYmosIFx1MDAyNmRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUsXG4gXHRcdFx0XHUwMDI2cHJvYmUtXHUwMDNla29iaiwgXCYjMzQ7ZmlsdGVyc1wmIzM0Oyk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGtvYmplY3RfcHV0KFx1MDAyNmZpbHRlcnMtXHUwMDNla29iaik7XG4tXHRcdHByb2JlLVx1MDAzZWZpbHRlcnMgPSBOVUxMO1xuLVx0fVxuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIHB1dF9maWx0ZXJzX291dDtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7cHV0X2ZpbHRlcnNfb3V0OlxuJiM0MztcdGtvYmplY3RfcHV0KFx1MDAyNmZpbHRlcnMtXHUwMDNla29iaik7XG4mIzQzO1x0cHJvYmUtXHUwMDNlZmlsdGVycyA9IE5VTEw7XG4mIzQzO2RlbF9wcmVwc19vdXQ6XG4mIzQzO1x0a29iamVjdF9kZWwoXHUwMDI2cHJlcHMtXHUwMDNla29iaik7XG4mIzQzO3B1dF9wcmVwc19vdXQ6XG4mIzQzO1x0a29iamVjdF9wdXQoXHUwMDI2cHJlcHMtXHUwMDNla29iaik7XG4mIzQzO1x0cHJvYmUtXHUwMDNlcHJlcHMgPSBOVUxMO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJvYmVfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlKVxuIHtcbiYjNDM7XHRpZiAocHJvYmUtXHUwMDNlcHJlcHMpIHtcbiYjNDM7XHRcdGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMocHJvYmUtXHUwMDNlcHJlcHMpO1xuJiM0MztcdFx0a29iamVjdF9wdXQoXHUwMDI2cHJvYmUtXHUwMDNlcHJlcHMtXHUwMDNla29iaik7XG4mIzQzO1x0fVxuIFx0aWYgKHByb2JlLVx1MDAzZWZpbHRlcnMpIHtcbiBcdFx0ZGFtb25fc3lzZnNfZmlsdGVyc19ybV9kaXJzKHByb2JlLVx1MDAzZWZpbHRlcnMpO1xuIFx0XHRrb2JqZWN0X3B1dChcdTAwMjZwcm9iZS1cdTAwM2VmaWx0ZXJzLVx1MDAzZWtvYmopO1xuQEAgLTE5MzMsNiAmIzQzOzIxNzYsMjMgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3ByZXBzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnN5c19wcmVwcylcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNfcHJlcHMtXHUwMDNlbnI7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqc3lzX3ByZXAgPSBzeXNfcHJlcHMtXHUwMDNlcHJlcHNfYXJyW2ldO1xuJiM0MztcdFx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XG4mIzQzO1xuJiM0MztcdFx0cHJlcCA9IGRhbW9uX25ld19wcmVwKHN5c19wcmVwLVx1MDAzZWFjdGlvbik7XG4mIzQzO1x0XHRpZiAoIXByZXApXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0ZGFtb25fYWRkX3ByZXAocHJvYmUsIHByZXApO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXG4gXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzICpzeXNfZmlsdGVycylcbiB7XG5AQCAtMTk2OCw3ICYjNDM7MjIyOCwxNSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuIFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnN5c19wcm9iZSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqc3lzX2ZpbHRlcnM7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpzeXNfcHJlcHM7XG4mIzQzO1x0aW50IGVycjtcbiBcbiYjNDM7XHRzeXNfcHJlcHMgPSBzeXNfcHJvYmUtXHUwMDNlcHJlcHM7XG4mIzQzO1x0aWYgKHN5c19wcmVwcykge1xuJiM0MztcdFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3ByZXBzKHByb2JlLCBzeXNfcHJlcHMpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXHRzeXNfZmlsdGVycyA9IHN5c19wcm9iZS1cdTAwM2VmaWx0ZXJzO1xuIFx0aWYgKCFzeXNfZmlsdGVycylcbiBcdFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaFxuaW5kZXggZjdmYjk0Yjg0ZTcxNmQuLmRkZWJkZTZlZGFiZTRlIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXG5AQCAtMzYxLDYgJiM0MzszNjEsMzIgQEAgdGVzdF9pbnRlcnZhbHMoKVxuIFx0dGVzdF9pbnRlcnZhbHNfZ29hbCBcJiMzNDskaW50ZXJ2YWxzX2Rpci9pbnRlcnZhbHNfZ29hbFwmIzM0O1xuIH1cbiBcbiYjNDM7dGVzdF9kYW1vbl9wcmVwKClcbiYjNDM7e1xuJiM0MztcdGRhbW9uX3ByZXBfZGlyPSQxXG4mIzQzO1x0ZW5zdXJlX2ZpbGUgXCYjMzQ7JGRhbW9uX3ByZXBfZGlyL3ByZXBfYWN0aW9uXCYjMzQ7IFwmIzM0O2V4aXN0XCYjMzQ7IFwmIzM0OzYwMFwmIzM0O1xuJiM0MztcdGVuc3VyZV93cml0ZV9zdWNjIFwmIzM0OyRkYW1vbl9wcmVwX2Rpci9wcmVwX2FjdGlvblwmIzM0OyBcJiMzNDtzZXRfcGdpZGxlXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDt2YWxpZCBpbnB1dFwmIzM0O1xuJiM0MztcdGVuc3VyZV93cml0ZV9mYWlsIFwmIzM0OyRkYW1vbl9wcmVwX2Rpci9wcmVwX2FjdGlvblwmIzM0OyBcJiMzNDtmb29cJiMzNDsgXCYjMzQ7aW52YWxpZCBpbnB1dFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0ZXN0X2RhbW9uX3ByZXBzKClcbiYjNDM7e1xuJiM0MztcdHByZXBzX2Rpcj0kMVxuJiM0MztcdGVuc3VyZV9kaXIgXCYjMzQ7JHByZXBzX2RpclwmIzM0OyBcJiMzNDtleGlzdFwmIzM0O1xuJiM0MztcdGVuc3VyZV9maWxlIFwmIzM0OyRwcmVwc19kaXIvbnJfcHJlcHNcJiMzNDsgXCYjMzQ7ZXhpc3RcJiMzNDsgXCYjMzQ7NjAwXCYjMzQ7XG4mIzQzO1x0ZW5zdXJlX3dyaXRlX3N1Y2MgXCYjMzQ7JHByZXBzX2Rpci9ucl9wcmVwc1wmIzM0OyBcJiMzNDsxXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4mIzQzO1x0dGVzdF9kYW1vbl9wcmVwIFwmIzM0OyRwcmVwc19kaXIvMFwmIzM0O1xuJiM0MztcbiYjNDM7XHRlbnN1cmVfd3JpdGVfc3VjYyAgXCYjMzQ7JHByZXBzX2Rpci9ucl9wcmVwc1wmIzM0OyBcJiMzNDsyXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4mIzQzO1x0dGVzdF9kYW1vbl9wcmVwIFwmIzM0OyRwcmVwc19kaXIvMFwmIzM0O1xuJiM0MztcdHRlc3RfZGFtb25fcHJlcCBcJiMzNDskcHJlcHNfZGlyLzFcJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZW5zdXJlX3dyaXRlX3N1Y2MgXCYjMzQ7JHByZXBzX2Rpci9ucl9wcmVwc1wmIzM0OyBcJiMzNDswXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4mIzQzO1x0ZW5zdXJlX2RpciBcJiMzNDskcHJlcHNfZGlyLzBcJiMzNDsgXCYjMzQ7bm90X2V4aXN0XCYjMzQ7XG4mIzQzO1x0ZW5zdXJlX2RpciBcJiMzNDskcHJlcHNfZGlyLzFcJiMzNDsgXCYjMzQ7bm90X2V4aXN0XCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4gdGVzdF9kYW1vbl9maWx0ZXIoKVxuIHtcbiBcdGRhbW9uX2ZpbHRlcl9kaXI9JDFcbkBAIC0zOTIsNiAmIzQzOzQxOCw3IEBAIHRlc3RfcHJvYmUoKVxuIHtcbiBcdHByb2JlX2Rpcj0kMVxuIFx0ZW5zdXJlX2RpciBcJiMzNDskcHJvYmVfZGlyXCYjMzQ7IFwmIzM0O2V4aXN0XCYjMzQ7XG4mIzQzO1x0dGVzdF9kYW1vbl9wcmVwcyBcJiMzNDskcHJvYmVfZGlyL3ByZXBzXCYjMzQ7XG4gXHR0ZXN0X2RhbW9uX2ZpbHRlcnMgXCYjMzQ7JHByb2JlX2Rpci9maWx0ZXJzXCYjMzQ7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX25ld19wcmVwJiMzNDssCiAgICAmIzM0O2RhbW9uX2FkZF9wcmVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgREFNT04gc3Vic3lzdGVtLCBhbGxvd2luZyB1c2VycyB0byBjb25maWd1cmUgcHJvYmluZyBwcmVwYXJhdGlvbiBhY3Rpb25zIChlLmcuLCBgc2V0X3BnaWRsZWApIGFuZCBhIG5ldyBmaWx0ZXIgdHlwZSAoYHBnaWRsZV91bnNldGApIHZpYSBzeXNmcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRjYWI4ZjEzMTQ1YjM2ZWFhNTI1N2VlNDJiZjhjNjVmZjk1MDM0MjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAyNiAxODo1Mzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24KaW5kZXggZTY3NWE1NzE0NWUzNmQuLjZkNTk2ZmI3ZmExZmZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgpAQCAtMTczLDYgJiM0MzsxNzMsMTkgQEAgQ29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKIERlc2NyaXB0aW9uOglXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlCiAJCXBlci1wcm9iZSBhdHRyaWJ1dGUgd2VpZ2h0LgogCiYjNDM7V2hhdDoJCS9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLyZsdDtLJmd0Oy9jb250ZXh0cy8mbHQ7QyZndDsvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvJmx0O1AmZ3Q7L3ByZXBzL25yX3ByZXBzCiYjNDM7RGF0ZToJCUp1biAyMDI2CiYjNDM7Q29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKJiM0MztEZXNjcmlwdGlvbjoJV3JpdGluZyBhIG51bWJlciAmIzM5O04mIzM5OyB0byB0aGlzIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mCiYjNDM7CQlkaXJlY3RvcmllcyBmb3IgZWFjaCBEQU1PTiBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbiBuYW1lZCAmIzM5OzAmIzM5OwomIzQzOwkJdG8gJiMzOTtOLTEmIzM5OyB1bmRlciB0aGUgcHJlcHMvIGRpcmVjdG9yeS4KJiM0MzsKJiM0MztXaGF0OgkJL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvJmx0O0smZ3Q7L2NvbnRleHRzLyZsdDtDJmd0Oy9tb25pdG9yaW5nX2F0dHJzL3Byb2Jlcy8mbHQ7UCZndDsvcHJlcC8mbHQ7UiZndDsvYWN0aW9uCiYjNDM7RGF0ZToJCUp1biAyMDI2CiYjNDM7Q29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKJiM0MztEZXNjcmlwdGlvbjoJV3JpdGluZyB0byBhbmQgcmVhZGluZyBmcm9tIHRoaXMgZmlsZSBzZXRzIGFuZCBnZXRzIHRoZSBwcm9iaW5nCiYjNDM7CQlwcmVlcGFyYXRpb24gYWN0aW9uLgomIzQzOwogV2hhdDoJCS9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLyZsdDtLJmd0Oy9jb250ZXh0cy8mbHQ7QyZndDsvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvJmx0O1AmZ3Q7L2ZpbHRlcnMvbnJfZmlsdGVycwogRGF0ZToJCU1heSAyMDI2CiBDb250YWN0OglTSiBQYXJrICZsdDtzakBrZXJuZWwub3JnJmd0OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdAppbmRleCBkYTVmOWFmZDA4YWVmOC4uMWY1YTM5ZTFmYzM4ZGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0CkBAIC03NCw2ICYjNDM7NzQsOSBAQCBjb21tYSAoJiMzNDssJiMzNDspLgogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIG5yX3JlZ2lvbnMvbWluLG1heAogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YHByb2JlcyAmbHQ7ZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzJmd0O2AvbnJfcHJvYmVzCiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvd2VpZ2h0CiYjNDM7ICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgcHJlcHMvbnJfcHJlcHMKJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9wcmVwX2FjdGlvbgomIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi4KICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIGZpbHRlcnMvbnJfZmlsdGVycwogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvdHlwZSxtYXRjaGluZyxhbGxvdyxwYXRoCiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uCkBAIC0yODMsOSAmIzQzOzI4NiwxOCBAQCBJbiB0aGUgYmVnaW5uaW5nLCB0aGlzIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcm9iZXNgYC4gIFdyaXRpbmcgYQogbnVtYmVyIChgYE5gYCkgdG8gdGhlIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mIGNoaWxkIGRpcmVjdG9yaWVzIG5hbWVkIGBgMGBgCiB0byBgYE4tMWBgLiAgRWFjaCBkaXJlY3RvcnkgcmVwcmVzZW50cyBlYWNoIG1vbml0b3JpbmcgcHJvYmUuCiAKLUluIGVhY2ggcHJvYmUgZGlyZWN0b3J5LCBvbmUgZGlyZWN0b3J5LCBgYGZpbHRlcnNgYCBleGlzdHMuICBUaGUgZGlyZWN0b3J5Ci1jb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBmaWx0ZXJzIGZvciB0aGUgcHJvYmUsIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUKLXRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlIHByb2JlLgomIzQzO0luIGVhY2ggcHJvYmUgZGlyZWN0b3J5LCB0d28gZGlyZWN0b3JpZXMsIGBgcHJlcHNgYCBhbmQgYGBmaWx0ZXJzYGAgZXhpc3RzLgomIzQzO1RoZSBkaXJlY3RvcmllcyBjb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgYW5kCiYjNDM7ZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlCiYjNDM7cHJvYmUuCiYjNDM7CiYjNDM7SW4gdGhlIGJlZ2lubmluZywgYGBwcmVwc2BgIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcmVwc2BgLgomIzQzO1dyaXRpaW5nIGEgbnVtYmVyIChgYE5gYCkgdG8gdGhlIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mIGNoaWxkIGRpcmVjdG9yaWVzCiYjNDM7bmFtZXMgYGAwYGAgdG8gYGBOLTFgYC4gIEVhY2ggZGlyZWN0b3J5IHJlcHJlc2VudHMgZWFjaCBwcmVwYXJhdGlvbiBhY3Rpb24uCiYjNDM7RWFjaCBkaXJlY3RvcnkgaGFzIG9uZSBmaWxlLCBgYHByZXBfYWN0aW9uYGAuICBUaGUgcHJlcGFyYXRpb24gYWN0aW9uIGNhbiBiZQomIzQzO3NlbGVjdGVkIGJ5IHdyaXRpbmcgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byB0aGUgYGBwcmVwX2FjdGlvbmBgIGZpbGUuICBSZWZlcgomIzQzO3RvIHRoZSA6cmVmOmBkZXNpZ24gZG9jICZsdDtkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nJmd0O2AgZm9yIHRoZSBsaXN0IG9mCiYjNDM7c3VwcG9ydGVkIGFjdGlvbnMuCiAKIEVhY2ggcHJvYmUgZGlyZWN0b3J5IGFsc28gY29udGFpbnMgYGB3ZWlnaHRgYCBmaWxlLiAgUmVhZGluZyBmcm9tIGFuZCB3cml0aW5nCiB0byB0aGUgZmlsZSBnZXRzIGFuZCBzZXRzIHRoZSA6cmVmOmBhdHRyaWJ1dGVzLW9ubHkgbW9uaXRvcmluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CmluZGV4IGFlZDZjYjFjZjQ4MzEwLi4wNmZmZmU1ZTM3ODE5ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdApAQCAtMjkzLDggJiM0MzsyOTMsMTQgQEAgcmVnaXN0cmF0aW9uIGlzIG1hZGUgYnkgc3BlY2lmeWluZyBhIHByb2JlIHBlciBhdHRyaWJ1dGUuICBFYWNoIG9mIHRoZSBwcm9iZQogc3BlY2lmaWVzIGEgcnVsZSB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbiBtZW1vcnkgcmVnaW9uIGhhcyB0aGUgcmVsYXRlZAogYXR0cmlidXRlLiAgVGhlIHJ1bGUgaXMgY29uc3RydWN0ZWQgd2l0aCBtdWx0aXBsZSBmaWx0ZXJzLiAgVGhlIGZpbHRlcnMgd29yawogc2FtZSB0byA6cmVmOmBEQU1PUyBmaWx0ZXJzICZsdDtkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVycyZndDtgIGV4Y2VwdCB0aGUgc3VwcG9ydGVkCi1maWx0ZXIgdHlwZXMuICBDdXJyZW50bHkgb25seSBgYGFub25gYCBhbmQgYGBtZW1jZ2BgIGZpbHRlciB0eXBlcyBhcmUgc3VwcG9ydGVkCi1mb3IgZGF0YSBhdHRyaWJ1dGVzIG1vbml0b3JpbmcuCiYjNDM7ZmlsdGVyIHR5cGVzLiAgQ3VycmVudGx5IGJlbG93IGZpdGxlciB0eXBlcyBhcmUgc3VwcG9ydGVkLgomIzQzOwomIzQzOy0gYGBhbm9uYGA6IFNhbWUgdG8gdGhhdCBmb3IgREFNT1MgZmlsdGVycy4KJiM0MzstIGBgbWVtY2dgYDogU2FtZSB0byB0aGF0IGZvciBEQU1PUyBmaWx0ZXJzLgomIzQzOy0gYGBwZ2lkbGVfdW5zZXRgYDogTWF0Y2hlcyBpZiB0aGUgcGFnZSBmb3IgdGhlIG1lbW9yeSBpcyBtYXJrZWQgYXMgbm90CiYjNDM7ICBhY2Nlc3MtaWRsZS4KJiM0MzsgIE1hdGNoZXMgaWYgdGhlIG1lbW9yeSBpcyBub3QgYmFja2VkIGJ5IHBhZ2VzIHRoYXQgREFNT04gY2FuIGlkbmV0aWZ5CiYjNDM7ICBpZGxlbmVzcy4KIAogSWYgc3VjaCBwcm9iZXMgYXJlIHJlZ2lzdGVyZWQsIERBTU9OIGV4ZWN1dGVzIHRoZSBwcm9iZXMgZm9yIGVhY2ggcmVnaW9uJiMzOTtzCiBzYW1wbGluZyBtZW1vcnkgd2hlbiBpdCBkb2VzIHRoZSBhY2Nlc3MgOnJlZjpgc2FtcGxpbmcKQEAgLTMwNSw2ICYjNDM7MzExLDEzIEBAIFVzZXJzIGNhbiB0aGVyZWZvcmUga25vdyBob3cgbXVjaCBvZiBhIGdpdmVuIERBTU9OIHJlZ2lvbiBoYXMgYSBzcGVjaWZpYyBkYXRhCiBhdHRyaWJ1dGUgYnkgcmVhZGluZyB0aGUgcGVyLXJlZ2lvbiBwZXItcHJvYmUgcHJvYmUgaGl0cyBjb3VudGVyIGFmdGVyIGVhY2gKIGFnZ3JlZ2F0aW9uIGludGVydmFsLgogCiYjNDM7VXNlcnMgY2FuIG9wdGlvbmFsbHkgcmVnaXN0ZXIgcHJvYmluZyBwcmVwYXJhdGlvbiBhY3Rpb25zIHBlciBwcm9iZS4gIElmIHN1Y2gKJiM0MzthY3Rpb25zIGFyZSByZWdpc3RlcmVkLCBEQU1PTiBhcHBsaWVzIHRoZSBhY3Rpb25zIHRvIGVhY2ggcmVnaW9uJiMzOTtzIHNhbXBsaW5nCiYjNDM7bWVtb3J5IGJlZm9yZSBzdGFydGluZyB0aGUgbmV4dCBzYW1wbGluZyBpbnRlcnZhbC4gIEN1cnJlbnRseSBvbmx5IG9uZSBhY3Rpb24sCiYjNDM7YGBzZXRfcGdpZGxlYGAgaXMgc3VwcG9ydGVkLiAgVGhlIGFjdGlvbiBtYXJrcyB0aGUgcGFnZSBmb3IgdGhlIHByb2JpbmcgdGFyZ2V0CiYjNDM7bWVtb3J5IGFzIGFjY2Vzcy1pZGxlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAomIzQzO2BgcGdpZGxlX3Vuc2V0YGAgcHJvYmUgZmlsdGVyLgomIzQzOwogVGhpcyBpcyBhIHNhbXBsaW5nIGJhc2VkIG1lY2hhbmlzbS4gIEhlbmNlLCBpdCBpcyBsaWdodHdlaWdodCBidXQgdGhlIG91dHB1dAogbWF5IGluY2x1ZGUgc29tZSBtZWFzdXJlbWVudCBlcnJvcnMuICBUaGUgb3V0cHV0IHNob3VsZCBiZSB1c2VkIHdpdGggZ29vZAogdW5kZXJzdGFuZGluZyBvZiBzdGF0aXN0aWNzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDBjOGI3ZGRlZjlhYmIzLi5mZTJjNmI1NmQxZDUzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaApAQCAtNjI3LDYgJiM0Mzs2MjcsNyBAQCBlbnVtIGRhbW9uX29wc19pZCB7CiAgKiBAdXBkYXRlOgkJCVVwZGF0ZSBvcGVyYXRpb25zLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLgogICogQHByZXBhcmVfYWNjZXNzX2NoZWNrczoJUHJlcGFyZSBuZXh0IGFjY2VzcyBjaGVjayBvZiB0YXJnZXQgcmVnaW9ucy4KICAqIEBjaGVja19hY2Nlc3NlczoJCUNoZWNrIHRoZSBhY2Nlc3NlcyB0byB0YXJnZXQgcmVnaW9ucy4KJiM0MzsgKiBAcHJlcF9wcm9iZXM6CQlQcmVwYXJlIGFwcGx5aW5nIHByb2JlcyBmb3IgZWFjaCByZWdpb24uCiAgKiBAYXBwbHlfcHJvYmVzOgkJQXBwbHkgcHJvYmVzIGZvciBlYWNoIHJlZ2lvbi4KICAqIEBnZXRfc2NoZW1lX3Njb3JlOgkJR2V0IHRoZSBzY29yZSBvZiBhIHJlZ2lvbiBmb3IgYSBzY2hlbWUuCiAgKiBAYXBwbHlfc2NoZW1lOgkJQXBwbHkgYSBEQU1PTi1iYXNlZCBvcGVyYXRpb24gc2NoZW1lLgpAQCAtNjU0LDYgJiM0Mzs2NTUsOCBAQCBlbnVtIGRhbW9uX29wc19pZCB7CiAgKiBsYXN0IHByZXBhcmF0aW9uIGFuZCB1cGRhdGUgdGhlIG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyBvZiBlYWNoIHJlZ2lvbi4KICAqIEl0IHNob3VsZCBhbHNvIHJldHVybiBtYXggbnVtYmVyIG9mIG9ic2VydmVkIGFjY2Vzc2VzIHRoYXQgbWFkZSBhcyBhIHJlc3VsdAogICogb2YgaXRzIHVwZGF0ZS4gIFRoZSB2YWx1ZSB3aWxsIGJlIHVzZWQgZm9yIHJlZ2lvbnMgYWRqdXN0bWVudCB0aHJlc2hvbGQuCiYjNDM7ICogQHByZXBfcHJvYmVzIHNob3VsZCBleGVjdXRlIHJlcXVpcmVkICZhbXA7c3RydWN0IGRhbW9uX3ByZXAgZm9yIG5leHQgJmFtcDtzdHJ1Y3QKJiM0MzsgKiBkYW1vbl9wcm9iZSBhcHBsaWNhdGlvbnMgdG8gZWFjaCByZWdpb24uCiAgKiBAYXBwbHlfcHJvYmVzIHNob3VsZCBhcHBseSB0aGUgZGF0YSBhdHRyaWJ1dGUgcHJvYmVzIHRvIGVhY2ggcmVnaW9uIGFuZAogICogYWNjb3JkaW5nbHkgdXBkYXRlIHRoZSBwcm9iZSBoaXRzIGNvdW50ZXIgb2YgdGhlIHJlZ2lvbi4gIEl0IHNob3VsZCBhbHNvCiAgKiBzZXQgJmFtcDtkYW1vbl9yZWdpb24tJmd0O3NhbXBsaW5nX2FkZHIgb2YgZWFjaCByZWdpb24gaWYgYGBzZXRfc2FtcGxlc2BgIGlzIHRydWUuCkBAIC02NzYsNiAmIzQzOzY3OSw3IEBAIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIHsKIAl2b2lkICgqdXBkYXRlKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTsKIAl2b2lkICgqcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTsKIAl1bnNpZ25lZCBpbnQgKCpjaGVja19hY2Nlc3Nlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7CiYjNDM7CXZvaWQgKCpwcmVwX3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCwgYm9vbCBzZXRfc2FtcGxlcyk7CiAJdW5zaWduZWQgaW50ICgqYXBwbHlfcHJvYmVzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LAogCQkJYm9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pOwogCWludCAoKmdldF9zY2hlbWVfc2NvcmUpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsCkBAIC03MzksMTUgJiM0Mzs3NDMsMzggQEAgc3RydWN0IGRhbW9uX2ludGVydmFsc19nb2FsIHsKIAl1bnNpZ25lZCBsb25nIG1heF9zYW1wbGVfdXM7CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogZW51bSBkYW1vbl9wcmVwX2FjdGlvbiAtIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uLgomIzQzOyAqCiYjNDM7ICogQERBTU9OX1BSRVBfU0VUX1BHSURMRToJU2V0IHRoZSBwcm9iaW5nIG1lbW9yeSBhcyBpZGxlIHBhZ2UuCiYjNDM7ICovCiYjNDM7ZW51bSBkYW1vbl9wcmVwX2FjdGlvbiB7CiYjNDM7CURBTU9OX1BSRVBfU0VUX1BHSURMRSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBkYW1vbl9wcmVwIC0gREFNT04gcHJvYmluZyBwcmVwYXJhdGlvbiByZXF1ZXN0LgomIzQzOyAqCiYjNDM7ICogQGFjdGlvbjoJQWN0aW9uIHRvIGRvIHRvIHRoZSBwcm9iaW5nIG1lbW9yeSBmb3IgdGhlIHByZXBhcmF0aW9uLgomIzQzOyAqLwomIzQzO3N0cnVjdCBkYW1vbl9wcmVwIHsKJiM0MzsJZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb247CiYjNDM7LyogcHJpdmF0ZTogKi8KJiM0MzsJLyogc2libGluZ3MgbGlzdC4gKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzO307CiYjNDM7CiAvKioKICAqIGVudW0gZGFtb25fZmlsdGVyX3R5cGUgLSBUeXBlIG9mICZhbXA7c3RydWN0IGRhbW9uX2ZpbHRlcgogICoKLSAqIEBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOglBbm9ueW1vdXMgcGFnZXMuCi0gKiBAREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6CVNwZWNpZmljIG1lbWNnJiMzOTtzIHBhZ2VzLgomIzQzOyAqIEBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOgkJQW5vbnltb3VzIHBhZ2VzLgomIzQzOyAqIEBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzoJCVNwZWNpZmljIG1lbWNnJiMzOTtzIHBhZ2VzLgomIzQzOyAqIEBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6CVBnaWRsZSBpcyB1bnNldC4KICAqLwogZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7CiAJREFNT05fRklMVEVSX1RZUEVfQU5PTiwKIAlEQU1PTl9GSUxURVJfVFlQRV9NRU1DRywKJiM0MzsJREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VULAogfTsKIAogLyoqCkBAIC03NzgsNiAmIzQzOzgwNSw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIgewogc3RydWN0IGRhbW9uX3Byb2JlIHsKIAl1bnNpZ25lZCBpbnQgd2VpZ2h0OwogLyogcHJpdmF0ZTogKi8KJiM0MzsJLyogUHJlcGFyYXRpb24gYWN0aW9ucyB0byBhcHBseSB0byBlYWNoIHByb2JpbmcgbWVtb3J5LiAqLwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIHByZXBzOwogCS8qIEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7CiAJLyogU2libGluZ3MgbGlzdC4gKi8KQEAgLTk1Nyw2ICYjNDM7OTg2LDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcikKIAlyZXR1cm4gci0mZ3Q7YXIuZW5kIC0gci0mZ3Q7YXIuc3RhcnQ7CiB9CiAKJiM0MzsjZGVmaW5lIGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJlcCkgXAomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZhbXA7KHByZXApLSZndDtwcmVwcywgbGlzdCkKJiM0MzsKJiM0MzsjZGVmaW5lIGRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShwLCBuZXh0LCBwcmVwKSBcCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCAmYW1wOyhwcmVwKS0mZ3Q7cHJlcHMsIGxpc3QpCiYjNDM7CiAjZGVmaW5lIGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSBcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCAmYW1wOyhwKS0mZ3Q7ZmlsdGVycywgbGlzdCkKIApAQCAtMTAxMCw2ICYjNDM7MTA0NSw5IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcikKIAogI2lmZGVmIENPTkZJR19EQU1PTgogCiYjNDM7c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKTsKJiM0Mzt2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApOwomIzQzOwogc3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsCiAJCWJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpOwogdm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjA2Li5kNWIxZTBiNTg1MWExYSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMTExLDYgJiM0MzsxMTEsNjMgQEAgaW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCkKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3ByZXAgKnByZXA7CiYjNDM7CiYjNDM7CXByZXAgPSBrbWFsbG9jX29iaigqcHJlcCk7CiYjNDM7CWlmICghcHJlcCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlwcmVwLSZndDthY3Rpb24gPSBhY3Rpb247CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7cHJlcC0mZ3Q7bGlzdCk7CiYjNDM7CXJldHVybiBwcmVwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApCiYjNDM7ewomIzQzOwlsaXN0X2FkZF90YWlsKCZhbXA7cHJlcC0mZ3Q7bGlzdCwgJmFtcDtwLSZndDtwcmVwcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2RlbF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKQomIzQzO3sKJiM0MzsJbGlzdF9kZWwoJmFtcDtwLSZndDtsaXN0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKQomIzQzO3sKJiM0MzsJa2ZyZWUocCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqcCkKJiM0Mzt7CiYjNDM7CWRhbW9uX2RlbF9wcmVwKHApOwomIzQzOwlkYW1vbl9mcmVlX3ByZXAocCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbnRoX3ByZXAoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcmVwICpwcmVwOwomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcCkgewomIzQzOwkJaWYgKGkmIzQzOyYjNDM7ID09IG4pCiYjNDM7CQkJcmV0dXJuIHByZXA7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDsKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpIHsKJiM0MzsJCWRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcHJvYmUpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLAogCQlib29sIG1hdGNoaW5nLCBib29sIGFsbG93KQogewpAQCAtMTY3LDYgJiM0MzsyMjQsNyBAQCBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKQogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CiAJcC0mZ3Q7d2VpZ2h0ID0gMDsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtwLSZndDtwcmVwcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtwLSZndDtmaWx0ZXJzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3AtJmd0O2xpc3QpOwogCXJldHVybiBwOwpAQCAtMTg0LDggJiM0MzsyNDIsMTEgQEAgc3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCkKIAogc3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApCiB7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcmVwICpwcmVwLCAqcHJlcF9uZXh0OwogCXN0cnVjdCBkYW1vbl9maWx0ZXIgKmYsICpuZXh0OwogCiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShwcmVwLCBwcmVwX25leHQsIHApCiYjNDM7CQlkYW1vbl9mcmVlX3ByZXAocHJlcCk7CiAJZGFtb25fZm9yX2VhY2hfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcCkKIAkJZGFtb25fZnJlZV9maWx0ZXIoZik7CiAJa2ZyZWUocCk7CkBAIC0xNjY2LDYgJiM0MzsxNzI3LDM2IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpkc3QsIHN0cnVjdCBkYW1vbl9wcmVwICpzcmMpCiYjNDM7ewomIzQzOwlkc3QtJmd0O2FjdGlvbiA9IHNyYy0mZ3Q7YWN0aW9uOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCwgc3RydWN0IGRhbW9uX3Byb2JlICpzcmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fcHJlcCAqZHN0X3ByZXAsICpuZXh0LCAqc3JjX3ByZXAsICpuZXdfcHJlcDsKJiM0MzsJaW50IGkgPSAwLCBqID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJlcF9zYWZlKGRzdF9wcmVwLCBuZXh0LCBkc3QpIHsKJiM0MzsJCXNyY19wcmVwID0gZGFtb25fbnRoX3ByZXAoaSYjNDM7JiM0MzssIHNyYyk7CiYjNDM7CQlpZiAoc3JjX3ByZXApCiYjNDM7CQkJZGFtb25fY29tbWl0X3ByZXAoZHN0X3ByZXAsIHNyY19wcmVwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlkYW1vbl9kZXN0cm95X3ByZXAoZHN0X3ByZXApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShzcmNfcHJlcCwgbmV4dCwgc3JjKSB7CiYjNDM7CQlpZiAoaiYjNDM7JiM0MzsgJmx0OyBpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJbmV3X3ByZXAgPSBkYW1vbl9uZXdfcHJlcChzcmNfcHJlcC0mZ3Q7YWN0aW9uKTsKJiM0MzsJCWlmICghbmV3X3ByZXApCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlkYW1vbl9hZGRfcHJlcChkc3QsIG5ld19wcmVwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCwKIAkJc3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKQogewpAQCAtMTcyNCw2ICYjNDM7MTgxNSw5IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYykKIAkJc3JjX3Byb2JlID0gZGFtb25fbnRoX3Byb2JlKGkmIzQzOyYjNDM7LCBzcmMpOwogCQlpZiAoc3JjX3Byb2JlKSB7CiAJCQlkc3RfcHJvYmUtJmd0O3dlaWdodCA9IHNyY19wcm9iZS0mZ3Q7d2VpZ2h0OwomIzQzOwkJCWVyciA9IGRhbW9uX2NvbW1pdF9wcmVwcyhkc3RfcHJvYmUsIHNyY19wcm9iZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKIAkJCWVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKQEAgLTE3NDEsNiAmIzQzOzE4MzUsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZGFtb25fYWRkX3Byb2JlKGRzdCwgbmV3X3Byb2JlKTsKIAkJbmV3X3Byb2JlLSZndDt3ZWlnaHQgPSBzcmNfcHJvYmUtJmd0O3dlaWdodDsKJiM0MzsJCWVyciA9IGRhbW9uX2NvbW1pdF9wcmVwcyhuZXdfcHJvYmUsIHNyY19wcm9iZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiAJCWVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CkBAIC0zNzg1LDYgJiM0MzszODgyLDcgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpCiAJCXVuc2lnbmVkIGxvbmcgbmV4dF9vcHNfdXBkYXRlX3NpcyA9IGN0eC0mZ3Q7bmV4dF9vcHNfdXBkYXRlX3NpczsKIAkJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbDsKIAkJYm9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpOwomIzQzOwkJYm9vbCBoYXNfcHJlcCA9IGRhbW9uX2hhc19wcmVwKGN0eCk7CiAJCXVuc2lnbmVkIGludCBtYXhfbWVyZ2Vfc2NvcmUgPSAwLCBtYXhfd3N1bTsKIAkJYm9vbCBnZXRfbWF4X3dzdW07CiAKQEAgLTM3OTMsNiAmIzQzOzM4OTEsOCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSkKIAogCQlpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCAmYW1wOyZhbXA7IGN0eC0mZ3Q7b3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcykKIAkJCWN0eC0mZ3Q7b3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcyhjdHgpOwomIzQzOwkJaWYgKGN0eC0mZ3Q7b3BzLnByZXBfcHJvYmVzKQomIzQzOwkJCWN0eC0mZ3Q7b3BzLnByZXBfcHJvYmVzKGN0eCwgaGFzX3ByZXApOwogCiAJCWtkYW1vbmRfdXNsZWVwKHNhbXBsZV9pbnRlcnZhbCk7CiAJCWN0eC0mZ3Q7cGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMmIzQzOyYjNDM7OwpAQCAtMzgwNyw3ICYjNDM7MzkwNyw4IEBAIHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKQogCQkJZWxzZQogCQkJCWdldF9tYXhfd3N1bSA9IGZhbHNlOwogCQkJbWF4X3dzdW0gPSBjdHgtJmd0O29wcy5hcHBseV9wcm9iZXMoY3R4LAotCQkJCQlhY2Nlc3NfY2hlY2tfZGlzYWJsZWQsIGdldF9tYXhfd3N1bSk7CiYjNDM7CQkJCQlhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgJmFtcDsmYW1wOyAhaGFzX3ByZXAsCiYjNDM7CQkJCQlnZXRfbWF4X3dzdW0pOwogCQkJaWYgKGdldF9tYXhfd3N1bSkKIAkJCQltYXhfbWVyZ2Vfc2NvcmUgPSBtYXhfd3N1bTsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggNWE2YTc4MDU0Nzg0YWYuLjhkOGZjZDEzNjllNTY4IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTEwNSw2ICYjNDM7MTA1LDQwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCXJldHVybiBtYXhfbnJfYWNjZXNzZXM7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKJiM0MzsJCXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcmVwICpwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcmVwKHAsIHByb2JlKSB7CiYjNDM7CQlzd2l0Y2ggKHAtJmd0O2FjdGlvbikgewomIzQzOwkJY2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6CiYjNDM7CQkJZGFtb25fcGFfbWtvbGQoZGFtb25fcGFfcGh5c19hZGRyKHItJmd0O3NhbXBsaW5nX2FkZHIsCiYjNDM7CQkJCQkJY3R4LSZndDthZGRyX3VuaXQpKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7CiYjNDM7CQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkgewomIzQzOwkJCWlmIChzZXRfc2FtcGxlcykKJiM0MzsJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLSZndDthci5zdGFydCwKJiM0MzsJCQkJCQlyLSZndDthci5lbmQpOwomIzQzOwkJCWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkKJiM0MzsJCQkJZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHIsIHAsIGN0eCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewpAQCAtMTMyLDYgJiM0MzsxNjYsMTIgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKIAkJCW1hdGNoZWQgPSBmaWx0ZXItJmd0O21lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOgomIzQzOwkJaWYgKCFmb2xpbykKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWF0Y2hlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTQ0MCw2ICYjNDM7NDgwLDcgQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZCkKIAkJLnVwZGF0ZSA9IE5VTEwsCiAJCS5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsCiAJCS5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLAomIzQzOwkJLnByZXBfcHJvYmVzID0gZGFtb25fcGFfcHJlcF9wcm9iZXMsCiAJCS5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsCiAJCS50YXJnZXRfdmFsaWQgPSBOVUxMLAogCQkuYXBwbHlfc2NoZW1lID0gZGFtb25fcGFfYXBwbHlfc2NoZW1lLApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmMKaW5kZXggZTM4NThmZmFiNGIyMjcuLmQ0NGQ1YmI5ZThmYmY4IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmMKQEAgLTc1MCw2ICYjNDM7NzUwLDIxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7CiAJLmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dyb3VwcywKIH07CiAKJiM0MzsvKgomIzQzOyAqIHByZXAgZGlyZWN0b3J5CiYjNDM7ICovCiYjNDM7CiYjNDM7c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgewomIzQzOwlzdHJ1Y3Qga29iamVjdCBrb2JqOwomIzQzOwllbnVtIGRhbW9uX3ByZXBfYWN0aW9uIGFjdGlvbjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqZGFtb25fc3lzZnNfcHJlcF9hbGxvYyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXA7CiYjNDM7CiYjNDM7CXByZXAgPSBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCk7CiYjNDM7CWlmICghcHJlcCkKJiM0MzsJCXJldHVybiBwcmVwOwomIzQzOwlwcmVwLSZndDthY3Rpb24gPSBEQU1PTl9QUkVQX1NFVF9QR0lETEU7CiYjNDM7CXJldHVybiBwcmVwOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSB7CiYjNDM7CWVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uOwomIzQzOwljaGFyICpuYW1lOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lCiYjNDM7ZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXNbXSA9IHsKJiM0MzsJewomIzQzOwkJLmFjdGlvbiA9IERBTU9OX1BSRVBfU0VUX1BHSURMRSwKJiM0MzsJCS5uYW1lID0gJiMzNDtzZXRfcGdpZGxlJiMzNDssCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBwcmVwX2FjdGlvbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqcHJlcCA9IGNvbnRhaW5lcl9vZihrb2JqLAomIzQzOwkJCXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwLCBrb2JqKTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWVzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lICphY3Rpb25fbmFtZTsKJiM0MzsKJiM0MzsJCWFjdGlvbl9uYW1lID0gJmFtcDtkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lc1tpXTsKJiM0MzsJCWlmIChhY3Rpb25fbmFtZS0mZ3Q7YWN0aW9uID09IHByZXAtJmd0O2FjdGlvbikKJiM0MzsJCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBhY3Rpb25fbmFtZS0mZ3Q7bmFtZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHByZXBfYWN0aW9uX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpwcmVwID0gY29udGFpbmVyX29mKGtvYmosCiYjNDM7CQkJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAsIGtvYmopOwomIzQzOwlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSAqYWN0aW9uX25hbWU7CiYjNDM7CiYjNDM7CQlhY3Rpb25fbmFtZSA9ICZhbXA7ZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXNbaV07CiYjNDM7CQlpZiAoc3lzZnNfc3RyZXEoYnVmLCBhY3Rpb25fbmFtZS0mZ3Q7bmFtZSkpIHsKJiM0MzsJCQlwcmVwLSZndDthY3Rpb24gPSBhY3Rpb25fbmFtZS0mZ3Q7YWN0aW9uOwomIzQzOwkJCXJldCA9IGNvdW50OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpwcmVwID0gY29udGFpbmVyX29mKGtvYmosCiYjNDM7CQkJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAsIGtvYmopOwomIzQzOwomIzQzOwlrZnJlZShwcmVwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19wcmVwX3ByZXBfYWN0aW9uX2F0dHIgPQomIzQzOwkJX19BVFRSX1JXX01PREUocHJlcF9hY3Rpb24sIDA2MDApOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19wcmVwX2F0dHJzW10gPSB7CiYjNDM7CSZhbXA7ZGFtb25fc3lzZnNfcHJlcF9wcmVwX2FjdGlvbl9hdHRyLmF0dHIsCiYjNDM7CU5VTEwsCiYjNDM7fTsKJiM0MztBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3ByZXApOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBfa3R5cGUgPSB7CiYjNDM7CS5yZWxlYXNlID0gZGFtb25fc3lzZnNfcHJlcF9yZWxlYXNlLAomIzQzOwkuc3lzZnNfb3BzID0gJmFtcDtrb2JqX3N5c2ZzX29wcywKJiM0MzsJLmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfcHJlcF9ncm91cHMsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIHByZXBzIGRpcmVjdG9yeQomIzQzOyAqLwomIzQzOwomIzQzO3N0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyB7CiYjNDM7CXN0cnVjdCBrb2JqZWN0IGtvYmo7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICoqcHJlcHNfYXJyOwomIzQzOwlpbnQgbnI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpkYW1vbl9zeXNmc19wcmVwc19hbGxvYyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICoqcHJlcHNfYXJyID0gcHJlcHMtJmd0O3ByZXBzX2FycjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwcmVwcy0mZ3Q7bnI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlrb2JqZWN0X2RlbCgmYW1wO3ByZXBzX2FycltpXS0mZ3Q7a29iaik7CiYjNDM7CQlrb2JqZWN0X3B1dCgmYW1wO3ByZXBzX2FycltpXS0mZ3Q7a29iaik7CiYjNDM7CX0KJiM0MzsJcHJlcHMtJmd0O25yID0gMDsKJiM0MzsJa2ZyZWUocHJlcHNfYXJyKTsKJiM0MzsJcHJlcHMtJmd0O3ByZXBzX2FyciA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGFtb25fc3lzZnNfcHJlcHNfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcywKJiM0MzsJCWludCBucl9wcmVwcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICoqcHJlcHNfYXJyLCAqcHJlcDsKJiM0MzsJaW50IGVyciwgaTsKJiM0MzsKJiM0MzsJZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7CiYjNDM7CWlmICghbnJfcHJlcHMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcHJlcHNfYXJyID0ga21hbGxvY19vYmpzKCpwcmVwc19hcnIsIG5yX3ByZXBzLAomIzQzOwkJCQkgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKJiM0MzsJaWYgKCFwcmVwc19hcnIpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJcHJlcHMtJmd0O3ByZXBzX2FyciA9IHByZXBzX2FycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ByZXBzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcHJlcCA9IGRhbW9uX3N5c2ZzX3ByZXBfYWxsb2MoKTsKJiM0MzsJCWlmICghcHJlcCkgewomIzQzOwkJCWRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMocHJlcHMpOwomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoJmFtcDtwcmVwLSZndDtrb2JqLAomIzQzOwkJCQkmYW1wO2RhbW9uX3N5c2ZzX3ByZXBfa3R5cGUsICZhbXA7cHJlcHMtJmd0O2tvYmosICYjMzQ7JWQmIzM0OywKJiM0MzsJCQkJaSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJa29iamVjdF9wdXQoJmFtcDtwcmVwLSZndDtrb2JqKTsKJiM0MzsJCQlkYW1vbl9zeXNmc19wcmVwc19ybV9kaXJzKHByZXBzKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcHJlcHNfYXJyW2ldID0gcHJlcDsKJiM0MzsJCXByZXBzLSZndDtuciYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IG5yX3ByZXBzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCWNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHMgPSBjb250YWluZXJfb2Yoa29iaiwKJiM0MzsJCQlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopOwomIzQzOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWRcbiYjMzQ7LCBwcmVwcy0mZ3Q7bnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBucl9wcmVwc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKJiM0MzsJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzOwomIzQzOwlpbnQgbnIsIGVyciA9IGtzdHJ0b2ludChidWYsIDAsICZhbXA7bnIpOwomIzQzOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJaWYgKG5yICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlwcmVwcyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopOwomIzQzOwomIzQzOwlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDtkYW1vbl9zeXNmc19sb2NrKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CWVyciA9IGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzKHByZXBzLCBucik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RhbW9uX3N5c2ZzX2xvY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19wcmVwc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQomIzQzO3sKJiM0MzsJa2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcywga29iaikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3ByZXBzX25yX2F0dHIgPQomIzQzOwkJX19BVFRSX1JXX01PREUobnJfcHJlcHMsIDA2MDApOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19wcmVwc19hdHRyc1tdID0gewomIzQzOwkmYW1wO2RhbW9uX3N5c2ZzX3ByZXBzX25yX2F0dHIuYXR0ciwKJiM0MzsJTlVMTCwKJiM0Mzt9OwomIzQzO0FUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfcHJlcHMpOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlID0gewomIzQzOwkucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2UsCiYjNDM7CS5zeXNmc19vcHMgPSAmYW1wO2tvYmpfc3lzZnNfb3BzLAomIzQzOwkuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcmVwc19ncm91cHMsCiYjNDM7fTsKJiM0MzsKIC8qCiAgKiBmaWx0ZXIgZGlyZWN0b3J5CiAgKi8KQEAgLTc4Miw2ICYjNDM7OTk1LDEwIEBAIGRhbW9uX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7CiAJCS50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csCiAJCS5uYW1lID0gJiMzNDttZW1jZyYjMzQ7LAogCX0sCiYjNDM7CXsKJiM0MzsJCS50eXBlID0gREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VULAomIzQzOwkJLm5hbWUgPSAmIzM0O3BnaWRsZV91bnNldCYjMzQ7LAomIzQzOwl9LAogfTsKIAogc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLApAQCAtMTA2Niw2ICYjNDM7MTI4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUgPSB7CiBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgewogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CiAJdW5zaWduZWQgaW50IHdlaWdodDsKJiM0MzsJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwczsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVyczsKIH07CiAKQEAgLTEwNzYsMjUgJiM0MzsxMjk0LDUwIEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKmRhbW9uX3N5c2ZzX3Byb2JlX2FsbG9jKHZvaWQpCiAKIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcHJvYmVfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSkKIHsKJiM0MzsJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwczsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVyczsKIAlpbnQgZXJyOwogCi0JZmlsdGVycyA9IGRhbW9uX3N5c2ZzX2ZpbHRlcnNfYWxsb2MoKTsKLQlpZiAoIWZpbHRlcnMpCiYjNDM7CXByZXBzID0gZGFtb25fc3lzZnNfcHJlcHNfYWxsb2MoKTsKJiM0MzsJaWYgKCFwcmVwcykKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXByb2JlLSZndDtwcmVwcyA9IHByZXBzOwomIzQzOwomIzQzOwllcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmYW1wO3ByZXBzLSZndDtrb2JqLCAmYW1wO2RhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlLAomIzQzOwkJCSZhbXA7cHJvYmUtJmd0O2tvYmosICYjMzQ7cHJlcHMmIzM0Oyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIHB1dF9wcmVwc19vdXQ7CiYjNDM7CiYjNDM7CWZpbHRlcnMgPSBkYW1vbl9zeXNmc19maWx0ZXJzX2FsbG9jKCk7CiYjNDM7CWlmICghZmlsdGVycykgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZGVsX3ByZXBzX291dDsKJiM0MzsJfQogCXByb2JlLSZndDtmaWx0ZXJzID0gZmlsdGVyczsKIAogCWVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZhbXA7ZmlsdGVycy0mZ3Q7a29iaiwgJmFtcDtkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlLAogCQkJJmFtcDtwcm9iZS0mZ3Q7a29iaiwgJiMzNDtmaWx0ZXJzJiMzNDspOwotCWlmIChlcnIpIHsKLQkJa29iamVjdF9wdXQoJmFtcDtmaWx0ZXJzLSZndDtrb2JqKTsKLQkJcHJvYmUtJmd0O2ZpbHRlcnMgPSBOVUxMOwotCX0KJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gcHV0X2ZpbHRlcnNfb3V0OwomIzQzOwlyZXR1cm4gZXJyOwomIzQzOwomIzQzO3B1dF9maWx0ZXJzX291dDoKJiM0MzsJa29iamVjdF9wdXQoJmFtcDtmaWx0ZXJzLSZndDtrb2JqKTsKJiM0MzsJcHJvYmUtJmd0O2ZpbHRlcnMgPSBOVUxMOwomIzQzO2RlbF9wcmVwc19vdXQ6CiYjNDM7CWtvYmplY3RfZGVsKCZhbXA7cHJlcHMtJmd0O2tvYmopOwomIzQzO3B1dF9wcmVwc19vdXQ6CiYjNDM7CWtvYmplY3RfcHV0KCZhbXA7cHJlcHMtJmd0O2tvYmopOwomIzQzOwlwcm9iZS0mZ3Q7cHJlcHMgPSBOVUxMOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Byb2JlX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSkKIHsKJiM0MzsJaWYgKHByb2JlLSZndDtwcmVwcykgewomIzQzOwkJZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcm9iZS0mZ3Q7cHJlcHMpOwomIzQzOwkJa29iamVjdF9wdXQoJmFtcDtwcm9iZS0mZ3Q7cHJlcHMtJmd0O2tvYmopOwomIzQzOwl9CiAJaWYgKHByb2JlLSZndDtmaWx0ZXJzKSB7CiAJCWRhbW9uX3N5c2ZzX2ZpbHRlcnNfcm1fZGlycyhwcm9iZS0mZ3Q7ZmlsdGVycyk7CiAJCWtvYmplY3RfcHV0KCZhbXA7cHJvYmUtJmd0O2ZpbHRlcnMtJmd0O2tvYmopOwpAQCAtMTkzMyw2ICYjNDM7MjE3NiwyMyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJcmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsICZhbXA7YXR0cnMpOwogfQogCiYjNDM7c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwKJiM0MzsJCXN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqc3lzX3ByZXBzKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBzeXNfcHJlcHMtJmd0O25yOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnN5c19wcmVwID0gc3lzX3ByZXBzLSZndDtwcmVwc19hcnJbaV07CiYjNDM7CQlzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDsKJiM0MzsKJiM0MzsJCXByZXAgPSBkYW1vbl9uZXdfcHJlcChzeXNfcHJlcC0mZ3Q7YWN0aW9uKTsKJiM0MzsJCWlmICghcHJlcCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCWRhbW9uX2FkZF9wcmVwKHByb2JlLCBwcmVwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsCiAJCXN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzICpzeXNfZmlsdGVycykKIHsKQEAgLTE5NjgsNyAmIzQzOzIyMjgsMTUgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwKIAkJc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpzeXNfcHJvYmUpCiB7CiAJc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKnN5c19maWx0ZXJzOwomIzQzOwlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnN5c19wcmVwczsKJiM0MzsJaW50IGVycjsKIAomIzQzOwlzeXNfcHJlcHMgPSBzeXNfcHJvYmUtJmd0O3ByZXBzOwomIzQzOwlpZiAoc3lzX3ByZXBzKSB7CiYjNDM7CQllcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJlcHMocHJvYmUsIHN5c19wcmVwcyk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KIAlzeXNfZmlsdGVycyA9IHN5c19wcm9iZS0mZ3Q7ZmlsdGVyczsKIAlpZiAoIXN5c19maWx0ZXJzKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2gKaW5kZXggZjdmYjk0Yjg0ZTcxNmQuLmRkZWJkZTZlZGFiZTRlIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaApAQCAtMzYxLDYgJiM0MzszNjEsMzIgQEAgdGVzdF9pbnRlcnZhbHMoKQogCXRlc3RfaW50ZXJ2YWxzX2dvYWwgJiMzNDskaW50ZXJ2YWxzX2Rpci9pbnRlcnZhbHNfZ29hbCYjMzQ7CiB9CiAKJiM0Mzt0ZXN0X2RhbW9uX3ByZXAoKQomIzQzO3sKJiM0MzsJZGFtb25fcHJlcF9kaXI9JDEKJiM0MzsJZW5zdXJlX2ZpbGUgJiMzNDskZGFtb25fcHJlcF9kaXIvcHJlcF9hY3Rpb24mIzM0OyAmIzM0O2V4aXN0JiMzNDsgJiMzNDs2MDAmIzM0OwomIzQzOwllbnN1cmVfd3JpdGVfc3VjYyAmIzM0OyRkYW1vbl9wcmVwX2Rpci9wcmVwX2FjdGlvbiYjMzQ7ICYjMzQ7c2V0X3BnaWRsZSYjMzQ7IFwKJiM0MzsJCSYjMzQ7dmFsaWQgaW5wdXQmIzM0OwomIzQzOwllbnN1cmVfd3JpdGVfZmFpbCAmIzM0OyRkYW1vbl9wcmVwX2Rpci9wcmVwX2FjdGlvbiYjMzQ7ICYjMzQ7Zm9vJiMzNDsgJiMzNDtpbnZhbGlkIGlucHV0JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7dGVzdF9kYW1vbl9wcmVwcygpCiYjNDM7ewomIzQzOwlwcmVwc19kaXI9JDEKJiM0MzsJZW5zdXJlX2RpciAmIzM0OyRwcmVwc19kaXImIzM0OyAmIzM0O2V4aXN0JiMzNDsKJiM0MzsJZW5zdXJlX2ZpbGUgJiMzNDskcHJlcHNfZGlyL25yX3ByZXBzJiMzNDsgJiMzNDtleGlzdCYjMzQ7ICYjMzQ7NjAwJiMzNDsKJiM0MzsJZW5zdXJlX3dyaXRlX3N1Y2MgJiMzNDskcHJlcHNfZGlyL25yX3ByZXBzJiMzNDsgJiMzNDsxJiMzNDsgJiMzNDt2YWxpZCBpbnB1dCYjMzQ7CiYjNDM7CXRlc3RfZGFtb25fcHJlcCAmIzM0OyRwcmVwc19kaXIvMCYjMzQ7CiYjNDM7CiYjNDM7CWVuc3VyZV93cml0ZV9zdWNjICAmIzM0OyRwcmVwc19kaXIvbnJfcHJlcHMmIzM0OyAmIzM0OzImIzM0OyAmIzM0O3ZhbGlkIGlucHV0JiMzNDsKJiM0MzsJdGVzdF9kYW1vbl9wcmVwICYjMzQ7JHByZXBzX2Rpci8wJiMzNDsKJiM0MzsJdGVzdF9kYW1vbl9wcmVwICYjMzQ7JHByZXBzX2Rpci8xJiMzNDsKJiM0MzsKJiM0MzsJZW5zdXJlX3dyaXRlX3N1Y2MgJiMzNDskcHJlcHNfZGlyL25yX3ByZXBzJiMzNDsgJiMzNDswJiMzNDsgJiMzNDt2YWxpZCBpbnB1dCYjMzQ7CiYjNDM7CWVuc3VyZV9kaXIgJiMzNDskcHJlcHNfZGlyLzAmIzM0OyAmIzM0O25vdF9leGlzdCYjMzQ7CiYjNDM7CWVuc3VyZV9kaXIgJiMzNDskcHJlcHNfZGlyLzEmIzM0OyAmIzM0O25vdF9leGlzdCYjMzQ7CiYjNDM7fQomIzQzOwogdGVzdF9kYW1vbl9maWx0ZXIoKQogewogCWRhbW9uX2ZpbHRlcl9kaXI9JDEKQEAgLTM5Miw2ICYjNDM7NDE4LDcgQEAgdGVzdF9wcm9iZSgpCiB7CiAJcHJvYmVfZGlyPSQxCiAJZW5zdXJlX2RpciAmIzM0OyRwcm9iZV9kaXImIzM0OyAmIzM0O2V4aXN0JiMzNDsKJiM0MzsJdGVzdF9kYW1vbl9wcmVwcyAmIzM0OyRwcm9iZV9kaXIvcHJlcHMmIzM0OwogCXRlc3RfZGFtb25fZmlsdGVycyAmIzM0OyRwcm9iZV9kaXIvZmlsdGVycyYjMzQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUHJvYmUgUHJlcCBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQgYWRkcyAmIzM0O3Byb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9ucyYjMzQ7IG9yICYjMzQ7cHJlcHMmIzM0OyB0byB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIHN1YnN5c3RlbSBpbiB0aGUgTGludXgga2VybmVsLiBJdCBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYy4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogdGhlIGRvY3VtZW50YXRpb24sIGBkYW1vbi5oYCwgdGhlIGNvcmUgREFNT04gZmlsZXMgKGBjb3JlLmNgLCBgcGFkZHIuY2AsIGBzeXNmcy5jYCksIGFuZCBhIHNlbGZ0ZXN0IHNjcmlwdCAoYHN5c2ZzLnNoYCkuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmljYXRpb25zIGZvciBhIGZlYXR1cmUgbGlrZSB0aGlzLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMsICYjMzQ7SXMgdGhpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlPyYjMzQ7IERBTU9OIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSBzeXNmcywgd2hpY2ggaXMgZ29vZC4gVGhhdCBvcGVucyBpdCB1cCBuaWNlbHkgZm9yIGZ1enppbmcuIFRoZXNlIG5ldyBzeXNmcyBpbnRlcmZhY2VzIGFyZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSB0YXJnZXRzIGhlcmUuCgpJJiMzOTt2ZSBpZGVudGlmaWVkIGEgZmV3IGtleSBmdW5jdGlvbnMgYWNyb3NzIHRoZSBtb2RpZmllZCBmaWxlcy4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGBkYW1vbl9uZXdfcHJlcGAsIGBkYW1vbl9hZGRfcHJlcGAsIGBkYW1vbl9jb21taXRfcHJlcHNgLCBgZGFtb25fY29tbWl0X3Byb2Jlc2AgKHdoaWNoIGlzIG1vZGlmaWVkKSwgYW5kIGBrZGFtb25kX2ZuYCAoYWxzbyBtb2RpZmllZCkuIFRoZW4sIGluIGBtbS9kYW1vbi9wYWRkci5jYCwgdGhlIGBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb25gLCBgZGFtb25fcGFfcHJlcF9wcm9iZXNgLCBhbmQgbW9kaWZpZWQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAgYXJlIG9mIGludGVyZXN0LiBGaW5hbGx5LCBpbiBgbW0vZGFtb24vc3lzZnMuY2AsIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIHByZXAgY29uZmlndXJhdGlvbiBsaWtlIGBwcmVwX2FjdGlvbl9zaG93YCwgYHByZXBfYWN0aW9uX3N0b3JlYCwgYGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzYCwgYG5yX3ByZXBzX3Nob3dgLCBgbnJfcHJlcHNfc3RvcmVgLCBgZGFtb25fc3lzZnNfc2V0X3ByZXBzYCBhbmQgdGhlIG1vZGlmaWVkIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVgIGFyZSBkZWZpbml0ZWx5IG9uIHRoZSBsaXN0LgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlncyBmb3Igc3lzZnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19EQU1PTl9TWVNGU2AgaXMgbmVlZGVkLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBpbiBgbW0vZGFtb24vS2NvbmZpZ2AuIEkmIzM5O2xsIGFsc28gZW5zdXJlIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgYXJlIHNldC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYWN0dWFsbHkgYmVpbmcgYWJsZSB0byB1c2UgYW5kIGZ1enogdGhlIG5ldyBpbnRlcmZhY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB2YWx1ZXMgYW5kIGNvbWJpbmF0aW9ucyB3aWxsIHlpZWxkIHRoZSBtb3N0IGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9TWVNGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBmaWd1cmluZyBvdXQgd2hhdCBgREFNT05fU1lTRlNgIGRlcGVuZHMgb24sIHByZXNlbnRlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24uCgoqKkludmVzdGlnYXRpbmcgREFNT05fU1lTRlMgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYERBTU9OX1NZU0ZTYC4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgcGFydCBvZiBkeW5hbWljIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHksIHRoaXMgdGhpbmcgY2FsbGVkIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplci4gU28sIHdoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbmFsaXR5IHNpdCBpbiB0aGUgZ3JhbmQgc2NoZW1lPyBXaGF0IG90aGVyIGtlcm5lbCBtb2R1bGVzLCBzdWJzeXN0ZW1zLCBvciBjb25maWd1cmF0aW9ucyBkb2VzIGl0IGxlYW4gb24gdG8gb3BlcmF0ZSBjb3JyZWN0bHk/IFRoYXQmIzM5O3MgdGhlIHF1ZXN0aW9uIEkgbmVlZCBhbnN3ZXJlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIHJlcXVpcmVtZW50cyBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTE1PWNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy0xOC1cdGhlbHBcbi0tXG5tbS9kYW1vbi9LY29uZmlnPTI2PWNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjI4Olx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy0yOS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZz0zOD1jb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy00MS1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuLS1cbm1tL2RhbW9uL0tjb25maWc9NDc9Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjQ5Olx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG5tbS9kYW1vbi9LY29uZmlnLTUwLVx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4tLVxubW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjU4Olx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy01OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZz02OD1jb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo3MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTcxLVx0ZGVmYXVsdCBEQU1PTlxuLS1cbm1tL2RhbW9uL0tjb25maWc9NzY9Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy03OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZz04OD1jb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTkxLVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWc9MTAwPWNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTAyOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy0xMDMtXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZz0xMDg9Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWc9MTE2PWNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTExOS1cdGRlZmF1bHQgREFNT05fU1RBVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjYxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgdGhlIERBTU9OIERlcGVuZGVuY3kgU3RydWN0dXJlKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBgREFNT05fU1lTRlNgIGZlYXR1cmUgaGluZ2VzIG9uIGJvdGggYERBTU9OYCBhbmQgYFNZU0ZTYCBiZWluZyBwcmVzZW50LiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2suIEFuZCwgdGhlIGluY2x1c2lvbiBvZiBgREFNT05fUEFERFJgIGlzIGZsYWdnZWQgYXMgYmVpbmcgZXNzZW50aWFsIGJlY2F1c2Ugd2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBpbiBgbW0vZGFtb24vcGFkZHIuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBgREFNT05fUEFERFJgIGRpcmVjdGx5IGltcGFjdHMgaG93IHBoeXNpY2FsIGFkZHJlc3NlcyBhcmUgaGFuZGxlZCB3aXRoaW4gREFNT04uIE5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRydWUgYW5kIHRoYXQgYHBhZGRyLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYERBTU9OX1BBRERSYCBpcyBzZXQuIFRvIGRvIHRoYXQsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHJ1bGVzLCBhbmQgY29uZmlybSBteSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGU9ND1vYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbm1tL2RhbW9uL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyBwYWRkci5vXG5tbS9kYW1vbi9NYWtlZmlsZS02LW9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjY1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQU1PTiBQYXRjaCBGdW5jdGlvbiBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYERBTU9OX1BBRERSYCBpcyBpbmRlZWQgYSBuZWNlc3NhcnkgcGFydCBvZiB0aGlzLiBSaWdodCwgY29uZmlybWVkLiBOb3csIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlOiBgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uYCwgYGRhbW9uX3BhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzYCwgYG5yX3ByZXBzX3N0b3JlYCwgYHByZXBfYWN0aW9uX3N0b3JlYCwgYGRhbW9uX3N5c2ZzX3NldF9wcmVwc2AsIGFuZCBgZGFtb25fY29tbWl0X3ByZXBzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHBsYXkgYSByb2xlIGluIHRoZSBjaGFuZ2VzLgoKSG1tLCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhleSBhcmUgYWxsIHN0YXRpYy4gWWVzLCB0aGV5IGFyZS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBJZiB0aGV5IGFyZSBhbGwgc3RhdGljLCB0aGV5JiMzOTtyZSBwcm9iYWJseSBub3QgdGhlIGJlc3QgY2FuZGlkYXRlcyBmb3IgZGlyZWN0IEZvY3VzU3ltYm9sIGFuYWx5c2lzIHdpdGhpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGV5IG1pZ2h0IGJlIGluZGlyZWN0bHkgaW1wb3J0YW50LCBidXQgSSBuZWVkIHRvIGZpbmQgdGhlIHB1YmxpY2x5IHZpc2libGUgZnVuY3Rpb25zLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNoaWZ0IGZvY3VzIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgcGF0Y2guIEFoLCBoZXJlIHdlIGdvOiBgZGFtb25fbmV3X3ByZXBgIGFuZCBgZGFtb25fYWRkX3ByZXBgLiBUaGVzZSBhcmUgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSBhcmUgbm9uLXN0YXRpYy4gVGhvc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgd2hlbiBpdCBjb21lcyB0byB0aGUgc3ltYm9sIGFuYWx5c2lzLgoKSSBzaG91bGQgcHJvYmFibHkgY3Jvc3MgcmVmZXJlbmNlIHdpdGggYG1tL2RhbW9uL2NvcmUuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9uZXdfcHJlcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9OTg9aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEzLVxubW0vZGFtb24vY29yZS5jOjExNDpzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbmV3X3ByZXAoZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb24pXG5tbS9kYW1vbi9jb3JlLmMtMTE1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTczNT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCwgc3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NTEtXG5tbS9kYW1vbi9jb3JlLmM6MTc1MjpcdFx0bmV3X3ByZXAgPSBkYW1vbl9uZXdfcHJlcChzcmNfcHJlcC1cdTAwM2VhY3Rpb24pO1xubW0vZGFtb24vY29yZS5jLTE3NTMtXHRcdGlmICghbmV3X3ByZXApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipOb24tU3RhdGljIEZ1bmN0aW9uIENvbnNpZGVyYXRpb25zKioKCkhtbSwgSSYjMzk7bSBhbmFseXppbmcgdGhlIGNvZGViYXNlLCBhbmQgbXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBmb2N1c2VkIG9uIGZ1bmN0aW9uIGRlc2lnbi4gQXJlIHRoZXJlICphbnkqIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3Qgc3RhdGljPyBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIHN0YXRpYyBvbmVzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXMgSSBjb25zaWRlciBkZXNpZ24gcGF0dGVybnMgYW5kIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZWlyIHNjb3BlLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIG92ZXJhbGwgYmVoYXZpb3IgY291bGQgYmUgZGlmZmVyZW50LCBpbXBhY3RpbmcgcGVyZm9ybWFuY2UgYW5kIGhvdyBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGludGVyYWN0IHdpdGggdGhlbS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdG8gY29uc2lkZXIgdGhlaXIgZWZmZWN0IG9uIHRoZSBncmVhdGVyIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9hZGRfcHJlcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTE0PXN0cnVjdCBkYW1vbl9wcmVwICpkYW1vbl9uZXdfcHJlcChlbnVtIGRhbW9uX3ByZXBfYWN0aW9uIGFjdGlvbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI1LVxubW0vZGFtb24vY29yZS5jOjEyNjp2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXG5tbS9kYW1vbi9jb3JlLmMtMTI3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTczNT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCwgc3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NTQtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTc1NTpcdFx0ZGFtb25fYWRkX3ByZXAoZHN0LCBuZXdfcHJlcCk7XG5tbS9kYW1vbi9jb3JlLmMtMTc1Ni1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NjkKCQkJCQkJCW91dHB1dDogNzAKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBEQU1PTiBDb2RlJiMzOTtzIFN5bWJvbCBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZSBhZ2FpbiwgYW5kIEkmIzM5O20gaGl0dGluZyBhIGJpdCBvZiBhIHdhbGwgaW4gbXkgdW5kZXJzdGFuZGluZy4gSSBrZWVwIHNlZWluZyB0aGVzZSBmdW5jdGlvbiBuYW1lcywgbGlrZSBgZGFtb25fc3lzZnNfc2V0X3Byb2JlYCBhbmQgYGRhbW9uX2NvbW1pdF9wcm9iZXNgLCBidXQgdGhleSYjMzk7cmUgKnN0YXRpYyouIFRoYXQmIzM5O3MgYSBwcm9ibGVtLiBJZiBhbGwgdGhlIGludGVyZXN0aW5nLCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgaG93IGRvIEkgYnVpbGQgYSBnb29kIGBGb2N1c1N5bWJvbHNgIGxpc3Q/IEkgbmVlZCBzb21ldGhpbmcgdG8gZm9jdXMgb24uCgpBbHJpZ2h0LCBJIGNhbiBkZWZpbml0ZWx5IGluY2x1ZGUgYGRhbW9uX25ld19wcmVwYCBhbmQgYGRhbW9uX2FkZF9wcmVwYDsgdGhvc2UgbG9vayBwcm9taXNpbmcuIEFuZCwgdGhlcmUmIzM5O3MgYGtkYW1vbmRfZm5gLCBidXQgdGhhdCYjMzk7cyBhIHRocmVhZCBmdW5jdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhhdCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIFRpbWUgdG8gY2hlY2sgYG1tL2RhbW9uL3N5c2ZzLmNgLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlcmUgdGhhdCBJJiMzOTt2ZSBtaXNzZWQsIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIG1vZGlmaWVkIGFuZCwgdGhlcmVmb3JlLCBtb3JlIHVzZWZ1bCB0byBtZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGdldHRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSpcXHMmIzQzO1xcKipbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDE5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIGBtbS9kYW1vbi9zeXNmcy5jYCBmb3IgRGF0YSBTdHJ1Y3R1cmVzKioKCkFscmlnaHQsIEkgbmVlZCB0byBxdWlja2x5IGdldCBhIGxheSBvZiB0aGUgbGFuZCBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdGhlIGNsYXNzaWMsIHF1aWNrIGFuZCBkaXJ0eSBtZXRob2Q6IGxldCYjMzk7cyB1c2UgYGdyZXBgLiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgZGVjbGFyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHNlYXJjaCBmb3IgbGluZXMgdGhhdCAqYmVnaW4qIHdpdGggYGludCBgLCBgdm9pZCBgLCBvciBgc3RydWN0IGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZmlyc3QgcGFzcywgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IGludGVnZXIgdmFyaWFibGVzLCB2b2lkIHJldHVybiB0eXBlcyAod2hpY2ggb2Z0ZW4gaGludCBhdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2l0aCBzaWRlIGVmZmVjdHMpLCBhbmQgYHN0cnVjdGAgZGVmaW5pdGlvbnMsIHdoaWNoIGFyZSBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgZGF0YSBvcmdhbml6YXRpb24gaW4gdGhlIG1vZHVsZS4gSXQmIzM5O3MgYSBwcmFnbWF0aWMsIHByZWxpbWluYXJ5IHNjYW4gYmVmb3JlIEkgZGl2ZSBkZWVwZXIgd2l0aCBjdGFncyBvciBldmVuIHN0YXJ0IHB1bGxpbmcgdXAgdGhlIGRlZmluaXRpb25zIGluIGFuIElERS4gSSYjMzk7bSBlc3NlbnRpYWxseSB1c2luZyBgZ3JlcGAgYXMgYSB2ZXJ5IHRhcmdldGVkIGNvZGUgaW5kZXhlciBmb3IgYSBxdWljaywgaW5pdGlhbCBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZHxzdHJ1Y3R8c3NpemVfdCkgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jLTE1LVxubW0vZGFtb24vc3lzZnMuYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtOTEtXG5tbS9kYW1vbi9zeXNmcy5jOjkyOnN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zIHtcbm1tL2RhbW9uL3N5c2ZzLmMtOTMtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTAtXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0zMTctXG5tbS9kYW1vbi9zeXNmcy5jOjMxODpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyB7XG5tbS9kYW1vbi9zeXNmcy5jLTMxOS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz00MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0c19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTQ0NS1cbm1tL2RhbW9uL3N5c2ZzLmM6NDQ2OnN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbCB7XG5tbS9kYW1vbi9zeXNmcy5jLTQ0Ny1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy02MDItXG5tbS9kYW1vbi9zeXNmcy5jOjYwMzpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtNjA0LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy03NTYtXG5tbS9kYW1vbi9zeXNmcy5jOjc1NzpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCB7XG5tbS9kYW1vbi9zeXNmcy5jLTc1OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz03NjI9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpkYW1vbl9zeXNmc19wcmVwX2FsbG9jKHZvaWQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy03NzItXG5tbS9kYW1vbi9zeXNmcy5jOjc3MzpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSB7XG5tbS9kYW1vbi9zeXNmcy5jLTc3NC1cdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy04NTAtXG5tbS9kYW1vbi9zeXNmcy5jOjg1MTpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMge1xubW0vZGFtb24vc3lzZnMuYy04NTItXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9OTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtOTY5LVxubW0vZGFtb24vc3lzZnMuYzo5NzA6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciB7XG5tbS9kYW1vbi9zeXNmcy5jLTk3MS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz05Nzg9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXIgKmRhbW9uX3N5c2ZzX2ZpbHRlcl9hbGxvYyh2b2lkKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtOTgyLVxubW0vZGFtb24vc3lzZnMuYzo5ODM6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWUge1xubW0vZGFtb24vc3lzZnMuYy05ODQtXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcl9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTExNjMtXG5tbS9kYW1vbi9zeXNmcy5jOjExNjQ6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMge1xubW0vZGFtb24vc3lzZnMuYy0xMTY1LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEyNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTEyODItXG5tbS9kYW1vbi9zeXNmcy5jOjEyODM6c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTI4NC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2JlX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTM4OS1cbm1tL2RhbW9uL3N5c2ZzLmM6MTM5MDpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmVzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTM5MS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNTA5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE1MTgtXG5tbS9kYW1vbi9zeXNmcy5jOjE1MTk6c3RydWN0IGRhbW9uX3N5c2ZzX2F0dHJzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTUyMC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2F0dHJzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTYyNC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTYyNTpzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUge1xubW0vZGFtb24vc3lzZnMuYy0xNjI2LVx0ZW51bSBkYW1vbl9vcHNfaWQgb3BzX2lkO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTYzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIGRhbW9uX3N5c2ZzX29wc19uYW1lc1tdID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTY0NC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTY0NTpzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCB7XG5tbS9kYW1vbi9zeXNmcy5jLTE2NDYtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTg5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19jb250ZXh0X2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTkwMC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTkwMTpzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMge1xubW0vZGFtb24vc3lzZnMuYy0xOTAyLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDI5LVxubW0vZGFtb24vc3lzZnMuYzoyMDMwOnN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzMS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTY5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfZGFtb25fY2FsbChpbnQgKCpmbikodm9pZCAqZGF0YSksXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNTgyLVxubW0vZGFtb24vc3lzZnMuYzoyNTgzOnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzX3dhbGtfZGF0YSB7XG5tbS9kYW1vbi9zeXNmcy5jLTI1ODQtXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI3Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZF9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI3NzYtXG5tbS9kYW1vbi9zeXNmcy5jOjI3Nzc6c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjc3OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yOTEyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjkyMS1cbm1tL2RhbW9uL3N5c2ZzLmM6MjkyMjpzdHJ1Y3QgZGFtb25fc3lzZnNfdWlfZGlyIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjkyMy1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTgyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIFN5c2ZzIEludGVyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgREFNT04gY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIG5vdGljaW5nIGlzIHRoYXQgZXZlcnkgc2luZ2xlIHN5c2ZzIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIFRoYXQmIzM5O3MgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2UsIGFuZCBpdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBzY29wZSBhbmQgcG90ZW50aWFsIGV4dGVybmFsIGludGVyYWN0aW9ucy4gQnV0IHRoZW4gSSBzZWUgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9jb3JlLmNgIOKAkyBzcGVjaWZpY2FsbHkgYGRhbW9uX25ld19wcmVwYCBhbmQgYGRhbW9uX2FkZF9wcmVwYCDigJMgdGhhdCBhcmVuJiMzOTt0IHN0YXRpYy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgZWl0aGVyIG9mIHRoZW0gYXJlIGV4cG9ydGVkLiBBcmUgdGhleSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgb2YgdGhlIGNvcmUgREFNT04gY29tcG9uZW50PyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBUaW1lIHRvIGNoZWNrIHRoZSBleHBvcnQgc3RhdHVzLCBhbmQgZGV0ZXJtaW5lIHRoZWlyIGludGVuZGVkIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qZGFtb25fbmV3X3ByZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI1OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgU2NvcGUgYW5kIFZpc2liaWxpdHkqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgdmFyaWFibGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBhdCBsZWFzdCBub3QgZGlyZWN0bHkgdGhyb3VnaCBzdGFuZGFyZCBleHBvcnRzLiBUaGF0JiMzOTtzIGZpbmUsIGJ1dCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHJhaXNlcyBhIGZsYWcuIEl0IGltcGxpZXMgYSBkZWdyZWUgb2YgYWNjZXNzaWJpbGl0eSBiZXlvbmQgYSBwdXJlbHkgaW50ZXJuYWwgc2NvcGUuIFRoaXMgbWVhbnMgaXQgKmNvdWxkKiBiZSBhY2Nlc3NlZCBvciBsaW5rZWQgdG8gZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UsIG9yIHBlcmhhcHMgZXZlbiBkeW5hbWljYWxseSBsb2FkZWQsIGRlcGVuZGluZyBvbiB0aGUgYnVpbGQgYW5kIGxpbmtpbmcgc3RyYXRlZ3kuCgpUaGVuLCB0aGUga2V5IHF1ZXN0aW9uIGFyaXNlczogaXMgdGhpcyBgZGFtb25fYWRkX3ByZXBgIGZ1bmN0aW9uIOKAkyAqdGhpcyogc3BlY2lmaWMgZW50aXR5IOKAkyBhY3R1YWxseSBleHBvcnRlZCBieSBhbnkgb3RoZXIgbWVhbnM/IElzIGl0IGV4cG9zZWQgaW4gYSB3YXkgdGhhdCwgd2hpbGUgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gYSB0eXBpY2FsIGhlYWRlciBvciBleHBvcnQgbGlzdCwgaXMgc3RpbGwgYWNjZXNzaWJsZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVjaGFuaXNtPyBQZXJoYXBzIGEgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHN5bWJvbCB0YWJsZT8gS25vd2luZyB0aGlzIGFuc3dlciBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlbmRlZCB1c2UgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBhYm91dCBmaWd1cmluZyBvdXQgdGhlIGFjdHVhbCBlZmZlY3RpdmUgYm91bmRhcnkgb2YgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmRhbW9uX2FkZF9wcmVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1ODEKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogNjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEQU1PTiBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGxvb2tzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiYjMzQ7IFdoaWxlIHRoZSBjb3JlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHBhdGNoIGFyZW4mIzM5O3QgZGlyZWN0bHkgc3RhdGljLCB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBicm9hZGVyIERBTU9OIGZyYW1ld29yaywgYW5kIHNwZWNpZmljYWxseSwgdGhleSBhcmUgcmVsYXRlZCB0byBGb2N1c1N5bWJvbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSB0aGUgY29ycmVjdCBwb2ludHMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4KCk15IGZpcnN0IGNoZWNrIHdhcyB3aGV0aGVyIGBkYW1vbl9zeXNmc19zZXRfcHJlcHNgIGFuZCBgZGFtb25fcGFfcHJlcF9wcm9iZXNgIHdlcmUgc3RhdGljLiBZZXMsIHRoZXkgYXJlLiBCdXQgSSByZWFsaXplZCB0aGF0IHNpbmNlIHRoaXMgaXMgYSBzeXNmcyBpbnRlcmZhY2UsIHRoZSByZWFsIGVudHJ5IHBvaW50cyBhcmUgdGhlIHN5c2ZzIHN0b3JlIGFuZCBzaG93IGZ1bmN0aW9ucy4gU28sIGFmdGVyIGEgbGl0dGxlIHRob3VnaHQsIEkmIzM5O20gZ29pbmcgdG8gbGlzdCBgZGFtb25fbmV3X3ByZXBgIGFuZCBgZGFtb25fYWRkX3ByZXBgIGFzIG15IEZvY3VzU3ltYm9scy4gSSBhbHNvIGNvbnNpZGVyZWQgYGtkYW1vbmRfZm5gLCB0aGUgdGhyZWFkIGZ1bmN0aW9uLCBidXQgZGVjaWRlZCBhZ2FpbnN0IGl0LCBhcyBpdCYjMzk7cyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCB0aGUgbWFpbiBsb29wLCBhbmQgbm90IGEgZGlyZWN0IGVudHJ5IHBvaW50LgoKTmV4dCwgSSBuZWVkZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHNlZSB0aGF0IGBEQU1PTl9TWVNGU2AgYW5kIGBEQU1PTl9QQUREUmAgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzLiBBZGRpdGlvbmFsbHksIGBEQU1PTmAsIGBTWVNGU2AsIGBNTVVgLCBhbmQgYFBBR0VfSURMRV9GTEFHYCBhcmUgaW1wbGllZC4gU28sIG15IEVuYWJsZUNvbmZpZ3MgbGlzdCB3aWxsIGJlIGBEQU1PTl9TWVNGU2AgYW5kIGBEQU1PTl9QQUREUmAuIEkgY29uZmlybWVkIHRoYXQgYG1tL2RhbW9uL3N5c2ZzLmNgIGNvbXBpbGVzIHdoZW4gYENPTkZJR19EQU1PTl9TWVNGU2AgaXMgc2V0LCBhbmQgYG1tL2RhbW9uL3BhZGRyLmNgIGNvbXBpbGVzIHdoZW4gYENPTkZJR19EQU1PTl9QQUREUmAgaXMgc2V0LgoKUmV2aWV3aW5nIHRoZSBwYXRjaCBhZ2FpbiwgSSBzZWUgdGhhdCBpdCBhZGRzIGEgYHByZXBzYCBkaXJlY3RvcnkgdW5kZXIgYHByb2Jlcy8mbHQ7UCZndDsvYCB3aXRoaW4gdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhpcyBhbGxvd3Mgc2V0dGluZyBgcHJlcF9hY3Rpb25gIHRvIGBzZXRfcGdpZGxlYCBhbmQgYWRkcyBhIG5ldyBmaWx0ZXIgdHlwZSBjYWxsZWQgYHBnaWRsZV91bnNldGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgYWxsb3dzIHVzZXJzIHRvIHNldCBwYWdlIGlkbGUgZmxhZ3MgcHJpb3IgdG8gcHJvYmluZyBhbmQgdGhlbiBmaWx0ZXIgcmVzdWx0cy4gVGhpcyBzaWduaWZpY2FudGx5IG1vZGlmaWVzIERBTU9OJiMzOTtzIGNvcmUgYmVoYXZpb3IsIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXNmcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbi4KClNvLCB0byBzdW1tYXJpemUgZm9yIGZ1enppbmcgcHVycG9zZXM6CgoqICAgKipGb2N1c1N5bWJvbHM6KiogYGRhbW9uX25ld19wcmVwYCwgYGRhbW9uX2FkZF9wcmVwYAoqICAgKipFbmFibGVDb25maWdzOioqIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAKCkZpbmFsbHksIGxldCBtZSByZS12ZXJpZnkgdGhhdCBgZGFtb25fbmV3X3ByZXBgIGFuZCBgZGFtb25fYWRkX3ByZXBgIGFyZSB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLCB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9ucyBhZGRlZCBieSB0aGUgcGF0Y2guIFllcCwgdGhhdCYjMzk7cyB3aGF0IEkgd2FudC4gVGhleSBhcmUgdGhlIGJlc3Qgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX25ld19wcmVwJiMzNDssCiAgICAmIzM0O2RhbW9uX2FkZF9wcmVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgREFNT04gc3Vic3lzdGVtLCBhbGxvd2luZyB1c2VycyB0byBjb25maWd1cmUgcHJvYmluZyBwcmVwYXJhdGlvbiBhY3Rpb25zIChlLmcuLCBgc2V0X3BnaWRsZWApIGFuZCBhIG5ldyBmaWx0ZXIgdHlwZSAoYHBnaWRsZV91bnNldGApIHZpYSBzeXNmcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9uZXdfcHJlcCYjMzQ7LAogICAgJiMzNDtkYW1vbl9hZGRfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gdGhlIERBTU9OIHN1YnN5c3RlbSwgYWxsb3dpbmcgdXNlcnMgdG8gY29uZmlndXJlIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9ucyAoZS5nLiwgYHNldF9wZ2lkbGVgKSBhbmQgYSBuZXcgZmlsdGVyIHR5cGUgKGBwZ2lkbGVfdW5zZXRgKSB2aWEgc3lzZnMuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgYW5kIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zLCBtYWtpbmcgaXQgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1Mzo1OC4wMTczNzc5OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA1ODkyOTU2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbmV3X3ByZXBcIixcbiAgICBcImRhbW9uX2FkZF9wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIGFsbG93aW5nIHVzZXJzIHRvIGNvbmZpZ3VyZSBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgKGUuZy4sIGBzZXRfcGdpZGxlYCkgYW5kIGEgbmV3IGZpbHRlciB0eXBlIChgcGdpZGxlX3Vuc2V0YCkgdmlhIHN5c2ZzLiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucywgbWFraW5nIGl0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1Mzo1OC4wMTczODYyODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTM1NDE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRjYWI4ZjEzMTQ1YjM2ZWFhNTI1N2VlNDJiZjhjNjVmZjk1MDM0MjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMTg6NTM6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbmluZGV4IGU2NzVhNTcxNDVlMzZkLi42ZDU5NmZiN2ZhMWZmYSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXFxuQEAgLTE3Myw2ICsxNzMsMTkgQEAgQ29udGFjdDpcXHRTSiBQYXJrIFxcdTAwM2NzakBrZXJuZWwub3JnXFx1MDAzZVxcbiBEZXNjcmlwdGlvbjpcXHRXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlXFxuIFxcdFxcdHBlci1wcm9iZSBhdHRyaWJ1dGUgd2VpZ2h0LlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cXHUwMDNjS1xcdTAwM2UvY29udGV4dHMvXFx1MDAzY0NcXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1xcdTAwM2NQXFx1MDAzZS9wcmVwcy9ucl9wcmVwc1xcbitEYXRlOlxcdFxcdEp1biAyMDI2XFxuK0NvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG4rRGVzY3JpcHRpb246XFx0V3JpdGluZyBhIG51bWJlciAnTicgdG8gdGhpcyBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZlxcbitcXHRcXHRkaXJlY3RvcmllcyBmb3IgZWFjaCBEQU1PTiBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbiBuYW1lZCAnMCdcXG4rXFx0XFx0dG8gJ04tMScgdW5kZXIgdGhlIHByZXBzLyBkaXJlY3RvcnkuXFxuK1xcbitXaGF0OlxcdFxcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NLXFx1MDAzZS9jb250ZXh0cy9cXHUwMDNjQ1xcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXFx1MDAzY1BcXHUwMDNlL3ByZXAvXFx1MDAzY1JcXHUwMDNlL2FjdGlvblxcbitEYXRlOlxcdFxcdEp1biAyMDI2XFxuK0NvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG4rRGVzY3JpcHRpb246XFx0V3JpdGluZyB0byBhbmQgcmVhZGluZyBmcm9tIHRoaXMgZmlsZSBzZXRzIGFuZCBnZXRzIHRoZSBwcm9iaW5nXFxuK1xcdFxcdHByZWVwYXJhdGlvbiBhY3Rpb24uXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NLXFx1MDAzZS9jb250ZXh0cy9cXHUwMDNjQ1xcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXFx1MDAzY1BcXHUwMDNlL2ZpbHRlcnMvbnJfZmlsdGVyc1xcbiBEYXRlOlxcdFxcdE1heSAyMDI2XFxuIENvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbmluZGV4IGRhNWY5YWZkMDhhZWY4Li4xZjVhMzllMWZjMzhkYSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuQEAgLTc0LDYgKzc0LDkgQEAgY29tbWEgKFxcXCIsXFxcIikuXFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBucl9yZWdpb25zL21pbixtYXhcXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YHByb2JlcyBcXHUwMDNjZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzXFx1MDAzZWAvbnJfcHJvYmVzXFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC93ZWlnaHRcXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgcHJlcHMvbnJfcHJlcHNcXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvcHJlcF9hY3Rpb25cXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLlxcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBmaWx0ZXJzL25yX2ZpbHRlcnNcXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvdHlwZSxtYXRjaGluZyxhbGxvdyxwYXRoXFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cXG5AQCAtMjgzLDkgKzI4NiwxOCBAQCBJbiB0aGUgYmVnaW5uaW5nLCB0aGlzIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcm9iZXNgYC4gIFdyaXRpbmcgYVxcbiBudW1iZXIgKGBgTmBgKSB0byB0aGUgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGQgZGlyZWN0b3JpZXMgbmFtZWQgYGAwYGBcXG4gdG8gYGBOLTFgYC4gIEVhY2ggZGlyZWN0b3J5IHJlcHJlc2VudHMgZWFjaCBtb25pdG9yaW5nIHByb2JlLlxcbiBcXG4tSW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIG9uZSBkaXJlY3RvcnksIGBgZmlsdGVyc2BgIGV4aXN0cy4gIFRoZSBkaXJlY3RvcnlcXG4tY29udGFpbnMgZmlsZXMgZm9yIGluc3RhbGxpbmcgZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lXFxuLXRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlIHByb2JlLlxcbitJbiBlYWNoIHByb2JlIGRpcmVjdG9yeSwgdHdvIGRpcmVjdG9yaWVzLCBgYHByZXBzYGAgYW5kIGBgZmlsdGVyc2BgIGV4aXN0cy5cXG4rVGhlIGRpcmVjdG9yaWVzIGNvbnRhaW5zIGZpbGVzIGZvciBpbnN0YWxsaW5nIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9ucyBhbmRcXG4rZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlXFxuK3Byb2JlLlxcbitcXG4rSW4gdGhlIGJlZ2lubmluZywgYGBwcmVwc2BgIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcmVwc2BgLlxcbitXcml0aWluZyBhIG51bWJlciAoYGBOYGApIHRvIHRoZSBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZiBjaGlsZCBkaXJlY3Rvcmllc1xcbituYW1lcyBgYDBgYCB0byBgYE4tMWBgLiAgRWFjaCBkaXJlY3RvcnkgcmVwcmVzZW50cyBlYWNoIHByZXBhcmF0aW9uIGFjdGlvbi5cXG4rRWFjaCBkaXJlY3RvcnkgaGFzIG9uZSBmaWxlLCBgYHByZXBfYWN0aW9uYGAuICBUaGUgcHJlcGFyYXRpb24gYWN0aW9uIGNhbiBiZVxcbitzZWxlY3RlZCBieSB3cml0aW5nIHRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gdGhlIGBgcHJlcF9hY3Rpb25gYCBmaWxlLiAgUmVmZXJcXG4rdG8gdGhlIDpyZWY6YGRlc2lnbiBkb2MgXFx1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcXHUwMDNlYCBmb3IgdGhlIGxpc3Qgb2ZcXG4rc3VwcG9ydGVkIGFjdGlvbnMuXFxuIFxcbiBFYWNoIHByb2JlIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zIGBgd2VpZ2h0YGAgZmlsZS4gIFJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZ1xcbiB0byB0aGUgZmlsZSBnZXRzIGFuZCBzZXRzIHRoZSA6cmVmOmBhdHRyaWJ1dGVzLW9ubHkgbW9uaXRvcmluZ1xcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG5pbmRleCBhZWQ2Y2IxY2Y0ODMxMC4uMDZmZmZlNWUzNzgxOWUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuQEAgLTI5Myw4ICsyOTMsMTQgQEAgcmVnaXN0cmF0aW9uIGlzIG1hZGUgYnkgc3BlY2lmeWluZyBhIHByb2JlIHBlciBhdHRyaWJ1dGUuICBFYWNoIG9mIHRoZSBwcm9iZVxcbiBzcGVjaWZpZXMgYSBydWxlIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIG1lbW9yeSByZWdpb24gaGFzIHRoZSByZWxhdGVkXFxuIGF0dHJpYnV0ZS4gIFRoZSBydWxlIGlzIGNvbnN0cnVjdGVkIHdpdGggbXVsdGlwbGUgZmlsdGVycy4gIFRoZSBmaWx0ZXJzIHdvcmtcXG4gc2FtZSB0byA6cmVmOmBEQU1PUyBmaWx0ZXJzIFxcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NfZmlsdGVyc1xcdTAwM2VgIGV4Y2VwdCB0aGUgc3VwcG9ydGVkXFxuLWZpbHRlciB0eXBlcy4gIEN1cnJlbnRseSBvbmx5IGBgYW5vbmBgIGFuZCBgYG1lbWNnYGAgZmlsdGVyIHR5cGVzIGFyZSBzdXBwb3J0ZWRcXG4tZm9yIGRhdGEgYXR0cmlidXRlcyBtb25pdG9yaW5nLlxcbitmaWx0ZXIgdHlwZXMuICBDdXJyZW50bHkgYmVsb3cgZml0bGVyIHR5cGVzIGFyZSBzdXBwb3J0ZWQuXFxuK1xcbistIGBgYW5vbmBgOiBTYW1lIHRvIHRoYXQgZm9yIERBTU9TIGZpbHRlcnMuXFxuKy0gYGBtZW1jZ2BgOiBTYW1lIHRvIHRoYXQgZm9yIERBTU9TIGZpbHRlcnMuXFxuKy0gYGBwZ2lkbGVfdW5zZXRgYDogTWF0Y2hlcyBpZiB0aGUgcGFnZSBmb3IgdGhlIG1lbW9yeSBpcyBtYXJrZWQgYXMgbm90XFxuKyAgYWNjZXNzLWlkbGUuXFxuKyAgTWF0Y2hlcyBpZiB0aGUgbWVtb3J5IGlzIG5vdCBiYWNrZWQgYnkgcGFnZXMgdGhhdCBEQU1PTiBjYW4gaWRuZXRpZnlcXG4rICBpZGxlbmVzcy5cXG4gXFxuIElmIHN1Y2ggcHJvYmVzIGFyZSByZWdpc3RlcmVkLCBEQU1PTiBleGVjdXRlcyB0aGUgcHJvYmVzIGZvciBlYWNoIHJlZ2lvbidzXFxuIHNhbXBsaW5nIG1lbW9yeSB3aGVuIGl0IGRvZXMgdGhlIGFjY2VzcyA6cmVmOmBzYW1wbGluZ1xcbkBAIC0zMDUsNiArMzExLDEzIEBAIFVzZXJzIGNhbiB0aGVyZWZvcmUga25vdyBob3cgbXVjaCBvZiBhIGdpdmVuIERBTU9OIHJlZ2lvbiBoYXMgYSBzcGVjaWZpYyBkYXRhXFxuIGF0dHJpYnV0ZSBieSByZWFkaW5nIHRoZSBwZXItcmVnaW9uIHBlci1wcm9iZSBwcm9iZSBoaXRzIGNvdW50ZXIgYWZ0ZXIgZWFjaFxcbiBhZ2dyZWdhdGlvbiBpbnRlcnZhbC5cXG4gXFxuK1VzZXJzIGNhbiBvcHRpb25hbGx5IHJlZ2lzdGVyIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9ucyBwZXIgcHJvYmUuICBJZiBzdWNoXFxuK2FjdGlvbnMgYXJlIHJlZ2lzdGVyZWQsIERBTU9OIGFwcGxpZXMgdGhlIGFjdGlvbnMgdG8gZWFjaCByZWdpb24ncyBzYW1wbGluZ1xcbittZW1vcnkgYmVmb3JlIHN0YXJ0aW5nIHRoZSBuZXh0IHNhbXBsaW5nIGludGVydmFsLiAgQ3VycmVudGx5IG9ubHkgb25lIGFjdGlvbixcXG4rYGBzZXRfcGdpZGxlYGAgaXMgc3VwcG9ydGVkLiAgVGhlIGFjdGlvbiBtYXJrcyB0aGUgcGFnZSBmb3IgdGhlIHByb2JpbmcgdGFyZ2V0XFxuK21lbW9yeSBhcyBhY2Nlc3MtaWRsZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGhcXG4rYGBwZ2lkbGVfdW5zZXRgYCBwcm9iZSBmaWx0ZXIuXFxuK1xcbiBUaGlzIGlzIGEgc2FtcGxpbmcgYmFzZWQgbWVjaGFuaXNtLiAgSGVuY2UsIGl0IGlzIGxpZ2h0d2VpZ2h0IGJ1dCB0aGUgb3V0cHV0XFxuIG1heSBpbmNsdWRlIHNvbWUgbWVhc3VyZW1lbnQgZXJyb3JzLiAgVGhlIG91dHB1dCBzaG91bGQgYmUgdXNlZCB3aXRoIGdvb2RcXG4gdW5kZXJzdGFuZGluZyBvZiBzdGF0aXN0aWNzLlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5pbmRleCAwYzhiN2RkZWY5YWJiMy4uZmUyYzZiNTZkMWQ1MzAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXFxuQEAgLTYyNyw2ICs2MjcsNyBAQCBlbnVtIGRhbW9uX29wc19pZCB7XFxuICAqIEB1cGRhdGU6XFx0XFx0XFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXFxuICAqIEBwcmVwYXJlX2FjY2Vzc19jaGVja3M6XFx0UHJlcGFyZSBuZXh0IGFjY2VzcyBjaGVjayBvZiB0YXJnZXQgcmVnaW9ucy5cXG4gICogQGNoZWNrX2FjY2Vzc2VzOlxcdFxcdENoZWNrIHRoZSBhY2Nlc3NlcyB0byB0YXJnZXQgcmVnaW9ucy5cXG4rICogQHByZXBfcHJvYmVzOlxcdFxcdFByZXBhcmUgYXBwbHlpbmcgcHJvYmVzIGZvciBlYWNoIHJlZ2lvbi5cXG4gICogQGFwcGx5X3Byb2JlczpcXHRcXHRBcHBseSBwcm9iZXMgZm9yIGVhY2ggcmVnaW9uLlxcbiAgKiBAZ2V0X3NjaGVtZV9zY29yZTpcXHRcXHRHZXQgdGhlIHNjb3JlIG9mIGEgcmVnaW9uIGZvciBhIHNjaGVtZS5cXG4gICogQGFwcGx5X3NjaGVtZTpcXHRcXHRBcHBseSBhIERBTU9OLWJhc2VkIG9wZXJhdGlvbiBzY2hlbWUuXFxuQEAgLTY1NCw2ICs2NTUsOCBAQCBlbnVtIGRhbW9uX29wc19pZCB7XFxuICAqIGxhc3QgcHJlcGFyYXRpb24gYW5kIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIG9ic2VydmVkIGFjY2Vzc2VzIG9mIGVhY2ggcmVnaW9uLlxcbiAgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4IG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyB0aGF0IG1hZGUgYXMgYSByZXN1bHRcXG4gICogb2YgaXRzIHVwZGF0ZS4gIFRoZSB2YWx1ZSB3aWxsIGJlIHVzZWQgZm9yIHJlZ2lvbnMgYWRqdXN0bWVudCB0aHJlc2hvbGQuXFxuKyAqIEBwcmVwX3Byb2JlcyBzaG91bGQgZXhlY3V0ZSByZXF1aXJlZCBcXHUwMDI2c3RydWN0IGRhbW9uX3ByZXAgZm9yIG5leHQgXFx1MDAyNnN0cnVjdFxcbisgKiBkYW1vbl9wcm9iZSBhcHBsaWNhdGlvbnMgdG8gZWFjaCByZWdpb24uXFxuICAqIEBhcHBseV9wcm9iZXMgc2hvdWxkIGFwcGx5IHRoZSBkYXRhIGF0dHJpYnV0ZSBwcm9iZXMgdG8gZWFjaCByZWdpb24gYW5kXFxuICAqIGFjY29yZGluZ2x5IHVwZGF0ZSB0aGUgcHJvYmUgaGl0cyBjb3VudGVyIG9mIHRoZSByZWdpb24uICBJdCBzaG91bGQgYWxzb1xcbiAgKiBzZXQgXFx1MDAyNmRhbW9uX3JlZ2lvbi1cXHUwMDNlc2FtcGxpbmdfYWRkciBvZiBlYWNoIHJlZ2lvbiBpZiBgYHNldF9zYW1wbGVzYGAgaXMgdHJ1ZS5cXG5AQCAtNjc2LDYgKzY3OSw3IEBAIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIHtcXG4gXFx0dm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XFxuIFxcdHZvaWQgKCpwcmVwYXJlX2FjY2Vzc19jaGVja3MpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xcbiBcXHR1bnNpZ25lZCBpbnQgKCpjaGVja19hY2Nlc3Nlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XFxuK1xcdHZvaWQgKCpwcmVwX3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCwgYm9vbCBzZXRfc2FtcGxlcyk7XFxuIFxcdHVuc2lnbmVkIGludCAoKmFwcGx5X3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcXG4gXFx0XFx0XFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pO1xcbiBcXHRpbnQgKCpnZXRfc2NoZW1lX3Njb3JlKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbkBAIC03MzksMTUgKzc0MywzOCBAQCBzdHJ1Y3QgZGFtb25faW50ZXJ2YWxzX2dvYWwge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1heF9zYW1wbGVfdXM7XFxuIH07XFxuIFxcbisvKipcXG4rICogZW51bSBkYW1vbl9wcmVwX2FjdGlvbiAtIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uLlxcbisgKlxcbisgKiBAREFNT05fUFJFUF9TRVRfUEdJRExFOlxcdFNldCB0aGUgcHJvYmluZyBtZW1vcnkgYXMgaWRsZSBwYWdlLlxcbisgKi9cXG4rZW51bSBkYW1vbl9wcmVwX2FjdGlvbiB7XFxuK1xcdERBTU9OX1BSRVBfU0VUX1BHSURMRSxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgZGFtb25fcHJlcCAtIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gcmVxdWVzdC5cXG4rICpcXG4rICogQGFjdGlvbjpcXHRBY3Rpb24gdG8gZG8gdG8gdGhlIHByb2JpbmcgbWVtb3J5IGZvciB0aGUgcHJlcGFyYXRpb24uXFxuKyAqL1xcbitzdHJ1Y3QgZGFtb25fcHJlcCB7XFxuK1xcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xcbisvKiBwcml2YXRlOiAqL1xcbitcXHQvKiBzaWJsaW5ncyBsaXN0LiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK307XFxuK1xcbiAvKipcXG4gICogZW51bSBkYW1vbl9maWx0ZXJfdHlwZSAtIFR5cGUgb2YgXFx1MDAyNnN0cnVjdCBkYW1vbl9maWx0ZXJcXG4gICpcXG4tICogQERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XFx0QW5vbnltb3VzIHBhZ2VzLlxcbi0gKiBAREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XFx0U3BlY2lmaWMgbWVtY2cncyBwYWdlcy5cXG4rICogQERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XFx0XFx0QW5vbnltb3VzIHBhZ2VzLlxcbisgKiBAREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XFx0XFx0U3BlY2lmaWMgbWVtY2cncyBwYWdlcy5cXG4rICogQERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcXHRQZ2lkbGUgaXMgdW5zZXQuXFxuICAqL1xcbiBlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHtcXG4gXFx0REFNT05fRklMVEVSX1RZUEVfQU5PTixcXG4gXFx0REFNT05fRklMVEVSX1RZUEVfTUVNQ0csXFxuK1xcdERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVCxcXG4gfTtcXG4gXFxuIC8qKlxcbkBAIC03NzgsNiArODA1LDggQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuIHN0cnVjdCBkYW1vbl9wcm9iZSB7XFxuIFxcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XFxuIC8qIHByaXZhdGU6ICovXFxuK1xcdC8qIFByZXBhcmF0aW9uIGFjdGlvbnMgdG8gYXBwbHkgdG8gZWFjaCBwcm9iaW5nIG1lbW9yeS4gKi9cXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBwcmVwcztcXG4gXFx0LyogRmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7XFxuIFxcdC8qIFNpYmxpbmdzIGxpc3QuICovXFxuQEAgLTk1Nyw2ICs5ODYsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3N6X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbiBcXHRyZXR1cm4gci1cXHUwMDNlYXIuZW5kIC0gci1cXHUwMDNlYXIuc3RhcnQ7XFxuIH1cXG4gXFxuKyNkZWZpbmUgZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcmVwKSBcXFxcXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXFx1MDAyNihwcmVwKS1cXHUwMDNlcHJlcHMsIGxpc3QpXFxuK1xcbisjZGVmaW5lIGRhbW9uX2Zvcl9lYWNoX3ByZXBfc2FmZShwLCBuZXh0LCBwcmVwKSBcXFxcXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBcXHUwMDI2KHByZXApLVxcdTAwM2VwcmVwcywgbGlzdClcXG4rXFxuICNkZWZpbmUgZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIFxcXFxcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmLCBcXHUwMDI2KHApLVxcdTAwM2VmaWx0ZXJzLCBsaXN0KVxcbiBcXG5AQCAtMTAxMCw2ICsxMDQ1LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3N6X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbiBcXG4gI2lmZGVmIENPTkZJR19EQU1PTlxcbiBcXG4rc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKTtcXG4rdm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKTtcXG4rXFxuIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxcbiBcXHRcXHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KTtcXG4gdm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwNi4uZDViMWUwYjU4NTFhMWEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTExMSw2ICsxMTEsNjMgQEAgaW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xcbitcXG4rXFx0cHJlcCA9IGttYWxsb2Nfb2JqKCpwcmVwKTtcXG4rXFx0aWYgKCFwcmVwKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cHJlcC1cXHUwMDNlYWN0aW9uID0gYWN0aW9uO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cHJlcC1cXHUwMDNlbGlzdCk7XFxuK1xcdHJldHVybiBwcmVwO1xcbit9XFxuK1xcbit2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXFxuK3tcXG4rXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cHJlcC1cXHUwMDNlbGlzdCwgXFx1MDAyNnAtXFx1MDAzZXByZXBzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fZGVsX3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKnApXFxuK3tcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNnAtXFx1MDAzZWxpc3QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKnApXFxuK3tcXG4rXFx0a2ZyZWUocCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqcClcXG4re1xcbitcXHRkYW1vbl9kZWxfcHJlcChwKTtcXG4rXFx0ZGFtb25fZnJlZV9wcmVwKHApO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX250aF9wcmVwKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XFxuK1xcdGludCBpID0gMDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcCkge1xcbitcXHRcXHRpZiAoaSsrID09IG4pXFxuK1xcdFxcdFxcdHJldHVybiBwcmVwO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJlcChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xcbitcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpIHtcXG4rXFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJlcChwcmVwLCBwcm9iZSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG4gXFx0XFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcXG4ge1xcbkBAIC0xNjcsNiArMjI0LDcgQEAgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcXG4gXFx0aWYgKCFwKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0cC1cXHUwMDNld2VpZ2h0ID0gMDtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnAtXFx1MDAzZXByZXBzKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnAtXFx1MDAzZWZpbHRlcnMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cC1cXHUwMDNlbGlzdCk7XFxuIFxcdHJldHVybiBwO1xcbkBAIC0xODQsOCArMjQyLDExIEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RlbF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxuIFxcbiBzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG4ge1xcbitcXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcCwgKnByZXBfbmV4dDtcXG4gXFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZiwgKm5leHQ7XFxuIFxcbitcXHRkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUocHJlcCwgcHJlcF9uZXh0LCBwKVxcbitcXHRcXHRkYW1vbl9mcmVlX3ByZXAocHJlcCk7XFxuIFxcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcl9zYWZlKGYsIG5leHQsIHApXFxuIFxcdFxcdGRhbW9uX2ZyZWVfZmlsdGVyKGYpO1xcbiBcXHRrZnJlZShwKTtcXG5AQCAtMTY2Niw2ICsxNzI3LDM2IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpkc3QsIHN0cnVjdCBkYW1vbl9wcmVwICpzcmMpXFxuK3tcXG4rXFx0ZHN0LVxcdTAwM2VhY3Rpb24gPSBzcmMtXFx1MDAzZWFjdGlvbjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcmVwICpkc3RfcHJlcCwgKm5leHQsICpzcmNfcHJlcCwgKm5ld19wcmVwO1xcbitcXHRpbnQgaSA9IDAsIGogPSAwO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJlcF9zYWZlKGRzdF9wcmVwLCBuZXh0LCBkc3QpIHtcXG4rXFx0XFx0c3JjX3ByZXAgPSBkYW1vbl9udGhfcHJlcChpKyssIHNyYyk7XFxuK1xcdFxcdGlmIChzcmNfcHJlcClcXG4rXFx0XFx0XFx0ZGFtb25fY29tbWl0X3ByZXAoZHN0X3ByZXAsIHNyY19wcmVwKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3ByZXAoZHN0X3ByZXApO1xcbitcXHR9XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUoc3JjX3ByZXAsIG5leHQsIHNyYykge1xcbitcXHRcXHRpZiAoaisrIFxcdTAwM2MgaSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRuZXdfcHJlcCA9IGRhbW9uX25ld19wcmVwKHNyY19wcmVwLVxcdTAwM2VhY3Rpb24pO1xcbitcXHRcXHRpZiAoIW5ld19wcmVwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0ZGFtb25fYWRkX3ByZXAoZHN0LCBuZXdfcHJlcCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXFxuIHtcXG5AQCAtMTcyNCw2ICsxODE1LDkgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbiBcXHRcXHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSsrLCBzcmMpO1xcbiBcXHRcXHRpZiAoc3JjX3Byb2JlKSB7XFxuIFxcdFxcdFxcdGRzdF9wcm9iZS1cXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuK1xcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9wcmVwcyhkc3RfcHJvYmUsIHNyY19wcm9iZSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTc0MSw2ICsxODM1LDkgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0ZGFtb25fYWRkX3Byb2JlKGRzdCwgbmV3X3Byb2JlKTtcXG4gXFx0XFx0bmV3X3Byb2JlLVxcdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXFx1MDAzZXdlaWdodDtcXG4rXFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3ByZXBzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC0zNzg1LDYgKzM4ODIsNyBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0X29wc191cGRhdGVfc2lzID0gY3R4LVxcdTAwM2VuZXh0X29wc191cGRhdGVfc2lzO1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsO1xcbiBcXHRcXHRib29sIGFjY2Vzc19jaGVja19kaXNhYmxlZCA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XFxuK1xcdFxcdGJvb2wgaGFzX3ByZXAgPSBkYW1vbl9oYXNfcHJlcChjdHgpO1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XFxuIFxcdFxcdGJvb2wgZ2V0X21heF93c3VtO1xcbiBcXG5AQCAtMzc5Myw2ICszODkxLDggQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuIFxcbiBcXHRcXHRpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCBcXHUwMDI2XFx1MDAyNiBjdHgtXFx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MpXFxuIFxcdFxcdFxcdGN0eC1cXHUwMDNlb3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcyhjdHgpO1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VvcHMucHJlcF9wcm9iZXMpXFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlb3BzLnByZXBfcHJvYmVzKGN0eCwgaGFzX3ByZXApO1xcbiBcXG4gXFx0XFx0a2RhbW9uZF91c2xlZXAoc2FtcGxlX2ludGVydmFsKTtcXG4gXFx0XFx0Y3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscysrO1xcbkBAIC0zODA3LDcgKzM5MDcsOCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRnZXRfbWF4X3dzdW0gPSBmYWxzZTtcXG4gXFx0XFx0XFx0bWF4X3dzdW0gPSBjdHgtXFx1MDAzZW9wcy5hcHBseV9wcm9iZXMoY3R4LFxcbi1cXHRcXHRcXHRcXHRcXHRhY2Nlc3NfY2hlY2tfZGlzYWJsZWQsIGdldF9tYXhfd3N1bSk7XFxuK1xcdFxcdFxcdFxcdFxcdGFjY2Vzc19jaGVja19kaXNhYmxlZCBcXHUwMDI2XFx1MDAyNiAhaGFzX3ByZXAsXFxuK1xcdFxcdFxcdFxcdFxcdGdldF9tYXhfd3N1bSk7XFxuIFxcdFxcdFxcdGlmIChnZXRfbWF4X3dzdW0pXFxuIFxcdFxcdFxcdFxcdG1heF9tZXJnZV9zY29yZSA9IG1heF93c3VtO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXFxuaW5kZXggNWE2YTc4MDU0Nzg0YWYuLjhkOGZjZDEzNjllNTY4IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXFxuQEAgLTEwNSw2ICsxMDUsNDAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiBtYXhfbnJfYWNjZXNzZXM7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3ByZXAgKnA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcmVwKHAsIHByb2JlKSB7XFxuK1xcdFxcdHN3aXRjaCAocC1cXHUwMDNlYWN0aW9uKSB7XFxuK1xcdFxcdGNhc2UgREFNT05fUFJFUF9TRVRfUEdJRExFOlxcbitcXHRcXHRcXHRkYW1vbl9wYV9ta29sZChkYW1vbl9wYV9waHlzX2FkZHIoci1cXHUwMDNlc2FtcGxpbmdfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQpKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuK1xcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcXG4rXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4rXFx0XFx0XFx0aWYgKHNldF9zYW1wbGVzKVxcbitcXHRcXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXFx1MDAzZWFyLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbitcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXFxuK1xcdFxcdFxcdFxcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbkBAIC0xMzIsNiArMTY2LDEyIEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuIFxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlxcbitcXHRcXHRpZiAoIWZvbGlvKVxcbitcXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bWF0Y2hlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQ0MCw2ICs0ODAsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxcbiBcXHRcXHQudXBkYXRlID0gTlVMTCxcXG4gXFx0XFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcXG4gXFx0XFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMsXFxuK1xcdFxcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3BhX3ByZXBfcHJvYmVzLFxcbiBcXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxcbiBcXHRcXHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcXG4gXFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBlMzg1OGZmYWI0YjIyNy4uZDQ0ZDViYjllOGZiZjggMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5AQCAtNzUwLDYgKzc1MCwyMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2t0eXBlID0ge1xcbiBcXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ3JvdXBzLFxcbiB9O1xcbiBcXG4rLypcXG4rICogcHJlcCBkaXJlY3RvcnlcXG4rICovXFxuK1xcbitzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCB7XFxuK1xcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuK1xcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpkYW1vbl9zeXNmc19wcmVwX2FsbG9jKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXA7XFxuK1xcbitcXHRwcmVwID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXApO1xcbitcXHRpZiAoIXByZXApXFxuK1xcdFxcdHJldHVybiBwcmVwO1xcbitcXHRwcmVwLVxcdTAwM2VhY3Rpb24gPSBEQU1PTl9QUkVQX1NFVF9QR0lETEU7XFxuK1xcdHJldHVybiBwcmVwO1xcbit9XFxuK1xcbitzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSB7XFxuK1xcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xcbitcXHRjaGFyICpuYW1lO1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lXFxuK2RhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWVzW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0LmFjdGlvbiA9IERBTU9OX1BSRVBfU0VUX1BHSURMRSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwic2V0X3BnaWRsZVxcXCIsXFxuK1xcdH0sXFxuK307XFxuK1xcbitzdGF0aWMgc3NpemVfdCBwcmVwX2FjdGlvbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbitcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqcHJlcCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbitcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCwga29iaik7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWUgKmFjdGlvbl9uYW1lO1xcbitcXG4rXFx0XFx0YWN0aW9uX25hbWUgPSBcXHUwMDI2ZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXNbaV07XFxuK1xcdFxcdGlmIChhY3Rpb25fbmFtZS1cXHUwMDNlYWN0aW9uID09IHByZXAtXFx1MDAzZWFjdGlvbilcXG4rXFx0XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIGFjdGlvbl9uYW1lLVxcdTAwM2VuYW1lKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gLUVJTlZBTDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgcHJlcF9hY3Rpb25fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXAgPSBjb250YWluZXJfb2Yoa29iaixcXG4rXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAsIGtvYmopO1xcbitcXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWUgKmFjdGlvbl9uYW1lO1xcbitcXG4rXFx0XFx0YWN0aW9uX25hbWUgPSBcXHUwMDI2ZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXNbaV07XFxuK1xcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIGFjdGlvbl9uYW1lLVxcdTAwM2VuYW1lKSkge1xcbitcXHRcXHRcXHRwcmVwLVxcdTAwM2VhY3Rpb24gPSBhY3Rpb25fbmFtZS1cXHUwMDNlYWN0aW9uO1xcbitcXHRcXHRcXHRyZXQgPSBjb3VudDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXAgPSBjb250YWluZXJfb2Yoa29iaixcXG4rXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAsIGtvYmopO1xcbitcXG4rXFx0a2ZyZWUocHJlcCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcHJlcF9wcmVwX2FjdGlvbl9hdHRyID1cXG4rXFx0XFx0X19BVFRSX1JXX01PREUocHJlcF9hY3Rpb24sIDA2MDApO1xcbitcXG4rc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3ByZXBfYXR0cnNbXSA9IHtcXG4rXFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3ByZXBfcHJlcF9hY3Rpb25fYXR0ci5hdHRyLFxcbitcXHROVUxMLFxcbit9O1xcbitBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3ByZXApO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJlcF9rdHlwZSA9IHtcXG4rXFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2UsXFxuK1xcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxuK1xcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3ByZXBfZ3JvdXBzLFxcbit9O1xcbitcXG4rLypcXG4rICogcHJlcHMgZGlyZWN0b3J5XFxuKyAqL1xcbitcXG4rc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzIHtcXG4rXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKipwcmVwc19hcnI7XFxuK1xcdGludCBucjtcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKmRhbW9uX3N5c2ZzX3ByZXBzX2FsbG9jKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqKnByZXBzX2FyciA9IHByZXBzLVxcdTAwM2VwcmVwc19hcnI7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHByZXBzLVxcdTAwM2VucjsgaSsrKSB7XFxuK1xcdFxcdGtvYmplY3RfZGVsKFxcdTAwMjZwcmVwc19hcnJbaV0tXFx1MDAzZWtvYmopO1xcbitcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2cHJlcHNfYXJyW2ldLVxcdTAwM2Vrb2JqKTtcXG4rXFx0fVxcbitcXHRwcmVwcy1cXHUwMDNlbnIgPSAwO1xcbitcXHRrZnJlZShwcmVwc19hcnIpO1xcbitcXHRwcmVwcy1cXHUwMDNlcHJlcHNfYXJyID0gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkYW1vbl9zeXNmc19wcmVwc19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzLFxcbitcXHRcXHRpbnQgbnJfcHJlcHMpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKipwcmVwc19hcnIsICpwcmVwO1xcbitcXHRpbnQgZXJyLCBpO1xcbitcXG4rXFx0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7XFxuK1xcdGlmICghbnJfcHJlcHMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cHJlcHNfYXJyID0ga21hbGxvY19vYmpzKCpwcmVwc19hcnIsIG5yX3ByZXBzLFxcbitcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0aWYgKCFwcmVwc19hcnIpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRwcmVwcy1cXHUwMDNlcHJlcHNfYXJyID0gcHJlcHNfYXJyO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ByZXBzOyBpKyspIHtcXG4rXFx0XFx0cHJlcCA9IGRhbW9uX3N5c2ZzX3ByZXBfYWxsb2MoKTtcXG4rXFx0XFx0aWYgKCFwcmVwKSB7XFxuK1xcdFxcdFxcdGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMocHJlcHMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXFx1MDAyNnByZXAtXFx1MDAzZWtvYmosXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9zeXNmc19wcmVwX2t0eXBlLCBcXHUwMDI2cHJlcHMtXFx1MDAzZWtvYmosIFxcXCIlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdGkpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZwcmVwLVxcdTAwM2Vrb2JqKTtcXG4rXFx0XFx0XFx0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7XFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHByZXBzX2FycltpXSA9IHByZXA7XFxuK1xcdFxcdHByZXBzLVxcdTAwM2VucisrO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBucl9wcmVwc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuK1xcdFxcdGNoYXIgKmJ1ZilcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzID0gY29udGFpbmVyX29mKGtvYmosXFxuK1xcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcywga29iaik7XFxuK1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgcHJlcHMtXFx1MDAzZW5yKTtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgbnJfcHJlcHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcztcXG4rXFx0aW50IG5yLCBlcnIgPSBrc3RydG9pbnQoYnVmLCAwLCBcXHUwMDI2bnIpO1xcbitcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0aWYgKG5yIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRwcmVwcyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopO1xcbitcXG4rXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0ZXJyID0gZGFtb25fc3lzZnNfcHJlcHNfYWRkX2RpcnMocHJlcHMsIG5yKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJldHVybiBjb3VudDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJlcHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG4re1xcbitcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzLCBrb2JqKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcHJlcHNfbnJfYXR0ciA9XFxuK1xcdFxcdF9fQVRUUl9SV19NT0RFKG5yX3ByZXBzLCAwNjAwKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19wcmVwc19hdHRyc1tdID0ge1xcbitcXHRcXHUwMDI2ZGFtb25fc3lzZnNfcHJlcHNfbnJfYXR0ci5hdHRyLFxcbitcXHROVUxMLFxcbit9O1xcbitBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3ByZXBzKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlID0ge1xcbitcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2UsXFxuK1xcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxuK1xcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3ByZXBzX2dyb3VwcyxcXG4rfTtcXG4rXFxuIC8qXFxuICAqIGZpbHRlciBkaXJlY3RvcnlcXG4gICovXFxuQEAgLTc4Miw2ICs5OTUsMTAgQEAgZGFtb25fc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcXG4gXFx0XFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcXG4gXFx0XFx0Lm5hbWUgPSBcXFwibWVtY2dcXFwiLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VULFxcbitcXHRcXHQubmFtZSA9IFxcXCJwZ2lkbGVfdW5zZXRcXFwiLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbkBAIC0xMDY2LDYgKzEyODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlID0ge1xcbiBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUge1xcbiBcXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbiBcXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzO1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVycztcXG4gfTtcXG4gXFxuQEAgLTEwNzYsMjUgKzEyOTQsNTAgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSAqZGFtb25fc3lzZnNfcHJvYmVfYWxsb2Modm9pZClcXG4gXFxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcHJvYmVfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSlcXG4ge1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzO1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVycztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGZpbHRlcnMgPSBkYW1vbl9zeXNmc19maWx0ZXJzX2FsbG9jKCk7XFxuLVxcdGlmICghZmlsdGVycylcXG4rXFx0cHJlcHMgPSBkYW1vbl9zeXNmc19wcmVwc19hbGxvYygpO1xcbitcXHRpZiAoIXByZXBzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cHJvYmUtXFx1MDAzZXByZXBzID0gcHJlcHM7XFxuK1xcbitcXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcXHUwMDI2cHJlcHMtXFx1MDAzZWtvYmosIFxcdTAwMjZkYW1vbl9zeXNmc19wcmVwc19rdHlwZSxcXG4rXFx0XFx0XFx0XFx1MDAyNnByb2JlLVxcdTAwM2Vrb2JqLCBcXFwicHJlcHNcXFwiKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBwdXRfcHJlcHNfb3V0O1xcbitcXG4rXFx0ZmlsdGVycyA9IGRhbW9uX3N5c2ZzX2ZpbHRlcnNfYWxsb2MoKTtcXG4rXFx0aWYgKCFmaWx0ZXJzKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZGVsX3ByZXBzX291dDtcXG4rXFx0fVxcbiBcXHRwcm9iZS1cXHUwMDNlZmlsdGVycyA9IGZpbHRlcnM7XFxuIFxcbiBcXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcXHUwMDI2ZmlsdGVycy1cXHUwMDNla29iaiwgXFx1MDAyNmRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUsXFxuIFxcdFxcdFxcdFxcdTAwMjZwcm9iZS1cXHUwMDNla29iaiwgXFxcImZpbHRlcnNcXFwiKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2ZmlsdGVycy1cXHUwMDNla29iaik7XFxuLVxcdFxcdHByb2JlLVxcdTAwM2VmaWx0ZXJzID0gTlVMTDtcXG4tXFx0fVxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIHB1dF9maWx0ZXJzX291dDtcXG4rXFx0cmV0dXJuIGVycjtcXG4rXFxuK3B1dF9maWx0ZXJzX291dDpcXG4rXFx0a29iamVjdF9wdXQoXFx1MDAyNmZpbHRlcnMtXFx1MDAzZWtvYmopO1xcbitcXHRwcm9iZS1cXHUwMDNlZmlsdGVycyA9IE5VTEw7XFxuK2RlbF9wcmVwc19vdXQ6XFxuK1xcdGtvYmplY3RfZGVsKFxcdTAwMjZwcmVwcy1cXHUwMDNla29iaik7XFxuK3B1dF9wcmVwc19vdXQ6XFxuK1xcdGtvYmplY3RfcHV0KFxcdTAwMjZwcmVwcy1cXHUwMDNla29iaik7XFxuK1xcdHByb2JlLVxcdTAwM2VwcmVwcyA9IE5VTEw7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Byb2JlX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSlcXG4ge1xcbitcXHRpZiAocHJvYmUtXFx1MDAzZXByZXBzKSB7XFxuK1xcdFxcdGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMocHJvYmUtXFx1MDAzZXByZXBzKTtcXG4rXFx0XFx0a29iamVjdF9wdXQoXFx1MDAyNnByb2JlLVxcdTAwM2VwcmVwcy1cXHUwMDNla29iaik7XFxuK1xcdH1cXG4gXFx0aWYgKHByb2JlLVxcdTAwM2VmaWx0ZXJzKSB7XFxuIFxcdFxcdGRhbW9uX3N5c2ZzX2ZpbHRlcnNfcm1fZGlycyhwcm9iZS1cXHUwMDNlZmlsdGVycyk7XFxuIFxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZwcm9iZS1cXHUwMDNlZmlsdGVycy1cXHUwMDNla29iaik7XFxuQEAgLTE5MzMsNiArMjE3NiwyMyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdHJldHVybiBkYW1vbl9zZXRfYXR0cnMoY3R4LCBcXHUwMDI2YXR0cnMpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnN5c19wcmVwcylcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzeXNfcHJlcHMtXFx1MDAzZW5yOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnN5c19wcmVwID0gc3lzX3ByZXBzLVxcdTAwM2VwcmVwc19hcnJbaV07XFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xcbitcXG4rXFx0XFx0cHJlcCA9IGRhbW9uX25ld19wcmVwKHN5c19wcmVwLVxcdTAwM2VhY3Rpb24pO1xcbitcXHRcXHRpZiAoIXByZXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRkYW1vbl9hZGRfcHJlcChwcm9iZSwgcHJlcCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSxcXG4gXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKnN5c19maWx0ZXJzKVxcbiB7XFxuQEAgLTE5NjgsNyArMjIyOCwxNSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnN5c19wcm9iZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqc3lzX2ZpbHRlcnM7XFxuK1xcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqc3lzX3ByZXBzO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4rXFx0c3lzX3ByZXBzID0gc3lzX3Byb2JlLVxcdTAwM2VwcmVwcztcXG4rXFx0aWYgKHN5c19wcmVwcykge1xcbitcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJlcHMocHJvYmUsIHN5c19wcmVwcyk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4gXFx0c3lzX2ZpbHRlcnMgPSBzeXNfcHJvYmUtXFx1MDAzZWZpbHRlcnM7XFxuIFxcdGlmICghc3lzX2ZpbHRlcnMpXFxuIFxcdFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXFxuaW5kZXggZjdmYjk0Yjg0ZTcxNmQuLmRkZWJkZTZlZGFiZTRlIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcXG5AQCAtMzYxLDYgKzM2MSwzMiBAQCB0ZXN0X2ludGVydmFscygpXFxuIFxcdHRlc3RfaW50ZXJ2YWxzX2dvYWwgXFxcIiRpbnRlcnZhbHNfZGlyL2ludGVydmFsc19nb2FsXFxcIlxcbiB9XFxuIFxcbit0ZXN0X2RhbW9uX3ByZXAoKVxcbit7XFxuK1xcdGRhbW9uX3ByZXBfZGlyPSQxXFxuK1xcdGVuc3VyZV9maWxlIFxcXCIkZGFtb25fcHJlcF9kaXIvcHJlcF9hY3Rpb25cXFwiIFxcXCJleGlzdFxcXCIgXFxcIjYwMFxcXCJcXG4rXFx0ZW5zdXJlX3dyaXRlX3N1Y2MgXFxcIiRkYW1vbl9wcmVwX2Rpci9wcmVwX2FjdGlvblxcXCIgXFxcInNldF9wZ2lkbGVcXFwiIFxcXFxcXG4rXFx0XFx0XFxcInZhbGlkIGlucHV0XFxcIlxcbitcXHRlbnN1cmVfd3JpdGVfZmFpbCBcXFwiJGRhbW9uX3ByZXBfZGlyL3ByZXBfYWN0aW9uXFxcIiBcXFwiZm9vXFxcIiBcXFwiaW52YWxpZCBpbnB1dFxcXCJcXG4rfVxcbitcXG4rdGVzdF9kYW1vbl9wcmVwcygpXFxuK3tcXG4rXFx0cHJlcHNfZGlyPSQxXFxuK1xcdGVuc3VyZV9kaXIgXFxcIiRwcmVwc19kaXJcXFwiIFxcXCJleGlzdFxcXCJcXG4rXFx0ZW5zdXJlX2ZpbGUgXFxcIiRwcmVwc19kaXIvbnJfcHJlcHNcXFwiIFxcXCJleGlzdFxcXCIgXFxcIjYwMFxcXCJcXG4rXFx0ZW5zdXJlX3dyaXRlX3N1Y2MgXFxcIiRwcmVwc19kaXIvbnJfcHJlcHNcXFwiIFxcXCIxXFxcIiBcXFwidmFsaWQgaW5wdXRcXFwiXFxuK1xcdHRlc3RfZGFtb25fcHJlcCBcXFwiJHByZXBzX2Rpci8wXFxcIlxcbitcXG4rXFx0ZW5zdXJlX3dyaXRlX3N1Y2MgIFxcXCIkcHJlcHNfZGlyL25yX3ByZXBzXFxcIiBcXFwiMlxcXCIgXFxcInZhbGlkIGlucHV0XFxcIlxcbitcXHR0ZXN0X2RhbW9uX3ByZXAgXFxcIiRwcmVwc19kaXIvMFxcXCJcXG4rXFx0dGVzdF9kYW1vbl9wcmVwIFxcXCIkcHJlcHNfZGlyLzFcXFwiXFxuK1xcbitcXHRlbnN1cmVfd3JpdGVfc3VjYyBcXFwiJHByZXBzX2Rpci9ucl9wcmVwc1xcXCIgXFxcIjBcXFwiIFxcXCJ2YWxpZCBpbnB1dFxcXCJcXG4rXFx0ZW5zdXJlX2RpciBcXFwiJHByZXBzX2Rpci8wXFxcIiBcXFwibm90X2V4aXN0XFxcIlxcbitcXHRlbnN1cmVfZGlyIFxcXCIkcHJlcHNfZGlyLzFcXFwiIFxcXCJub3RfZXhpc3RcXFwiXFxuK31cXG4rXFxuIHRlc3RfZGFtb25fZmlsdGVyKClcXG4ge1xcbiBcXHRkYW1vbl9maWx0ZXJfZGlyPSQxXFxuQEAgLTM5Miw2ICs0MTgsNyBAQCB0ZXN0X3Byb2JlKClcXG4ge1xcbiBcXHRwcm9iZV9kaXI9JDFcXG4gXFx0ZW5zdXJlX2RpciBcXFwiJHByb2JlX2RpclxcXCIgXFxcImV4aXN0XFxcIlxcbitcXHR0ZXN0X2RhbW9uX3ByZXBzIFxcXCIkcHJvYmVfZGlyL3ByZXBzXFxcIlxcbiBcXHR0ZXN0X2RhbW9uX2ZpbHRlcnMgXFxcIiRwcm9iZV9kaXIvZmlsdGVyc1xcXCJcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTM6NTguODg3OTM4NzQyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5NzE4NzE3NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25ld19wcmVwXCIsXG4gICAgXCJkYW1vbl9hZGRfcHJlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgREFNT04gc3Vic3lzdGVtLCBhbGxvd2luZyB1c2VycyB0byBjb25maWd1cmUgcHJvYmluZyBwcmVwYXJhdGlvbiBhY3Rpb25zIChlLmcuLCBgc2V0X3BnaWRsZWApIGFuZCBhIG5ldyBmaWx0ZXIgdHlwZSAoYHBnaWRsZV91bnNldGApIHZpYSBzeXNmcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGNhYjhmMTMxNDViMzZlYWE1MjU3ZWU0MmJmOGM2NWZmOTUwMzQyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE4OjUzOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuaW5kZXggZTY3NWE1NzE0NWUzNmQuLjZkNTk2ZmI3ZmExZmZhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5AQCAtMTczLDYgKzE3MywxOSBAQCBDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4gRGVzY3JpcHRpb246XHRXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlXG4gXHRcdHBlci1wcm9iZSBhdHRyaWJ1dGUgd2VpZ2h0LlxuIFxuK1doYXQ6XHRcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1x1MDAzY0tcdTAwM2UvY29udGV4dHMvXHUwMDNjQ1x1MDAzZS9tb25pdG9yaW5nX2F0dHJzL3Byb2Jlcy9cdTAwM2NQXHUwMDNlL3ByZXBzL25yX3ByZXBzXG4rRGF0ZTpcdFx0SnVuIDIwMjZcbitDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4rRGVzY3JpcHRpb246XHRXcml0aW5nIGEgbnVtYmVyICdOJyB0byB0aGlzIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mXG4rXHRcdGRpcmVjdG9yaWVzIGZvciBlYWNoIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uIG5hbWVkICcwJ1xuK1x0XHR0byAnTi0xJyB1bmRlciB0aGUgcHJlcHMvIGRpcmVjdG9yeS5cbitcbitXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXHUwMDNjUFx1MDAzZS9wcmVwL1x1MDAzY1JcdTAwM2UvYWN0aW9uXG4rRGF0ZTpcdFx0SnVuIDIwMjZcbitDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4rRGVzY3JpcHRpb246XHRXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlIHByb2JpbmdcbitcdFx0cHJlZXBhcmF0aW9uIGFjdGlvbi5cbitcbiBXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXHUwMDNjUFx1MDAzZS9maWx0ZXJzL25yX2ZpbHRlcnNcbiBEYXRlOlx0XHRNYXkgMjAyNlxuIENvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCBkYTVmOWFmZDA4YWVmOC4uMWY1YTM5ZTFmYzM4ZGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbkBAIC03NCw2ICs3NCw5IEBAIGNvbW1hIChcIixcIikuXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIG5yX3JlZ2lvbnMvbWluLG1heFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBwcm9iZXMgXHUwMDNjZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzXHUwMDNlYC9ucl9wcm9iZXNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvd2VpZ2h0XG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgcHJlcHMvbnJfcHJlcHNcbisgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9wcmVwX2FjdGlvblxuKyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBmaWx0ZXJzL25yX2ZpbHRlcnNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGhcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uXG5AQCAtMjgzLDkgKzI4NiwxOCBAQCBJbiB0aGUgYmVnaW5uaW5nLCB0aGlzIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcm9iZXNgYC4gIFdyaXRpbmcgYVxuIG51bWJlciAoYGBOYGApIHRvIHRoZSBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZiBjaGlsZCBkaXJlY3RvcmllcyBuYW1lZCBgYDBgYFxuIHRvIGBgTi0xYGAuICBFYWNoIGRpcmVjdG9yeSByZXByZXNlbnRzIGVhY2ggbW9uaXRvcmluZyBwcm9iZS5cbiBcbi1JbiBlYWNoIHByb2JlIGRpcmVjdG9yeSwgb25lIGRpcmVjdG9yeSwgYGBmaWx0ZXJzYGAgZXhpc3RzLiAgVGhlIGRpcmVjdG9yeVxuLWNvbnRhaW5zIGZpbGVzIGZvciBpbnN0YWxsaW5nIGZpbHRlcnMgZm9yIHRoZSBwcm9iZSwgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZVxuLXRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlIHByb2JlLlxuK0luIGVhY2ggcHJvYmUgZGlyZWN0b3J5LCB0d28gZGlyZWN0b3JpZXMsIGBgcHJlcHNgYCBhbmQgYGBmaWx0ZXJzYGAgZXhpc3RzLlxuK1RoZSBkaXJlY3RvcmllcyBjb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgYW5kXG4rZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlXG4rcHJvYmUuXG4rXG4rSW4gdGhlIGJlZ2lubmluZywgYGBwcmVwc2BgIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9wcmVwc2BgLlxuK1dyaXRpaW5nIGEgbnVtYmVyIChgYE5gYCkgdG8gdGhlIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mIGNoaWxkIGRpcmVjdG9yaWVzXG4rbmFtZXMgYGAwYGAgdG8gYGBOLTFgYC4gIEVhY2ggZGlyZWN0b3J5IHJlcHJlc2VudHMgZWFjaCBwcmVwYXJhdGlvbiBhY3Rpb24uXG4rRWFjaCBkaXJlY3RvcnkgaGFzIG9uZSBmaWxlLCBgYHByZXBfYWN0aW9uYGAuICBUaGUgcHJlcGFyYXRpb24gYWN0aW9uIGNhbiBiZVxuK3NlbGVjdGVkIGJ5IHdyaXRpbmcgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byB0aGUgYGBwcmVwX2FjdGlvbmBgIGZpbGUuICBSZWZlclxuK3RvIHRoZSA6cmVmOmBkZXNpZ24gZG9jIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcdTAwM2VgIGZvciB0aGUgbGlzdCBvZlxuK3N1cHBvcnRlZCBhY3Rpb25zLlxuIFxuIEVhY2ggcHJvYmUgZGlyZWN0b3J5IGFsc28gY29udGFpbnMgYGB3ZWlnaHRgYCBmaWxlLiAgUmVhZGluZyBmcm9tIGFuZCB3cml0aW5nXG4gdG8gdGhlIGZpbGUgZ2V0cyBhbmQgc2V0cyB0aGUgOnJlZjpgYXR0cmlidXRlcy1vbmx5IG1vbml0b3JpbmdcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbmluZGV4IGFlZDZjYjFjZjQ4MzEwLi4wNmZmZmU1ZTM3ODE5ZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtMjkzLDggKzI5MywxNCBAQCByZWdpc3RyYXRpb24gaXMgbWFkZSBieSBzcGVjaWZ5aW5nIGEgcHJvYmUgcGVyIGF0dHJpYnV0ZS4gIEVhY2ggb2YgdGhlIHByb2JlXG4gc3BlY2lmaWVzIGEgcnVsZSB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbiBtZW1vcnkgcmVnaW9uIGhhcyB0aGUgcmVsYXRlZFxuIGF0dHJpYnV0ZS4gIFRoZSBydWxlIGlzIGNvbnN0cnVjdGVkIHdpdGggbXVsdGlwbGUgZmlsdGVycy4gIFRoZSBmaWx0ZXJzIHdvcmtcbiBzYW1lIHRvIDpyZWY6YERBTU9TIGZpbHRlcnMgXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zX2ZpbHRlcnNcdTAwM2VgIGV4Y2VwdCB0aGUgc3VwcG9ydGVkXG4tZmlsdGVyIHR5cGVzLiAgQ3VycmVudGx5IG9ubHkgYGBhbm9uYGAgYW5kIGBgbWVtY2dgYCBmaWx0ZXIgdHlwZXMgYXJlIHN1cHBvcnRlZFxuLWZvciBkYXRhIGF0dHJpYnV0ZXMgbW9uaXRvcmluZy5cbitmaWx0ZXIgdHlwZXMuICBDdXJyZW50bHkgYmVsb3cgZml0bGVyIHR5cGVzIGFyZSBzdXBwb3J0ZWQuXG4rXG4rLSBgYGFub25gYDogU2FtZSB0byB0aGF0IGZvciBEQU1PUyBmaWx0ZXJzLlxuKy0gYGBtZW1jZ2BgOiBTYW1lIHRvIHRoYXQgZm9yIERBTU9TIGZpbHRlcnMuXG4rLSBgYHBnaWRsZV91bnNldGBgOiBNYXRjaGVzIGlmIHRoZSBwYWdlIGZvciB0aGUgbWVtb3J5IGlzIG1hcmtlZCBhcyBub3RcbisgIGFjY2Vzcy1pZGxlLlxuKyAgTWF0Y2hlcyBpZiB0aGUgbWVtb3J5IGlzIG5vdCBiYWNrZWQgYnkgcGFnZXMgdGhhdCBEQU1PTiBjYW4gaWRuZXRpZnlcbisgIGlkbGVuZXNzLlxuIFxuIElmIHN1Y2ggcHJvYmVzIGFyZSByZWdpc3RlcmVkLCBEQU1PTiBleGVjdXRlcyB0aGUgcHJvYmVzIGZvciBlYWNoIHJlZ2lvbidzXG4gc2FtcGxpbmcgbWVtb3J5IHdoZW4gaXQgZG9lcyB0aGUgYWNjZXNzIDpyZWY6YHNhbXBsaW5nXG5AQCAtMzA1LDYgKzMxMSwxMyBAQCBVc2VycyBjYW4gdGhlcmVmb3JlIGtub3cgaG93IG11Y2ggb2YgYSBnaXZlbiBEQU1PTiByZWdpb24gaGFzIGEgc3BlY2lmaWMgZGF0YVxuIGF0dHJpYnV0ZSBieSByZWFkaW5nIHRoZSBwZXItcmVnaW9uIHBlci1wcm9iZSBwcm9iZSBoaXRzIGNvdW50ZXIgYWZ0ZXIgZWFjaFxuIGFnZ3JlZ2F0aW9uIGludGVydmFsLlxuIFxuK1VzZXJzIGNhbiBvcHRpb25hbGx5IHJlZ2lzdGVyIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9ucyBwZXIgcHJvYmUuICBJZiBzdWNoXG4rYWN0aW9ucyBhcmUgcmVnaXN0ZXJlZCwgREFNT04gYXBwbGllcyB0aGUgYWN0aW9ucyB0byBlYWNoIHJlZ2lvbidzIHNhbXBsaW5nXG4rbWVtb3J5IGJlZm9yZSBzdGFydGluZyB0aGUgbmV4dCBzYW1wbGluZyBpbnRlcnZhbC4gIEN1cnJlbnRseSBvbmx5IG9uZSBhY3Rpb24sXG4rYGBzZXRfcGdpZGxlYGAgaXMgc3VwcG9ydGVkLiAgVGhlIGFjdGlvbiBtYXJrcyB0aGUgcGFnZSBmb3IgdGhlIHByb2JpbmcgdGFyZ2V0XG4rbWVtb3J5IGFzIGFjY2Vzcy1pZGxlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aFxuK2BgcGdpZGxlX3Vuc2V0YGAgcHJvYmUgZmlsdGVyLlxuK1xuIFRoaXMgaXMgYSBzYW1wbGluZyBiYXNlZCBtZWNoYW5pc20uICBIZW5jZSwgaXQgaXMgbGlnaHR3ZWlnaHQgYnV0IHRoZSBvdXRwdXRcbiBtYXkgaW5jbHVkZSBzb21lIG1lYXN1cmVtZW50IGVycm9ycy4gIFRoZSBvdXRwdXQgc2hvdWxkIGJlIHVzZWQgd2l0aCBnb29kXG4gdW5kZXJzdGFuZGluZyBvZiBzdGF0aXN0aWNzLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggMGM4YjdkZGVmOWFiYjMuLmZlMmM2YjU2ZDFkNTMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC02MjcsNiArNjI3LDcgQEAgZW51bSBkYW1vbl9vcHNfaWQge1xuICAqIEB1cGRhdGU6XHRcdFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXG4gICogQHByZXBhcmVfYWNjZXNzX2NoZWNrczpcdFByZXBhcmUgbmV4dCBhY2Nlc3MgY2hlY2sgb2YgdGFyZ2V0IHJlZ2lvbnMuXG4gICogQGNoZWNrX2FjY2Vzc2VzOlx0XHRDaGVjayB0aGUgYWNjZXNzZXMgdG8gdGFyZ2V0IHJlZ2lvbnMuXG4rICogQHByZXBfcHJvYmVzOlx0XHRQcmVwYXJlIGFwcGx5aW5nIHByb2JlcyBmb3IgZWFjaCByZWdpb24uXG4gICogQGFwcGx5X3Byb2JlczpcdFx0QXBwbHkgcHJvYmVzIGZvciBlYWNoIHJlZ2lvbi5cbiAgKiBAZ2V0X3NjaGVtZV9zY29yZTpcdFx0R2V0IHRoZSBzY29yZSBvZiBhIHJlZ2lvbiBmb3IgYSBzY2hlbWUuXG4gICogQGFwcGx5X3NjaGVtZTpcdFx0QXBwbHkgYSBEQU1PTi1iYXNlZCBvcGVyYXRpb24gc2NoZW1lLlxuQEAgLTY1NCw2ICs2NTUsOCBAQCBlbnVtIGRhbW9uX29wc19pZCB7XG4gICogbGFzdCBwcmVwYXJhdGlvbiBhbmQgdXBkYXRlIHRoZSBudW1iZXIgb2Ygb2JzZXJ2ZWQgYWNjZXNzZXMgb2YgZWFjaCByZWdpb24uXG4gICogSXQgc2hvdWxkIGFsc28gcmV0dXJuIG1heCBudW1iZXIgb2Ygb2JzZXJ2ZWQgYWNjZXNzZXMgdGhhdCBtYWRlIGFzIGEgcmVzdWx0XG4gICogb2YgaXRzIHVwZGF0ZS4gIFRoZSB2YWx1ZSB3aWxsIGJlIHVzZWQgZm9yIHJlZ2lvbnMgYWRqdXN0bWVudCB0aHJlc2hvbGQuXG4rICogQHByZXBfcHJvYmVzIHNob3VsZCBleGVjdXRlIHJlcXVpcmVkIFx1MDAyNnN0cnVjdCBkYW1vbl9wcmVwIGZvciBuZXh0IFx1MDAyNnN0cnVjdFxuKyAqIGRhbW9uX3Byb2JlIGFwcGxpY2F0aW9ucyB0byBlYWNoIHJlZ2lvbi5cbiAgKiBAYXBwbHlfcHJvYmVzIHNob3VsZCBhcHBseSB0aGUgZGF0YSBhdHRyaWJ1dGUgcHJvYmVzIHRvIGVhY2ggcmVnaW9uIGFuZFxuICAqIGFjY29yZGluZ2x5IHVwZGF0ZSB0aGUgcHJvYmUgaGl0cyBjb3VudGVyIG9mIHRoZSByZWdpb24uICBJdCBzaG91bGQgYWxzb1xuICAqIHNldCBcdTAwMjZkYW1vbl9yZWdpb24tXHUwMDNlc2FtcGxpbmdfYWRkciBvZiBlYWNoIHJlZ2lvbiBpZiBgYHNldF9zYW1wbGVzYGAgaXMgdHJ1ZS5cbkBAIC02NzYsNiArNjc5LDcgQEAgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMge1xuIFx0dm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XG4gXHR2b2lkICgqcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbiBcdHVuc2lnbmVkIGludCAoKmNoZWNrX2FjY2Vzc2VzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbitcdHZvaWQgKCpwcmVwX3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCwgYm9vbCBzZXRfc2FtcGxlcyk7XG4gXHR1bnNpZ25lZCBpbnQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG4gXHRcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pO1xuIFx0aW50ICgqZ2V0X3NjaGVtZV9zY29yZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbkBAIC03MzksMTUgKzc0MywzOCBAQCBzdHJ1Y3QgZGFtb25faW50ZXJ2YWxzX2dvYWwge1xuIFx0dW5zaWduZWQgbG9uZyBtYXhfc2FtcGxlX3VzO1xuIH07XG4gXG4rLyoqXG4rICogZW51bSBkYW1vbl9wcmVwX2FjdGlvbiAtIERBTU9OIHByb2JpbmcgcHJlcGFyYXRpb24gYWN0aW9uLlxuKyAqXG4rICogQERBTU9OX1BSRVBfU0VUX1BHSURMRTpcdFNldCB0aGUgcHJvYmluZyBtZW1vcnkgYXMgaWRsZSBwYWdlLlxuKyAqL1xuK2VudW0gZGFtb25fcHJlcF9hY3Rpb24ge1xuK1x0REFNT05fUFJFUF9TRVRfUEdJRExFLFxuK307XG4rXG4rLyoqXG4rICogc3RydWN0IGRhbW9uX3ByZXAgLSBEQU1PTiBwcm9iaW5nIHByZXBhcmF0aW9uIHJlcXVlc3QuXG4rICpcbisgKiBAYWN0aW9uOlx0QWN0aW9uIHRvIGRvIHRvIHRoZSBwcm9iaW5nIG1lbW9yeSBmb3IgdGhlIHByZXBhcmF0aW9uLlxuKyAqL1xuK3N0cnVjdCBkYW1vbl9wcmVwIHtcbitcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBzaWJsaW5ncyBsaXN0LiAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK307XG4rXG4gLyoqXG4gICogZW51bSBkYW1vbl9maWx0ZXJfdHlwZSAtIFR5cGUgb2YgXHUwMDI2c3RydWN0IGRhbW9uX2ZpbHRlclxuICAqXG4tICogQERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XHRBbm9ueW1vdXMgcGFnZXMuXG4tICogQERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlx0U3BlY2lmaWMgbWVtY2cncyBwYWdlcy5cbisgKiBAREFNT05fRklMVEVSX1RZUEVfQU5PTjpcdFx0QW5vbnltb3VzIHBhZ2VzLlxuKyAqIEBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcdFx0U3BlY2lmaWMgbWVtY2cncyBwYWdlcy5cbisgKiBAREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlx0UGdpZGxlIGlzIHVuc2V0LlxuICAqL1xuIGVudW0gZGFtb25fZmlsdGVyX3R5cGUge1xuIFx0REFNT05fRklMVEVSX1RZUEVfQU5PTixcbiBcdERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHLFxuK1x0REFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VULFxuIH07XG4gXG4gLyoqXG5AQCAtNzc4LDYgKzgwNSw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xuIHN0cnVjdCBkYW1vbl9wcm9iZSB7XG4gXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xuIC8qIHByaXZhdGU6ICovXG4rXHQvKiBQcmVwYXJhdGlvbiBhY3Rpb25zIHRvIGFwcGx5IHRvIGVhY2ggcHJvYmluZyBtZW1vcnkuICovXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIHByZXBzO1xuIFx0LyogRmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmaWx0ZXJzO1xuIFx0LyogU2libGluZ3MgbGlzdC4gKi9cbkBAIC05NTcsNiArOTg2LDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbiBcdHJldHVybiByLVx1MDAzZWFyLmVuZCAtIHItXHUwMDNlYXIuc3RhcnQ7XG4gfVxuIFxuKyNkZWZpbmUgZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcmVwKSBcXFxuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjYocHJlcCktXHUwMDNlcHJlcHMsIGxpc3QpXG4rXG4rI2RlZmluZSBkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUocCwgbmV4dCwgcHJlcCkgXFxcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBcdTAwMjYocHJlcCktXHUwMDNlcHJlcHMsIGxpc3QpXG4rXG4gI2RlZmluZSBkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkgXFxcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZiwgXHUwMDI2KHApLVx1MDAzZWZpbHRlcnMsIGxpc3QpXG4gXG5AQCAtMTAxMCw2ICsxMDQ1LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3N6X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuIFxuICNpZmRlZiBDT05GSUdfREFNT05cbiBcbitzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbmV3X3ByZXAoZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb24pO1xuK3ZvaWQgZGFtb25fYWRkX3ByZXAoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcCk7XG4rXG4gc3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG4gXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpO1xuIHZvaWQgZGFtb25fYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjA2Li5kNWIxZTBiNTg1MWExYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTExLDYgKzExMSw2MyBAQCBpbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xuK1xuK1x0cHJlcCA9IGttYWxsb2Nfb2JqKCpwcmVwKTtcbitcdGlmICghcHJlcClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRwcmVwLVx1MDAzZWFjdGlvbiA9IGFjdGlvbjtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnByZXAtXHUwMDNlbGlzdCk7XG4rXHRyZXR1cm4gcHJlcDtcbit9XG4rXG4rdm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKVxuK3tcbitcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHJlcC1cdTAwM2VsaXN0LCBcdTAwMjZwLVx1MDAzZXByZXBzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fZGVsX3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKnApXG4re1xuK1x0bGlzdF9kZWwoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxuK3tcbitcdGtmcmVlKHApO1xuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKnApXG4re1xuK1x0ZGFtb25fZGVsX3ByZXAocCk7XG4rXHRkYW1vbl9mcmVlX3ByZXAocCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbnRoX3ByZXAoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcbitcdGludCBpID0gMDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcCkge1xuK1x0XHRpZiAoaSsrID09IG4pXG4rXHRcdFx0cmV0dXJuIHByZXA7XG4rXHR9XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGJvb2wgZGFtb25faGFzX3ByZXAoc3RydWN0IGRhbW9uX2N0eCAqYylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcDtcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgYykge1xuK1x0XHRkYW1vbl9mb3JfZWFjaF9wcmVwKHByZXAsIHByb2JlKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbiBcdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbiB7XG5AQCAtMTY3LDYgKzIyNCw3IEBAIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXG4gXHRpZiAoIXApXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0cC1cdTAwM2V3ZWlnaHQgPSAwO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cC1cdTAwM2VwcmVwcyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWZpbHRlcnMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiBcdHJldHVybiBwO1xuQEAgLTE4NCw4ICsyNDIsMTEgQEAgc3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbiB7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcCwgKnByZXBfbmV4dDtcbiBcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYsICpuZXh0O1xuIFxuK1x0ZGFtb25fZm9yX2VhY2hfcHJlcF9zYWZlKHByZXAsIHByZXBfbmV4dCwgcClcbitcdFx0ZGFtb25fZnJlZV9wcmVwKHByZXApO1xuIFx0ZGFtb25fZm9yX2VhY2hfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcClcbiBcdFx0ZGFtb25fZnJlZV9maWx0ZXIoZik7XG4gXHRrZnJlZShwKTtcbkBAIC0xNjY2LDYgKzE3MjcsMzYgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpkc3QsIHN0cnVjdCBkYW1vbl9wcmVwICpzcmMpXG4re1xuK1x0ZHN0LVx1MDAzZWFjdGlvbiA9IHNyYy1cdTAwM2VhY3Rpb247XG4rfVxuK1xuK3N0YXRpYyBpbnQgZGFtb25fY29tbWl0X3ByZXBzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnNyYylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqZHN0X3ByZXAsICpuZXh0LCAqc3JjX3ByZXAsICpuZXdfcHJlcDtcbitcdGludCBpID0gMCwgaiA9IDA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9wcmVwX3NhZmUoZHN0X3ByZXAsIG5leHQsIGRzdCkge1xuK1x0XHRzcmNfcHJlcCA9IGRhbW9uX250aF9wcmVwKGkrKywgc3JjKTtcbitcdFx0aWYgKHNyY19wcmVwKVxuK1x0XHRcdGRhbW9uX2NvbW1pdF9wcmVwKGRzdF9wcmVwLCBzcmNfcHJlcCk7XG4rXHRcdGVsc2VcbitcdFx0XHRkYW1vbl9kZXN0cm95X3ByZXAoZHN0X3ByZXApO1xuK1x0fVxuK1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJlcF9zYWZlKHNyY19wcmVwLCBuZXh0LCBzcmMpIHtcbitcdFx0aWYgKGorKyBcdTAwM2MgaSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bmV3X3ByZXAgPSBkYW1vbl9uZXdfcHJlcChzcmNfcHJlcC1cdTAwM2VhY3Rpb24pO1xuK1x0XHRpZiAoIW5ld19wcmVwKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRkYW1vbl9hZGRfcHJlcChkc3QsIG5ld19wcmVwKTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcbiBcdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxuIHtcbkBAIC0xNzI0LDYgKzE4MTUsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRcdHNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShpKyssIHNyYyk7XG4gXHRcdGlmIChzcmNfcHJvYmUpIHtcbiBcdFx0XHRkc3RfcHJvYmUtXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVx1MDAzZXdlaWdodDtcbitcdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbkBAIC0xNzQxLDYgKzE4MzUsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdGRhbW9uX2FkZF9wcm9iZShkc3QsIG5ld19wcm9iZSk7XG4gXHRcdG5ld19wcm9iZS1cdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXHUwMDNld2VpZ2h0O1xuK1x0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4gXHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTM3ODUsNiArMzg4Miw3IEBAIHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuIFx0XHR1bnNpZ25lZCBsb25nIG5leHRfb3BzX3VwZGF0ZV9zaXMgPSBjdHgtXHUwMDNlbmV4dF9vcHNfdXBkYXRlX3NpcztcbiBcdFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsO1xuIFx0XHRib29sIGFjY2Vzc19jaGVja19kaXNhYmxlZCA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XG4rXHRcdGJvb2wgaGFzX3ByZXAgPSBkYW1vbl9oYXNfcHJlcChjdHgpO1xuIFx0XHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XG4gXHRcdGJvb2wgZ2V0X21heF93c3VtO1xuIFxuQEAgLTM3OTMsNiArMzg5MSw4IEBAIHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuIFxuIFx0XHRpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MpXG4gXHRcdFx0Y3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MoY3R4KTtcbitcdFx0aWYgKGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXMpXG4rXHRcdFx0Y3R4LVx1MDAzZW9wcy5wcmVwX3Byb2JlcyhjdHgsIGhhc19wcmVwKTtcbiBcbiBcdFx0a2RhbW9uZF91c2xlZXAoc2FtcGxlX2ludGVydmFsKTtcbiBcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzKys7XG5AQCAtMzgwNyw3ICszOTA3LDggQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0Z2V0X21heF93c3VtID0gZmFsc2U7XG4gXHRcdFx0bWF4X3dzdW0gPSBjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2JlcyhjdHgsXG4tXHRcdFx0XHRcdGFjY2Vzc19jaGVja19kaXNhYmxlZCwgZ2V0X21heF93c3VtKTtcbitcdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiAhaGFzX3ByZXAsXG4rXHRcdFx0XHRcdGdldF9tYXhfd3N1bSk7XG4gXHRcdFx0aWYgKGdldF9tYXhfd3N1bSlcbiBcdFx0XHRcdG1heF9tZXJnZV9zY29yZSA9IG1heF93c3VtO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDVhNmE3ODA1NDc4NGFmLi44ZDhmY2QxMzY5ZTU2OCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0xMDUsNiArMTA1LDQwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIG1heF9ucl9hY2Nlc3NlcztcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4rXHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHtcbitcdFx0c3dpdGNoIChwLVx1MDAzZWFjdGlvbikge1xuK1x0XHRjYXNlIERBTU9OX1BSRVBfU0VUX1BHSURMRTpcbitcdFx0XHRkYW1vbl9wYV9ta29sZChkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2VzYW1wbGluZ19hZGRyLFxuK1x0XHRcdFx0XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQpKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4rXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4rXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4rXHRcdFx0aWYgKHNldF9zYW1wbGVzKVxuK1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4rXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuK1x0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eClcbitcdFx0XHRcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuQEAgLTEzMiw2ICsxNjYsMTIgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0XHRtYXRjaGVkID0gZmlsdGVyLVx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbitcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdGVsc2VcbitcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQ0MCw2ICs0ODAsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuIFx0XHQudXBkYXRlID0gTlVMTCxcbiBcdFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcbiBcdFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMsXG4rXHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3BhX3ByZXBfcHJvYmVzLFxuIFx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxuIFx0XHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcbiBcdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMjcuLmQ0NGQ1YmI5ZThmYmY4IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTc1MCw2ICs3NTAsMjE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ludGVydmFsc19rdHlwZSA9IHtcbiBcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX2ludGVydmFsc19ncm91cHMsXG4gfTtcbiBcbisvKlxuKyAqIHByZXAgZGlyZWN0b3J5XG4rICovXG4rXG4rc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAge1xuK1x0c3RydWN0IGtvYmplY3Qga29iajtcbitcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpkYW1vbl9zeXNmc19wcmVwX2FsbG9jKHZvaWQpXG4re1xuK1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXA7XG4rXG4rXHRwcmVwID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXApO1xuK1x0aWYgKCFwcmVwKVxuK1x0XHRyZXR1cm4gcHJlcDtcbitcdHByZXAtXHUwMDNlYWN0aW9uID0gREFNT05fUFJFUF9TRVRfUEdJRExFO1xuK1x0cmV0dXJuIHByZXA7XG4rfVxuK1xuK3N0cnVjdCBkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lIHtcbitcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xuK1x0Y2hhciAqbmFtZTtcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZVxuK2RhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWVzW10gPSB7XG4rXHR7XG4rXHRcdC5hY3Rpb24gPSBEQU1PTl9QUkVQX1NFVF9QR0lETEUsXG4rXHRcdC5uYW1lID0gXCJzZXRfcGdpZGxlXCIsXG4rXHR9LFxuK307XG4rXG4rc3RhdGljIHNzaXplX3QgcHJlcF9hY3Rpb25fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXAgKnByZXAgPSBjb250YWluZXJfb2Yoa29iaixcbitcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCwga29iaik7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWUgKmFjdGlvbl9uYW1lO1xuK1xuK1x0XHRhY3Rpb25fbmFtZSA9IFx1MDAyNmRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWVzW2ldO1xuK1x0XHRpZiAoYWN0aW9uX25hbWUtXHUwMDNlYWN0aW9uID09IHByZXAtXHUwMDNlYWN0aW9uKVxuK1x0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlc1xcblwiLCBhY3Rpb25fbmFtZS1cdTAwM2VuYW1lKTtcbitcdH1cbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCBwcmVwX2FjdGlvbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqcHJlcCA9IGNvbnRhaW5lcl9vZihrb2JqLFxuK1x0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwLCBrb2JqKTtcbitcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vbl9zeXNmc19wcmVwX2FjdGlvbl9uYW1lcyk7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZSAqYWN0aW9uX25hbWU7XG4rXG4rXHRcdGFjdGlvbl9uYW1lID0gXHUwMDI2ZGFtb25fc3lzZnNfcHJlcF9hY3Rpb25fbmFtZXNbaV07XG4rXHRcdGlmIChzeXNmc19zdHJlcShidWYsIGFjdGlvbl9uYW1lLVx1MDAzZW5hbWUpKSB7XG4rXHRcdFx0cHJlcC1cdTAwM2VhY3Rpb24gPSBhY3Rpb25fbmFtZS1cdTAwM2VhY3Rpb247XG4rXHRcdFx0cmV0ID0gY291bnQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqcHJlcCA9IGNvbnRhaW5lcl9vZihrb2JqLFxuK1x0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwLCBrb2JqKTtcbitcbitcdGtmcmVlKHByZXApO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3ByZXBfcHJlcF9hY3Rpb25fYXR0ciA9XG4rXHRcdF9fQVRUUl9SV19NT0RFKHByZXBfYWN0aW9uLCAwNjAwKTtcbitcbitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfcHJlcF9hdHRyc1tdID0ge1xuK1x0XHUwMDI2ZGFtb25fc3lzZnNfcHJlcF9wcmVwX2FjdGlvbl9hdHRyLmF0dHIsXG4rXHROVUxMLFxuK307XG4rQVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19wcmVwKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcmVwX2t0eXBlID0ge1xuK1x0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19wcmVwX3JlbGVhc2UsXG4rXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG4rXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcmVwX2dyb3Vwcyxcbit9O1xuK1xuKy8qXG4rICogcHJlcHMgZGlyZWN0b3J5XG4rICovXG4rXG4rc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzIHtcbitcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqKnByZXBzX2FycjtcbitcdGludCBucjtcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKmRhbW9uX3N5c2ZzX3ByZXBzX2FsbG9jKHZvaWQpXG4re1xuK1x0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqKnByZXBzX2FyciA9IHByZXBzLVx1MDAzZXByZXBzX2FycjtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJlcHMtXHUwMDNlbnI7IGkrKykge1xuK1x0XHRrb2JqZWN0X2RlbChcdTAwMjZwcmVwc19hcnJbaV0tXHUwMDNla29iaik7XG4rXHRcdGtvYmplY3RfcHV0KFx1MDAyNnByZXBzX2FycltpXS1cdTAwM2Vrb2JqKTtcbitcdH1cbitcdHByZXBzLVx1MDAzZW5yID0gMDtcbitcdGtmcmVlKHByZXBzX2Fycik7XG4rXHRwcmVwcy1cdTAwM2VwcmVwc19hcnIgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHMsXG4rXHRcdGludCBucl9wcmVwcylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqKnByZXBzX2FyciwgKnByZXA7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7XG4rXHRpZiAoIW5yX3ByZXBzKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHByZXBzX2FyciA9IGttYWxsb2Nfb2JqcygqcHJlcHNfYXJyLCBucl9wcmVwcyxcbitcdFx0XHRcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuK1x0aWYgKCFwcmVwc19hcnIpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0cHJlcHMtXHUwMDNlcHJlcHNfYXJyID0gcHJlcHNfYXJyO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcHJlcHM7IGkrKykge1xuK1x0XHRwcmVwID0gZGFtb25fc3lzZnNfcHJlcF9hbGxvYygpO1xuK1x0XHRpZiAoIXByZXApIHtcbitcdFx0XHRkYW1vbl9zeXNmc19wcmVwc19ybV9kaXJzKHByZXBzKTtcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0fVxuK1xuK1x0XHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZwcmVwLVx1MDAzZWtvYmosXG4rXHRcdFx0XHRcdTAwMjZkYW1vbl9zeXNmc19wcmVwX2t0eXBlLCBcdTAwMjZwcmVwcy1cdTAwM2Vrb2JqLCBcIiVkXCIsXG4rXHRcdFx0XHRpKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGtvYmplY3RfcHV0KFx1MDAyNnByZXAtXHUwMDNla29iaik7XG4rXHRcdFx0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcmVwcyk7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRwcmVwc19hcnJbaV0gPSBwcmVwO1xuK1x0XHRwcmVwcy1cdTAwM2VucisrO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IG5yX3ByZXBzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbitcdFx0Y2hhciAqYnVmKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHMgPSBjb250YWluZXJfb2Yoa29iaixcbitcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopO1xuK1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIHByZXBzLVx1MDAzZW5yKTtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgbnJfcHJlcHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4rXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBzICpwcmVwcztcbitcdGludCBuciwgZXJyID0ga3N0cnRvaW50KGJ1ZiwgMCwgXHUwMDI2bnIpO1xuK1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcdGlmIChuciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRwcmVwcyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMsIGtvYmopO1xuK1xuK1x0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0ZXJyID0gZGFtb25fc3lzZnNfcHJlcHNfYWRkX2RpcnMocHJlcHMsIG5yKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4re1xuK1x0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcywga29iaikpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3ByZXBzX25yX2F0dHIgPVxuK1x0XHRfX0FUVFJfUldfTU9ERShucl9wcmVwcywgMDYwMCk7XG4rXG4rc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3ByZXBzX2F0dHJzW10gPSB7XG4rXHRcdTAwMjZkYW1vbl9zeXNmc19wcmVwc19ucl9hdHRyLmF0dHIsXG4rXHROVUxMLFxuK307XG4rQVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19wcmVwcyk7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJlcHNfa3R5cGUgPSB7XG4rXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3ByZXBzX3JlbGVhc2UsXG4rXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG4rXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19wcmVwc19ncm91cHMsXG4rfTtcbitcbiAvKlxuICAqIGZpbHRlciBkaXJlY3RvcnlcbiAgKi9cbkBAIC03ODIsNiArOTk1LDEwIEBAIGRhbW9uX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XG4gXHRcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csXG4gXHRcdC5uYW1lID0gXCJtZW1jZ1wiLFxuIFx0fSxcbitcdHtcbitcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQsXG4rXHRcdC5uYW1lID0gXCJwZ2lkbGVfdW5zZXRcIixcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtMTA2Niw2ICsxMjgzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcbiBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUge1xuIFx0c3RydWN0IGtvYmplY3Qga29iajtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnByZXBzO1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKmZpbHRlcnM7XG4gfTtcbiBcbkBAIC0xMDc2LDI1ICsxMjk0LDUwIEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKmRhbW9uX3N5c2ZzX3Byb2JlX2FsbG9jKHZvaWQpXG4gXG4gc3RhdGljIGludCBkYW1vbl9zeXNmc19wcm9iZV9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlKVxuIHtcbitcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyAqcHJlcHM7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVycztcbiBcdGludCBlcnI7XG4gXG4tXHRmaWx0ZXJzID0gZGFtb25fc3lzZnNfZmlsdGVyc19hbGxvYygpO1xuLVx0aWYgKCFmaWx0ZXJzKVxuK1x0cHJlcHMgPSBkYW1vbl9zeXNmc19wcmVwc19hbGxvYygpO1xuK1x0aWYgKCFwcmVwcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRwcm9iZS1cdTAwM2VwcmVwcyA9IHByZXBzO1xuK1xuK1x0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2cHJlcHMtXHUwMDNla29iaiwgXHUwMDI2ZGFtb25fc3lzZnNfcHJlcHNfa3R5cGUsXG4rXHRcdFx0XHUwMDI2cHJvYmUtXHUwMDNla29iaiwgXCJwcmVwc1wiKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gcHV0X3ByZXBzX291dDtcbitcbitcdGZpbHRlcnMgPSBkYW1vbl9zeXNmc19maWx0ZXJzX2FsbG9jKCk7XG4rXHRpZiAoIWZpbHRlcnMpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBkZWxfcHJlcHNfb3V0O1xuK1x0fVxuIFx0cHJvYmUtXHUwMDNlZmlsdGVycyA9IGZpbHRlcnM7XG4gXG4gXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZmaWx0ZXJzLVx1MDAzZWtvYmosIFx1MDAyNmRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUsXG4gXHRcdFx0XHUwMDI2cHJvYmUtXHUwMDNla29iaiwgXCJmaWx0ZXJzXCIpO1xuLVx0aWYgKGVycikge1xuLVx0XHRrb2JqZWN0X3B1dChcdTAwMjZmaWx0ZXJzLVx1MDAzZWtvYmopO1xuLVx0XHRwcm9iZS1cdTAwM2VmaWx0ZXJzID0gTlVMTDtcbi1cdH1cbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gcHV0X2ZpbHRlcnNfb3V0O1xuK1x0cmV0dXJuIGVycjtcbitcbitwdXRfZmlsdGVyc19vdXQ6XG4rXHRrb2JqZWN0X3B1dChcdTAwMjZmaWx0ZXJzLVx1MDAzZWtvYmopO1xuK1x0cHJvYmUtXHUwMDNlZmlsdGVycyA9IE5VTEw7XG4rZGVsX3ByZXBzX291dDpcbitcdGtvYmplY3RfZGVsKFx1MDAyNnByZXBzLVx1MDAzZWtvYmopO1xuK3B1dF9wcmVwc19vdXQ6XG4rXHRrb2JqZWN0X3B1dChcdTAwMjZwcmVwcy1cdTAwM2Vrb2JqKTtcbitcdHByb2JlLVx1MDAzZXByZXBzID0gTlVMTDtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Byb2JlX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSlcbiB7XG4rXHRpZiAocHJvYmUtXHUwMDNlcHJlcHMpIHtcbitcdFx0ZGFtb25fc3lzZnNfcHJlcHNfcm1fZGlycyhwcm9iZS1cdTAwM2VwcmVwcyk7XG4rXHRcdGtvYmplY3RfcHV0KFx1MDAyNnByb2JlLVx1MDAzZXByZXBzLVx1MDAzZWtvYmopO1xuK1x0fVxuIFx0aWYgKHByb2JlLVx1MDAzZWZpbHRlcnMpIHtcbiBcdFx0ZGFtb25fc3lzZnNfZmlsdGVyc19ybV9kaXJzKHByb2JlLVx1MDAzZWZpbHRlcnMpO1xuIFx0XHRrb2JqZWN0X3B1dChcdTAwMjZwcm9iZS1cdTAwM2VmaWx0ZXJzLVx1MDAzZWtvYmopO1xuQEAgLTE5MzMsNiArMjE3NiwyMyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gXHRyZXR1cm4gZGFtb25fc2V0X2F0dHJzKGN0eCwgXHUwMDI2YXR0cnMpO1xuIH1cbiBcbitzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcmVwcyhzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuK1x0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnN5c19wcmVwcylcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN5c19wcmVwcy1cdTAwM2VucjsgaSsrKSB7XG4rXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcmVwICpzeXNfcHJlcCA9IHN5c19wcmVwcy1cdTAwM2VwcmVwc19hcnJbaV07XG4rXHRcdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xuK1xuK1x0XHRwcmVwID0gZGFtb25fbmV3X3ByZXAoc3lzX3ByZXAtXHUwMDNlYWN0aW9uKTtcbitcdFx0aWYgKCFwcmVwKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRkYW1vbl9hZGRfcHJlcChwcm9iZSwgcHJlcCk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfZmlsdGVycyhzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuIFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqc3lzX2ZpbHRlcnMpXG4ge1xuQEAgLTE5NjgsNyArMjIyOCwxNSBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuIFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnN5c19wcm9iZSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqc3lzX2ZpbHRlcnM7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcHMgKnN5c19wcmVwcztcbitcdGludCBlcnI7XG4gXG4rXHRzeXNfcHJlcHMgPSBzeXNfcHJvYmUtXHUwMDNlcHJlcHM7XG4rXHRpZiAoc3lzX3ByZXBzKSB7XG4rXHRcdGVyciA9IGRhbW9uX3N5c2ZzX3NldF9wcmVwcyhwcm9iZSwgc3lzX3ByZXBzKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuIFx0c3lzX2ZpbHRlcnMgPSBzeXNfcHJvYmUtXHUwMDNlZmlsdGVycztcbiBcdGlmICghc3lzX2ZpbHRlcnMpXG4gXHRcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcbmluZGV4IGY3ZmI5NGI4NGU3MTZkLi5kZGViZGU2ZWRhYmU0ZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaFxuQEAgLTM2MSw2ICszNjEsMzIgQEAgdGVzdF9pbnRlcnZhbHMoKVxuIFx0dGVzdF9pbnRlcnZhbHNfZ29hbCBcIiRpbnRlcnZhbHNfZGlyL2ludGVydmFsc19nb2FsXCJcbiB9XG4gXG4rdGVzdF9kYW1vbl9wcmVwKClcbit7XG4rXHRkYW1vbl9wcmVwX2Rpcj0kMVxuK1x0ZW5zdXJlX2ZpbGUgXCIkZGFtb25fcHJlcF9kaXIvcHJlcF9hY3Rpb25cIiBcImV4aXN0XCIgXCI2MDBcIlxuK1x0ZW5zdXJlX3dyaXRlX3N1Y2MgXCIkZGFtb25fcHJlcF9kaXIvcHJlcF9hY3Rpb25cIiBcInNldF9wZ2lkbGVcIiBcXFxuK1x0XHRcInZhbGlkIGlucHV0XCJcbitcdGVuc3VyZV93cml0ZV9mYWlsIFwiJGRhbW9uX3ByZXBfZGlyL3ByZXBfYWN0aW9uXCIgXCJmb29cIiBcImludmFsaWQgaW5wdXRcIlxuK31cbitcbit0ZXN0X2RhbW9uX3ByZXBzKClcbit7XG4rXHRwcmVwc19kaXI9JDFcbitcdGVuc3VyZV9kaXIgXCIkcHJlcHNfZGlyXCIgXCJleGlzdFwiXG4rXHRlbnN1cmVfZmlsZSBcIiRwcmVwc19kaXIvbnJfcHJlcHNcIiBcImV4aXN0XCIgXCI2MDBcIlxuK1x0ZW5zdXJlX3dyaXRlX3N1Y2MgXCIkcHJlcHNfZGlyL25yX3ByZXBzXCIgXCIxXCIgXCJ2YWxpZCBpbnB1dFwiXG4rXHR0ZXN0X2RhbW9uX3ByZXAgXCIkcHJlcHNfZGlyLzBcIlxuK1xuK1x0ZW5zdXJlX3dyaXRlX3N1Y2MgIFwiJHByZXBzX2Rpci9ucl9wcmVwc1wiIFwiMlwiIFwidmFsaWQgaW5wdXRcIlxuK1x0dGVzdF9kYW1vbl9wcmVwIFwiJHByZXBzX2Rpci8wXCJcbitcdHRlc3RfZGFtb25fcHJlcCBcIiRwcmVwc19kaXIvMVwiXG4rXG4rXHRlbnN1cmVfd3JpdGVfc3VjYyBcIiRwcmVwc19kaXIvbnJfcHJlcHNcIiBcIjBcIiBcInZhbGlkIGlucHV0XCJcbitcdGVuc3VyZV9kaXIgXCIkcHJlcHNfZGlyLzBcIiBcIm5vdF9leGlzdFwiXG4rXHRlbnN1cmVfZGlyIFwiJHByZXBzX2Rpci8xXCIgXCJub3RfZXhpc3RcIlxuK31cbitcbiB0ZXN0X2RhbW9uX2ZpbHRlcigpXG4ge1xuIFx0ZGFtb25fZmlsdGVyX2Rpcj0kMVxuQEAgLTM5Miw2ICs0MTgsNyBAQCB0ZXN0X3Byb2JlKClcbiB7XG4gXHRwcm9iZV9kaXI9JDFcbiBcdGVuc3VyZV9kaXIgXCIkcHJvYmVfZGlyXCIgXCJleGlzdFwiXG4rXHR0ZXN0X2RhbW9uX3ByZXBzIFwiJHByb2JlX2Rpci9wcmVwc1wiXG4gXHR0ZXN0X2RhbW9uX2ZpbHRlcnMgXCIkcHJvYmVfZGlyL2ZpbHRlcnNcIlxuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjU4Ljg4Nzk0MTc0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NzY3NDEwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUHJvYmUgUHJlcCBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0IGFkZHMgXCJwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnNcIiBvciBcInByZXBzXCIgdG8gdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBtb2RpZnlpbmcgY29yZSBrZXJuZWwgbG9naWMuIFRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIHNldmVyYWwgZmlsZXM6IHRoZSBkb2N1bWVudGF0aW9uLCBgZGFtb24uaGAsIHRoZSBjb3JlIERBTU9OIGZpbGVzIChgY29yZS5jYCwgYHBhZGRyLmNgLCBgc3lzZnMuY2ApLCBhbmQgYSBzZWxmdGVzdCBzY3JpcHQgKGBzeXNmcy5zaGApLiBUaGF0J3MgYSByZWFzb25hYmxlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmljYXRpb25zIGZvciBhIGZlYXR1cmUgbGlrZSB0aGlzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgXCJJcyB0aGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGU/XCIgREFNT04gaXMgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHN5c2ZzLCB3aGljaCBpcyBnb29kLiBUaGF0IG9wZW5zIGl0IHVwIG5pY2VseSBmb3IgZnV6emluZy4gVGhlc2UgbmV3IHN5c2ZzIGludGVyZmFjZXMgYXJlIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHRhcmdldHMgaGVyZS5cblxuSSd2ZSBpZGVudGlmaWVkIGEgZmV3IGtleSBmdW5jdGlvbnMgYWNyb3NzIHRoZSBtb2RpZmllZCBmaWxlcy4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGBkYW1vbl9uZXdfcHJlcGAsIGBkYW1vbl9hZGRfcHJlcGAsIGBkYW1vbl9jb21taXRfcHJlcHNgLCBgZGFtb25fY29tbWl0X3Byb2Jlc2AgKHdoaWNoIGlzIG1vZGlmaWVkKSwgYW5kIGBrZGFtb25kX2ZuYCAoYWxzbyBtb2RpZmllZCkuIFRoZW4sIGluIGBtbS9kYW1vbi9wYWRkci5jYCwgdGhlIGBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb25gLCBgZGFtb25fcGFfcHJlcF9wcm9iZXNgLCBhbmQgbW9kaWZpZWQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAgYXJlIG9mIGludGVyZXN0LiBGaW5hbGx5LCBpbiBgbW0vZGFtb24vc3lzZnMuY2AsIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIHByZXAgY29uZmlndXJhdGlvbiBsaWtlIGBwcmVwX2FjdGlvbl9zaG93YCwgYHByZXBfYWN0aW9uX3N0b3JlYCwgYGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzYCwgYG5yX3ByZXBzX3Nob3dgLCBgbnJfcHJlcHNfc3RvcmVgLCBgZGFtb25fc3lzZnNfc2V0X3ByZXBzYCBhbmQgdGhlIG1vZGlmaWVkIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVgIGFyZSBkZWZpbml0ZWx5IG9uIHRoZSBsaXN0LlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWdzIGZvciBzeXNmcy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0RBTU9OX1NZU0ZTYCBpcyBuZWVkZWQsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGluIGBtbS9kYW1vbi9LY29uZmlnYC4gSSdsbCBhbHNvIGVuc3VyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBzZXQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGFjdHVhbGx5IGJlaW5nIGFibGUgdG8gdXNlIGFuZCBmdXp6IHRoZSBuZXcgaW50ZXJmYWNlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB2YWx1ZXMgYW5kIGNvbWJpbmF0aW9ucyB3aWxsIHlpZWxkIHRoZSBtb3N0IGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjA2LjQ2NDY4NTQ3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDUwMzE1MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OX1NZU0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTQ6MDYuNzA5NzM0Mjk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNTAxMDc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZmlndXJpbmcgb3V0IHdoYXQgYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uLCBwcmVzZW50ZWQgYXMgaWYgaXQncyBteSBvd24uXG5cbioqSW52ZXN0aWdhdGluZyBEQU1PTl9TWVNGUyBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYERBTU9OX1NZU0ZTYC4gSSBrbm93IGl0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSwgdGhpcyB0aGluZyBjYWxsZWQgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyLiBTbywgd2hlcmUgZG9lcyB0aGlzIGZ1bmN0aW9uYWxpdHkgc2l0IGluIHRoZSBncmFuZCBzY2hlbWU/IFdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMsIHN1YnN5c3RlbXMsIG9yIGNvbmZpZ3VyYXRpb25zIGRvZXMgaXQgbGVhbiBvbiB0byBvcGVyYXRlIGNvcnJlY3RseT8gVGhhdCdzIHRoZSBxdWVzdGlvbiBJIG5lZWQgYW5zd2VyZWQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIHJlcXVpcmVtZW50cyBmb3IgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDkwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTQ6MDkuOTM0NzQ4ODg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTk4OTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTE1PWNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctMTgtXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZz0yNj1jb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjI4OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctMjktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9Mzg9Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo0MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL2RhbW9uL0tjb25maWctNDEtXFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnPTQ3PWNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQ5OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy01MC1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9NTY9Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjU4OlxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNTktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9Njg9Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy03MS1cXHRkZWZhdWx0IERBTU9OXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjc4OlxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNzktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9ODg9Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6OTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctOTEtXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZz0xMDA9Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy0xMDMtXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZz0xMDg9Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTExMS1cXHRoZWxwXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnPTExNj1jb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTE4OlxcdGRlcGVuZHMgb24gREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTE5LVxcdGRlZmF1bHQgREFNT05fU1RBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoxMC41OTA3NDM2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTQwODg3NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIHRoZSBEQU1PTiBEZXBlbmRlbmN5IFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgdGhlIGBEQU1PTl9TWVNGU2AgZmVhdHVyZSBoaW5nZXMgb24gYm90aCBgREFNT05gIGFuZCBgU1lTRlNgIGJlaW5nIHByZXNlbnQuIFRoYXQncyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBBbmQsIHRoZSBpbmNsdXNpb24gb2YgYERBTU9OX1BBRERSYCBpcyBmbGFnZ2VkIGFzIGJlaW5nIGVzc2VudGlhbCBiZWNhdXNlIHdlJ3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBpbiBgbW0vZGFtb24vcGFkZHIuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBgREFNT05fUEFERFJgIGRpcmVjdGx5IGltcGFjdHMgaG93IHBoeXNpY2FsIGFkZHJlc3NlcyBhcmUgaGFuZGxlZCB3aXRoaW4gREFNT04uIE5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRydWUgYW5kIHRoYXQgYHBhZGRyLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYERBTU9OX1BBRERSYCBpcyBzZXQuIFRvIGRvIHRoYXQsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHJ1bGVzLCBhbmQgY29uZmlybSBteSBoeXBvdGhlc2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI2MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjE0LjA0NDgzNTA2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY4NDM5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vTWFrZWZpbGU9ND1vYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbm1tL2RhbW9uL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjE0LjI2MTY4NzQ4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzYyNTAyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OIFBhdGNoIEZ1bmN0aW9uIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBEQU1PTl9QQUREUmAgaXMgaW5kZWVkIGEgbmVjZXNzYXJ5IHBhcnQgb2YgdGhpcy4gUmlnaHQsIGNvbmZpcm1lZC4gTm93LCB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMsIGxldCdzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlOiBgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uYCwgYGRhbW9uX3BhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3N5c2ZzX3ByZXBzX2FkZF9kaXJzYCwgYG5yX3ByZXBzX3N0b3JlYCwgYHByZXBfYWN0aW9uX3N0b3JlYCwgYGRhbW9uX3N5c2ZzX3NldF9wcmVwc2AsIGFuZCBgZGFtb25fY29tbWl0X3ByZXBzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHBsYXkgYSByb2xlIGluIHRoZSBjaGFuZ2VzLlxuXG5IbW0sIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGV5IGFyZSBhbGwgc3RhdGljLiBZZXMsIHRoZXkgYXJlLiBUaGF0J3MgYSByZWQgZmxhZy4gSWYgdGhleSBhcmUgYWxsIHN0YXRpYywgdGhleSdyZSBwcm9iYWJseSBub3QgdGhlIGJlc3QgY2FuZGlkYXRlcyBmb3IgZGlyZWN0IEZvY3VzU3ltYm9sIGFuYWx5c2lzIHdpdGhpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGV5IG1pZ2h0IGJlIGluZGlyZWN0bHkgaW1wb3J0YW50LCBidXQgSSBuZWVkIHRvIGZpbmQgdGhlIHB1YmxpY2x5IHZpc2libGUgZnVuY3Rpb25zLlxuXG5BbHJpZ2h0LCBsZXQncyBzaGlmdCBmb2N1cyB0byBpZGVudGlmeSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIHBhdGNoLiBBaCwgaGVyZSB3ZSBnbzogYGRhbW9uX25ld19wcmVwYCBhbmQgYGRhbW9uX2FkZF9wcmVwYC4gVGhlc2UgYXJlIGV4cG9ydGVkLCBtZWFuaW5nIHRoZXkgYXJlIG5vbi1zdGF0aWMuIFRob3NlIGFyZSB0aGUgb25lcyBJIHNob3VsZCBiZSBsb29raW5nIGF0IHdoZW4gaXQgY29tZXMgdG8gdGhlIHN5bWJvbCBhbmFseXNpcy5cblxuSSBzaG91bGQgcHJvYmFibHkgY3Jvc3MgcmVmZXJlbmNlIHdpdGggYG1tL2RhbW9uL2NvcmUuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoxOS41OTc5NTExMjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTE2MzIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9uZXdfcHJlcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTk4PWludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEzLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTQ6c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3MzU9c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NTEtXFxubW0vZGFtb24vY29yZS5jOjE3NTI6XFx0XFx0bmV3X3ByZXAgPSBkYW1vbl9uZXdfcHJlcChzcmNfcHJlcC1cXHUwMDNlYWN0aW9uKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTc1My1cXHRcXHRpZiAoIW5ld19wcmVwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoxOS43OTcxMjAzNjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NDMxMzY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTm9uLVN0YXRpYyBGdW5jdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbkhtbSwgSSdtIGFuYWx5emluZyB0aGUgY29kZWJhc2UsIGFuZCBteSBpbml0aWFsIHF1ZXN0aW9uIGlzIGZvY3VzZWQgb24gZnVuY3Rpb24gZGVzaWduLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlbid0IHN0YXRpYz8gSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIHN0YXRpYyBvbmVzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcyBJIGNvbnNpZGVyIGRlc2lnbiBwYXR0ZXJucyBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlaXIgc2NvcGUsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgb3ZlcmFsbCBiZWhhdmlvciBjb3VsZCBiZSBkaWZmZXJlbnQsIGltcGFjdGluZyBwZXJmb3JtYW5jZSBhbmQgaG93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gaW50ZXJhY3Qgd2l0aCB0aGVtLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0byBjb25zaWRlciB0aGVpciBlZmZlY3Qgb24gdGhlIGdyZWF0ZXIgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoyMi43NDE0MzY4NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzM3NjkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9hZGRfcHJlcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTExND1zdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbmV3X3ByZXAoZW51bSBkYW1vbl9wcmVwX2FjdGlvbiBhY3Rpb24pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI1LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjY6dm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3MzU9c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NTQtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjE3NTU6XFx0XFx0ZGFtb25fYWRkX3ByZXAoZHN0LCBuZXdfcHJlcCk7XFxubW0vZGFtb24vY29yZS5jLTE3NTYtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoyMi44NjQ4MTk3NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3NTA1MzU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIERBTU9OIENvZGUncyBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBEQU1PTiBjb2RlIGFnYWluLCBhbmQgSSdtIGhpdHRpbmcgYSBiaXQgb2YgYSB3YWxsIGluIG15IHVuZGVyc3RhbmRpbmcuIEkga2VlcCBzZWVpbmcgdGhlc2UgZnVuY3Rpb24gbmFtZXMsIGxpa2UgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZWAgYW5kIGBkYW1vbl9jb21taXRfcHJvYmVzYCwgYnV0IHRoZXkncmUgKnN0YXRpYyouIFRoYXQncyBhIHByb2JsZW0uIElmIGFsbCB0aGUgaW50ZXJlc3RpbmcsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBob3cgZG8gSSBidWlsZCBhIGdvb2QgYEZvY3VzU3ltYm9sc2AgbGlzdD8gSSBuZWVkIHNvbWV0aGluZyB0byBmb2N1cyBvbi5cblxuQWxyaWdodCwgSSBjYW4gZGVmaW5pdGVseSBpbmNsdWRlIGBkYW1vbl9uZXdfcHJlcGAgYW5kIGBkYW1vbl9hZGRfcHJlcGA7IHRob3NlIGxvb2sgcHJvbWlzaW5nLiBBbmQsIHRoZXJlJ3MgYGtkYW1vbmRfZm5gLCBidXQgdGhhdCdzIGEgdGhyZWFkIGZ1bmN0aW9uLCBzbyBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoYXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIFRpbWUgdG8gY2hlY2sgYG1tL2RhbW9uL3N5c2ZzLmNgLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlcmUgdGhhdCBJJ3ZlIG1pc3NlZCwgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgbW9kaWZpZWQgYW5kLCB0aGVyZWZvcmUsIG1vcmUgdXNlZnVsIHRvIG1lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5NjksIk91dHB1dFRva2VucyI6NzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTQ6MjYuOTM5ODc1ODg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxMDE5MTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qXFxcXHMrXFxcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjI3LjA3Nzk4Njc2NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU0NDEzMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgYG1tL2RhbW9uL3N5c2ZzLmNgIGZvciBEYXRhIFN0cnVjdHVyZXMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBsYXkgb2YgdGhlIGxhbmQgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRoZSBjbGFzc2ljLCBxdWljayBhbmQgZGlydHkgbWV0aG9kOiBsZXQncyB1c2UgYGdyZXBgLiBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgcmVndWxhciBleHByZXNzaW9ucyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBkZWNsYXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSdsbCBzZWFyY2ggZm9yIGxpbmVzIHRoYXQgKmJlZ2luKiB3aXRoIGBpbnQgYCwgYHZvaWQgYCwgb3IgYHN0cnVjdCBgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZpcnN0IHBhc3MsIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBpbnRlZ2VyIHZhcmlhYmxlcywgdm9pZCByZXR1cm4gdHlwZXMgKHdoaWNoIG9mdGVuIGhpbnQgYXQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHdpdGggc2lkZSBlZmZlY3RzKSwgYW5kIGBzdHJ1Y3RgIGRlZmluaXRpb25zLCB3aGljaCBhcmUgYWJzb2x1dGVseSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGRhdGEgb3JnYW5pemF0aW9uIGluIHRoZSBtb2R1bGUuIEl0J3MgYSBwcmFnbWF0aWMsIHByZWxpbWluYXJ5IHNjYW4gYmVmb3JlIEkgZGl2ZSBkZWVwZXIgd2l0aCBjdGFncyBvciBldmVuIHN0YXJ0IHB1bGxpbmcgdXAgdGhlIGRlZmluaXRpb25zIGluIGFuIElERS4gSSdtIGVzc2VudGlhbGx5IHVzaW5nIGBncmVwYCBhcyBhIHZlcnkgdGFyZ2V0ZWQgY29kZSBpbmRleGVyIGZvciBhIHF1aWNrLCBpbml0aWFsIG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQxOSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjMwLjgzMjQwMzkyMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3MTMyNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8c3RydWN0fHNzaXplX3QpIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmMtMTUtXFxubW0vZGFtb24vc3lzZnMuYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTgyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbl9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTEtXFxubW0vZGFtb24vc3lzZnMuYzo5MjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9ucyB7XFxubW0vZGFtb24vc3lzZnMuYy05My1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjEwLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjExOnN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTMxNy1cXG5tbS9kYW1vbi9zeXNmcy5jOjMxODpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyB7XFxubW0vZGFtb24vc3lzZnMuYy0zMTktXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3RhcmdldHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTQ0NS1cXG5tbS9kYW1vbi9zeXNmcy5jOjQ0NjpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWwge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNDQ3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTU5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNjAyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6NjAzOnN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNjA0LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTc0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTc1Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjc1NzpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCB7XFxubW0vZGFtb24vc3lzZnMuYy03NTgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NzYyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJlcCAqZGFtb25fc3lzZnNfcHJlcF9hbGxvYyh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy03NzItXFxubW0vZGFtb24vc3lzZnMuYzo3NzM6c3RydWN0IGRhbW9uX3N5c2ZzX3ByZXBfYWN0aW9uX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNzc0LVxcdGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz04NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJlcF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtODUwLVxcbm1tL2RhbW9uL3N5c2ZzLmM6ODUxOnN0cnVjdCBkYW1vbl9zeXNmc19wcmVwcyB7XFxubW0vZGFtb24vc3lzZnMuYy04NTItXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9OTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3ByZXBzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy05NjktXFxubW0vZGFtb24vc3lzZnMuYzo5NzA6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciB7XFxubW0vZGFtb24vc3lzZnMuYy05NzEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9OTc4PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyICpkYW1vbl9zeXNmc19maWx0ZXJfYWxsb2Modm9pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTgyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6OTgzOnN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJfdHlwZV9uYW1lIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTk4NC1cXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTExNTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xMTYzLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTE2NDpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyB7XFxubW0vZGFtb24vc3lzZnMuYy0xMTY1LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTEyNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTI4Mi1cXG5tbS9kYW1vbi9zeXNmcy5jOjEyODM6c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTEyODQtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTM4MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZV9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4OS1cXG5tbS9kYW1vbi9zeXNmcy5jOjEzOTA6c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlcyB7XFxubW0vZGFtb24vc3lzZnMuYy0xMzkxLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE1MDk9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJvYmVzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNTE4LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTUxOTpzdHJ1Y3QgZGFtb25fc3lzZnNfYXR0cnMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTUyMC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2F0dHJzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNjI0LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTYyNTpzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTYyNi1cXHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE2MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSBkYW1vbl9zeXNmc19vcHNfbmFtZXNbXSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTY0NC1cXG5tbS9kYW1vbi9zeXNmcy5jOjE2NDU6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTY0Ni1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xODkxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE5MDAtXFxubW0vZGFtb24vc3lzZnMuYzoxOTAxOnN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyB7XFxubW0vZGFtb24vc3lzZnMuYy0xOTAyLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMjktXFxubW0vZGFtb24vc3lzZnMuYzoyMDMwOnN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjU2OT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoaW50ICgqZm4pKHZvaWQgKmRhdGEpLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTgyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjU4MzpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lc193YWxrX2RhdGEge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjU4NC1cXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9Mjc2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNzc2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc3NzpzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjc3OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yOTEyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yOTIxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjkyMjpzdHJ1Y3QgZGFtb25fc3lzZnNfdWlfZGlyIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTI5MjMtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTQ6MzEuMTQ5NTQxNzEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTE1NDgzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OJ3MgU3lzZnMgSW50ZXJmYWNlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgREFNT04gY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJJ20gbm90aWNpbmcgaXMgdGhhdCBldmVyeSBzaW5nbGUgc3lzZnMgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCdzIGEgZGVsaWJlcmF0ZSBkZXNpZ24gY2hvaWNlLCBhbmQgaXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgc2NvcGUgYW5kIHBvdGVudGlhbCBleHRlcm5hbCBpbnRlcmFjdGlvbnMuIEJ1dCB0aGVuIEkgc2VlIGEgY291cGxlIG9mIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vY29yZS5jYCDigJMgc3BlY2lmaWNhbGx5IGBkYW1vbl9uZXdfcHJlcGAgYW5kIGBkYW1vbl9hZGRfcHJlcGAg4oCTIHRoYXQgYXJlbid0IHN0YXRpYy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgZWl0aGVyIG9mIHRoZW0gYXJlIGV4cG9ydGVkLiBBcmUgdGhleSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgb2YgdGhlIGNvcmUgREFNT04gY29tcG9uZW50PyBUaGF0J3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uIFRpbWUgdG8gY2hlY2sgdGhlIGV4cG9ydCBzdGF0dXMsIGFuZCBkZXRlcm1pbmUgdGhlaXIgaW50ZW5kZWQgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5ODIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDozNC40NjEwOTQyMjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTcyMDk1NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qZGFtb25fbmV3X3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDozNS4wNDY4MjU3NjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1ODk0ODA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBTY29wZSBhbmQgVmlzaWJpbGl0eSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgdmFyaWFibGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzICpub3QqIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIGF0IGxlYXN0IG5vdCBkaXJlY3RseSB0aHJvdWdoIHN0YW5kYXJkIGV4cG9ydHMuIFRoYXQncyBmaW5lLCBidXQgdGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHJhaXNlcyBhIGZsYWcuIEl0IGltcGxpZXMgYSBkZWdyZWUgb2YgYWNjZXNzaWJpbGl0eSBiZXlvbmQgYSBwdXJlbHkgaW50ZXJuYWwgc2NvcGUuIFRoaXMgbWVhbnMgaXQgKmNvdWxkKiBiZSBhY2Nlc3NlZCBvciBsaW5rZWQgdG8gZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UsIG9yIHBlcmhhcHMgZXZlbiBkeW5hbWljYWxseSBsb2FkZWQsIGRlcGVuZGluZyBvbiB0aGUgYnVpbGQgYW5kIGxpbmtpbmcgc3RyYXRlZ3kuXG5cblRoZW4sIHRoZSBrZXkgcXVlc3Rpb24gYXJpc2VzOiBpcyB0aGlzIGBkYW1vbl9hZGRfcHJlcGAgZnVuY3Rpb24g4oCTICp0aGlzKiBzcGVjaWZpYyBlbnRpdHkg4oCTIGFjdHVhbGx5IGV4cG9ydGVkIGJ5IGFueSBvdGhlciBtZWFucz8gSXMgaXQgZXhwb3NlZCBpbiBhIHdheSB0aGF0LCB3aGlsZSBub3QgZXhwbGljaXRseSBkZWNsYXJlZCBpbiBhIHR5cGljYWwgaGVhZGVyIG9yIGV4cG9ydCBsaXN0LCBpcyBzdGlsbCBhY2Nlc3NpYmxlIHRocm91Z2ggc29tZSBvdGhlciBtZWNoYW5pc20/IFBlcmhhcHMgYSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgc3ltYm9sIHRhYmxlPyBLbm93aW5nIHRoaXMgYW5zd2VyIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVuZGVkIHVzZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEl0J3MgYWJvdXQgZmlndXJpbmcgb3V0IHRoZSBhY3R1YWwgZWZmZWN0aXZlIGJvdW5kYXJ5IG9mIHRoZSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDozOC43MDU3NzgyMjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODQxMjE1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qZGFtb25fYWRkX3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDozOC45MTQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NDI5MTc4Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEQU1PTiBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiVGhpcyBsb29rcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS5cIiBXaGlsZSB0aGUgY29yZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBwYXRjaCBhcmVuJ3QgZGlyZWN0bHkgc3RhdGljLCB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBicm9hZGVyIERBTU9OIGZyYW1ld29yaywgYW5kIHNwZWNpZmljYWxseSwgdGhleSBhcmUgcmVsYXRlZCB0byBGb2N1c1N5bWJvbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSB0aGUgY29ycmVjdCBwb2ludHMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy5cblxuTXkgZmlyc3QgY2hlY2sgd2FzIHdoZXRoZXIgYGRhbW9uX3N5c2ZzX3NldF9wcmVwc2AgYW5kIGBkYW1vbl9wYV9wcmVwX3Byb2Jlc2Agd2VyZSBzdGF0aWMuIFllcywgdGhleSBhcmUuIEJ1dCBJIHJlYWxpemVkIHRoYXQgc2luY2UgdGhpcyBpcyBhIHN5c2ZzIGludGVyZmFjZSwgdGhlIHJlYWwgZW50cnkgcG9pbnRzIGFyZSB0aGUgc3lzZnMgc3RvcmUgYW5kIHNob3cgZnVuY3Rpb25zLiBTbywgYWZ0ZXIgYSBsaXR0bGUgdGhvdWdodCwgSSdtIGdvaW5nIHRvIGxpc3QgYGRhbW9uX25ld19wcmVwYCBhbmQgYGRhbW9uX2FkZF9wcmVwYCBhcyBteSBGb2N1c1N5bWJvbHMuIEkgYWxzbyBjb25zaWRlcmVkIGBrZGFtb25kX2ZuYCwgdGhlIHRocmVhZCBmdW5jdGlvbiwgYnV0IGRlY2lkZWQgYWdhaW5zdCBpdCwgYXMgaXQncyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCB0aGUgbWFpbiBsb29wLCBhbmQgbm90IGEgZGlyZWN0IGVudHJ5IHBvaW50LlxuXG5OZXh0LCBJIG5lZWRlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYERBTU9OX1NZU0ZTYCBhbmQgYERBTU9OX1BBRERSYCBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMuIEFkZGl0aW9uYWxseSwgYERBTU9OYCwgYFNZU0ZTYCwgYE1NVWAsIGFuZCBgUEFHRV9JRExFX0ZMQUdgIGFyZSBpbXBsaWVkLiBTbywgbXkgRW5hYmxlQ29uZmlncyBsaXN0IHdpbGwgYmUgYERBTU9OX1NZU0ZTYCBhbmQgYERBTU9OX1BBRERSYC4gSSBjb25maXJtZWQgdGhhdCBgbW0vZGFtb24vc3lzZnMuY2AgY29tcGlsZXMgd2hlbiBgQ09ORklHX0RBTU9OX1NZU0ZTYCBpcyBzZXQsIGFuZCBgbW0vZGFtb24vcGFkZHIuY2AgY29tcGlsZXMgd2hlbiBgQ09ORklHX0RBTU9OX1BBRERSYCBpcyBzZXQuXG5cblJldmlld2luZyB0aGUgcGF0Y2ggYWdhaW4sIEkgc2VlIHRoYXQgaXQgYWRkcyBhIGBwcmVwc2AgZGlyZWN0b3J5IHVuZGVyIGBwcm9iZXMvXHUwMDNjUFx1MDAzZS9gIHdpdGhpbiB0aGUgc3lzZnMgaW50ZXJmYWNlLiBUaGlzIGFsbG93cyBzZXR0aW5nIGBwcmVwX2FjdGlvbmAgdG8gYHNldF9wZ2lkbGVgIGFuZCBhZGRzIGEgbmV3IGZpbHRlciB0eXBlIGNhbGxlZCBgcGdpZGxlX3Vuc2V0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBpdCBhbGxvd3MgdXNlcnMgdG8gc2V0IHBhZ2UgaWRsZSBmbGFncyBwcmlvciB0byBwcm9iaW5nIGFuZCB0aGVuIGZpbHRlciByZXN1bHRzLiBUaGlzIHNpZ25pZmljYW50bHkgbW9kaWZpZXMgREFNT04ncyBjb3JlIGJlaGF2aW9yLCBhbmQgaXQncyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXNmcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbi5cblxuU28sIHRvIHN1bW1hcml6ZSBmb3IgZnV6emluZyBwdXJwb3NlczpcblxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBkYW1vbl9uZXdfcHJlcGAsIGBkYW1vbl9hZGRfcHJlcGBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYERBTU9OX1NZU0ZTYCwgYERBTU9OX1BBRERSYFxuXG5GaW5hbGx5LCBsZXQgbWUgcmUtdmVyaWZ5IHRoYXQgYGRhbW9uX25ld19wcmVwYCBhbmQgYGRhbW9uX2FkZF9wcmVwYCBhcmUgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cywgdGhlIG9ubHkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYWRkZWQgYnkgdGhlIHBhdGNoLiBZZXAsIHRoYXQncyB3aGF0IEkgd2FudC4gVGhleSBhcmUgdGhlIGJlc3Qgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1ODEsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU1OjQ4LjM0MzM4MzQzOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzI2NTU3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbmV3X3ByZXBcIixcbiAgICBcImRhbW9uX2FkZF9wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIGFsbG93aW5nIHVzZXJzIHRvIGNvbmZpZ3VyZSBwcm9iaW5nIHByZXBhcmF0aW9uIGFjdGlvbnMgKGUuZy4sIGBzZXRfcGdpZGxlYCkgYW5kIGEgbmV3IGZpbHRlciB0eXBlIChgcGdpZGxlX3Vuc2V0YCkgdmlhIHN5c2ZzLiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucywgbWFraW5nIGl0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25ld19wcmVwXCIsXG4gICAgXCJkYW1vbl9hZGRfcHJlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgREFNT04gc3Vic3lzdGVtLCBhbGxvd2luZyB1c2VycyB0byBjb25maWd1cmUgcHJvYmluZyBwcmVwYXJhdGlvbiBhY3Rpb25zIChlLmcuLCBgc2V0X3BnaWRsZWApIGFuZCBhIG5ldyBmaWx0ZXIgdHlwZSAoYHBnaWRsZV91bnNldGApIHZpYSBzeXNmcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowtrzm5[1] Phase: Succeeded StartedAt: 2026-07-26 18:56:01 +0000 UTC FinishedAt: 2026-07-26 18:56:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 18:56:01 +0000 UTC FinishedAt: 2026-07-26 18:56:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2] Phase: Succeeded StartedAt: 2026-07-26 18:56:01 +0000 UTC FinishedAt: 2026-07-27 00:24:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 18:56:01 +0000 UTC FinishedAt: 2026-07-27 00:24:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 18:56:01 +0000 UTC FinishedAt: 2026-07-26 18:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 18:56:01 +0000 UTC FinishedAt: 2026-07-26 18:56:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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-workflowtrzm5/series-workflowtrzm5-convert-artifact-1103111249/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 18:56:14 +0000 UTC FinishedAt: 2026-07-26 20:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 18:56:14 +0000 UTC FinishedAt: 2026-07-26 20:09:09 +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:*fe0d2e58-4fae-4a53-981d-9ef35b5e1151,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-workflowtrzm5/series-workflowtrzm5-convert-artifact-1103111249/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": "6eb075db-a80e-43ad-b53e-784bc23b4bc3", "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-workflowtrzm5/series-workflowtrzm5-build-action-3972054527/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 18:56:14 +0000 UTC FinishedAt: 2026-07-26 20:08:50 +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:*fe0d2e58-4fae-4a53-981d-9ef35b5e1151,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-workflowtrzm5/series-workflowtrzm5-convert-artifact-1103111249/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": "6eb075db-a80e-43ad-b53e-784bc23b4bc3", "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-workflowtrzm5/series-workflowtrzm5-build-action-3972054527/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 20:09:09 +0000 UTC FinishedAt: 2026-07-26 20:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 20:09:09 +0000 UTC FinishedAt: 2026-07-26 20:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 20:09:10 +0000 UTC FinishedAt: 2026-07-26 20:09:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 20:09:10 +0000 UTC FinishedAt: 2026-07-26 20:09:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-workflowtrzm5/series-workflowtrzm5-convert-artifact-2811258916/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 20:09:37 +0000 UTC FinishedAt: 2026-07-26 20:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 20:09:38 +0000 UTC FinishedAt: 2026-07-26 20:11:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6eb075db-a80e-43ad-b53e-784bc23b4bc3,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-workflowtrzm5/series-workflowtrzm5-build-action-3972054527/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-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 20:12:18 +0000 UTC FinishedAt: 2026-07-26 20:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 20:12:18 +0000 UTC FinishedAt: 2026-07-26 20:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 20:12:18 +0000 UTC FinishedAt: 2026-07-26 21:14:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 20:12:19 +0000 UTC FinishedAt: 2026-07-26 21:14:44 +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:*fe0d2e58-4fae-4a53-981d-9ef35b5e1151,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-workflowtrzm5/series-workflowtrzm5-convert-artifact-2811258916/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": "36852180-a3a9-4e98-8ef9-255d1c56baa7", "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-workflowtrzm5/series-workflowtrzm5-build-action-4258193072/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 20:12:19 +0000 UTC FinishedAt: 2026-07-26 21:14:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fe0d2e58-4fae-4a53-981d-9ef35b5e1151,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-workflowtrzm5/series-workflowtrzm5-convert-artifact-2811258916/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": "36852180-a3a9-4e98-8ef9-255d1c56baa7", "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-workflowtrzm5/series-workflowtrzm5-build-action-4258193072/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:14:44 +0000 UTC FinishedAt: 2026-07-26 21:14:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:14:44 +0000 UTC FinishedAt: 2026-07-26 21:14:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:14:44 +0000 UTC FinishedAt: 2026-07-26 21:17:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:14:44 +0000 UTC FinishedAt: 2026-07-26 21:16:46 +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:*36852180-a3a9-4e98-8ef9-255d1c56baa7,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-workflowtrzm5/series-workflowtrzm5-build-action-4258193072/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-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:17:02 +0000 UTC FinishedAt: 2026-07-27 00:24:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:17:02 +0000 UTC FinishedAt: 2026-07-27 00:24:22 +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_new_prep","damon_add_prep"],"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:*6eb075db-a80e-43ad-b53e-784bc23b4bc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*36852180-a3a9-4e98-8ef9-255d1c56baa7,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-workflowtrzm5/series-workflowtrzm5-build-action-3972054527/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-workflowtrzm5/series-workflowtrzm5-build-action-4258193072/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:17:02 +0000 UTC FinishedAt: 2026-07-26 21:17:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:17:02 +0000 UTC FinishedAt: 2026-07-26 21:17:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_prep","damon_add_prep"],"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-workflowtrzm5/series-workflowtrzm5-convert-artifact-2748755885/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:17:02 +0000 UTC FinishedAt: 2026-07-26 21:17:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:17:02 +0000 UTC FinishedAt: 2026-07-26 21:17:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:17:03 +0000 UTC FinishedAt: 2026-07-26 21:17:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:17:55 +0000 UTC FinishedAt: 2026-07-27 00:24:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrzm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"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_new_prep","damon_add_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40685a0b21bb9ec5acd9409e5f9c1d49addf7ac0","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON_SYSFS","DAMON_PADDR"],"series_id":"3282b298-bbd5-45c6-9e54-502fc08a41e4","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-07-26 21:17:55 +0000 UTC FinishedAt: 2026-07-27 00:24:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6eb075db-a80e-43ad-b53e-784bc23b4bc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*36852180-a3a9-4e98-8ef9-255d1c56baa7,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-workflowtrzm5/series-workflowtrzm5-build-action-3972054527/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-workflowtrzm5/series-workflowtrzm5-build-action-4258193072/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-workflowtrzm5/series-workflowtrzm5-convert-artifact-2748755885/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,}