Name: series-workflowqxxl5 Phase: Succeeded StartedAt: 2026-08-02 04:37:54 +0000 UTC FinishedAt: 2026-08-02 08:27:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[0] Phase: Succeeded StartedAt: 2026-08-02 04:37:54 +0000 UTC FinishedAt: 2026-08-02 04:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 04:37:54 +0000 UTC FinishedAt: 2026-08-02 04:40:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "fa901743-3083-420d-91a6-087a9ca7fd9b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_compute_live_registers", "compute_insn_live_regs", "call_use_mask", "bpf_insn_def32", "bpf_is_reg64" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMmIzM0OywKICAgICYjMzQ7Y29tcHV0ZV9pbnNuX2xpdmVfcmVncyYjMzQ7LAogICAgJiMzNDtjYWxsX3VzZV9tYXNrJiMzNDssCiAgICAmIzM0O2JwZl9pbnNuX2RlZjMyJiMzNDssCiAgICAmIzM0O2JwZl9pc19yZWc2NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCB6ZXJvLWV4dGVuc2lvbiB0cmFja2luZyBsb2dpYy4gSXQgcmVtb3ZlcyBgc3VicmVnX2RlZmAgZnJvbSBgYnBmX3JlZ19zdGF0ZWAgYW5kIGluc3RlYWQgY29tcHV0ZXMgemVybyBleHRlbnNpb24gcmVxdWlyZW1lbnRzIGRpcmVjdGx5IGR1cmluZyBsaXZlbmVzcyBhbmFseXNpcyBieSB0cmFja2luZyAzMi1iaXQgYW5kIDY0LWJpdCByZWdpc3RlciB1c2VzIHNlcGFyYXRlbHkuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBhZmZlY3RzIGhvdyByZWdpc3RlciBzdGF0ZXMgYXJlIHRyYWNrZWQgYW5kIG9wdGltaXplZCwgd2hpY2ggaXMgYSBjcml0aWNhbCBhcmVhIGZvciBzZWN1cml0eSBhbmQgY29ycmVjdG5lc3MgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgxOThkYjFkNzE3MTgyMzg4OWUzZWViZjc1YmFlNTBkY2FkNzQxZGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA0OjM5OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA2ODJjMmNkM2I4NDQzLi4zMjFlYmQzMDhkMzhhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTE2MiwxMSAmIzQzOzE2Miw2IEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbiBcdCAqIHBvaW50aW5nIHRvIGJwZl9mdW5jX3N0YXRlLlxuIFx0ICovXG4gXHR1MzIgZnJhbWVubztcbi1cdC8qIFRyYWNrcyBzdWJyZWcgZGVmaW5pdGlvbi4gVGhlIHN0b3JlZCB2YWx1ZSBpcyB0aGUgaW5zbl9pZHggb2YgdGhlXG4tXHQgKiB3cml0aW5nIGluc24uIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHN1YnJlZ19kZWYgaXMgdXNlZCBiZWZvcmUgYW55IGluc25cbi1cdCAqIHBhdGNoaW5nIHdoaWNoIG9ubHkgaGFwcGVucyBhZnRlciBtYWluIHZlcmlmaWNhdGlvbiBmaW5pc2hlZC5cbi1cdCAqL1xuLVx0czMyIHN1YnJlZ19kZWY7XG4gXHQvKiBpZiAoIXByZWNpc2UgXHUwMDI2XHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbiYjMzk7dCBhZmZlY3Qgc2FmZXR5ICovXG4gXHRib29sIHByZWNpc2U7XG4gfTtcbkBAIC0xMDUwLDYgJiM0MzsxMDQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZ19pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnZcbiB9XG4gXG4gc3RydWN0IGJwZl9jYWxsX3N1bW1hcnkge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG87XG4gXHR1OCBudW1fcGFyYW1zO1xuIFx0Ym9vbCBpc192b2lkO1xuIFx0Ym9vbCBmYXN0Y2FsbDtcbkBAIC0xNjMxLDcgJiM0MzsxNjI4LDcgQEAgc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiB7XG4gfTtcbiBcbiAvKiBGdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSB2ZXJpZmllci5jLCB1c2VkIGJ5IGZpeHVwcy5jICovXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KTtcbiYjNDM7Ym9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcbiB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbik7XG4gdm9pZCBicGZfbWFya19zdWJwcm9nX2V4Y19jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7XG4gYm9vbCBicGZfYWxsb3dfdGFpbF9jYWxsX2luX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuQEAgLTE2NTUsNSAmIzQzOzE2NTIsNiBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG4mIzQzO2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xuIFxuICNlbmRpZiAvKiBfTElOVVhfQlBGX1ZFUklGSUVSX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggMmU0YWUwZWYwODYwOS4uN2M0NTk5ZTY1ZWNlYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtzdGFjaz0lcyBiZWZvcmUgXCYjMzQ7LCBlbnYtXHUwMDNldG1wX3N0cl9idWYpO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JWQ6IFwmIzM0OywgaWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHR9XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBhIGhpc3RvcnkgcmVjb3JkIHRoYXQgc29tZSByZWdpc3RlcnMgZ2FpbmVkIHJhbmdlIGF0IHRoaXMgaW5zbixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uY1xuaW5kZXggMDM5MWIzYmMwMDczNC4uNTBiM2NhNTE0OWEwYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcbkBAIC0xMzksNyAmIzQzOzEzOSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2JwZl9lbmRfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsXG4gXHRcdFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbi1cdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gJXMlZCByJWRcXG5cJiMzNDssXG4mIzQzO1x0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAlcyVkIHIlZFwmIzM0OyxcbiBcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfVE9fQkUgPyBcJiMzNDtiZVwmIzM0OyA6IFwmIzM0O2xlXCYjMzQ7LFxuIFx0XHRpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbkBAIC0xNDksNyAmIzQzOzE0OSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2JwZl9ic3dhcF9pbnNuKGJwZl9pbnNuX3ByaW50X3QgdmVyYm9zZSxcbiBcdFx0XHQgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4ge1xuLVx0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFxcblwmIzM0OyxcbiYjNDM7XHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGJzd2FwJWQgciVkXCYjMzQ7LFxuIFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0aW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gfVxuQEAgLTE5NywxOSAmIzQzOzE5NywxOSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRwcmludF9icGZfZW5kX2luc24odmVyYm9zZSwgY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbik7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX05FRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVjJWQgPSAtJWMlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCA9IC0lYyVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKGlzX2FkZHJfc3BhY2VfY2FzdChpbnNuKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgKCh1MzIpaW5zbi1cdTAwM2VpbW0pIFx1MDAzZVx1MDAzZSAxNiwgKHUxNilpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoaXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVjJWQgJXMgJXMlYyVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAlYyVkICVzICVzJWMlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIxOCw3ICYjNDM7MjE4LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIyNyw3ICYjNDM7MjI3LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNKVxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICooJXMgKikociVkICUmIzQzO2QpID0gciVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9IHIlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbkBAIC0yMzUsNyAmIzQzOzIzNSw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0IChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQUREIHx8IGluc24tXHUwMDNlaW1tID09IEJQRl9BTkQgfHxcbiBcdFx0XHQgIGluc24tXHUwMDNlaW1tID09IEJQRl9PUiB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWE9SKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGxvY2sgKiglcyAqKShyJWQgJSYjNDM7ZCkgJXMgciVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBsb2NrICooJXMgKikociVkICUmIzQzO2QpICVzIHIlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsXG5AQCAtMjQ2LDcgJiM0MzsyNDYsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9BTkQgfCBCUEZfRkVUQ0gpIHx8XG4gXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XG4gXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwmIzM0OzY0XCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuIFx0XHRcdFx0YnBmX2F0b21pY19hbHVfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWltbSkgXHUwMDNlXHUwMDNlIDRdLFxuQEAgLTI1NCw3ICYjNDM7MjU0LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUmIzQzO2QpLCByMCwgciVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSBhdG9taWMlc19jbXB4Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIwLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0QlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcgPyBcJiMzNDs2NFwmIzM0OyA6IFwmIzM0O1wmIzM0OyxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbkBAIC0yNjIsNDQgJiM0MzsyNjIsNDQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWENIRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfeGNoZygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwmIzM0OzY0XCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJSYjNDM7ZCkpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlJiM0MztkKSlcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfU1RPUkVfUkVMKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUmIzQzO2QpLCByJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBzdG9yZV9yZWxlYXNlKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZClcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHXyUwMnhcXG5cJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHXyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUKSB7XG4gXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0pIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9ICVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIG5vc3BlY1xcblwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbm9zcGVjXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcXG5cJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX2xkeF8lMDJ4XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZHhfJTAyeFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZClcXG5cJiMzNDssXG4mIzQzO1x0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKVwmIzM0OyxcbiBcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xuIFx0XHRcdFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSA6XG5AQCAtMzA3LDEyICYjNDM7MzA3LDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiBcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FCUykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSAqKCVzICopc2tiW3IlZCAmIzQzOyAlZF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgJiM0MzsgJWRdXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZWltbSk7XG5AQCAtMzMyLDEyICYjNDM7MzMyLDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGlmIChpc19wdHIgXHUwMDI2XHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXG4gXHRcdFx0XHRpbW0gPSAwO1xuIFxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAlc1wmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0X19mdW5jX2ltbV9uYW1lKGNicywgaW5zbiwgaW1tLFxuIFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZF8lMDJ4XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkge1xuQEAgLTM0NywzNSAmIzQzOzM0NywzNSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRjaGFyIHRtcFs2NF07XG4gXG4gXHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpIHtcbi1cdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGNhbGwgcGMlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBjYWxsIHBjJXNcJiMzNDssXG4gXHRcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdFx0X19mdW5jX2dldF9uYW1lKGNicywgaW5zbixcbiBcdFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0c3RyY3B5KHRtcCwgXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4tXHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBjYWxsICVzIyVkXFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUsXG4mIzQzO1x0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgY2FsbCAlcyMlZFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0XHRfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLFxuIFx0XHRcdFx0XHRcdFx0dG1wLCBzaXplb2YodG1wKSksXG4gXHRcdFx0XHRcdGluc24tXHUwMDNlaW1tKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QIHwgQlBGX0pBKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGdvdG8gcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBnb3RvIHBjJSYjNDM7ZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQSB8IEJQRl9YKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGdvdG94IHIlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgZ290b3ggciVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9NQVlfR09UTykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIG1heV9nb3RvIHBjJSYjNDM7ZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbWF5X2dvdG8gcGMlJiM0MztkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QMzIgfCBCUEZfSkEpKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgZ290b2wgcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBnb3RvbCBwYyUmIzQzO2RcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBleGl0XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBleGl0XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuIFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSxcbi1cdFx0XHRcdFwmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2RcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7KCUwMngpIGlmICVjJWQgJXMgJWMlZCBnb3RvIHBjJSYjNDM7ZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0pNUDMyID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XSxcbkBAIC0zODMsMTQgJiM0MzszODMsMTQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsXG4tXHRcdFx0XHRcJiMzNDsoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0OyglMDJ4KSBpZiAlYyVkICVzIDB4JXggZ290byBwYyUmIzQzO2RcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9KTVAzMiA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRicGZfam1wX3N0cmluZ1tCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgNF0sXG4gXHRcdFx0XHQodTMyKWluc24tXHUwMDNlaW1tLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJXNcJiMzNDssXG4gXHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBicGZfY2xhc3Nfc3RyaW5nW2NsYXNzXSk7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBhMGJkZGFkYTc5NjRlLi43M2FiOTU1NzNmNjA5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTQ0LDE1ICYjNDM7NDQsMTggQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHR9XG4gfVxuIFxuLS8qIFJldHVybiBUUlVFIGlmIElOU04gaGFzIGRlZmluZWQgYW55IDMyLWJpdCB2YWx1ZSBleHBsaWNpdGx5LiAqL1xuLXN0YXRpYyBib29sIGluc25faGFzX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJuIHRoZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5lZCBieSBJTlNOLCBvciAtMSBpZiBJTlNOIGRvZXMgbm90XG4mIzQzOyAqIGV4cGxpY2l0bHkgZGVmaW5lIGEgMzItYml0IHZhbHVlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4gXHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xuIFxuLVx0aWYgKGRzdF9yZWcgPT0gLTEpXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoZHN0X3JlZyBcdTAwM2MgMCB8fCBicGZfaXNfcmVnNjQoaW5zbikpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4gXG4tXHRyZXR1cm4gIWJwZl9pc19yZWc2NChpbnNuLCBkc3RfcmVnLCBOVUxMLCBEU1RfT1ApO1xuJiM0MztcdHJldHVybiBkc3RfcmVnO1xuIH1cbiBcbiBzdGF0aWMgaW50IGtmdW5jX2Rlc2NfY21wX2J5X2ltbV9vZmYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbkBAIC0xNjksNyAmIzQzOzE3Miw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKiAoY250ID09IDEpIGlzIHRha2VuIG9yIG5vdC4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIElOU04gYXQgT0ZGIGlzIHRoZVxuIFx0ICogb3JpZ2luYWwgaW5zbiBhdCBvbGQgcHJvZy5cbiBcdCAqL1xuLVx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7XG4mIzQzO1x0ZGF0YVtvZmZdLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSkgXHUwMDNlPSAwO1xuIFxuIFx0aWYgKGNudCA9PSAxKVxuIFx0XHRyZXR1cm47XG5AQCAtMTgxLDcgJiM0MzsxODQsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Zm9yIChpID0gb2ZmOyBpIFx1MDAzYyBvZmYgJiM0MzsgY250IC0gMTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0LyogRXhwYW5kIGluc25pW29mZl0mIzM5O3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi9cbiBcdFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XG4tXHRcdGRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICYjNDM7IGkpO1xuJiM0MztcdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0MzsgaSkgXHUwMDNlPSAwO1xuIFx0fVxuIFxuIFx0LypcbkBAIC02MjAsNyAmIzQzOzYyMyw3IEBAIGludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHQgKiAgICAgICBCUEZfU1RYICYjNDM7IFNSQ19PUCwgc28gaXQgaXMgc2FmZSB0byBwYXNzIE5VTExcbiBcdFx0XHQgKiAgICAgICBoZXJlLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmIChicGZfaXNfcmVnNjQoXHUwMDI2aW5zbiwgbG9hZF9yZWcsIE5VTEwsIERTVF9PUCkpIHtcbiYjNDM7XHRcdFx0aWYgKGJwZl9pc19yZWc2NChcdTAwMjZpbnNuKSkge1xuIFx0XHRcdFx0aWYgKGNsYXNzID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKVxuIFx0XHRcdFx0XHRpJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbmluZGV4IDBhYWRmYmFlMGFjYzUuLmVhMDAyNTUwNjcxYTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuQEAgLTQ5Nyw3ICYjNDM7NDk3LDYgQEAgc3RhdGljIHZvaWQgcHJpbnRfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmlcbiBcdFx0cG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JTNkOiBcJiMzNDssIGluc25faWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2luc25faWR4XSk7XG4tXHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpOyAvKiByZW1vdmUgXFxuICovXG4gXHRcdGluc25fcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JSpjO1wmIzM0OywgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJiMzOTsgJiMzOTspO1xuIFx0XHRwb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG5AQCAtMTA0Myw3ICYjNDM7MTA0Miw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcdHIlZDogXCYjMzQ7LCBpKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9pbltpXSk7XG5AQCAtMTA1OCw3ICYjNDM7MTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcdHNhJWQ6IFwmIzM0OywgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2YXRfaW5bYWldKTtcbkBAIC0xMDcwLDcgJiM0MzsxMDY3LDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGlcbiBcdFx0aWYgKCFwcmludGVkKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyUzZDogXCYjMzQ7LCBpZHgpO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbi1cdFx0XHRicGZfdmxvZ19yZXNldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTtcbiBcdFx0XHRwcmludGVkID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFx0ZnAlJiM0MztkOiBcJiMzNDssIC0oaSAmIzQzOyAxKSAqIDgpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFx1MDAyNmF0X3N0YWNrX2luW2ldKTtcbkBAIC0xNTQ1LDYgJiM0MzsxNTQxLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2lkeF0pO1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXG4gXHRcdC8qIENvbGxlY3Qgd2hhdCBuZWVkcyBwcmludGluZyAqL1xuIFx0XHRpZiAoaXNfbGR4X3N0eF9jYWxsIFx1MDAyNlx1MDAyNlxuQEAgLTIwNTAsMjkgJiM0MzsyMDQ3LDY3IEBAIGludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiAvKiBFYWNoIGZpZWxkIGlzIGEgcmVnaXN0ZXIgYml0bWFzayAqL1xuIHN0cnVjdCBpbnNuX2xpdmVfcmVncyB7XG4tXHR1MTYgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbi1cdHUxNiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuLVx0dTE2IGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4tXHR1MTYgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIHVzZTtcdC8qIHJlZ2lzdGVycyByZWFkIGJ5IGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIGRlZjtcdC8qIHJlZ2lzdGVycyB3cml0dGVuIGJ5IGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIG91dDtcdC8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqL1xuIH07XG4gXG4gLyogQml0bWFzayB3aXRoIDFzIGZvciBhbGwgY2FsbGVyIHNhdmVkIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQUxMX0NBTExFUl9TQVZFRF9SRUdTICgoMXUgXHUwMDNjXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTKSAtIDEpXG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIHJlZzMyX21hc2sodTMyIG4pIHsgcmV0dXJuIEJJVChuKTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHUzMiByZWc2NF9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobikgfCBCSVQobiAmIzQzOyAxNik7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MzIgbWFza193aWRlbih1MzIgbSkgeyByZXR1cm4gbSB8IChtIFx1MDAzY1x1MDAzYyAxNik7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTE2IG1hc2tfaGkodTMyIG0pIHsgcmV0dXJuICh1MTYpKG0gXHUwMDNlXHUwMDNlIDE2KTsgfVxuJiM0MztcbiYjNDM7LyogSW5mZXIgdXNlIG1hc2sgYmFzZWQgb24gbnVtYmVyIGFuZCBzaXplcyBvZiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4gKi9cbiYjNDM7c3RhdGljIHUzMiBjYWxsX3VzZV9tYXNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7e1xuJiM0MztcdHUzMiBpLCB1c2UsIHNpemUsIHJlZ19wYXJhbXNfbnVtO1xuJiM0MztcdHN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKnA7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwZl9nZXRfY2FsbF9zdW1tYXJ5KGVudiwgaW5zbiwgXHUwMDI2Y3MpKVxuJiM0MztcdFx0LyogZS5nLiBhIGJwZi10by1icGYgY2FsbCwgYXNzdW1lIHRoYXQgY2FsbHMgdXNlIGZ1bGwgNjQtYml0IGZvciBlYWNoIHBhcmFtICovXG4mIzQzO1x0XHRyZXR1cm4gbWFza193aWRlbihBTExfQ0FMTEVSX1NBVkVEX1JFR1MgXHUwMDI2IH5CSVQoQlBGX1JFR18wKSk7XG4mIzQzO1xuJiM0MztcdGlmIChjcy5mdW5jX3Byb3RvKSB7XG4mIzQzO1x0XHR1c2UgPSAwO1xuJiM0MztcdFx0cCA9IGJ0Zl9wYXJhbXMoY3MuZnVuY19wcm90byk7XG4mIzQzO1x0XHRyZWdfcGFyYW1zX251bSA9IG1pbihidGZfdHlwZV92bGVuKGNzLmZ1bmNfcHJvdG8pLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVnX3BhcmFtc19udW07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHQgPSBidGZfdHlwZV9ieV9pZChjcy5idGYsIHBbaV0udHlwZSk7XG4mIzQzO1x0XHRcdGlmIChJU19FUlIoYnRmX3Jlc29sdmVfc2l6ZShjcy5idGYsIHQsIFx1MDAyNnNpemUpKSlcbiYjNDM7XHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuJiM0MztcdFx0XHR1c2UgfD0gc2l6ZSBcdTAwM2M9IHNpemVvZih1MzIpID8gcmVnMzJfbWFzayhpICYjNDM7IDEpIDogcmVnNjRfbWFzayhpICYjNDM7IDEpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIHVzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztmYWxsYmFjazpcbiYjNDM7XHQvKiBieSBkZWZhdWx0IGFzc3VtZSB0aGF0IGNhbGxzIHVzZSBmdWxsIDY0LWJpdCBmb3IgZWFjaCBwYXJhbSAqL1xuJiM0MztcdHJldHVybiBtYXNrX3dpZGVuKEdFTk1BU0sobWluX3QodTgsIGNzLm51bV9wYXJhbXMsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyksIDEpKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBDb21wdXRlIGluZm8tXHUwMDNle3VzZSxkZWZ9IGZpZWxkcyBmb3IgdGhlIGluc3RydWN0aW9uICovXG4gc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgc3RydWN0IGluc25fbGl2ZV9yZWdzICppbmZvKVxuIHtcbi1cdHN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzO1xuLVx0dTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpO1xuLVx0dTE2IHNyYyA9IEJJVChpbnNuLVx1MDAzZXNyY19yZWcpO1xuLVx0dTE2IGRzdCA9IEJJVChpbnNuLVx1MDAzZWRzdF9yZWcpO1xuLVx0dTE2IHIwICA9IEJJVCgwKTtcbi1cdHUxNiBkZWYgPSAwO1xuLVx0dTE2IHVzZSA9IDB4ZmZmZjtcbiYjNDM7XHRjb25zdCB1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdGNvbnN0IHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1OCBzaXplID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1MzIgc3JjID0gcmVnNjRfbWFzayhpbnNuLVx1MDAzZXNyY19yZWcpO1xuJiM0MztcdGNvbnN0IHUzMiBkc3QgPSByZWc2NF9tYXNrKGluc24tXHUwMDNlZHN0X3JlZyk7XG4mIzQzO1x0Y29uc3QgdTMyIHNyYzMyID0gbWFza19sbyhzcmMpO1xuJiM0MztcdGNvbnN0IHUzMiBkc3QzMiA9IG1hc2tfbG8oZHN0KTtcbiYjNDM7XHRjb25zdCB1MzIgcjAgID0gcmVnNjRfbWFzaygwKTtcbiYjNDM7XHR1MzIgZGVmID0gMDtcbiYjNDM7XHR1MzIgdXNlID0gVTMyX01BWDtcbiBcbiBcdHN3aXRjaCAoY2xhc3MpIHtcbiBcdGNhc2UgQlBGX0xEOlxuQEAgLTIwODMsOCAmIzQzOzIxMTgsOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHR1c2UgPSAwO1xuIFx0XHRcdH1cbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfTEQgfCBCUEZfQUJTOlxuLVx0XHRjYXNlIEJQRl9MRCB8IEJQRl9JTkQ6XG4mIzQzO1x0XHRjYXNlIEJQRl9BQlM6XG4mIzQzO1x0XHRjYXNlIEJQRl9JTkQ6XG4gXHRcdFx0Lyogc3RpY2sgd2l0aCBkZWZhdWx0cyAqL1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMjA5Miw3ICYjNDM7MjEyNywxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRjYXNlIEJQRl9MRFg6XG4gXHRcdHN3aXRjaCAobW9kZSkge1xuIFx0XHRjYXNlIEJQRl9NRU06XG4mIzQzO1x0XHRcdC8qIGEgbmFycm93IGxvYWQgc3RpbGwgcmVkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlciAqL1xuJiM0MztcdFx0XHRkZWYgPSBkc3Q7XG4mIzQzO1x0XHRcdHVzZSA9IHNyYztcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX01FTVNYOlxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBzaWduIGV4dGVuc2lvbiBkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlcjtcbiYjNDM7XHRcdFx0ICogc3JjIGhvbGRzIGEgcG9pbnRlciwgaGVuY2UgaXMgdXNlZCBhcyA2NC1iaXQuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdGRlZiA9IGRzdDtcbiBcdFx0XHR1c2UgPSBzcmM7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMjExMCwxMiAmIzQzOzIxNTMsMTkgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBCUEZfTUVNOlxuIFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuJiM0MztcdFx0XHR1c2UgPSBkc3QgfCAoc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMik7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0FUT01JQzpcbiYjNDM7XHRcdGNhc2UgQlBGX0FUT01JQzoge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBkc3QgaG9sZHMgYSBwb2ludGVyIGFuZCBpcyBhbHdheXMgdXNlZCBhcyA2NC1iaXQ7XG4mIzQzO1x0XHRcdCAqIHRoZSB2YWx1ZSBvcGVyYW5kIGFuZCByMCBhcmUgcmVhZCBhcyAzMi1iaXQgZm9yIEJQRl9XIGF0b21pY3MuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR1MzIgc3JjdiA9IHNpemUgPT0gQlBGX0RXID8gc3JjIDogc3JjMzI7XG4mIzQzO1x0XHRcdHUzMiByMHYgID0gc2l6ZSA9PSBCUEZfRFcgPyByMCA6IG1hc2tfbG8ocjApO1xuJiM0MztcbiBcdFx0XHRzd2l0Y2ggKGluc24tXHUwMDNlaW1tKSB7XG4gXHRcdFx0Y2FzZSBCUEZfQ01QWENIRzpcbi1cdFx0XHRcdHVzZSA9IHIwIHwgZHN0IHwgc3JjO1xuJiM0MztcdFx0XHRcdHVzZSA9IHIwdiB8IGRzdCB8IHNyY3Y7XG4gXHRcdFx0XHRkZWYgPSByMDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgQlBGX0xPQURfQUNROlxuQEAgLTIxMjQsMTAgJiM0MzsyMTc0LDEwIEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgQlBGX1NUT1JFX1JFTDpcbiBcdFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4mIzQzO1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGRlZmF1bHQ6XG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4mIzQzO1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKVxuIFx0XHRcdFx0XHRkZWYgPSBzcmM7XG4gXHRcdFx0XHRlbHNlXG5AQCAtMjEzNSw2ICYjNDM7MjE4NSw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9BTFU6XG4gXHRjYXNlIEJQRl9BTFU2NDpcbkBAIC0yMTQ4LDE0ICYjNDM7MjE5OSwxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbiBcdFx0XHRcdHVzZSA9IDA7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0dXNlID0gc3JjO1xuJiM0MztcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IHNyYyA6IHNyYzMyO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGRlZiA9IGRzdDtcbiBcdFx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9LKVxuLVx0XHRcdFx0dXNlID0gZHN0O1xuJiM0MztcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IGRzdCA6IGRzdDMyO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdHVzZSA9IGRzdCB8IHNyYztcbiYjNDM7XHRcdFx0XHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyAoZHN0IHwgc3JjKSA6IChkc3QzMiB8IHNyYzMyKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0pNUDpcbkBAIC0yMTc3LDE3ICYjNDM7MjIyOCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0dXNlID0gcjA7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX0NBTEw6XG4tXHRcdFx0ZGVmID0gQUxMX0NBTExFUl9TQVZFRF9SRUdTO1xuLVx0XHRcdHVzZSA9IGRlZiBcdTAwMjYgfkJJVChCUEZfUkVHXzApO1xuLVx0XHRcdGlmIChicGZfZ2V0X2NhbGxfc3VtbWFyeShlbnYsIGluc24sIFx1MDAyNmNzKSlcbi1cdFx0XHRcdHVzZSA9IEdFTk1BU0sobWluX3QodTgsIGNzLm51bV9wYXJhbXMsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyksIDEpO1xuJiM0MztcdFx0XHRkZWYgPSBtYXNrX3dpZGVuKEFMTF9DQUxMRVJfU0FWRURfUkVHUyk7XG4mIzQzO1x0XHRcdHVzZSA9IGNhbGxfdXNlX21hc2soZW52LCBpbnNuKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRkZWYgPSAwO1xuIFx0XHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0spXG4gXHRcdFx0XHR1c2UgPSBkc3Q7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuJiM0MztcdFx0XHRcdHVzZSA9IGRzdCB8IChjb2RlID09IEJQRl9KTVAzMiA/IHNyYyA6IHNyYzMyKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0yMjA5LDYgJiM0MzsyMjU4LDcgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuIFx0c3RydWN0IGluc25fbGl2ZV9yZWdzICpzdGF0ZTtcbiBcdGludCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiYjNDM7XHR1NjQgcG9zLCBpbnNuX3BvcztcbiBcdGludCBlcnIgPSAwLCBpLCBqO1xuIFx0Ym9vbCBjaGFuZ2VkO1xuIFxuQEAgLTIyNTIsOCAmIzQzOzIzMDIsOCBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnQgaW5zbl9pZHggPSBlbnYtXHUwMDNlY2ZnLmluc25fcG9zdG9yZGVyW2ldO1xuIFx0XHRcdHN0cnVjdCBpbnNuX2xpdmVfcmVncyAqbGl2ZSA9IFx1MDAyNnN0YXRlW2luc25faWR4XTtcbiBcdFx0XHRzdHJ1Y3QgYnBmX2lhcnJheSAqc3VjYztcbi1cdFx0XHR1MTYgbmV3X291dCA9IDA7XG4tXHRcdFx0dTE2IG5ld19pbiA9IDA7XG4mIzQzO1x0XHRcdHUzMiBuZXdfb3V0ID0gMDtcbiYjNDM7XHRcdFx0dTMyIG5ld19pbiA9IDA7XG4gXG4gXHRcdFx0c3VjYyA9IGJwZl9pbnNuX3N1Y2Nlc3NvcnMoZW52LCBpbnNuX2lkeCk7XG4gXHRcdFx0Zm9yIChpbnQgcyA9IDA7IHMgXHUwMDNjIHN1Y2MtXHUwMDNlY250OyAmIzQzOyYjNDM7cylcbkBAIC0yMjY3LDggJiM0MzsyMzE3LDIwIEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgJiM0MzsmIzQzO2kpXG4tXHRcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBzdGF0ZVtpXS5pbjtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdGludCBkZWYzMiA9IGJwZl9pbnNuX2RlZjMyKFx1MDAyNmluc25zW2ldKTtcbiYjNDM7XHRcdHUzMiBvdXQgPSBzdGF0ZVtpXS5vdXQ7XG4mIzQzO1x0XHR1MzIgaW4gPSBzdGF0ZVtpXS5pbjtcbiYjNDM7XG4mIzQzO1x0XHRpbnNuX2F1eFtpXS5saXZlX3JlZ3NfYmVmb3JlID0gbWFza19sbyhpbikgfCBtYXNrX2hpKGluKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBPbiBhcmNoaXRlY3R1cmVzIHdoZXJlIDMyLWJpdCBvcGVyYXRpb25zIGRvIG5vdCByZXNldCB1cHBlciBoYWx2ZXNcbiYjNDM7XHRcdCAqIG9mIHRoZSByZWdpc3RlcnMsIHRoZSB2ZXJpZmllciBuZWVkcyB0byB6ZXJvIGV4dGVuZCBhIGRlc3RpbmF0aW9uXG4mIzQzO1x0XHQgKiByZWdpc3RlciBpZiBhbiBpbnN0cnVjdGlvbiBkZWZpbmVzIGEgMzItYml0IHN1YnJlZ2lzdGVyIGFuZCB0aGVcbiYjNDM7XHRcdCAqIHVwcGVyIGhhbGYgb2YgdGhhdCByZWdpc3RlciBpcyBhbGl2ZSBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGluc25fYXV4W2ldLnpleHRfZHN0ID0gZGVmMzIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiAobWFza19oaShvdXQpIFx1MDAyNiBCSVQoZGVmMzIpKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTDIpIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0xpdmUgcmVncyBiZWZvcmUgaW5zbjpcXG5cJiMzNDspO1xuQEAgLTIyODQsNyAmIzQzOzIzNDYsMTIgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRlbHNlXG4gXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDsuXCYjMzQ7KTtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7IFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHBvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXHUwMDI2aW5zbnNbaV0pO1xuJiM0MztcdFx0XHRpbnNuX3BvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbiYjNDM7XHRcdFx0aWYgKGluc25fYXV4W2ldLnpleHRfZHN0KVxuJiM0MztcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslKmM7IHpleHRcJiMzNDssIGJwZl92bG9nX2FsaWdubWVudChpbnNuX3BvcyAtIHBvcyksICYjMzk7ICYjMzk7KTtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHRcdFx0aWYgKGJwZl9pc19sZGltbTY0KFx1MDAyNmluc25zW2ldKSlcbiBcdFx0XHRcdGkmIzQzOyYjNDM7O1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlNmYzNWY0ZTcxNWI2Li5kNWI2ZmVmMWFkODk3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yMTI5LDEyICYjNDM7MjEyOSw5IEBAIHN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiAvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xuIHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4ge1xuLVx0czMyIHN1YnJlZ19kZWYgPSByZWctXHUwMDNlc3VicmVnX2RlZjtcbi1cbiBcdG1lbXNldChyZWcsIDAsIHNpemVvZigqcmVnKSk7XG4gXHRyZWctXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcbiBcdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV91bmtub3duO1xuLVx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmO1xuIFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcbiB9XG4gXG5AQCAtMjIxMCw3ICYjNDM7MjIwNyw2IEBAIHN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR9XG4gfVxuIFxuLSNkZWZpbmUgREVGX05PVF9TVUJSRUdcdCgwKVxuIHN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSlcbiB7XG5AQCAtMjIxOSw3ICYjNDM7MjIxNSw2IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfQlBGX1JFRzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tpXSk7XG4tXHRcdHJlZ3NbaV0uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0fVxuIFxuIFx0LyogZnJhbWUgcG9pbnRlciAqL1xuQEAgLTMwMzMsMTEgJiM0MzszMDI4LDEwIEBAIHN0YXRpYyB2b2lkIG1hcmtfc3RhY2tfc2xvdHNfc2NyYXRjaGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gfVxuIFxuIC8qIFRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBieSB0aGUgZm9sbG93aW5nIDMyLWJpdCBvcHRpbWl6YXRpb25cbi0gKiBjb2RlIG9ubHkuIEl0IHJldHVybnMgVFJVRSBpZiB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzXG4tICogb24gNjQtYml0LCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLlxuJiM0MzsgKiBjb2RlIG9ubHkuIEl0IHJldHVybnMgVFJVRSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXMgb24gNjQtYml0LFxuJiM0MzsgKiBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLlxuICAqL1xuLWJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi1cdCAgICAgIHUzMiByZWdubywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpXG4mIzQzO2Jvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4gXHR1OCBjb2RlLCBjbGFzcywgb3A7XG4gXG5AQCAtMzA1OCwxMSAmIzQzOzMwNTIsNiBAQCBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdFx0LyogSGVscGVyIGNhbGwgd2lsbCByZWFjaCBoZXJlIGJlY2F1c2Ugb2YgYXJnIHR5cGVcbi1cdFx0XHQgKiBjaGVjaywgY29uc2VydmF0aXZlbHkgcmV0dXJuIFRSVUUuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHQgPT0gU1JDX09QKVxuLVx0XHRcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG5AQCAtMzA3OCwyMiAmIzQzOzMwNjcsMTEgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0aWYgKGNsYXNzID09IEJQRl9BTFUgfHwgY2xhc3MgPT0gQlBGX0pNUDMyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuLVx0XHRpZiAodCAhPSBTUkNfT1ApXG4tXHRcdFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7XG4tXHRcdC8qIExEWCBzb3VyY2UgbXVzdCBiZSBwdHIuICovXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuJiM0MztcdGlmIChjbGFzcyA9PSBCUEZfTERYKVxuJiM0MztcdFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7XG4gXG4tXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xuLVx0XHQvKiBCUEZfU1RYIChpbmNsdWRpbmcgYXRvbWljIHZhcmlhbnRzKSBoYXMgb25lIG9yIG1vcmUgc291cmNlXG4tXHRcdCAqIG9wZXJhbmRzLCBvbmUgb2Ygd2hpY2ggaXMgYSBwdHIuIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxlciBpc1xuLVx0XHQgKiBhc2tpbmcgYWJvdXQgaXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAodCA9PSBTUkNfT1AgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoY2xhc3MgPT0gQlBGX1NUWClcbiBcdFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVztcbi1cdH1cbiBcbiBcdGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiBcdFx0dTggbW9kZSA9IEJQRl9NT0RFKGNvZGUpO1xuQEAgLTMxMDMsMTUgJiM0MzszMDgxLDcgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0XHQvKiBCb3RoIExEX0lORCBhbmQgTERfQUJTIHJldHVybiAzMi1iaXQgZGF0YS4gKi9cbi1cdFx0aWYgKHQgIT0gU1JDX09QKVxuLVx0XHRcdHJldHVybiAgZmFsc2U7XG4tXG4tXHRcdC8qIEltcGxpY2l0IGN0eCBwdHIuICovXG4tXHRcdGlmIChyZWdubyA9PSBCUEZfUkVHXzYpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdC8qIEV4cGxpY2l0IHNvdXJjZSBjb3VsZCBiZSBhbnkgd2lkdGguICovXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0aWYgKGNsYXNzID09IEJQRl9TVClcbkBAIC0zMTIyLDMwICYjNDM7MzA5MiwxNCBAQCBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFya19pbnNuX3pleHQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLXtcbi1cdHMzMiBkZWZfaWR4ID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4tXG4tXHRpZiAoZGVmX2lkeCA9PSBERUZfTk9UX1NVQlJFRylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbZGVmX2lkeCAtIDFdLnpleHRfZHN0ID0gdHJ1ZTtcbi1cdC8qIFRoZSBkc3Qgd2lsbCBiZSB6ZXJvIGV4dGVuZGVkLCBzbyB3b24mIzM5O3QgYmUgc3ViLXJlZ2lzdGVyIGFueW1vcmUuICovXG4tXHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuLX1cbi1cbiBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLFxuIFx0XHRcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuIHtcbi1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaSAmIzQzOyBlbnYtXHUwMDNlaW5zbl9pZHg7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuLVx0Ym9vbCBydzY0O1xuIFxuIFx0bWFya19yZWdfc2NyYXRjaGVkKGVudiwgcmVnbm8pO1xuIFxuIFx0cmVnID0gXHUwMDI2cmVnc1tyZWdub107XG4tXHRydzY0ID0gYnBmX2lzX3JlZzY0KGluc24sIHJlZ25vLCByZWcsIHQpO1xuIFx0aWYgKHQgPT0gU1JDX09QKSB7XG4gXHRcdC8qIGNoZWNrIHdoZXRoZXIgcmVnaXN0ZXIgdXNlZCBhcyBzb3VyY2Ugb3BlcmFuZCBjYW4gYmUgcmVhZCAqL1xuIFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgPT0gTk9UX0lOSVQpIHtcbkBAIC0zMTU2LDkgJiM0MzszMTEwLDYgQEAgc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJcbiBcdFx0aWYgKHJlZ25vID09IEJQRl9SRUdfRlApXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRcdGlmIChydzY0KVxuLVx0XHRcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcbi1cbiBcdFx0cmV0dXJuIDA7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgZGVzdCBvcGVyYW5kIGNhbiBiZSB3cml0dGVuIHRvICovXG5AQCAtMzE2Niw3ICYjNDM7MzExNyw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2ZyYW1lIHBvaW50ZXIgaXMgcmVhZCBvbmx5XFxuXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuLVx0XHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHJ3NjQgPyBERUZfTk9UX1NVQlJFRyA6IGVudi1cdTAwM2VpbnNuX2lkeCAmIzQzOyAxO1xuIFx0XHRpZiAodCA9PSBEU1RfT1ApXG4gXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJlZ25vKTtcbiBcdH1cbkBAIC0zODIyLDExICYjNDM7Mzc3Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcbiBcdFx0XHRpZiAoc2l6ZSBcdTAwM2M9IHNwaWxsX3NpemUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIGJwZl9zdGFja19uYXJyb3dfYWNjZXNzX29rKG9mZiwgc2l6ZSwgc3BpbGxfc2l6ZSkpIHtcbi1cdFx0XHRcdC8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGVcbi1cdFx0XHRcdCAqIHN1YnJlZ19kZWYgZm9yIHRoaXMgaW5zbi4gIFNhdmUgaXQgZmlyc3QuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHMzMiBzdWJyZWdfZGVmID0gc3RhdGUtXHUwMDNlcmVnc1tkc3RfcmVnbm9dLnN1YnJlZ19kZWY7XG4tXG4gXHRcdFx0XHRpZiAoZW52LVx1MDAzZWJwZl9jYXBhYmxlIFx1MDAyNlx1MDAyNiBzaXplID09IDQgXHUwMDI2XHUwMDI2IHNwaWxsX3NpemUgPT0gNCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICBnZXRfcmVnX3dpZHRoKHJlZykgXHUwMDNjPSAzMilcbiBcdFx0XHRcdFx0LyogRW5zdXJlIHN0YWNrIHNsb3QgaGFzIGFuIElEIHRvIGJ1aWxkIGEgcmVsYXRpb25cbkBAIC0zODM0LDcgJiM0MzszNzc5LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbiBcdFx0XHRcdHN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSA9ICpyZWc7XG4tXHRcdFx0XHRzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10uc3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7XG4gXG4gXHRcdFx0XHQvKiBCcmVhayB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgZmlsbC5cbiBcdFx0XHRcdCAqIGNvZXJjZV9yZWdfdG9fc2l6ZSB3aWxsIGFkanVzdCB0aGUgYm91bmRhcmllcy5cbkBAIC02MjcxLDEyICYjNDM7NjIxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLFxuIFx0XHRcdFx0XHRcdCAgICB2YWx1ZV9yZWdubyk7XG4tXHRcdFx0XHQvKiBBIGxvYWQgb2YgY3R4IGZpZWxkIGNvdWxkIGhhdmUgZGlmZmVyZW50XG4tXHRcdFx0XHQgKiBhY3R1YWwgbG9hZCBzaXplIHdpdGggdGhlIG9uZSBlbmNvZGVkIGluIHRoZVxuLVx0XHRcdFx0ICogaW5zbi4gV2hlbiB0aGUgZHN0IGlzIFBUUiwgaXQgaXMgZm9yIHN1cmUgbm90XG4tXHRcdFx0XHQgKiBhIHN1Yi1yZWdpc3Rlci5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0aWYgKGJhc2VfdHlwZShpbmZvLnJlZ190eXBlKSA9PSBQVFJfVE9fQlRGX0lEKSB7XG4gXHRcdFx0XHRcdHJlZ3NbdmFsdWVfcmVnbm9dLmJ0ZiA9IGluZm8uYnRmO1xuIFx0XHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5idGZfaWQgPSBpbmZvLmJ0Zl9pZDtcbkBAIC03MzgwLDEwICYjNDM7NzMxOCw2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0XG4gXHRcdFx0aWYgKHNwaSBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiBzcGk7XG4gXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBGb3IgQ09OU1RfUFRSX1RPX0RZTlBUUiwgcmVnIGlzIGFscmVhZHkgc2NyYXRjaGVkIGJ5IGNoZWNrX3JlZ19hcmdcbi1cdFx0XHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxuLVx0XHRcdCAqL1xuIFx0XHRcdG1hcmtfc3RhY2tfc2xvdHNfc2NyYXRjaGVkKGVudiwgc3BpLCBCUEZfRFlOUFRSX05SX1NMT1RTKTtcbiBcbiBcdFx0XHRyZWcgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuQEAgLTk0NjMsNyAmIzQzOzkzOTcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdC8qIEFsbCBub24tdm9pZCBnbG9iYWwgZnVuY3Rpb25zIHJldHVybiBhIDY0LWJpdCBTQ0FMQVJfVkFMVUUuICovXG4gXHRcdGlmICghc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKSkge1xuIFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItXHUwMDNlcmVncywgQlBGX1JFR18wKTtcbi1cdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdFx0fVxuIFxuIFx0XHRpZiAoZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5taWdodF90aHJvdykge1xuQEAgLTEwNDgyLDkgJiM0MzsxMDQxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXHR9XG4gXHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjdXJfZnVuYyhlbnYpKTtcbiBcbi1cdC8qIGhlbHBlciBjYWxsIHJldHVybnMgNjQtYml0IHZhbHVlLiAqL1xuLVx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbi1cbiBcdC8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovXG4gXHRyZXRfdHlwZSA9IGZuLVx1MDAzZXJldF90eXBlO1xuIFx0cmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpO1xuQEAgLTEwNzIyLDMwICYjNDM7MTA2NTIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoKSBpcyB1c2VkIHdoZW4gdGhlIHJlZyBzaXplIGlzIGRldGVybWluZWQgYnlcbi0gKiB0aGUgQlRGIGZ1bmNfcHJvdG8mIzM5O3MgcmV0dXJuIHZhbHVlIHNpemUgYW5kIGFyZ3VtZW50LlxuLSAqL1xuLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyxcbi1cdFx0XHRcdCAgICAgdTMyIHJlZ25vLCBzaXplX3QgcmVnX3NpemUpXG4te1xuLVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IFx1MDAyNnJlZ3NbcmVnbm9dO1xuLVxuLVx0aWYgKHJlZ25vID09IEJQRl9SRUdfMCkge1xuLVx0XHQvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi9cbi1cdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSByZWdfc2l6ZSA9PSBzaXplb2YodTY0KSA/XG4tXHRcdFx0REVGX05PVF9TVUJSRUcgOiBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbi1cdH0gZWxzZSBpZiAocmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkpIHtcbi1cdFx0LyogRnVuY3Rpb24gYXJndW1lbnQgKi9cbi1cdFx0bWFya19pbnNuX3pleHQoZW52LCByZWcpO1xuLVx0fVxuLX1cbi1cbi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcbi1cdFx0XHRcdCAgIHNpemVfdCByZWdfc2l6ZSlcbi17XG4tXHRyZXR1cm4gX19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgY3VyX3JlZ3MoZW52KSwgcmVnbm8sIHJlZ19zaXplKTtcbi19XG4tXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYWNxdWlyZShzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4ge1xuIFx0cmV0dXJuIG1ldGEtXHUwMDNla2Z1bmNfZmxhZ3MgXHUwMDI2IEtGX0FDUVVJUkU7XG5AQCAtMTI5NzQsNyAmIzQzOzEyODgwLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhO1xuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDtcbiBcdGludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7XG4tXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzO1xuIFx0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZDtcbiBcdHN0cnVjdCBidGYgKmRlc2NfYnRmO1xuIFx0aW50IGlkO1xuQEAgLTEzMDE4LDcgJiM0MzsxMjkyMyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2ZhaWxlZCB0byBtYXJrIHMzMiByYW5nZSBmb3IgcmV0dmFsIGluIGZvcmtlZCBzdGF0ZSBmb3IgbG9ja1xcblwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuLVx0XHRfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdzLCBCUEZfUkVHXzAsIHNpemVvZih1MzIpKTtcbiBcdH0gZWxzZSBpZiAoIWluc24tXHUwMDNlb2ZmIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfX19icGZfdHJhcF0pIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3VuZXhwZWN0ZWQgX19icGZfdHJhcCgpIGR1ZSB0byB1bmluaXRpYWxpemVkIHZhcmlhYmxlP1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTEzMTY4LDcgJiM0MzsxMzA3Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdHUzMiByZWdubyA9IGNhbGxlcl9zYXZlZFtpXTtcbiBcbiBcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tyZWdub10pO1xuLVx0XHRyZWdzW3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHR9XG4gXHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjdXJfZnVuYyhlbnYpKTtcbiBcbkBAIC0xMzE5MCw3ICYjNDM7MTMwOTMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRpZiAobWV0YS5idGYgPT0gYnRmX3ZtbGludXggXHUwMDI2XHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxuIFx0XHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXG4gXHRcdFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcbi1cdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgdC1cdTAwM2VzaXplKTtcbiBcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4gXHRcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2cHRyX3R5cGVfaWQpO1xuIFx0XHRlcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XG5AQCAtMTMyODEsNyAmIzQzOzEzMTgzLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHQvKiBGb3IgbWFya19wdHJfb3JfbnVsbF9yZWcsIHNlZSA5M2MyMzBlM2Y1YmQ2ICovXG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4gXHRcdH1cbi1cdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgc2l6ZW9mKHZvaWQgKikpO1xuIFx0XHRpZiAoaXNfa2Z1bmNfYWNxdWlyZShcdTAwMjZtZXRhKSkge1xuIFx0XHRcdGlkID0gYWNxdWlyZV9yZWZlcmVuY2UoZW52LCBpbnNuX2lkeCwgMCk7XG4gXHRcdFx0aWYgKGlkIFx1MDAzYyAwKVxuQEAgLTEzMzE4LDE4ICYjNDM7MTMyMTksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdGNhbGxlcl9pbmZvLVx1MDAzZXN0YWNrX2FyZ19jbnQgPSBzdGFja19hcmdfY250O1xuIFx0fVxuIFxuLVx0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEuZnVuY19wcm90byAmIzQzOyAxKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbl90KGludCwgbmFyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHUzMiByZWdubyA9IGkgJiM0MzsgMTtcbi1cbi1cdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xuLVx0XHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKVxuLVx0XHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgc2l6ZW9mKHZvaWQgKikpO1xuLVx0XHRlbHNlXG4tXHRcdFx0Lyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqL1xuLVx0XHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgdC1cdTAwM2VzaXplKTtcbi1cdH1cbi1cbiBcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpKSB7XG4gXHRcdGVyciA9IHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoZW52LCBpbnNuX2lkeCwgXHUwMDI2bWV0YSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtMTQ4MjMsOCAmIzQzOzE0NzEyLDYgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRpZiAoZHN0X3JlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSlcbiBcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuIFxuLVx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbi1cbiBcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NClcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LlxuQEAgLTE1MDI4LDggJiM0MzsxNDkxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSAxKSB7IC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqL1xuIFx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNldHlwZSA9IFBUUl9UT19BUkVOQTtcbi1cdFx0XHRcdFx0XHQvKiBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovXG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2VvZmYgPT0gMCkge1xuIFx0XHRcdFx0XHQvKiBjYXNlOiBSMSA9IFIyXG5AQCAtMTUwMzcsNyAmIzQzOzE0OTIyLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4gXHRcdFx0XHRcdCpkc3RfcmVnID0gKnNyY19yZWc7XG4tXHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0LyogY2FzZTogUjEgPSAoczgsIHMxNiBzMzIpUjIgKi9cbiBcdFx0XHRcdFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpKSB7XG5AQCAtMTUwNTUsNyAmIzQzOzE0OTM5LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdGlmICghbm9fc2V4dClcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbiBcdFx0XHRcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuLVx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHRcdFx0XHR9XG5AQCAtMTUwODAsNyAmIzQzOzE0OTYzLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdCAqL1xuIFx0XHRcdFx0XHRcdGlmICghaXNfc3JjX3JlZ191MzIpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4gXHRcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdFx0LyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqL1xuIFx0XHRcdFx0XHRcdGJvb2wgbm9fc2V4dCA9IHJlZ191bWF4KHNyY19yZWcpIFx1MDAzYyAoMVVMTCBcdTAwM2NcdTAwM2MgKGluc24tXHUwMDNlb2ZmIC0gMSkpO1xuQEAgLTE1MDkwLDcgJiM0MzsxNDk3Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuIFx0XHRcdFx0XHRcdGlmICghbm9fc2V4dClcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbiBcdFx0XHRcdFx0XHRjb2VyY2Vfc3VicmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2Uge1xuQEAgLTE1OTU5LDEyICYjNDM7MTU4NDAsOCBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoKCEocmVnLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSBcdTAwMjZcdTAwMjYgIShrbm93bl9yZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxuIFx0XHQgICAgcmVnLVx1MDAzZWRlbHRhID09IGtub3duX3JlZy1cdTAwM2VkZWx0YSkge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4tXG4gXHRcdFx0KnJlZyA9ICprbm93bl9yZWc7XG4tXHRcdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4gXHRcdFx0czMyIHNhdmVkX29mZiA9IHJlZy1cdTAwM2VkZWx0YTtcbiBcdFx0XHR1MzIgc2F2ZWRfaWQgPSByZWctXHUwMDNlaWQ7XG4gXG5AQCAtMTU5NzQsMTIgJiM0MzsxNTg1MSwxMSBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdC8qIHJlZyA9IGtub3duX3JlZzsgcmVnICYjNDM7PSBkZWx0YSAqL1xuIFx0XHRcdCpyZWcgPSAqa25vd25fcmVnO1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYsIGlkIGFuZCBzdWJyZWdfZGVmIGZsYWcsXG4tXHRcdFx0ICogb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpIHdpbGwgYmUgaW5jb3JyZWN0LlxuJiM0MztcdFx0XHQgKiBNdXN0IHByZXNlcnZlIG9mZiBhbmQgaWQsIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKVxuJiM0MztcdFx0XHQgKiB3aWxsIGJlIGluY29ycmVjdC5cbiBcdFx0XHQgKi9cbiBcdFx0XHRyZWctXHUwMDNlZGVsdGEgPSBzYXZlZF9vZmY7XG4gXHRcdFx0cmVnLVx1MDAzZWlkID0gc2F2ZWRfaWQ7XG4tXHRcdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmO1xuIFxuIFx0XHRcdHNjYWxhcjMyX21pbl9tYXhfYWRkKHJlZywgXHUwMDI2ZmFrZV9yZWcpO1xuIFx0XHRcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFx1MDAyNmZha2VfcmVnKTtcbkBAIC0xNjQxNCw4ICYjNDM7MTYyOTAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHQgKiBBbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlLlxuIFx0ICovXG4gXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbi1cdC8qIGxkX2FicyBsb2FkIHVwIHRvIDMyLWJpdCBza2IgZGF0YS4gKi9cbi1cdHJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4gXHQvKlxuIFx0ICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wXG4gXHQgKiB3aGljaCBtdXN0IGJlIGV4cGxvcmVkIGJ5IHRoZSB2ZXJpZmllciB3aGVuIGluIGEgc3VicHJvZy5cbkBAIC0xNjczMCwxMCAmIzQzOzE2NjA0LDExIEBAIGJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxuIFx0aW50IGk7XG4gXG4gXHRpZiAoYnBmX2hlbHBlcl9jYWxsKGNhbGwpKSB7XG4tXG4gXHRcdGlmIChicGZfZ2V0X2hlbHBlcl9wcm90byhlbnYsIGNhbGwtXHUwMDNlaW1tLCBcdTAwMjZmbikgXHUwMDNjIDApXG4gXHRcdFx0LyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi9cbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRjcy1cdTAwM2VidGYgPSBOVUxMO1xuJiM0MztcdFx0Y3MtXHUwMDNlZnVuY19wcm90byA9IE5VTEw7XG4gXHRcdGNzLVx1MDAzZWZhc3RjYWxsID0gZm4tXHUwMDNlYWxsb3dfZmFzdGNhbGwgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIChicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGNhbGwtXHUwMDNlaW1tKSB8fFxuIFx0XHRcdFx0YnBmX2ppdF9pbmxpbmVzX2hlbHBlcl9jYWxsKGNhbGwtXHUwMDNlaW1tKSk7XG5AQCAtMTY3NTQsNiAmIzQzOzE2NjI5LDggQEAgYm9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0LyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi9cbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRjcy1cdTAwM2VidGYgPSBtZXRhLmJ0ZjtcbiYjNDM7XHRcdGNzLVx1MDAzZWZ1bmNfcHJvdG8gPSBtZXRhLmZ1bmNfcHJvdG87XG4gXHRcdGNzLVx1MDAzZW51bV9wYXJhbXMgPSBidGZfdHlwZV92bGVuKG1ldGEuZnVuY19wcm90byk7XG4gXHRcdGNzLVx1MDAzZWZhc3RjYWxsID0gbWV0YS5rZnVuY19mbGFncyBcdTAwMjYgS0ZfRkFTVENBTEw7XG4gXHRcdGNzLVx1MDAzZWlzX3ZvaWQgPSBidGZfdHlwZV9pc192b2lkKGJ0Zl90eXBlX2J5X2lkKG1ldGEuYnRmLCBtZXRhLmZ1bmNfcHJvdG8tXHUwMDNldHlwZSkpO1xuQEAgLTE3NDc1LDYgJiM0MzsxNzM1Miw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRlbnYtXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslZDogXCYjMzQ7LCBlbnYtXHUwMDNlaW5zbl9pZHgpO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHRcdFx0ZW52LVx1MDAzZXByZXZfaW5zbl9wcmludF9wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSBlbnYtXHUwMDNlcHJldl9sb2dfcG9zO1xuIFx0XHRcdGVudi1cdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbmluZGV4IDVlN2NiOGIzNmZlZjIuLjdiMzNkODQ3ZDgwMGMgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xuQEAgLTEyOSwxNiAmIzQzOzEyOSwxMCBAQCBwcmludF9pbnNuX2Zvcl9ncmFwaCh2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHN0YXRpYyB2b2lkIF9fcHJpbnRmKDIsIDMpXG4gcHJpbnRfaW5zbl9qc29uKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4ge1xuLVx0dW5zaWduZWQgaW50IGwgPSBzdHJsZW4oZm10KTtcbi1cdGNoYXIgY2hvbXBlZF9mbXRbbF07XG4gXHR2YV9saXN0IGFyZ3M7XG4gXG4gXHR2YV9zdGFydChhcmdzLCBmbXQpO1xuLVx0aWYgKGwgXHUwMDNlIDApIHtcbi1cdFx0c3RybmNweShjaG9tcGVkX2ZtdCwgZm10LCBsIC0gMSk7XG4tXHRcdGNob21wZWRfZm10W2wgLSAxXSA9ICYjMzk7XFwwJiMzOTs7XG4tXHR9XG4tXHRqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGNob21wZWRfZm10LCBhcmdzKTtcbiYjNDM7XHRqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGZtdCwgYXJncyk7XG4gXHR2YV9lbmQoYXJncyk7XG4gfVxuIFxuQEAgLTM1MSw2ICYjNDM7MzQ1LDcgQEAgdm9pZCBkdW1wX3hsYXRlZF9wbGFpbihzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLFxuIFxuIFx0XHRwcmludGYoXCYjMzQ7JTR1OiBcJiMzNDssIGkpO1xuIFx0XHRwcmludF9icGZfaW5zbihcdTAwMjZjYnMsIGluc24gJiM0MzsgaSwgdHJ1ZSk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcbiBcdFx0aWYgKG9wY29kZXMpIHtcbiBcdFx0XHRwcmludGYoXCYjMzQ7ICAgICAgIFwmIzM0Oyk7XG5AQCAtNDE3LDYgJiM0Mzs0MTIsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX2Zvcl9ncmFwaChzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmX3N0YXJ0LCB2b2lkICpidWZfZW5kLFxuIFxuIFx0XHRwcmludGYoXCYjMzQ7JXU6IFwmIzM0OywgaW5zbl9vZmYpO1xuIFx0XHRwcmludF9icGZfaW5zbihcdTAwMjZjYnMsIGN1ciwgdHJ1ZSk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7XFxcXGxcXFxcXFxuXCYjMzQ7KTtcbiBcbiBcdFx0aWYgKG9wY29kZXMpIHtcbiBcdFx0XHRwcmludGYoXCYjMzQ7XFxcXCBcXFxcIFxcXFwgXFxcXCBcJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcbmluZGV4IGY1MjlmMWM4YzE3MWQuLjMwMjIxMzUyNTY4ZDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcbkBAIC01NSwxMCAmIzQzOzU1LDkgQEAgc3RydWN0IGJwZl9pbnNuICpkaXNhc21faW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcbiBcdCAqIGZvciBlYWNoIGluc3RydWN0aW9uIChGRiBzdGFuZHMgZm9yIGluc3RydWN0aW9uIGBjb2RlYCBieXRlKS5cbiBcdCAqIFJlbW92ZSB0aGUgcHJlZml4IGlucGxhY2UsIGFuZCBhbHNvIHNpbXBsaWZ5IGNhbGwgaW5zdHJ1Y3Rpb25zLlxuIFx0ICogRS5nLjogXCYjMzQ7KDg1KSBjYWxsIGZvbyMxMFwmIzM0OyAtXHUwMDNlIFwmIzM0O2NhbGwgZm9vXCYjMzQ7LlxuLVx0ICogQWxzbyByZW1vdmUgbmV3bGluZSBpbiB0aGUgZW5kICh0aGUgJiMzOTttYXgoc3RybGVuKGJ1ZikgLSAxLCAwKSYjMzk7IHRoaW5nKS5cbiBcdCAqL1xuIFx0cGZ4X2VuZCA9IGJ1ZiAmIzQzOyA1O1xuLVx0c2Z4X3N0YXJ0ID0gYnVmICYjNDM7IG1heCgoaW50KXN0cmxlbihidWYpIC0gMSwgMCk7XG4mIzQzO1x0c2Z4X3N0YXJ0ID0gYnVmICYjNDM7IChpbnQpc3RybGVuKGJ1Zik7XG4gXHRpZiAoc3RybmNtcChwZnhfZW5kLCBcJiMzNDtjYWxsIFwmIzM0OywgNSkgPT0gMCBcdTAwMjZcdTAwMjYgKHRtcCA9IHN0cnJjaHIoYnVmLCAmIzM5OyMmIzM5OykpKVxuIFx0XHRzZnhfc3RhcnQgPSB0bXA7XG4gXHRsZW4gPSBzZnhfc3RhcnQgLSBwZnhfZW5kO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCBiZTk3ZjY4ODdmMGU3Li5mYmE1NjJjODE5NjkxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTEyNCw2ICYjNDM7MTI0LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9qaXRfaW5saW5lLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2lycS5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl96ZXh0LnNrZWwuaFwmIzM0O1xuIFxuICNkZWZpbmUgTUFYX0VOVFJJRVMgMTFcbiBcbkBAIC0yNzcsNiAmIzQzOzI3OCw3IEBAIHZvaWQgdGVzdF9pcnEodm9pZClcdFx0XHQgICAgICB7IFJVTihpcnEpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX210dSh2b2lkKVx0XHQgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2ppdF9pbmxpbmUodm9pZCkgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9qaXRfaW5saW5lKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jdHhfcHRyX3BhcmFtKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2N0eF9wdHJfcGFyYW0pOyB9XG4mIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl96ZXh0KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyh2ZXJpZmllcl96ZXh0KTsgfVxuIFxuIHN0YXRpYyBpbnQgaW5pdF90ZXN0X3ZhbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY2hhciAqbWFwX25hbWUpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjRjODJhMzFlNjY4MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3pleHQuY1xuQEAgLTAsMCAmIzQzOzEsMjYwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXG4mIzQzO19fZmxhZyhCUEZfRl9URVNUX1JORF9ISTMyKVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbG9zdF9hY3Jvc3NfY2hlY2twb2ludCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfa3RpbWVfZ2V0X25zXTtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjggPSByMDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI2ID0gMHhkZWFkYmVlZmNhZmViYWJlIGxsO1x0LyogaW5qZWN0IHNvbWUgdmFsdWUgZm9yIHI2JiMzOTtzIHVwcGVyIGhhbGYgKi9cdFxcXG4mIzQzO1x0aWYgcjggIT0gMCBnb3RvIDFmO1x0XHQvKiBmYWxsLXRocm91Z2ggY2FjaGVkIGZpcnN0LCBicmFuY2ggcHJ1bmVkICovXHRcXFxuJiM0MztcdHI2ID0gMzI7XHRcdFx0LyogZnVsbCA2NC1iaXQgZGVmICovXHRcdFx0XHRcXFxuJiM0MztcdGdvdG8gMmY7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3NiA9IDMyO1x0XHRcdC8qIDMyLWJpdCBkZWYsIHpleHQgbWFyayBsb3N0ICovXHRcdFxcXG4mIzQzOzI6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByNjtcdFx0XHQvKiBidWdneSB2ZXJpZmllciBiZWxpZXZlZCB1cHBlciAzMiBiaXRzIGFyZSAwICovIFxcXG4mIzQzO1x0XHRcdFx0XHQvKiBhbmQgdGh1cyBkaWQgbm90IHplcm8gZXh0ZW5kZWQgdzYgPSAzMi4gKi9cdFxcXG4mIzQzO1x0cjAgXHUwMDNlXHUwMDNlPSAzMjtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9rdGltZV9nZXRfbnMpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLVx1MDAzZSB6ZXh0ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfYWx1MzJfaGlfdXNlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBvbmx5IGFzIDMyLWJpdCAtXHUwMDNlIG5vIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbm90X21zZyhcJiMzNDt3MSA9IHcwe3suKn19OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25vdF9tc2coXCYjMzQ7dzIgPSB3MXt7Lip9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfYWx1MzJfaGlfdW51c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHcxID0gdzA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0dzIgPSB3MTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiA2NC1iaXQgZGVmaW5pdGlvbiBpcyBuZXZlciB6ZXJvIGV4dGVuZGVkICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX25vdF9tc2coXCYjMzQ7cjEgPSByMHt7Lip9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfbW92NjQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4mIzQzO1x0cjEgPSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE5hcnJvdyBsb2FkIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O3IxID0gKih1MzIgKikocjEwIC04KXt7ICYjNDM7fX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19sb2FkX2hpX3VzZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Kih1NjQgKikocjEwIC0gOCkgPSByMDtcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAqKHUzMiAqKShyMTAgLSA4KTtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAzMi1iaXQgYXRvbWljIGZldGNoIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O3IxID0gYXRvbWljX2ZldGNoX2FkZCgodTMyICopKHIxMCAtOCksIHIxKXt7ICYjNDM7fX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2F0b21pY19mZXRjaDMyX2hpX3VzZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcdFx0XHRcdFxcXG4mIzQzO1x0dzEgPSAxO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0LjhieXRlICVbZmV0Y2hfYWRkMzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbV9pbnNuKGZldGNoX2FkZDMyLFxuJiM0MztcdFx0ICAgICBCUEZfQVRPTUlDX09QKEJQRl9XLCBCUEZfQUREIHwgQlBGX0ZFVENILCBCUEZfUkVHXzEwLCBCUEZfUkVHXzEsIC04KSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAzMi1iaXQgYXRvbWljIGNtcHhjaGcgcmVzdWx0IChyMCkgcmVhZCBhcyA2NC1iaXQgLVx1MDAzZSB6ZXh0ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDtyMCA9IGF0b21pY19jbXB4Y2hnKCh1MzIgKikocjEwIC04KSwgcjAsIHIxKXt7ICYjNDM7fX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2NtcHhjaGczMl9oaV91c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIxID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XHRcdFx0XHRcXFxuJiM0MztcdHcwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdC44Ynl0ZSAlW2NtcHhjaGczMl07XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gcjA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByMjtcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW1faW5zbihjbXB4Y2hnMzIsXG4mIzQzO1x0XHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9DTVBYQ0hHLCBCUEZfUkVHXzEwLCBCUEZfUkVHXzEsIC04KSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAzMi1iaXQgZGVmIGJlZm9yZSBhIGJyYW5jaCwgdXBwZXIgaGFsZiB1c2VkIG9uIG9uZSBicmFuY2ggLVx1MDAzZSB6ZXh0ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3NiA9IDMye3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfY2ZnX2hpX3VzZWRfb25lX2JyYW5jaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3NiA9IDMyO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHIwID09IDAgZ290byBsMF8lPTtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByNjtcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO2wwXyU9Olx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiByMSYjMzk7cyB1cHBlciBoYWxmIGlzIGRlYWQsIHNvICYjMzk7dzEgPSAxJiMzOTsgbXVzdCBOT1QgYmUgbWFya2VkIGZvciB6ZXJvIGV4dGVuc2lvbi4gKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbm90X21zZyhcJiMzNDt3MSA9IDF7ey4qfX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCBub196ZXh0X290aGVyX3JlZ19oaV91c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjYgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XFxcbiYjNDM7XHR3MSA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHI2O1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIExEX0FCUyBkZWZpbmVzIHIwOyB3aGVuIHIwIGlzIHJlYWQgYXMgNjQtYml0IGl0IG11c3QgYmUgemVybyBleHRlbmRlZCAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7cjAgPSAqKHU4ICopc2tiWzBde3suKn19OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgemV4dF9sZF9hYnNfaGlfdXNlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIxO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1OCAqKXNrYlswXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjcgPSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHI3O1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6OjogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEhlbHBlciBwYXJhbWV0ZXJzIGFyZSByZWFkIGFzIDY0LWJpdCAoY2FsbF91c2VfbWFzaygpIGZhbGxiYWNrKSAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7dzIgPSAxe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGhlbHBlcl9wYXJhbV9yZWFkX2FzXzY0Yml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIxID0gcjEwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIxICYjNDM7PSAtODtcdFx0XHRcdFx0XFxcbiYjNDM7XHR3MiA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX3RyYWNlX3ByaW50a107XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX3RyYWNlX3ByaW50aylcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX191c2VkIF9fbmFrZWQgaW50IHN1YnByb2dfcmVhZHNfYXJnX2FzXzY0Yml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyogc3VicHJvZ3JhbSBwYXJhbWV0ZXJzIGFyZSBjb25zZXJ2YXRpdmVseSByZWFkIGFzIDY0LWJpdCAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7dzEgPSB3MHt7ICYjNDM7fX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCBzdWJwcm9nX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4mIzQzO1x0dzEgPSB3MDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsIHN1YnByb2dfcmVhZHNfYXJnX2FzXzY0Yml0O1x0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2V4dGVybiBsb25nIGJwZl9rZnVuY19jYWxsX3Rlc3Q0KHNpZ25lZCBjaGFyIGEsIHNob3J0IGIsIGludCBjLCBsb25nIGQpIF9fa3N5bTtcbiYjNDM7XG4mIzQzOy8qIEZvcmNlIGtmdW5jIGV4dGVybiBCVEYgZ2VuZXJhdGlvbi4gKi9cbiYjNDM7aW50IF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyoga2Z1bmMgcGFyYW1ldGVycyBhcmUgcmVhZCBhY2NvcmRpbmcgdG8gdGhlaXIgQlRGIHR5cGUgd2lkdGggKi9cbiYjNDM7U0VDKFwmIzM0O3RjXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19ub3RfbXNnKFwmIzM0O3czID0gMXt7Lip9fTsgemV4dFwmIzM0OylcdFx0LyogaW50IGMgIC1cdTAwM2UgcmVhZCBhcyAzMi1iaXQgKi9cbiYjNDM7X19tc2coXCYjMzQ7dzQgPSAxe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcdFx0LyogbG9uZyBkIC1cdTAwM2UgcmVhZCBhcyA2NC1iaXQgKi9cbiYjNDM7X19uYWtlZCB2b2lkIGtmdW5jX3BhcmFtX3JlYWRfcGVyX2J0Zih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHR3MSA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3MiA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3MyA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3NCA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsIGJwZl9rZnVuY19jYWxsX3Rlc3Q0O1x0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyYjMzQ7LAogICAgJiMzNDtjb21wdXRlX2luc25fbGl2ZV9yZWdzJiMzNDssCiAgICAmIzM0O2NhbGxfdXNlX21hc2smIzM0OywKICAgICYjMzQ7YnBmX2luc25fZGVmMzImIzM0OywKICAgICYjMzQ7YnBmX2lzX3JlZzY0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIHplcm8tZXh0ZW5zaW9uIHRyYWNraW5nIGxvZ2ljLiBJdCByZW1vdmVzIGBzdWJyZWdfZGVmYCBmcm9tIGBicGZfcmVnX3N0YXRlYCBhbmQgaW5zdGVhZCBjb21wdXRlcyB6ZXJvIGV4dGVuc2lvbiByZXF1aXJlbWVudHMgZGlyZWN0bHkgZHVyaW5nIGxpdmVuZXNzIGFuYWx5c2lzIGJ5IHRyYWNraW5nIDMyLWJpdCBhbmQgNjQtYml0IHJlZ2lzdGVyIHVzZXMgc2VwYXJhdGVseS4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGFmZmVjdHMgaG93IHJlZ2lzdGVyIHN0YXRlcyBhcmUgdHJhY2tlZCBhbmQgb3B0aW1pemVkLCB3aGljaCBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIHNlY3VyaXR5IGFuZCBjb3JyZWN0bmVzcyBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODE5OGRiMWQ3MTcxODIzODg5ZTNlZWJmNzViYWU1MGRjYWQ3NDFkYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMDQ6Mzk6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCA2ODJjMmNkM2I4NDQzLi4zMjFlYmQzMDhkMzhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTE2MiwxMSAmIzQzOzE2Miw2IEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHsKIAkgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS4KIAkgKi8KIAl1MzIgZnJhbWVubzsKLQkvKiBUcmFja3Mgc3VicmVnIGRlZmluaXRpb24uIFRoZSBzdG9yZWQgdmFsdWUgaXMgdGhlIGluc25faWR4IG9mIHRoZQotCSAqIHdyaXRpbmcgaW5zbi4gVGhpcyBpcyBzYWZlIGJlY2F1c2Ugc3VicmVnX2RlZiBpcyB1c2VkIGJlZm9yZSBhbnkgaW5zbgotCSAqIHBhdGNoaW5nIHdoaWNoIG9ubHkgaGFwcGVucyBhZnRlciBtYWluIHZlcmlmaWNhdGlvbiBmaW5pc2hlZC4KLQkgKi8KLQlzMzIgc3VicmVnX2RlZjsKIAkvKiBpZiAoIXByZWNpc2UgJmFtcDsmYW1wOyBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24mIzM5O3QgYWZmZWN0IHNhZmV0eSAqLwogCWJvb2wgcHJlY2lzZTsKIH07CkBAIC0xMDUwLDYgJiM0MzsxMDQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZ19pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYKIH0KIAogc3RydWN0IGJwZl9jYWxsX3N1bW1hcnkgewomIzQzOwljb25zdCBzdHJ1Y3QgYnRmICpidGY7CiYjNDM7CWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuY19wcm90bzsKIAl1OCBudW1fcGFyYW1zOwogCWJvb2wgaXNfdm9pZDsKIAlib29sIGZhc3RjYWxsOwpAQCAtMTYzMSw3ICYjNDM7MTYyOCw3IEBAIHN0cnVjdCBicGZfa2Z1bmNfZGVzY190YWIgewogfTsKIAogLyogRnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gdmVyaWZpZXIuYywgdXNlZCBieSBmaXh1cHMuYyAqLwotYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KTsKJiM0Mztib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24pOwogdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pOwogdm9pZCBicGZfbWFya19zdWJwcm9nX2V4Y19jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7CiBib29sIGJwZl9hbGxvd190YWlsX2NhbGxfaW5fc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7CkBAIC0xNjU1LDUgJiM0MzsxNjUyLDYgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTsKIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpOwogaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7CiBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpOwomIzQzO2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pOwogCiAjZW5kaWYgLyogX0xJTlVYX0JQRl9WRVJJRklFUl9IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suYwppbmRleCAyZTRhZTBlZjA4NjA5Li43YzQ1OTllNjVlY2ViIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmMKQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCwKIAkJdmVyYm9zZShlbnYsICYjMzQ7c3RhY2s9JXMgYmVmb3JlICYjMzQ7LCBlbnYtJmd0O3RtcF9zdHJfYnVmKTsKIAkJdmVyYm9zZShlbnYsICYjMzQ7JWQ6ICYjMzQ7LCBpZHgpOwogCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDtcbiYjMzQ7KTsKIAl9CiAKIAkvKiBJZiB0aGVyZSBpcyBhIGhpc3RvcnkgcmVjb3JkIHRoYXQgc29tZSByZWdpc3RlcnMgZ2FpbmVkIHJhbmdlIGF0IHRoaXMgaW5zbiwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jCmluZGV4IDAzOTFiM2JjMDA3MzQuLjUwYjNjYTUxNDlhMGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9kaXNhc20uYwpAQCAtMTM5LDcgJiM0MzsxMzksNyBAQCBzdGF0aWMgdm9pZCBwcmludF9icGZfZW5kX2luc24oYnBmX2luc25fcHJpbnRfdCB2ZXJib3NlLAogCQkJICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiB7Ci0JdmVyYm9zZShwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9ICVzJWQgciVkXG4mIzM0OywKJiM0MzsJdmVyYm9zZShwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9ICVzJWQgciVkJiMzNDssCiAJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCUJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1RPX0JFID8gJiMzNDtiZSYjMzQ7IDogJiMzNDtsZSYjMzQ7LAogCQlpbnNuLSZndDtpbW0sIGluc24tJmd0O2RzdF9yZWcpOwpAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBzdGF0aWMgdm9pZCBwcmludF9icGZfYnN3YXBfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsCiAJCQkgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIHsKLQl2ZXJib3NlKHByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYnN3YXAlZCByJWRcbiYjMzQ7LAomIzQzOwl2ZXJib3NlKHByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYnN3YXAlZCByJWQmIzM0OywKIAkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJaW5zbi0mZ3Q7aW1tLCBpbnNuLSZndDtkc3RfcmVnKTsKIH0KQEAgLTE5NywxOSAmIzQzOzE5NywxOSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCWVsc2UKIAkJCQlwcmludF9icGZfZW5kX2luc24odmVyYm9zZSwgY2JzLSZndDtwcml2YXRlX2RhdGEsIGluc24pOwogCQl9IGVsc2UgaWYgKEJQRl9PUChpbnNuLSZndDtjb2RlKSA9PSBCUEZfTkVHKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlYyVkID0gLSVjJWRcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpICVjJWQgPSAtJWMlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcpOwogCQl9IGVsc2UgaWYgKGlzX2FkZHJfc3BhY2VfY2FzdChpbnNuKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQkJaW5zbi0mZ3Q7c3JjX3JlZywgKCh1MzIpaW5zbi0mZ3Q7aW1tKSAmZ3Q7Jmd0OyAxNiwgKHUxNilpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKGlzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gJmFtcDsodm9pZCBfX3BlcmNwdSAqKShyJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAmYW1wOyh2b2lkIF9fcGVyY3B1ICopKHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtzcmNfcmVnKTsKIAkJfSBlbHNlIGlmIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9YKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlYyVkICVzICVzJWMlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlcyVjJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OywKIAkJCQlpbnNuLSZndDtkc3RfcmVnLAogCQkJCWlzX3NkaXZfc21vZChpbnNuKSA/IGJwZl9hbHVfc2lnbl9zdHJpbmdbQlBGX09QKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDRdCkBAIC0yMTgsNyAmIzQzOzIxOCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O3NyY19yZWcpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJaXNfc2Rpdl9zbW9kKGluc24pID8gYnBmX2FsdV9zaWduX3N0cmluZ1tCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgJmd0OyZndDsgNF0KQEAgLTIyNyw3ICYjNDM7MjI3LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsCiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVFgpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU0pCi0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9IHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSByJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLApAQCAtMjM1LDcgJiM0MzsyMzUsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgKGluc24tJmd0O2ltbSA9PSBCUEZfQUREIHx8IGluc24tJmd0O2ltbSA9PSBCUEZfQU5EIHx8CiAJCQkgIGluc24tJmd0O2ltbSA9PSBCUEZfT1IgfHwgaW5zbi0mZ3Q7aW1tID09IEJQRl9YT1IpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBsb2NrICooJXMgKikociVkICUmIzQzO2QpICVzIHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlJiM0MztkKSAlcyByJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtvZmYsCkBAIC0yNDYsNyAmIzQzOzI0Niw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJICAgIGluc24tJmd0O2ltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHwKIAkJCSAgICBpbnNuLSZndDtpbW0gPT0gKEJQRl9PUiB8IEJQRl9GRVRDSCkgfHwKIAkJCSAgICBpbnNuLSZndDtpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O3NyY19yZWcsCiAJCQkJQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0RXID8gJiMzNDs2NCYjMzQ7IDogJiMzNDsmIzM0OywKIAkJCQlicGZfYXRvbWljX2FsdV9zdHJpbmdbQlBGX09QKGluc24tJmd0O2ltbSkgJmd0OyZndDsgNF0sCkBAIC0yNTQsNyAmIzQzOzI1NCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O29mZiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX0NNUFhDSEcpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUmIzQzO2QpLCByMCwgciVkKVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgcjAgPSBhdG9taWMlc19jbXB4Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIwLCByJWQpJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwKIAkJCQlCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFcgPyAmIzM0OzY0JiMzNDsgOiAmIzM0OyYjMzQ7LAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKQEAgLTI2Miw0NCAmIzQzOzI2Miw0NCBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCQlpbnNuLSZndDtzcmNfcmVnKTsKIAkJfSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfQVRPTUlDICZhbXA7JmFtcDsKIAkJCSAgIGluc24tJmd0O2ltbSA9PSBCUEZfWENIRykgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfeGNoZygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc194Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtzcmNfcmVnLAogCQkJCUJQRl9TSVpFKGluc24tJmd0O2NvZGUpID09IEJQRl9EVyA/ICYjMzQ7NjQmIzM0OyA6ICYjMzQ7JiMzNDssCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O29mZiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX0xPQURfQUNRKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlJiM0MztkKSlcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9IGxvYWRfYWNxdWlyZSgoJXMgKikociVkICUmIzQzO2QpKSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX1NUT1JFX1JFTCkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUmIzQzO2QpLCByJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBzdG9yZV9yZWxlYXNlKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtvZmYsIGluc24tJmd0O3NyY19yZWcpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfJTAyeFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHXyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkgewogCQlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01FTSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSAlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSAlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJaW5zbi0mZ3Q7b2ZmLCBpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbm9zcGVjXG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbm9zcGVjJiMzNDssIGluc24tJmd0O2NvZGUpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfc3RfJTAyeFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX3N0XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRFgpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9NRU0gJmFtcDsmYW1wOyBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfTUVNU1gpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX2xkeF8lMDJ4XG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfbGR4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZClcbiYjMzQ7LAomIzQzOwkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZCkmIzM0OywKIAkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQlCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfTUVNID8KIAkJCQkgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdIDoKQEAgLTMwNywxMiAmIzQzOzMwNywxMiBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJfSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9BQlMpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF0mIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9JTkQpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgJiM0MzsgJWRdXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICYjNDM7ICVkXSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O2ltbSk7CkBAIC0zMzIsMTIgJiM0MzszMzIsMTIgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsCiAJCQlpZiAoaXNfcHRyICZhbXA7JmFtcDsgIWFsbG93X3B0cl9sZWFrcykKIAkJCQlpbW0gPSAwOwogCi0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAlc1xuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gJXMmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtkc3RfcmVnLAogCQkJCV9fZnVuY19pbW1fbmFtZShjYnMsIGluc24sIGltbSwKIAkJCQkJCXRtcCwgc2l6ZW9mKHRtcCkpKTsKIAkJfSBlbHNlIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX2xkXyUwMnhcbiYjMzQ7LCBpbnNuLSZndDtjb2RlKTsKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0O0JVR19sZF8lMDJ4JiMzNDssIGluc24tJmd0O2NvZGUpOwogCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkgewpAQCAtMzQ3LDM1ICYjNDM7MzQ3LDM1IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJY2hhciB0bXBbNjRdOwogCiAJCQlpZiAoaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpIHsKLQkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsIHBjJXNcbiYjMzQ7LAomIzQzOwkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsIHBjJXMmIzM0OywKIAkJCQkJaW5zbi0mZ3Q7Y29kZSwKIAkJCQkJX19mdW5jX2dldF9uYW1lKGNicywgaW5zbiwKIAkJCQkJCQl0bXAsIHNpemVvZih0bXApKSk7CiAJCQl9IGVsc2UgewogCQkJCXN0cmNweSh0bXAsICYjMzQ7dW5rbm93biYjMzQ7KTsKLQkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsICVzIyVkXG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSwKJiM0MzsJCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgY2FsbCAlcyMlZCYjMzQ7LCBpbnNuLSZndDtjb2RlLAogCQkJCQlfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLAogCQkJCQkJCXRtcCwgc2l6ZW9mKHRtcCkpLAogCQkJCQlpbnNuLSZndDtpbW0pOwogCQkJfQogCQl9IGVsc2UgaWYgKGluc24tJmd0O2NvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBnb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZ290byBwYyUmIzQzO2QmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtvZmYpOwogCQl9IGVsc2UgaWYgKGluc24tJmd0O2NvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCkpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGdvdG94IHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZ290b3ggciVkJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZyk7CiAJCX0gZWxzZSBpZiAoaW5zbi0mZ3Q7Y29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgJmFtcDsmYW1wOwogCQkJICAgaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfTUFZX0dPVE8pIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIG1heV9nb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbWF5X2dvdG8gcGMlJiM0MztkJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7b2ZmKTsKIAkJfSBlbHNlIGlmIChpbnNuLSZndDtjb2RlID09IChCUEZfSk1QMzIgfCBCUEZfSkEpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBnb3RvbCBwYyUmIzQzO2RcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGdvdG9sIHBjJSYjNDM7ZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2ltbSk7CiAJCX0gZWxzZSBpZiAoaW5zbi0mZ3Q7Y29kZSA9PSAoQlBGX0pNUCB8IEJQRl9FWElUKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZXhpdFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGV4aXQmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0gZWxzZSBpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewogCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwKLQkJCQkmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2RcbiYjMzQ7LAomIzQzOwkJCQkmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2QmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJYnBmX2ptcF9zdHJpbmdbQlBGX09QKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDRdLApAQCAtMzgzLDE0ICYjNDM7MzgzLDE0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJCX0gZWxzZSB7CiAJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLAotCQkJCSYjMzQ7KCUwMngpIGlmICVjJWQgJXMgMHgleCBnb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJCSYjMzQ7KCUwMngpIGlmICVjJWQgJXMgMHgleCBnb3RvIHBjJSYjNDM7ZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9KTVAzMiA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssCiAJCQkJaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJCQlicGZfam1wX3N0cmluZ1tCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgJmd0OyZndDsgNF0sCiAJCQkJKHUzMilpbnNuLSZndDtpbW0sIGluc24tJmd0O29mZik7CiAJCX0KIAl9IGVsc2UgewotCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlc1xuJiMzNDssCiYjNDM7CQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlcyYjMzQ7LAogCQkJaW5zbi0mZ3Q7Y29kZSwgYnBmX2NsYXNzX3N0cmluZ1tjbGFzc10pOwogCX0KIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IGEwYmRkYWRhNzk2NGUuLjczYWI5NTU3M2Y2MDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtNDQsMTUgJiM0Mzs0NCwxOCBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAl9CiB9CiAKLS8qIFJldHVybiBUUlVFIGlmIElOU04gaGFzIGRlZmluZWQgYW55IDMyLWJpdCB2YWx1ZSBleHBsaWNpdGx5LiAqLwotc3RhdGljIGJvb2wgaW5zbl9oYXNfZGVmMzIoc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRoZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5lZCBieSBJTlNOLCBvciAtMSBpZiBJTlNOIGRvZXMgbm90CiYjNDM7ICogZXhwbGljaXRseSBkZWZpbmUgYSAzMi1iaXQgdmFsdWUuCiYjNDM7ICovCiYjNDM7aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIHsKIAlpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pOwogCi0JaWYgKGRzdF9yZWcgPT0gLTEpCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGRzdF9yZWcgJmx0OyAwIHx8IGJwZl9pc19yZWc2NChpbnNuKSkKJiM0MzsJCXJldHVybiAtMTsKIAotCXJldHVybiAhYnBmX2lzX3JlZzY0KGluc24sIGRzdF9yZWcsIE5VTEwsIERTVF9PUCk7CiYjNDM7CXJldHVybiBkc3RfcmVnOwogfQogCiBzdGF0aWMgaW50IGtmdW5jX2Rlc2NfY21wX2J5X2ltbV9vZmYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKQEAgLTE2OSw3ICYjNDM7MTcyLDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkgKiAoY250ID09IDEpIGlzIHRha2VuIG9yIG5vdC4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIElOU04gYXQgT0ZGIGlzIHRoZQogCSAqIG9yaWdpbmFsIGluc24gYXQgb2xkIHByb2cuCiAJICovCi0JZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7CiYjNDM7CWRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEpICZndDs9IDA7CiAKIAlpZiAoY250ID09IDEpCiAJCXJldHVybjsKQEAgLTE4MSw3ICYjNDM7MTg0LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlmb3IgKGkgPSBvZmY7IGkgJmx0OyBvZmYgJiM0MzsgY250IC0gMTsgaSYjNDM7JiM0MzspIHsKIAkJLyogRXhwYW5kIGluc25pW29mZl0mIzM5O3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi8KIAkJZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47Ci0JCWRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICYjNDM7IGkpOwomIzQzOwkJZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0MzsgaSkgJmd0Oz0gMDsKIAl9CiAKIAkvKgpAQCAtNjIwLDcgJiM0Mzs2MjMsNyBAQCBpbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkgKiAgICAgICBCUEZfU1RYICYjNDM7IFNSQ19PUCwgc28gaXQgaXMgc2FmZSB0byBwYXNzIE5VTEwKIAkJCSAqICAgICAgIGhlcmUuCiAJCQkgKi8KLQkJCWlmIChicGZfaXNfcmVnNjQoJmFtcDtpbnNuLCBsb2FkX3JlZywgTlVMTCwgRFNUX09QKSkgewomIzQzOwkJCWlmIChicGZfaXNfcmVnNjQoJmFtcDtpbnNuKSkgewogCQkJCWlmIChjbGFzcyA9PSBCUEZfTEQgJmFtcDsmYW1wOwogCQkJCSAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKQogCQkJCQlpJiM0MzsmIzQzOzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuYwppbmRleCAwYWFkZmJhZTBhY2M1Li5lYTAwMjU1MDY3MWE4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9saXZlbmVzcy5jCkBAIC00OTcsNyAmIzQzOzQ5Nyw2IEBAIHN0YXRpYyB2b2lkIHByaW50X2luc3RhbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBmdW5jX2luc3RhbmNlICppCiAJCXBvcyA9IGVudi0mZ3Q7bG9nLmVuZF9wb3M7CiAJCXZlcmJvc2UoZW52LCAmIzM0OyUzZDogJiMzNDssIGluc25faWR4KTsKIAkJYnBmX3ZlcmJvc2VfaW5zbihlbnYsICZhbXA7aW5zbnNbaW5zbl9pZHhdKTsKLQkJYnBmX3Zsb2dfcmVzZXQoJmFtcDtlbnYtJmd0O2xvZywgZW52LSZndDtsb2cuZW5kX3BvcyAtIDEpOyAvKiByZW1vdmUgXG4gKi8KIAkJaW5zbl9wb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zOwogCQl2ZXJib3NlKGVudiwgJiMzNDslKmM7JiMzNDssIGJwZl92bG9nX2FsaWdubWVudChpbnNuX3BvcyAtIHBvcyksICYjMzk7ICYjMzk7KTsKIAkJcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKQEAgLTEwNDMsNyAmIzQzOzEwNDIsNiBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfbG9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaQogCQlpZiAoIXByaW50ZWQpIHsKIAkJCXZlcmJvc2UoZW52LCAmIzM0OyUzZDogJiMzNDssIGlkeCk7CiAJCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7Ci0JCQlicGZfdmxvZ19yZXNldCgmYW1wO2Vudi0mZ3Q7bG9nLCBlbnYtJmd0O2xvZy5lbmRfcG9zIC0gMSk7CiAJCQlwcmludGVkID0gdHJ1ZTsKIAkJfQogCQl2ZXJib3NlKGVudiwgJiMzNDtcdHIlZDogJiMzNDssIGkpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsICZhbXA7YXRfaW5baV0pOwpAQCAtMTA1OCw3ICYjNDM7MTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpCiAJCWlmICghcHJpbnRlZCkgewogCQkJdmVyYm9zZShlbnYsICYjMzQ7JTNkOiAmIzM0OywgaWR4KTsKIAkJCWJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTsKLQkJCWJwZl92bG9nX3Jlc2V0KCZhbXA7ZW52LSZndDtsb2csIGVudi0mZ3Q7bG9nLmVuZF9wb3MgLSAxKTsKIAkJCXByaW50ZWQgPSB0cnVlOwogCQl9CiAJCXZlcmJvc2UoZW52LCAmIzM0O1x0c2ElZDogJiMzNDssIGkpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsICZhbXA7YXRfaW5bYWldKTsKQEAgLTEwNzAsNyAmIzQzOzEwNjcsNiBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfbG9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaQogCQlpZiAoIXByaW50ZWQpIHsKIAkJCXZlcmJvc2UoZW52LCAmIzM0OyUzZDogJiMzNDssIGlkeCk7CiAJCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7Ci0JCQlicGZfdmxvZ19yZXNldCgmYW1wO2Vudi0mZ3Q7bG9nLCBlbnYtJmd0O2xvZy5lbmRfcG9zIC0gMSk7CiAJCQlwcmludGVkID0gdHJ1ZTsKIAkJfQogCQl2ZXJib3NlKGVudiwgJiMzNDtcdGZwJSYjNDM7ZDogJiMzNDssIC0oaSAmIzQzOyAxKSAqIDgpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsICZhbXA7YXRfc3RhY2tfaW5baV0pOwpAQCAtMTU0NSw2ICYjNDM7MTU0MSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCiAJCXZlcmJvc2UoZW52LCAmIzM0OyUzZDogJiMzNDssIGlkeCk7CiAJCWJwZl92ZXJib3NlX2luc24oZW52LCAmYW1wO2luc25zW2lkeF0pOwomIzQzOwkJdmVyYm9zZShlbnYsICYjMzQ7XG4mIzM0Oyk7CiAKIAkJLyogQ29sbGVjdCB3aGF0IG5lZWRzIHByaW50aW5nICovCiAJCWlmIChpc19sZHhfc3R4X2NhbGwgJmFtcDsmYW1wOwpAQCAtMjA1MCwyOSAmIzQzOzIwNDcsNjcgQEAgaW50IGJwZl9jb21wdXRlX3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCiAvKiBFYWNoIGZpZWxkIGlzIGEgcmVnaXN0ZXIgYml0bWFzayAqLwogc3RydWN0IGluc25fbGl2ZV9yZWdzIHsKLQl1MTYgdXNlOwkvKiByZWdpc3RlcnMgcmVhZCBieSBpbnN0cnVjdGlvbiAqLwotCXUxNiBkZWY7CS8qIHJlZ2lzdGVycyB3cml0dGVuIGJ5IGluc3RydWN0aW9uICovCi0JdTE2IGluOwkJLyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGJlZm9yZSBpbnN0cnVjdGlvbiAqLwotCXUxNiBvdXQ7CS8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqLwomIzQzOwl1MzIgdXNlOwkvKiByZWdpc3RlcnMgcmVhZCBieSBpbnN0cnVjdGlvbiAqLwomIzQzOwl1MzIgZGVmOwkvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqLwomIzQzOwl1MzIgaW47CQkvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovCiYjNDM7CXUzMiBvdXQ7CS8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqLwogfTsKIAogLyogQml0bWFzayB3aXRoIDFzIGZvciBhbGwgY2FsbGVyIHNhdmVkIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBTExfQ0FMTEVSX1NBVkVEX1JFR1MgKCgxdSAmbHQ7Jmx0OyBDQUxMRVJfU0FWRURfUkVHUykgLSAxKQogCiYjNDM7c3RhdGljIGlubGluZSB1MzIgcmVnMzJfbWFzayh1MzIgbikgeyByZXR1cm4gQklUKG4pOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MzIgcmVnNjRfbWFzayh1MzIgbikgeyByZXR1cm4gQklUKG4pIHwgQklUKG4gJiM0MzsgMTYpOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MzIgbWFza193aWRlbih1MzIgbSkgeyByZXR1cm4gbSB8IChtICZsdDsmbHQ7IDE2KTsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTE2IG1hc2tfbG8odTMyIG0pIHsgcmV0dXJuICh1MTYpbTsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTE2IG1hc2tfaGkodTMyIG0pIHsgcmV0dXJuICh1MTYpKG0gJmd0OyZndDsgMTYpOyB9CiYjNDM7CiYjNDM7LyogSW5mZXIgdXNlIG1hc2sgYmFzZWQgb24gbnVtYmVyIGFuZCBzaXplcyBvZiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4gKi8KJiM0MztzdGF0aWMgdTMyIGNhbGxfdXNlX21hc2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJdTMyIGksIHVzZSwgc2l6ZSwgcmVnX3BhcmFtc19udW07CiYjNDM7CXN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICpwOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7CiYjNDM7CiYjNDM7CWlmICghYnBmX2dldF9jYWxsX3N1bW1hcnkoZW52LCBpbnNuLCAmYW1wO2NzKSkKJiM0MzsJCS8qIGUuZy4gYSBicGYtdG8tYnBmIGNhbGwsIGFzc3VtZSB0aGF0IGNhbGxzIHVzZSBmdWxsIDY0LWJpdCBmb3IgZWFjaCBwYXJhbSAqLwomIzQzOwkJcmV0dXJuIG1hc2tfd2lkZW4oQUxMX0NBTExFUl9TQVZFRF9SRUdTICZhbXA7IH5CSVQoQlBGX1JFR18wKSk7CiYjNDM7CiYjNDM7CWlmIChjcy5mdW5jX3Byb3RvKSB7CiYjNDM7CQl1c2UgPSAwOwomIzQzOwkJcCA9IGJ0Zl9wYXJhbXMoY3MuZnVuY19wcm90byk7CiYjNDM7CQlyZWdfcGFyYW1zX251bSA9IG1pbihidGZfdHlwZV92bGVuKGNzLmZ1bmNfcHJvdG8pLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHJlZ19wYXJhbXNfbnVtOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXQgPSBidGZfdHlwZV9ieV9pZChjcy5idGYsIHBbaV0udHlwZSk7CiYjNDM7CQkJaWYgKElTX0VSUihidGZfcmVzb2x2ZV9zaXplKGNzLmJ0ZiwgdCwgJmFtcDtzaXplKSkpCiYjNDM7CQkJCWdvdG8gZmFsbGJhY2s7CiYjNDM7CQkJdXNlIHw9IHNpemUgJmx0Oz0gc2l6ZW9mKHUzMikgPyByZWczMl9tYXNrKGkgJiM0MzsgMSkgOiByZWc2NF9tYXNrKGkgJiM0MzsgMSk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gdXNlOwomIzQzOwl9CiYjNDM7CiYjNDM7ZmFsbGJhY2s6CiYjNDM7CS8qIGJ5IGRlZmF1bHQgYXNzdW1lIHRoYXQgY2FsbHMgdXNlIGZ1bGwgNjQtYml0IGZvciBlYWNoIHBhcmFtICovCiYjNDM7CXJldHVybiBtYXNrX3dpZGVuKEdFTk1BU0sobWluX3QodTgsIGNzLm51bV9wYXJhbXMsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyksIDEpKTsKJiM0Mzt9CiYjNDM7CiAvKiBDb21wdXRlIGluZm8tJmd0O3t1c2UsZGVmfSBmaWVsZHMgZm9yIHRoZSBpbnN0cnVjdGlvbiAqLwogc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCSAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkJCQkgICBzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKmluZm8pCiB7Ci0Jc3RydWN0IGJwZl9jYWxsX3N1bW1hcnkgY3M7Ci0JdTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSk7Ci0JdTggY29kZSA9IEJQRl9PUChpbnNuLSZndDtjb2RlKTsKLQl1OCBtb2RlID0gQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSk7Ci0JdTE2IHNyYyA9IEJJVChpbnNuLSZndDtzcmNfcmVnKTsKLQl1MTYgZHN0ID0gQklUKGluc24tJmd0O2RzdF9yZWcpOwotCXUxNiByMCAgPSBCSVQoMCk7Ci0JdTE2IGRlZiA9IDA7Ci0JdTE2IHVzZSA9IDB4ZmZmZjsKJiM0MzsJY29uc3QgdTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CWNvbnN0IHU4IGNvZGUgPSBCUEZfT1AoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CWNvbnN0IHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLSZndDtjb2RlKTsKJiM0MzsJY29uc3QgdTggc2l6ZSA9IEJQRl9TSVpFKGluc24tJmd0O2NvZGUpOwomIzQzOwljb25zdCB1MzIgc3JjID0gcmVnNjRfbWFzayhpbnNuLSZndDtzcmNfcmVnKTsKJiM0MzsJY29uc3QgdTMyIGRzdCA9IHJlZzY0X21hc2soaW5zbi0mZ3Q7ZHN0X3JlZyk7CiYjNDM7CWNvbnN0IHUzMiBzcmMzMiA9IG1hc2tfbG8oc3JjKTsKJiM0MzsJY29uc3QgdTMyIGRzdDMyID0gbWFza19sbyhkc3QpOwomIzQzOwljb25zdCB1MzIgcjAgID0gcmVnNjRfbWFzaygwKTsKJiM0MzsJdTMyIGRlZiA9IDA7CiYjNDM7CXUzMiB1c2UgPSBVMzJfTUFYOwogCiAJc3dpdGNoIChjbGFzcykgewogCWNhc2UgQlBGX0xEOgpAQCAtMjA4Myw4ICYjNDM7MjExOCw4IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQl1c2UgPSAwOwogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEIHwgQlBGX0FCUzoKLQkJY2FzZSBCUEZfTEQgfCBCUEZfSU5EOgomIzQzOwkJY2FzZSBCUEZfQUJTOgomIzQzOwkJY2FzZSBCUEZfSU5EOgogCQkJLyogc3RpY2sgd2l0aCBkZWZhdWx0cyAqLwogCQkJYnJlYWs7CiAJCX0KQEAgLTIwOTIsNyAmIzQzOzIxMjcsMTUgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWNhc2UgQlBGX0xEWDoKIAkJc3dpdGNoIChtb2RlKSB7CiAJCWNhc2UgQlBGX01FTToKJiM0MzsJCQkvKiBhIG5hcnJvdyBsb2FkIHN0aWxsIHJlZGVmaW5lcyB0aGUgd2hvbGUgcmVnaXN0ZXIgKi8KJiM0MzsJCQlkZWYgPSBkc3Q7CiYjNDM7CQkJdXNlID0gc3JjOwomIzQzOwkJCWJyZWFrOwogCQljYXNlIEJQRl9NRU1TWDoKJiM0MzsJCQkvKgomIzQzOwkJCSAqIHNpZ24gZXh0ZW5zaW9uIGRlZmluZXMgdGhlIHdob2xlIHJlZ2lzdGVyOwomIzQzOwkJCSAqIHNyYyBob2xkcyBhIHBvaW50ZXIsIGhlbmNlIGlzIHVzZWQgYXMgNjQtYml0LgomIzQzOwkJCSAqLwogCQkJZGVmID0gZHN0OwogCQkJdXNlID0gc3JjOwogCQkJYnJlYWs7CkBAIC0yMTEwLDEyICYjNDM7MjE1MywxOSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXN3aXRjaCAobW9kZSkgewogCQljYXNlIEJQRl9NRU06CiAJCQlkZWYgPSAwOwotCQkJdXNlID0gZHN0IHwgc3JjOwomIzQzOwkJCXVzZSA9IGRzdCB8IChzaXplID09IEJQRl9EVyA/IHNyYyA6IHNyYzMyKTsKIAkJCWJyZWFrOwotCQljYXNlIEJQRl9BVE9NSUM6CiYjNDM7CQljYXNlIEJQRl9BVE9NSUM6IHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGRzdCBob2xkcyBhIHBvaW50ZXIgYW5kIGlzIGFsd2F5cyB1c2VkIGFzIDY0LWJpdDsKJiM0MzsJCQkgKiB0aGUgdmFsdWUgb3BlcmFuZCBhbmQgcjAgYXJlIHJlYWQgYXMgMzItYml0IGZvciBCUEZfVyBhdG9taWNzLgomIzQzOwkJCSAqLwomIzQzOwkJCXUzMiBzcmN2ID0gc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMjsKJiM0MzsJCQl1MzIgcjB2ICA9IHNpemUgPT0gQlBGX0RXID8gcjAgOiBtYXNrX2xvKHIwKTsKJiM0MzsKIAkJCXN3aXRjaCAoaW5zbi0mZ3Q7aW1tKSB7CiAJCQljYXNlIEJQRl9DTVBYQ0hHOgotCQkJCXVzZSA9IHIwIHwgZHN0IHwgc3JjOwomIzQzOwkJCQl1c2UgPSByMHYgfCBkc3QgfCBzcmN2OwogCQkJCWRlZiA9IHIwOwogCQkJCWJyZWFrOwogCQkJY2FzZSBCUEZfTE9BRF9BQ1E6CkBAIC0yMTI0LDEwICYjNDM7MjE3NCwxMCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJYnJlYWs7CiAJCQljYXNlIEJQRl9TVE9SRV9SRUw6CiAJCQkJZGVmID0gMDsKLQkJCQl1c2UgPSBkc3QgfCBzcmM7CiYjNDM7CQkJCXVzZSA9IGRzdCB8IHNyY3Y7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCXVzZSA9IGRzdCB8IHNyYzsKJiM0MzsJCQkJdXNlID0gZHN0IHwgc3JjdjsKIAkJCQlpZiAoaW5zbi0mZ3Q7aW1tICZhbXA7IEJQRl9GRVRDSCkKIAkJCQkJZGVmID0gc3JjOwogCQkJCWVsc2UKQEAgLTIxMzUsNiAmIzQzOzIxODUsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQl9CiAJCQlicmVhazsKIAkJfQomIzQzOwkJfQogCQlicmVhazsKIAljYXNlIEJQRl9BTFU6CiAJY2FzZSBCUEZfQUxVNjQ6CkBAIC0yMTQ4LDE0ICYjNDM7MjE5OSwxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfSykKIAkJCQl1c2UgPSAwOwogCQkJZWxzZQotCQkJCXVzZSA9IHNyYzsKJiM0MzsJCQkJdXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gc3JjIDogc3JjMzI7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWRlZiA9IGRzdDsKIAkJCWlmIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9LKQotCQkJCXVzZSA9IGRzdDsKJiM0MzsJCQkJdXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gZHN0IDogZHN0MzI7CiAJCQllbHNlCi0JCQkJdXNlID0gZHN0IHwgc3JjOwomIzQzOwkJCQl1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyAoZHN0IHwgc3JjKSA6IChkc3QzMiB8IHNyYzMyKTsKIAkJfQogCQlicmVhazsKIAljYXNlIEJQRl9KTVA6CkBAIC0yMTc3LDE3ICYjNDM7MjIyOCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQl1c2UgPSByMDsKIAkJCWJyZWFrOwogCQljYXNlIEJQRl9DQUxMOgotCQkJZGVmID0gQUxMX0NBTExFUl9TQVZFRF9SRUdTOwotCQkJdXNlID0gZGVmICZhbXA7IH5CSVQoQlBGX1JFR18wKTsKLQkJCWlmIChicGZfZ2V0X2NhbGxfc3VtbWFyeShlbnYsIGluc24sICZhbXA7Y3MpKQotCQkJCXVzZSA9IEdFTk1BU0sobWluX3QodTgsIGNzLm51bV9wYXJhbXMsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyksIDEpOwomIzQzOwkJCWRlZiA9IG1hc2tfd2lkZW4oQUxMX0NBTExFUl9TQVZFRF9SRUdTKTsKJiM0MzsJCQl1c2UgPSBjYWxsX3VzZV9tYXNrKGVudiwgaW5zbik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWRlZiA9IDA7CiAJCQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfSykKIAkJCQl1c2UgPSBkc3Q7CiAJCQllbHNlCi0JCQkJdXNlID0gZHN0IHwgc3JjOwomIzQzOwkJCQl1c2UgPSBkc3QgfCAoY29kZSA9PSBCUEZfSk1QMzIgPyBzcmMgOiBzcmMzMik7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMjIwOSw2ICYjNDM7MjI1OCw3IEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKIAlzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKnN0YXRlOwogCWludCBpbnNuX2NudCA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwomIzQzOwl1NjQgcG9zLCBpbnNuX3BvczsKIAlpbnQgZXJyID0gMCwgaSwgajsKIAlib29sIGNoYW5nZWQ7CiAKQEAgLTIyNTIsOCAmIzQzOzIzMDIsOCBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWludCBpbnNuX2lkeCA9IGVudi0mZ3Q7Y2ZnLmluc25fcG9zdG9yZGVyW2ldOwogCQkJc3RydWN0IGluc25fbGl2ZV9yZWdzICpsaXZlID0gJmFtcDtzdGF0ZVtpbnNuX2lkeF07CiAJCQlzdHJ1Y3QgYnBmX2lhcnJheSAqc3VjYzsKLQkJCXUxNiBuZXdfb3V0ID0gMDsKLQkJCXUxNiBuZXdfaW4gPSAwOwomIzQzOwkJCXUzMiBuZXdfb3V0ID0gMDsKJiM0MzsJCQl1MzIgbmV3X2luID0gMDsKIAogCQkJc3VjYyA9IGJwZl9pbnNuX3N1Y2Nlc3NvcnMoZW52LCBpbnNuX2lkeCk7CiAJCQlmb3IgKGludCBzID0gMDsgcyAmbHQ7IHN1Y2MtJmd0O2NudDsgJiM0MzsmIzQzO3MpCkBAIC0yMjY3LDggJiM0MzsyMzE3LDIwIEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyAmIzQzOyYjNDM7aSkKLQkJaW5zbl9hdXhbaV0ubGl2ZV9yZWdzX2JlZm9yZSA9IHN0YXRlW2ldLmluOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgaW5zbl9jbnQ7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlpbnQgZGVmMzIgPSBicGZfaW5zbl9kZWYzMigmYW1wO2luc25zW2ldKTsKJiM0MzsJCXUzMiBvdXQgPSBzdGF0ZVtpXS5vdXQ7CiYjNDM7CQl1MzIgaW4gPSBzdGF0ZVtpXS5pbjsKJiM0MzsKJiM0MzsJCWluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBtYXNrX2xvKGluKSB8IG1hc2tfaGkoaW4pOwomIzQzOwkJLyoKJiM0MzsJCSAqIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG8gbm90IHJlc2V0IHVwcGVyIGhhbHZlcwomIzQzOwkJICogb2YgdGhlIHJlZ2lzdGVycywgdGhlIHZlcmlmaWVyIG5lZWRzIHRvIHplcm8gZXh0ZW5kIGEgZGVzdGluYXRpb24KJiM0MzsJCSAqIHJlZ2lzdGVyIGlmIGFuIGluc3RydWN0aW9uIGRlZmluZXMgYSAzMi1iaXQgc3VicmVnaXN0ZXIgYW5kIHRoZQomIzQzOwkJICogdXBwZXIgaGFsZiBvZiB0aGF0IHJlZ2lzdGVyIGlzIGFsaXZlIGFmdGVyIHRoZSBpbnN0cnVjdGlvbi4KJiM0MzsJCSAqLwomIzQzOwkJaW5zbl9hdXhbaV0uemV4dF9kc3QgPSBkZWYzMiAmZ3Q7PSAwICZhbXA7JmFtcDsgKG1hc2tfaGkob3V0KSAmYW1wOyBCSVQoZGVmMzIpKTsKJiM0MzsJfQogCiAJaWYgKGVudi0mZ3Q7bG9nLmxldmVsICZhbXA7IEJQRl9MT0dfTEVWRUwyKSB7CiAJCXZlcmJvc2UoZW52LCAmIzM0O0xpdmUgcmVncyBiZWZvcmUgaW5zbjpcbiYjMzQ7KTsKQEAgLTIyODQsNyAmIzQzOzIzNDYsMTIgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJZWxzZQogCQkJCQl2ZXJib3NlKGVudiwgJiMzNDsuJiMzNDspOwogCQkJdmVyYm9zZShlbnYsICYjMzQ7ICYjMzQ7KTsKJiM0MzsJCQlwb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zOwogCQkJYnBmX3ZlcmJvc2VfaW5zbihlbnYsICZhbXA7aW5zbnNbaV0pOwomIzQzOwkJCWluc25fcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKJiM0MzsJCQlpZiAoaW5zbl9hdXhbaV0uemV4dF9kc3QpCiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0OyUqYzsgemV4dCYjMzQ7LCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAmIzM5OyAmIzM5Oyk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7XG4mIzM0Oyk7CiAJCQlpZiAoYnBmX2lzX2xkaW1tNjQoJmFtcDtpbnNuc1tpXSkpCiAJCQkJaSYjNDM7JiM0Mzs7CiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNmYzNWY0ZTcxNWI2Li5kNWI2ZmVmMWFkODk3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0yMTI5LDEyICYjNDM7MjEyOSw5IEBAIHN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovCiB2b2lkIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogewotCXMzMiBzdWJyZWdfZGVmID0gcmVnLSZndDtzdWJyZWdfZGVmOwotCiAJbWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTsKIAlyZWctJmd0O3R5cGUgPSBTQ0FMQVJfVkFMVUU7CiAJcmVnLSZndDt2YXJfb2ZmID0gdG51bV91bmtub3duOwotCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7CiAJX19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTsKIH0KIApAQCAtMjIxMCw3ICYjNDM7MjIwNyw2IEBAIHN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJfQogfQogCi0jZGVmaW5lIERFRl9OT1RfU1VCUkVHCSgwKQogc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCSAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpCiB7CkBAIC0yMjE5LDcgJiM0MzsyMjE1LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfQlBGX1JFRzsgaSYjNDM7JiM0MzspIHsKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtyZWdzW2ldKTsKLQkJcmVnc1tpXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJfQogCiAJLyogZnJhbWUgcG9pbnRlciAqLwpAQCAtMzAzMywxMSAmIzQzOzMwMjgsMTAgQEAgc3RhdGljIHZvaWQgbWFya19zdGFja19zbG90c19zY3JhdGNoZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgMzItYml0IG9wdGltaXphdGlvbgotICogY29kZSBvbmx5LiBJdCByZXR1cm5zIFRSVUUgaWYgdGhlIHNvdXJjZSBvciBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlcwotICogb24gNjQtYml0LCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLgomIzQzOyAqIGNvZGUgb25seS4gSXQgcmV0dXJucyBUUlVFIGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlcyBvbiA2NC1iaXQsCiYjNDM7ICogb3RoZXJ3aXNlIHJldHVybiBGQUxTRS4KICAqLwotYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLAotCSAgICAgIHUzMiByZWdubywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpCiYjNDM7Ym9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKQogewogCXU4IGNvZGUsIGNsYXNzLCBvcDsKIApAQCAtMzA1OCwxMSAmIzQzOzMwNTIsNiBAQCBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkgKi8KIAkJCWlmIChpbnNuLSZndDtzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTCkKIAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkvKiBIZWxwZXIgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBhcmcgdHlwZQotCQkJICogY2hlY2ssIGNvbnNlcnZhdGl2ZWx5IHJldHVybiBUUlVFLgotCQkJICovCi0JCQlpZiAodCA9PSBTUkNfT1ApCi0JCQkJcmV0dXJuIHRydWU7CiAKIAkJCXJldHVybiBmYWxzZTsKIAkJfQpAQCAtMzA3OCwyMiAmIzQzOzMwNjcsMTEgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLAogCWlmIChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9KTVAzMikKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGNsYXNzID09IEJQRl9MRFgpIHsKLQkJaWYgKHQgIT0gU1JDX09QKQotCQkJcmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7Ci0JCS8qIExEWCBzb3VyY2UgbXVzdCBiZSBwdHIuICovCi0JCXJldHVybiB0cnVlOwotCX0KJiM0MzsJaWYgKGNsYXNzID09IEJQRl9MRFgpCiYjNDM7CQlyZXR1cm4gQlBGX1NJWkUoY29kZSkgPT0gQlBGX0RXIHx8IEJQRl9NT0RFKGNvZGUpID09IEJQRl9NRU1TWDsKIAotCWlmIChjbGFzcyA9PSBCUEZfU1RYKSB7Ci0JCS8qIEJQRl9TVFggKGluY2x1ZGluZyBhdG9taWMgdmFyaWFudHMpIGhhcyBvbmUgb3IgbW9yZSBzb3VyY2UKLQkJICogb3BlcmFuZHMsIG9uZSBvZiB3aGljaCBpcyBhIHB0ci4gQ2hlY2sgd2hldGhlciB0aGUgY2FsbGVyIGlzCi0JCSAqIGFza2luZyBhYm91dCBpdC4KLQkJICovCi0JCWlmICh0ID09IFNSQ19PUCAmYW1wOyZhbXA7IHJlZy0mZ3Q7dHlwZSAhPSBTQ0FMQVJfVkFMVUUpCi0JCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKGNsYXNzID09IEJQRl9TVFgpCiAJCXJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFc7Ci0JfQogCiAJaWYgKGNsYXNzID09IEJQRl9MRCkgewogCQl1OCBtb2RlID0gQlBGX01PREUoY29kZSk7CkBAIC0zMTAzLDE1ICYjNDM7MzA4MSw3IEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkJCXJldHVybiB0cnVlOwogCiAJCS8qIEJvdGggTERfSU5EIGFuZCBMRF9BQlMgcmV0dXJuIDMyLWJpdCBkYXRhLiAqLwotCQlpZiAodCAhPSBTUkNfT1ApCi0JCQlyZXR1cm4gIGZhbHNlOwotCi0JCS8qIEltcGxpY2l0IGN0eCBwdHIuICovCi0JCWlmIChyZWdubyA9PSBCUEZfUkVHXzYpCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQkvKiBFeHBsaWNpdCBzb3VyY2UgY291bGQgYmUgYW55IHdpZHRoLiAqLwotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlpZiAoY2xhc3MgPT0gQlBGX1NUKQpAQCAtMzEyMiwzMCAmIzQzOzMwOTIsMTQgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBtYXJrX2luc25femV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKLXsKLQlzMzIgZGVmX2lkeCA9IHJlZy0mZ3Q7c3VicmVnX2RlZjsKLQotCWlmIChkZWZfaWR4ID09IERFRl9OT1RfU1VCUkVHKQotCQlyZXR1cm47Ci0KLQllbnYtJmd0O2luc25fYXV4X2RhdGFbZGVmX2lkeCAtIDFdLnpleHRfZHN0ID0gdHJ1ZTsKLQkvKiBUaGUgZHN0IHdpbGwgYmUgemVybyBleHRlbmRlZCwgc28gd29uJiMzOTt0IGJlIHN1Yi1yZWdpc3RlciBhbnltb3JlLiAqLwotCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwotfQotCiBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLAogCQkJICAgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpCiB7Ci0Jc3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LSZndDtwcm9nLSZndDtpbnNuc2kgJiM0MzsgZW52LSZndDtpbnNuX2lkeDsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwotCWJvb2wgcnc2NDsKIAogCW1hcmtfcmVnX3NjcmF0Y2hlZChlbnYsIHJlZ25vKTsKIAogCXJlZyA9ICZhbXA7cmVnc1tyZWdub107Ci0Jcnc2NCA9IGJwZl9pc19yZWc2NChpbnNuLCByZWdubywgcmVnLCB0KTsKIAlpZiAodCA9PSBTUkNfT1ApIHsKIAkJLyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIHNvdXJjZSBvcGVyYW5kIGNhbiBiZSByZWFkICovCiAJCWlmIChyZWctJmd0O3R5cGUgPT0gTk9UX0lOSVQpIHsKQEAgLTMxNTYsOSAmIzQzOzMxMTAsNiBAQCBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcgogCQlpZiAocmVnbm8gPT0gQlBGX1JFR19GUCkKIAkJCXJldHVybiAwOwogCi0JCWlmIChydzY0KQotCQkJbWFya19pbnNuX3pleHQoZW52LCByZWcpOwotCiAJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgcmVnaXN0ZXIgdXNlZCBhcyBkZXN0IG9wZXJhbmQgY2FuIGJlIHdyaXR0ZW4gdG8gKi8KQEAgLTMxNjYsNyAmIzQzOzMxMTcsNiBAQCBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcgogCQkJdmVyYm9zZShlbnYsICYjMzQ7ZnJhbWUgcG9pbnRlciBpcyByZWFkIG9ubHlcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9Ci0JCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IHJ3NjQgPyBERUZfTk9UX1NVQlJFRyA6IGVudi0mZ3Q7aW5zbl9pZHggJiM0MzsgMTsKIAkJaWYgKHQgPT0gRFNUX09QKQogCQkJbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJlZ25vKTsKIAl9CkBAIC0zODIyLDExICYjNDM7Mzc3Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCQkJaWYgKHNpemUgJmx0Oz0gc3BpbGxfc2l6ZSAmYW1wOyZhbXA7CiAJCQkgICAgYnBmX3N0YWNrX25hcnJvd19hY2Nlc3Nfb2sob2ZmLCBzaXplLCBzcGlsbF9zaXplKSkgewotCQkJCS8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGUKLQkJCQkgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LgotCQkJCSAqLwotCQkJCXMzMiBzdWJyZWdfZGVmID0gc3RhdGUtJmd0O3JlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmOwotCiAJCQkJaWYgKGVudi0mZ3Q7YnBmX2NhcGFibGUgJmFtcDsmYW1wOyBzaXplID09IDQgJmFtcDsmYW1wOyBzcGlsbF9zaXplID09IDQgJmFtcDsmYW1wOwogCQkJCSAgICBnZXRfcmVnX3dpZHRoKHJlZykgJmx0Oz0gMzIpCiAJCQkJCS8qIEVuc3VyZSBzdGFjayBzbG90IGhhcyBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uCkBAIC0zODM0LDcgJiM0MzszNzc5LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCQkgKi8KIAkJCQkJYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTsKIAkJCQlzdGF0ZS0mZ3Q7cmVnc1tkc3RfcmVnbm9dID0gKnJlZzsKLQkJCQlzdGF0ZS0mZ3Q7cmVnc1tkc3RfcmVnbm9dLnN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmOwogCiAJCQkJLyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIGZpbGwuCiAJCQkJICogY29lcmNlX3JlZ190b19zaXplIHdpbGwgYWRqdXN0IHRoZSBib3VuZGFyaWVzLgpAQCAtNjI3MSwxMiAmIzQzOzYyMTUsNiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYgogCQkJfSBlbHNlIHsKIAkJCQltYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywKIAkJCQkJCSAgICB2YWx1ZV9yZWdubyk7Ci0JCQkJLyogQSBsb2FkIG9mIGN0eCBmaWVsZCBjb3VsZCBoYXZlIGRpZmZlcmVudAotCQkJCSAqIGFjdHVhbCBsb2FkIHNpemUgd2l0aCB0aGUgb25lIGVuY29kZWQgaW4gdGhlCi0JCQkJICogaW5zbi4gV2hlbiB0aGUgZHN0IGlzIFBUUiwgaXQgaXMgZm9yIHN1cmUgbm90Ci0JCQkJICogYSBzdWItcmVnaXN0ZXIuCi0JCQkJICovCi0JCQkJcmVnc1t2YWx1ZV9yZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwogCQkJCWlmIChiYXNlX3R5cGUoaW5mby5yZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkgewogCQkJCQlyZWdzW3ZhbHVlX3JlZ25vXS5idGYgPSBpbmZvLmJ0ZjsKIAkJCQkJcmVnc1t2YWx1ZV9yZWdub10uYnRmX2lkID0gaW5mby5idGZfaWQ7CkBAIC03MzgwLDEwICYjNDM7NzMxOCw2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0CiAJCQlpZiAoc3BpICZsdDsgMCkKIAkJCQlyZXR1cm4gc3BpOwogCi0JCQkvKgotCQkJICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnCi0JCQkgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLgotCQkJICovCiAJCQltYXJrX3N0YWNrX3Nsb3RzX3NjcmF0Y2hlZChlbnYsIHNwaSwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7CiAKIAkJCXJlZyA9ICZhbXA7c3RhdGUtJmd0O3N0YWNrW3NwaV0uc3BpbGxlZF9wdHI7CkBAIC05NDYzLDcgJiM0Mzs5Mzk3LDYgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkvKiBBbGwgbm9uLXZvaWQgZ2xvYmFsIGZ1bmN0aW9ucyByZXR1cm4gYSA2NC1iaXQgU0NBTEFSX1ZBTFVFLiAqLwogCQlpZiAoIXN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZykpIHsKIAkJCW1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItJmd0O3JlZ3MsIEJQRl9SRUdfMCk7Ci0JCQljYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJCX0KIAogCQlpZiAoZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHsKQEAgLTEwNDgyLDkgJiM0MzsxMDQxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJfQogCWludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpOwogCi0JLyogaGVscGVyIGNhbGwgcmV0dXJucyA2NC1iaXQgdmFsdWUuICovCi0JcmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRzsKLQogCS8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovCiAJcmV0X3R5cGUgPSBmbi0mZ3Q7cmV0X3R5cGU7CiAJcmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpOwpAQCAtMTA3MjIsMzAgJiM0MzsxMDY1Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJcmV0dXJuIDA7CiB9CiAKLS8qIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoKSBpcyB1c2VkIHdoZW4gdGhlIHJlZyBzaXplIGlzIGRldGVybWluZWQgYnkKLSAqIHRoZSBCVEYgZnVuY19wcm90byYjMzk7cyByZXR1cm4gdmFsdWUgc2l6ZSBhbmQgYXJndW1lbnQuCi0gKi8KLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywKLQkJCQkgICAgIHUzMiByZWdubywgc2l6ZV90IHJlZ19zaXplKQotewotCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSAmYW1wO3JlZ3NbcmVnbm9dOwotCi0JaWYgKHJlZ25vID09IEJQRl9SRUdfMCkgewotCQkvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi8KLQkJcmVnLSZndDtzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgPwotCQkJREVGX05PVF9TVUJSRUcgOiBlbnYtJmd0O2luc25faWR4ICYjNDM7IDE7Ci0JfSBlbHNlIGlmIChyZWdfc2l6ZSA9PSBzaXplb2YodTY0KSkgewotCQkvKiBGdW5jdGlvbiBhcmd1bWVudCAqLwotCQltYXJrX2luc25femV4dChlbnYsIHJlZyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubywKLQkJCQkgICBzaXplX3QgcmVnX3NpemUpCi17Ci0JcmV0dXJuIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIGN1cl9yZWdzKGVudiksIHJlZ25vLCByZWdfc2l6ZSk7Ci19Ci0KIHN0YXRpYyBib29sIGlzX2tmdW5jX2FjcXVpcmUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKQogewogCXJldHVybiBtZXRhLSZndDtrZnVuY19mbGFncyAmYW1wOyBLRl9BQ1FVSVJFOwpAQCAtMTI5NzQsNyAmIzQzOzEyODgwLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAlzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4OwogCWludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7Ci0JY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnczsKIAl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkOwogCXN0cnVjdCBidGYgKmRlc2NfYnRmOwogCWludCBpZDsKQEAgLTEzMDE4LDcgJiM0MzsxMjkyMyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQl2ZXJib3NlKGVudiwgJiMzNDtmYWlsZWQgdG8gbWFyayBzMzIgcmFuZ2UgZm9yIHJldHZhbCBpbiBmb3JrZWQgc3RhdGUgZm9yIGxvY2tcbiYjMzQ7KTsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQkJX19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVncywgQlBGX1JFR18wLCBzaXplb2YodTMyKSk7CiAJfSBlbHNlIGlmICghaW5zbi0mZ3Q7b2ZmICZhbXA7JmFtcDsgaW5zbi0mZ3Q7aW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9fX2JwZl90cmFwXSkgewogCQl2ZXJib3NlKGVudiwgJiMzNDt1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cbiYjMzQ7KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMzE2OCw3ICYjNDM7MTMwNzIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQl1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07CiAKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtyZWdzW3JlZ25vXSk7Ci0JCXJlZ3NbcmVnbm9dLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRzsKIAl9CiAJaW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7CiAKQEAgLTEzMTkwLDcgJiM0MzsxMzA5Myw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCWlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCAmYW1wOyZhbXA7IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fAogCQkgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpCiAJCQlfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCAmYW1wO3JlZ3NbQlBGX1JFR18wXSk7Ci0JCW1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHQtJmd0O3NpemUpOwogCX0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7CiAJCXB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtJmd0O3R5cGUsICZhbXA7cHRyX3R5cGVfaWQpOwogCQllcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgJmFtcDttZXRhLCByZWdzLCBpbnNuX2F1eCwgcHRyX3R5cGUsIGRlc2NfYnRmKTsKQEAgLTEzMjgxLDcgJiM0MzsxMzE4Myw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkvKiBGb3IgbWFya19wdHJfb3JfbnVsbF9yZWcsIHNlZSA5M2MyMzBlM2Y1YmQ2ICovCiAJCQlyZWdzW0JQRl9SRUdfMF0uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAJCX0KLQkJbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgc2l6ZW9mKHZvaWQgKikpOwogCQlpZiAoaXNfa2Z1bmNfYWNxdWlyZSgmYW1wO21ldGEpKSB7CiAJCQlpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApOwogCQkJaWYgKGlkICZsdDsgMCkKQEAgLTEzMzE4LDE4ICYjNDM7MTMyMTksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJY2FsbGVyX2luZm8tJmd0O3N0YWNrX2FyZ19jbnQgPSBzdGFja19hcmdfY250OwogCX0KIAotCWFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLmZ1bmNfcHJvdG8gJiM0MzsgMSk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG1pbl90KGludCwgbmFyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiByZWdubyA9IGkgJiM0MzsgMTsKLQotCQl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGFyZ3NbaV0udHlwZSwgTlVMTCk7Ci0JCWlmIChidGZfdHlwZV9pc19wdHIodCkpCi0JCQltYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTsKLQkJZWxzZQotCQkJLyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqLwotCQkJbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCB0LSZndDtzaXplKTsKLQl9Ci0KIAlpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYygmYW1wO21ldGEpKSB7CiAJCWVyciA9IHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoZW52LCBpbnNuX2lkeCwgJmFtcDttZXRhKTsKIAkJaWYgKGVycikKQEAgLTE0ODIzLDggJiM0MzsxNDcxMiw2IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJaWYgKGRzdF9yZWctJmd0O3R5cGUgIT0gUFRSX1RPX0FSRU5BKQogCQkJKmRzdF9yZWcgPSAqc3JjX3JlZzsKIAotCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwotCiAJCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FMVTY0KQogCQkJLyoKIAkJCSAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LgpAQCAtMTUwMjgsOCAmIzQzOzE0OTE1LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogCQkJCQltYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi0mZ3Q7ZHN0X3JlZyk7CiAJCQkJCWlmIChpbnNuLSZndDtpbW0gPT0gMSkgeyAvKiBjYXN0IGZyb20gYXMoMSkgdG8gYXMoMCkgKi8KIAkJCQkJCWRzdF9yZWctJmd0O3R5cGUgPSBQVFJfVE9fQVJFTkE7Ci0JCQkJCQkvKiBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovCi0JCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwogCQkJCQl9CiAJCQkJfSBlbHNlIGlmIChpbnNuLSZndDtvZmYgPT0gMCkgewogCQkJCQkvKiBjYXNlOiBSMSA9IFIyCkBAIC0xNTAzNyw3ICYjNDM7MTQ5MjIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJCQkJCSAqLwogCQkJCQlhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTsKIAkJCQkJKmRzdF9yZWcgPSAqc3JjX3JlZzsKLQkJCQkJZHN0X3JlZy0mZ3Q7c3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwogCQkJCX0gZWxzZSB7CiAJCQkJCS8qIGNhc2U6IFIxID0gKHM4LCBzMTYgczMyKVIyICovCiAJCQkJCWlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi0mZ3Q7c3JjX3JlZykpIHsKQEAgLTE1MDU1LDcgJiM0MzsxNDkzOSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCQkJCWlmICghbm9fc2V4dCkKIAkJCQkJCQljbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7CiAJCQkJCQljb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi0mZ3Q7b2ZmICZndDsmZ3Q7IDMpOwotCQkJCQkJZHN0X3JlZy0mZ3Q7c3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwogCQkJCQl9IGVsc2UgewogCQkJCQkJbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tJmd0O2RzdF9yZWcpOwogCQkJCQl9CkBAIC0xNTA4MCw3ICYjNDM7MTQ5NjMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJCQkJCQkgKi8KIAkJCQkJCWlmICghaXNfc3JjX3JlZ191MzIpCiAJCQkJCQkJY2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpOwotCQkJCQkJZHN0X3JlZy0mZ3Q7c3VicmVnX2RlZiA9IGVudi0mZ3Q7aW5zbl9pZHggJiM0MzsgMTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCS8qIGNhc2U6IFcxID0gKHM4LCBzMTYpVzIgKi8KIAkJCQkJCWJvb2wgbm9fc2V4dCA9IHJlZ191bWF4KHNyY19yZWcpICZsdDsgKDFVTEwgJmx0OyZsdDsgKGluc24tJmd0O29mZiAtIDEpKTsKQEAgLTE1MDkwLDcgJiM0MzsxNDk3Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCQkJCSpkc3RfcmVnID0gKnNyY19yZWc7CiAJCQkJCQlpZiAoIW5vX3NleHQpCiAJCQkJCQkJY2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpOwotCQkJCQkJZHN0X3JlZy0mZ3Q7c3VicmVnX2RlZiA9IGVudi0mZ3Q7aW5zbl9pZHggJiM0MzsgMTsKIAkJCQkJCWNvZXJjZV9zdWJyZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLSZndDtvZmYgJmd0OyZndDsgMyk7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewpAQCAtMTU5NTksMTIgJiM0MzsxNTg0MCw4IEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zCiAJCQljb250aW51ZTsKIAkJaWYgKCghKHJlZy0mZ3Q7aWQgJmFtcDsgQlBGX0FERF9DT05TVCkgJmFtcDsmYW1wOyAhKGtub3duX3JlZy0mZ3Q7aWQgJmFtcDsgQlBGX0FERF9DT05TVCkpIHx8CiAJCSAgICByZWctJmd0O2RlbHRhID09IGtub3duX3JlZy0mZ3Q7ZGVsdGEpIHsKLQkJCXMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLSZndDtzdWJyZWdfZGVmOwotCiAJCQkqcmVnID0gKmtub3duX3JlZzsKLQkJCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7CiAJCX0gZWxzZSB7Ci0JCQlzMzIgc2F2ZWRfc3VicmVnX2RlZiA9IHJlZy0mZ3Q7c3VicmVnX2RlZjsKIAkJCXMzMiBzYXZlZF9vZmYgPSByZWctJmd0O2RlbHRhOwogCQkJdTMyIHNhdmVkX2lkID0gcmVnLSZndDtpZDsKIApAQCAtMTU5NzQsMTIgJiM0MzsxNTg1MSwxMSBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfcwogCQkJLyogcmVnID0ga25vd25fcmVnOyByZWcgJiM0Mzs9IGRlbHRhICovCiAJCQkqcmVnID0gKmtub3duX3JlZzsKIAkJCS8qCi0JCQkgKiBNdXN0IHByZXNlcnZlIG9mZiwgaWQgYW5kIHN1YnJlZ19kZWYgZmxhZywKLQkJCSAqIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKSB3aWxsIGJlIGluY29ycmVjdC4KJiM0MzsJCQkgKiBNdXN0IHByZXNlcnZlIG9mZiBhbmQgaWQsIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKQomIzQzOwkJCSAqIHdpbGwgYmUgaW5jb3JyZWN0LgogCQkJICovCiAJCQlyZWctJmd0O2RlbHRhID0gc2F2ZWRfb2ZmOwogCQkJcmVnLSZndDtpZCA9IHNhdmVkX2lkOwotCQkJcmVnLSZndDtzdWJyZWdfZGVmID0gc2F2ZWRfc3VicmVnX2RlZjsKIAogCQkJc2NhbGFyMzJfbWluX21heF9hZGQocmVnLCAmYW1wO2Zha2VfcmVnKTsKIAkJCXNjYWxhcl9taW5fbWF4X2FkZChyZWcsICZhbXA7ZmFrZV9yZWcpOwpAQCAtMTY0MTQsOCAmIzQzOzE2MjkwLDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogCSAqIEFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUuCiAJICovCiAJbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7Ci0JLyogbGRfYWJzIGxvYWQgdXAgdG8gMzItYml0IHNrYiBkYXRhLiAqLwotCXJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwogCS8qCiAJICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wCiAJICogd2hpY2ggbXVzdCBiZSBleHBsb3JlZCBieSB0aGUgdmVyaWZpZXIgd2hlbiBpbiBhIHN1YnByb2cuCkBAIC0xNjczMCwxMCAmIzQzOzE2NjA0LDExIEBAIGJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLAogCWludCBpOwogCiAJaWYgKGJwZl9oZWxwZXJfY2FsbChjYWxsKSkgewotCiAJCWlmIChicGZfZ2V0X2hlbHBlcl9wcm90byhlbnYsIGNhbGwtJmd0O2ltbSwgJmFtcDtmbikgJmx0OyAwKQogCQkJLyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi8KIAkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWNzLSZndDtidGYgPSBOVUxMOwomIzQzOwkJY3MtJmd0O2Z1bmNfcHJvdG8gPSBOVUxMOwogCQljcy0mZ3Q7ZmFzdGNhbGwgPSBmbi0mZ3Q7YWxsb3dfZmFzdGNhbGwgJmFtcDsmYW1wOwogCQkJICAgICAgIChicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGNhbGwtJmd0O2ltbSkgfHwKIAkJCQlicGZfaml0X2lubGluZXNfaGVscGVyX2NhbGwoY2FsbC0mZ3Q7aW1tKSk7CkBAIC0xNjc1NCw2ICYjNDM7MTY2MjksOCBAQCBib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCwKIAkJaWYgKGVyciAmbHQ7IDApCiAJCQkvKiBlcnJvciB3b3VsZCBiZSByZXBvcnRlZCBsYXRlciAqLwogCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJY3MtJmd0O2J0ZiA9IG1ldGEuYnRmOwomIzQzOwkJY3MtJmd0O2Z1bmNfcHJvdG8gPSBtZXRhLmZ1bmNfcHJvdG87CiAJCWNzLSZndDtudW1fcGFyYW1zID0gYnRmX3R5cGVfdmxlbihtZXRhLmZ1bmNfcHJvdG8pOwogCQljcy0mZ3Q7ZmFzdGNhbGwgPSBtZXRhLmtmdW5jX2ZsYWdzICZhbXA7IEtGX0ZBU1RDQUxMOwogCQljcy0mZ3Q7aXNfdm9pZCA9IGJ0Zl90eXBlX2lzX3ZvaWQoYnRmX3R5cGVfYnlfaWQobWV0YS5idGYsIG1ldGEuZnVuY19wcm90by0mZ3Q7dHlwZSkpOwpAQCAtMTc0NzUsNiAmIzQzOzE3MzUyLDcgQEAgc3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJZW52LSZndDtwcmV2X2xvZ19wb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zOwogCQkJdmVyYm9zZShlbnYsICYjMzQ7JWQ6ICYjMzQ7LCBlbnYtJmd0O2luc25faWR4KTsKIAkJCWJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTsKJiM0MzsJCQl2ZXJib3NlKGVudiwgJiMzNDtcbiYjMzQ7KTsKIAkJCWVudi0mZ3Q7cHJldl9pbnNuX3ByaW50X3BvcyA9IGVudi0mZ3Q7bG9nLmVuZF9wb3MgLSBlbnYtJmd0O3ByZXZfbG9nX3BvczsKIAkJCWVudi0mZ3Q7cHJldl9sb2dfcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKIAkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jIGIvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jCmluZGV4IDVlN2NiOGIzNmZlZjIuLjdiMzNkODQ3ZDgwMGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMKQEAgLTEyOSwxNiAmIzQzOzEyOSwxMCBAQCBwcmludF9pbnNuX2Zvcl9ncmFwaCh2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogc3RhdGljIHZvaWQgX19wcmludGYoMiwgMykKIHByaW50X2luc25fanNvbih2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewotCXVuc2lnbmVkIGludCBsID0gc3RybGVuKGZtdCk7Ci0JY2hhciBjaG9tcGVkX2ZtdFtsXTsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCWlmIChsICZndDsgMCkgewotCQlzdHJuY3B5KGNob21wZWRfZm10LCBmbXQsIGwgLSAxKTsKLQkJY2hvbXBlZF9mbXRbbCAtIDFdID0gJiMzOTtcMCYjMzk7OwotCX0KLQlqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGNob21wZWRfZm10LCBhcmdzKTsKJiM0MzsJanNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKIH0KIApAQCAtMzUxLDYgJiM0MzszNDUsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX3BsYWluKHN0cnVjdCBkdW1wX2RhdGEgKmRkLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4sCiAKIAkJcHJpbnRmKCYjMzQ7JTR1OiAmIzM0OywgaSk7CiAJCXByaW50X2JwZl9pbnNuKCZhbXA7Y2JzLCBpbnNuICYjNDM7IGksIHRydWUpOwomIzQzOwkJcHJpbnRmKCYjMzQ7XG4mIzM0Oyk7CiAKIAkJaWYgKG9wY29kZXMpIHsKIAkJCXByaW50ZigmIzM0OyAgICAgICAmIzM0Oyk7CkBAIC00MTcsNiAmIzQzOzQxMiw3IEBAIHZvaWQgZHVtcF94bGF0ZWRfZm9yX2dyYXBoKHN0cnVjdCBkdW1wX2RhdGEgKmRkLCB2b2lkICpidWZfc3RhcnQsIHZvaWQgKmJ1Zl9lbmQsCiAKIAkJcHJpbnRmKCYjMzQ7JXU6ICYjMzQ7LCBpbnNuX29mZik7CiAJCXByaW50X2JwZl9pbnNuKCZhbXA7Y2JzLCBjdXIsIHRydWUpOwomIzQzOwkJcHJpbnRmKCYjMzQ7XFxsXFxcbiYjMzQ7KTsKIAogCQlpZiAob3Bjb2RlcykgewogCQkJcHJpbnRmKCYjMzQ7XFwgXFwgXFwgXFwgJiMzNDspOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYwppbmRleCBmNTI5ZjFjOGMxNzFkLi4zMDIyMTM1MjU2OGQ3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYwpAQCAtNTUsMTAgJiM0Mzs1NSw5IEBAIHN0cnVjdCBicGZfaW5zbiAqZGlzYXNtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opCiAJICogZm9yIGVhY2ggaW5zdHJ1Y3Rpb24gKEZGIHN0YW5kcyBmb3IgaW5zdHJ1Y3Rpb24gYGNvZGVgIGJ5dGUpLgogCSAqIFJlbW92ZSB0aGUgcHJlZml4IGlucGxhY2UsIGFuZCBhbHNvIHNpbXBsaWZ5IGNhbGwgaW5zdHJ1Y3Rpb25zLgogCSAqIEUuZy46ICYjMzQ7KDg1KSBjYWxsIGZvbyMxMCYjMzQ7IC0mZ3Q7ICYjMzQ7Y2FsbCBmb28mIzM0Oy4KLQkgKiBBbHNvIHJlbW92ZSBuZXdsaW5lIGluIHRoZSBlbmQgKHRoZSAmIzM5O21heChzdHJsZW4oYnVmKSAtIDEsIDApJiMzOTsgdGhpbmcpLgogCSAqLwogCXBmeF9lbmQgPSBidWYgJiM0MzsgNTsKLQlzZnhfc3RhcnQgPSBidWYgJiM0MzsgbWF4KChpbnQpc3RybGVuKGJ1ZikgLSAxLCAwKTsKJiM0MzsJc2Z4X3N0YXJ0ID0gYnVmICYjNDM7IChpbnQpc3RybGVuKGJ1Zik7CiAJaWYgKHN0cm5jbXAocGZ4X2VuZCwgJiMzNDtjYWxsICYjMzQ7LCA1KSA9PSAwICZhbXA7JmFtcDsgKHRtcCA9IHN0cnJjaHIoYnVmLCAmIzM5OyMmIzM5OykpKQogCQlzZnhfc3RhcnQgPSB0bXA7CiAJbGVuID0gc2Z4X3N0YXJ0IC0gcGZ4X2VuZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCmluZGV4IGJlOTdmNjg4N2YwZTcuLmZiYTU2MmM4MTk2OTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwpAQCAtMTI0LDYgJiM0MzsxMjQsNyBAQAogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9qaXRfaW5saW5lLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2lycS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2ZXJpZmllcl96ZXh0LnNrZWwuaCYjMzQ7CiAKICNkZWZpbmUgTUFYX0VOVFJJRVMgMTEKIApAQCAtMjc3LDYgJiM0MzsyNzgsNyBAQCB2b2lkIHRlc3RfaXJxKHZvaWQpCQkJICAgICAgeyBSVU4oaXJxKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX210dSh2b2lkKQkJICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2ppdF9pbmxpbmUodm9pZCkgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9qaXRfaW5saW5lKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH0KJiM0Mzt2b2lkIHRlc3RfdmVyaWZpZXJfemV4dCh2b2lkKSAgICAgICAgICAgICAgICAgeyBSVU5fVEVTVFModmVyaWZpZXJfemV4dCk7IH0KIAogc3RhdGljIGludCBpbml0X3Rlc3RfdmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjaGFyICptYXBfbmFtZSkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmI0YzgyYTMxZTY2ODIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jCkBAIC0wLDAgJiM0MzsxLDI2MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uLy4uLy4uL2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSkKJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9STkRfSEkzMikKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIHZvaWQgemV4dF9sb3N0X2Fjcm9zc19jaGVja3BvaW50KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2t0aW1lX2dldF9uc107CQkJCQkJCVwKJiM0MzsJcjggPSByMDsJCQkJCQkJCQlcCiYjNDM7CXI2ID0gMHhkZWFkYmVlZmNhZmViYWJlIGxsOwkvKiBpbmplY3Qgc29tZSB2YWx1ZSBmb3IgcjYmIzM5O3MgdXBwZXIgaGFsZiAqLwlcCiYjNDM7CWlmIHI4ICE9IDAgZ290byAxZjsJCS8qIGZhbGwtdGhyb3VnaCBjYWNoZWQgZmlyc3QsIGJyYW5jaCBwcnVuZWQgKi8JXAomIzQzOwlyNiA9IDMyOwkJCS8qIGZ1bGwgNjQtYml0IGRlZiAqLwkJCQlcCiYjNDM7CWdvdG8gMmY7CQkJCQkJCQkJXAomIzQzOzE6CQkJCQkJCQkJCQlcCiYjNDM7CXc2ID0gMzI7CQkJLyogMzItYml0IGRlZiwgemV4dCBtYXJrIGxvc3QgKi8JCVwKJiM0MzsyOgkJCQkJCQkJCQkJXAomIzQzOwlyMCA9IHI2OwkJCS8qIGJ1Z2d5IHZlcmlmaWVyIGJlbGlldmVkIHVwcGVyIDMyIGJpdHMgYXJlIDAgKi8gXAomIzQzOwkJCQkJLyogYW5kIHRodXMgZGlkIG5vdCB6ZXJvIGV4dGVuZGVkIHc2ID0gMzIuICovCVwKJiM0MzsJcjAgJmd0OyZndDs9IDMyOwkJCQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfa3RpbWVfZ2V0X25zKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtJmd0OyB6ZXh0ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2FsdTMyX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJdzEgPSB3MDsJCQkJCVwKJiM0MzsJcjAgPSByMTsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIDMyLWJpdCBBTFUgcmVzdWx0IHJlYWQgb25seSBhcyAzMi1iaXQgLSZndDsgbm8gemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbm90X21zZygmIzM0O3cxID0gdzB7ey4qfX07IHpleHQmIzM0OykKJiM0MztfX25vdF9tc2coJiMzNDt3MiA9IHcxe3suKn19OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfYWx1MzJfaGlfdW51c2VkKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXcxID0gdzA7CQkJCQlcCiYjNDM7CXcyID0gdzE7CQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiA2NC1iaXQgZGVmaW5pdGlvbiBpcyBuZXZlciB6ZXJvIGV4dGVuZGVkICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19ub3RfbXNnKCYjMzQ7cjEgPSByMHt7Lip9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBub196ZXh0X21vdjY0KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXIxID0gcjA7CQkJCQlcCiYjNDM7CXIwID0gcjE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBOYXJyb3cgbG9hZCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjEgPSAqKHUzMiAqKShyMTAgLTgpe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19sb2FkX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMDsJCQkJXAomIzQzOwlyMSA9ICoodTMyICopKHIxMCAtIDgpOwkJCQlcCiYjNDM7CXIwID0gcjE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogMzItYml0IGF0b21pYyBmZXRjaCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjEgPSBhdG9taWNfZmV0Y2hfYWRkKCh1MzIgKikocjEwIC04KSwgcjEpe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2F0b21pY19mZXRjaDMyX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMTsJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwkuOGJ5dGUgJVtmZXRjaF9hZGQzMl07CQkJCVwKJiM0MzsJcjAgPSByMTsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2luc24oZmV0Y2hfYWRkMzIsCiYjNDM7CQkgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9BREQgfCBCUEZfRkVUQ0gsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgYXRvbWljIGNtcHhjaGcgcmVzdWx0IChyMCkgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjAgPSBhdG9taWNfY21weGNoZygodTMyICopKHIxMCAtOCksIHIwLCByMSl7eyAmIzQzO319OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfY21weGNoZzMyX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMTsJCQkJXAomIzQzOwl3MCA9IDA7CQkJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwkuOGJ5dGUgJVtjbXB4Y2hnMzJdOwkJCQlcCiYjNDM7CXIyID0gcjA7CQkJCQlcCiYjNDM7CXIwID0gcjI7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9pbnNuKGNtcHhjaGczMiwKJiM0MzsJCSAgICAgQlBGX0FUT01JQ19PUChCUEZfVywgQlBGX0NNUFhDSEcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgZGVmIGJlZm9yZSBhIGJyYW5jaCwgdXBwZXIgaGFsZiB1c2VkIG9uIG9uZSBicmFuY2ggLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7dzYgPSAzMnt7ICYjNDM7fX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9jZmdfaGlfdXNlZF9vbmVfYnJhbmNoKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXc2ID0gMzI7CQkJCQlcCiYjNDM7CWlmIHIwID09IDAgZ290byBsMF8lPTsJCQkJXAomIzQzOwlyMCA9IHI2OwkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MztsMF8lPToJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcjEmIzM5O3MgdXBwZXIgaGFsZiBpcyBkZWFkLCBzbyAmIzM5O3cxID0gMSYjMzk7IG11c3QgTk9UIGJlIG1hcmtlZCBmb3IgemVybyBleHRlbnNpb24uICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19ub3RfbXNnKCYjMzQ7dzEgPSAxe3suKn19OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfb3RoZXJfcmVnX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCVwKJiM0MzsJcjYgJmx0OyZsdDs9IDMyOwkJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwlyMCA9IHI2OwkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTERfQUJTIGRlZmluZXMgcjA7IHdoZW4gcjAgaXMgcmVhZCBhcyA2NC1iaXQgaXQgbXVzdCBiZSB6ZXJvIGV4dGVuZGVkICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtyMCA9ICoodTggKilza2JbMF17ey4qfX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9sZF9hYnNfaGlfdXNlZCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyNiA9IHIxOwkJCQkJXAomIzQzOwlyMCA9ICoodTggKilza2JbMF07CQkJCVwKJiM0MzsJcjcgPSByMDsJCQkJCVwKJiM0MzsJcjAgPSByNzsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBIZWxwZXIgcGFyYW1ldGVycyBhcmUgcmVhZCBhcyA2NC1iaXQgKGNhbGxfdXNlX21hc2soKSBmYWxsYmFjaykgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKJiM0MztfX21zZygmIzM0O3cyID0gMXt7ICYjNDM7fX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgaGVscGVyX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSByMTA7CQkJCQlcCiYjNDM7CXIxICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJdzIgPSAxOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl90cmFjZV9wcmludGtdOwkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl90cmFjZV9wcmludGspCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX3VzZWQgX19uYWtlZCBpbnQgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSByMTsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzdWJwcm9ncmFtIHBhcmFtZXRlcnMgYXJlIGNvbnNlcnZhdGl2ZWx5IHJlYWQgYXMgNjQtYml0ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBzdWJwcm9nX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJdzEgPSB3MDsJCQkJCVwKJiM0MzsJY2FsbCBzdWJwcm9nX3JlYWRzX2FyZ19hc182NGJpdDsJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO2V4dGVybiBsb25nIGJwZl9rZnVuY19jYWxsX3Rlc3Q0KHNpZ25lZCBjaGFyIGEsIHNob3J0IGIsIGludCBjLCBsb25nIGQpIF9fa3N5bTsKJiM0MzsKJiM0MzsvKiBGb3JjZSBrZnVuYyBleHRlcm4gQlRGIGdlbmVyYXRpb24uICovCiYjNDM7aW50IF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Lyoga2Z1bmMgcGFyYW1ldGVycyBhcmUgcmVhZCBhY2NvcmRpbmcgdG8gdGhlaXIgQlRGIHR5cGUgd2lkdGggKi8KJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbm90X21zZygmIzM0O3czID0gMXt7Lip9fTsgemV4dCYjMzQ7KQkJLyogaW50IGMgIC0mZ3Q7IHJlYWQgYXMgMzItYml0ICovCiYjNDM7X19tc2coJiMzNDt3NCA9IDF7eyAmIzQzO319OyB6ZXh0JiMzNDspCQkvKiBsb25nIGQgLSZndDsgcmVhZCBhcyA2NC1iaXQgKi8KJiM0MztfX25ha2VkIHZvaWQga2Z1bmNfcGFyYW1fcmVhZF9wZXJfYnRmKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXcxID0gMTsJCQkJCQlcCiYjNDM7CXcyID0gMTsJCQkJCQlcCiYjNDM7CXczID0gMTsJCQkJCQlcCiYjNDM7CXc0ID0gMTsJCQkJCQlcCiYjNDM7CWNhbGwgYnBmX2tmdW5jX2NhbGxfdGVzdDQ7CQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gTGl2ZW5lc3MgYW5kIFplcm8tRXh0ZW5zaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgQlBGIHZlcmlmaWVyIGFuZCBpdCYjMzk7cyBhIHByZXR0eSBzdWJzdGFudGlhbCBvdmVyaGF1bCBvZiBob3cgemVyby1leHRlbnNpb24gaXMgaGFuZGxlZC4gUHJldmlvdXNseSwgdGhlIGBzdWJyZWdfZGVmYCB3YXMgdHJhY2tlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGBicGZfcmVnX3N0YXRlYCwgYnV0IG5vdywgdGhleSYjMzk7dmUgcHVsbGVkIHRoYXQgb3V0IGFuZCBhcmUgY2FsY3VsYXRpbmcgdGhlIHplcm8tZXh0ZW5zaW9uIGR5bmFtaWNhbGx5LCB1c2luZyBsaXZlbmVzcyBhbmFseXNpcyB0aHJvdWdoIGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AuIEludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHRoZSBsaXZlbmVzcyBhbmFseXNpcyBpdHNlbGYgaGFzIHRvIGJlIGZhciBtb3JlIG51YW5jZWQuCgpNeSBmb2N1cyBpcyBvbiBob3cgdGhleeKAmXZlIGFjaGlldmVkIHRoaXMuIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYSBuZXcgc3RydWN0dXJlLCBgYnBmX2luc25fZGVmMzJgLCBhbmQgdGhleSYjMzk7dmUgbW9kaWZpZWQgYGNvbXB1dGVfaW5zbl9saXZlX3JlZ3NgIHRvIHRyYWNrIHRoZSB1c2UgYW5kIGRlZmluaXRpb24gb2YgMzItYml0IHZlcnN1cyA2NC1iaXQgcmVnaXN0ZXJzIGV4cGxpY2l0bHkuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIHdheSBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIG5vdyB0cmFja3MgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBsaXZlbmVzcyBzZXBhcmF0ZWx5LCB1c2luZyBhIDMyLWJpdCBtYXNrIGZvciBlYWNoIHJlZ2lzdGVyLiBFc3NlbnRpYWxseSwgdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIG1hc2sgd2lsbCByZXByZXNlbnQgMzItYml0IHVzYWdlIGFuZCB0aGUgdXBwZXIgMTYgZm9yIDY0LWJpdC4gVGhpcyBoYXMgcHJvcGFnYXRlZCBvdXR3YXJkcyB0byBtb2RpZnlpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZmllbGRzIGB1c2VgLCBgZGVmYCwgYGluYCwgYW5kIGBvdXRgIGluIHRoZSBgaW5zbl9saXZlX3JlZ3NgIHRvIGJlIGB1MzJgIGluc3RlYWQgb2YgYHUxNmAuCgpUaGUgYWRkaXRpb24gb2YgYGNhbGxfdXNlX21hc2tgIGlzIGNsZXZlci4gSXQgaW5mZXJzIHRoZSB1c2UgbWFzayBiYXNlZCBvbiB0aGUgbnVtYmVyIGFuZCBzaXplcyBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzLiBBbmQsIG9mIGNvdXJzZSwgdGhlcmUmIzM5O3MgYGJwZl9pbnNuX2RlZjMyYCwgd2hpY2ggZXhwbGljaXRseSBjaGVja3MgaWYgYW4gaW5zdHJ1Y3Rpb24gZGVmaW5lcyBhIDMyLWJpdCBzdWJyZWdpc3Rlci4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYHpleHRfZHN0YCBpcyBiZWluZyBzZXQgaW4gYGluc25fYXV4YCBkdXJpbmcgbGl2ZW5lc3MgYW5hbHlzaXMgaWYgYSAzMi1iaXQgc3VicmVnaXN0ZXIgaXMgZGVmaW5lZCBhbmQgaXRzIHVwcGVyIGhhbGYgcmVtYWlucyAmIzM0O2FsaXZlJiMzNDsgYWZ0ZXIgdGhlIGluc3RydWN0aW9uLgoKVGhpcyBpcyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIHRoZSB2ZXJpZmllciYjMzk7cyBhcHByb2FjaCB0byBsaXZlbmVzcyBhbmQgemVyby1leHRlbnNpb24gdHJhY2tpbmcuIEl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRob3JvdWdobHkgZnV6emVkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcywgYW5kIGhvdyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBleGlzdGluZyBCUEYgcHJvZ3JhbXMgaXMgaW1wYWN0ZWQuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBzeW1ib2xzIHNvIEkgY2FuIGZvY3VzIG15IHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBlZmZvcnRzOiBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgLCBgY29tcHV0ZV9pbnNuX2xpdmVfcmVnc2AsIGBjYWxsX3VzZV9tYXNrYCwgYGJwZl9pbnNuX2RlZjMyYCwgYW5kIG9mIGNvdXJzZSBgYnBmX2lzX3JlZzY0YC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBCUEYgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3QgZnV6emluZyBjb25maWdzLCBidXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNyaXRpY2FsIG9uZS4gR2l2ZW4gdGhhdCBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIGlzIHBhcnQgb2YgYGtlcm5lbC9icGYvbGl2ZW5lc3MuY2AsIHdoaWNoIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYWN0aXZlLiBJ4oCZbGwgcXVpY2tseSB2ZXJpZnkgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9saXZlbmVzcy5jPTIwOTY9c3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMjU0LSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjIyNTU6aW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjI1Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5OTM4PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDEwMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDEwNDpcdHJldCA9IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxMDUtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTM5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBSZWdpc3RlciBMaXZlbmVzcyoqCgpBbHJpZ2h0LCBzbyBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIGlzIGNhbGxlZCBieSBgYnBmX2NoZWNrYC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHJlZ2lzdGVyIGxpdmVuZXNzIGFuYWx5c2lzLCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBCUEYgYnl0ZWNvZGUgdmVyaWZpY2F0aW9uLiBUaGUga2VybmVsIG5lZWRzIHRvIGVuc3VyZSByZWdpc3RlcnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIHRocm91Z2hvdXQgdGhlIGV4ZWN1dGlvbiBvZiBhIEJQRiBwcm9ncmFtIHRvIGd1YXJhbnRlZSBzYWZldHkgYW5kIHByZXZlbnQgZXhwbG9pdHMuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoaXMgbGl2ZW5lc3MgYW5hbHlzaXMuIEkga25vdyB0aGF0IGBsaXZlbmVzcy5jYCBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMsIHNvIGxldCYjMzk7cyBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBLbm93aW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2hlcmUgdGhpcyBhbmFseXNpcyBpcyBlbmFibGVkLCBhbmQgcG90ZW50aWFsbHkgaG93IGl0JiMzOTtzIG9wdGltaXplZC4gSXMgdGhpcyBmZWF0dXJlIGVuYWJsZWQgYnkgZGVmYXVsdD8gSXMgdGhlcmUgYSBkZWJ1ZyBmbGFnPyBLbm93aW5nIHRoZXNlIGRldGFpbHMgd2lsbCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZGVlcGx5IEkgY2FuIGRpZywgYW5kIHdoYXQgSSBtaWdodCBiZSBhYmxlIHRvIGluZmx1ZW5jZSBkdXJpbmcga2VybmVsIGRldmVsb3BtZW50LCBvciBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGl2ZW5lc3MubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIEJQRiBDb25maWd1cmF0aW9uIGFuZCBJbnN0cnVjdGlvbiBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBCUEYsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCYjMzk7cyB0aGUga2V5IGVuYWJsaW5nIHN3aXRjaCBmb3IgdGhlIHdob2xlIEJQRiBzeXNjYWxsIGludGVyZmFjZSwgc28gaXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O2QgY2hlY2sgd2hlbiBkZWJ1Z2dpbmcgb3IgZXhwbG9yaW5nIEJQRiBmdW5jdGlvbmFsaXR5LgoKTm93LCBJIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGVzZSBpbnN0cnVjdGlvbnMgYXJlIHRyZWF0ZWQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBicGZfaW5zbl9kZWYzMmAuIEkga25vdyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkZWZpbml0aW9uIG9mIDMyLWJpdCBCUEYgaW5zdHJ1Y3Rpb25zIHJlc2lkZXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRlZmluaXRpb24gd29ya3MgYW5kIHdoYXQgaXQgbWVhbnMgZm9yIGluc3RydWN0aW9uIHNldHMuIEFuZCwgb2YgY291cnNlLCBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgJiMzNDtsaXZlIHJlZ2lzdGVycyYjMzQ7IGFyZSBjb21wdXRlZC4gVGhpcyBpcyBsaWtlbHkgZG9uZSBieSBgY29tcHV0ZV9pbnNuX2xpdmVfcmVnc2AuIFVuZGVyc3RhbmRpbmcgcmVnaXN0ZXIgbGl2ZW5lc3MgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciBvcHRpbWl6YXRpb24gYW5kIHZlcmlmeWluZyB0aGUgY29ycmVjdG5lc3Mgb2YgQlBGIHByb2dyYW1zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aG9zZSBjYWxjdWxhdGlvbnMsIGJlY2F1c2UgcmVnaXN0ZXIgbWlzdXNlIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBCUEYgcHJvZ3JhbSBmYWlsdXJlcy4gVGhlIHByb2dyYW0gcmVsaWVzIG9uIHZhbGlkIHJlZ2lzdGVyIHVzZS4gVGltZSB0byBnbyBvdmVyIHRob3NlIGRldGFpbHMgYWdhaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2luc25fZGVmMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2ZpeHVwcy5jPTI0PXN0YXRpYyBpbnQgaW5zbl9kZWZfcmVnbm8oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNTAtICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjUxOmludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUyLXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE2Mj1zdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTc0LVx0ICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NTpcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEpIFx1MDAzZT0gMDtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc2LVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTg2LVx0XHRkYXRhW2ldLnNlZW4gPSBvbGRfc2Vlbjtcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg3Olx0XHRkYXRhW2ldLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiAmIzQzOyBpKSBcdTAwM2U9IDA7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4OC1cdH1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjI1NT1pbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjMyMC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyAmIzQzOyYjNDM7aSkge1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjIzMjE6XHRcdGludCBkZWYzMiA9IGJwZl9pbnNuX2RlZjMyKFx1MDAyNmluc25zW2ldKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMzIyLVx0XHR1MzIgb3V0ID0gc3RhdGVbaV0ub3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Nzk0CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb3JlIEJQRiBWZXJpZmllciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGRlZXAsIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMuIEl0JiMzOTtzIHRvdWNoaW5nIHRoZSBjb3JlIG9mIGhvdyBpdCBoYW5kbGVzIHJlZ2lzdGVyIGxpdmVuZXNzIGFuZCB6ZXJvLWV4dGVuc2lvbiB0cmFja2luZywgd2hpY2ggaXMgKmNyaXRpY2FsKiBmb3IgdGhlIHNlY3VyaXR5IGFuZCBlZmZpY2llbmN5IG9mIEJQRiBwcm9ncmFtcy4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gaGVyZS4KCk15IGZvY3VzIGhhcyB0byBiZSBvbiB0aGVzZSBrZXkgc3ltYm9sczogYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYCwgYGNvbXB1dGVfaW5zbl9saXZlX3JlZ3NgLCBgY2FsbF91c2VfbWFza2AsIGBicGZfaW5zbl9kZWYzMmAsIGFuZCBgYnBmX2lzX3JlZzY0YC4gVGhleSYjMzk7bGwgaWxsdW1pbmF0ZSB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgdGhlIHJlbW92YWwgb2YgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCB0aGUgc2hpZnQgdG8gZGlyZWN0IHplcm8tZXh0ZW5zaW9uIGNvbXB1dGF0aW9uIGR1cmluZyBsaXZlbmVzcyBhbmFseXNpcyBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBzaGlmdCBpbiBob3cgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgc3RhdGVzIGFyZSBtYW5hZ2VkIGFuZCBvcHRpbWl6ZWQuIExpdmVuZXNzIGFuYWx5c2lzIGlzIHdoZXJlIHRoZSB2ZXJpZmllciBkZXRlcm1pbmVzIHdoaWNoIHJlZ2lzdGVycyBhcmUgYWN0aXZlbHkgdXNlZCBhdCBkaWZmZXJlbnQgcG9pbnRzIGluIGEgQlBGIHByb2dyYW0mIzM5O3MgZXhlY3V0aW9uLCBhbmQgdGhpcyBjaGFuZ2UgY291bGQgaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucyBmb3IgYm90aCB0aGUgcGVyZm9ybWFuY2UgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgKmNvcnJlY3RuZXNzKiBvZiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MuIEl0IGxvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcgZm9yIHRoaXMgc3BlY2lmaWMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuCgpOb3csIGxldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyYjMzQ7LAogICAgJiMzNDtjb21wdXRlX2luc25fbGl2ZV9yZWdzJiMzNDssCiAgICAmIzM0O2NhbGxfdXNlX21hc2smIzM0OywKICAgICYjMzQ7YnBmX2luc25fZGVmMzImIzM0OywKICAgICYjMzQ7YnBmX2lzX3JlZzY0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIHplcm8tZXh0ZW5zaW9uIHRyYWNraW5nIGxvZ2ljLiBJdCByZW1vdmVzIGBzdWJyZWdfZGVmYCBmcm9tIGBicGZfcmVnX3N0YXRlYCBhbmQgaW5zdGVhZCBjb21wdXRlcyB6ZXJvIGV4dGVuc2lvbiByZXF1aXJlbWVudHMgZGlyZWN0bHkgZHVyaW5nIGxpdmVuZXNzIGFuYWx5c2lzIGJ5IHRyYWNraW5nIDMyLWJpdCBhbmQgNjQtYml0IHJlZ2lzdGVyIHVzZXMgc2VwYXJhdGVseS4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGFmZmVjdHMgaG93IHJlZ2lzdGVyIHN0YXRlcyBhcmUgdHJhY2tlZCBhbmQgb3B0aW1pemVkLCB3aGljaCBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIHNlY3VyaXR5IGFuZCBjb3JyZWN0bmVzcyBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzJiMzNDssCiAgICAmIzM0O2NvbXB1dGVfaW5zbl9saXZlX3JlZ3MmIzM0OywKICAgICYjMzQ7Y2FsbF91c2VfbWFzayYjMzQ7LAogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7LAogICAgJiMzNDticGZfaXNfcmVnNjQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgemVyby1leHRlbnNpb24gdHJhY2tpbmcgbG9naWMuIEl0IHJlbW92ZXMgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCBpbnN0ZWFkIGNvbXB1dGVzIHplcm8gZXh0ZW5zaW9uIHJlcXVpcmVtZW50cyBkaXJlY3RseSBkdXJpbmcgbGl2ZW5lc3MgYW5hbHlzaXMgYnkgdHJhY2tpbmcgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgdXNlcyBzZXBhcmF0ZWx5LiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgYWZmZWN0cyBob3cgcmVnaXN0ZXIgc3RhdGVzIGFyZSB0cmFja2VkIGFuZCBvcHRpbWl6ZWQsIHdoaWNoIGlzIGEgY3JpdGljYWwgYXJlYSBmb3Igc2VjdXJpdHkgYW5kIGNvcnJlY3RuZXNzIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDozOTo0Ni4xMDEyNjc1NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI4NjEyNzczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzXCIsXG4gICAgXCJjb21wdXRlX2luc25fbGl2ZV9yZWdzXCIsXG4gICAgXCJjYWxsX3VzZV9tYXNrXCIsXG4gICAgXCJicGZfaW5zbl9kZWYzMlwiLFxuICAgIFwiYnBmX2lzX3JlZzY0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCB6ZXJvLWV4dGVuc2lvbiB0cmFja2luZyBsb2dpYy4gSXQgcmVtb3ZlcyBgc3VicmVnX2RlZmAgZnJvbSBgYnBmX3JlZ19zdGF0ZWAgYW5kIGluc3RlYWQgY29tcHV0ZXMgemVybyBleHRlbnNpb24gcmVxdWlyZW1lbnRzIGRpcmVjdGx5IGR1cmluZyBsaXZlbmVzcyBhbmFseXNpcyBieSB0cmFja2luZyAzMi1iaXQgYW5kIDY0LWJpdCByZWdpc3RlciB1c2VzIHNlcGFyYXRlbHkuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBhZmZlY3RzIGhvdyByZWdpc3RlciBzdGF0ZXMgYXJlIHRyYWNrZWQgYW5kIG9wdGltaXplZCwgd2hpY2ggaXMgYSBjcml0aWNhbCBhcmVhIGZvciBzZWN1cml0eSBhbmQgY29ycmVjdG5lc3MgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6Mzk6NDYuMTAxMjczMTQ2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODEyNTcxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MTk4ZGIxZDcxNzE4MjM4ODllM2VlYmY3NWJhZTUwZGNhZDc0MWRjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMDQ6Mzk6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5pbmRleCA2ODJjMmNkM2I4NDQzLi4zMjFlYmQzMDhkMzhhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuQEAgLTE2MiwxMSArMTYyLDYgQEAgc3RydWN0IGJwZl9yZWdfc3RhdGUge1xcbiBcXHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cXG4gXFx0ICovXFxuIFxcdHUzMiBmcmFtZW5vO1xcbi1cXHQvKiBUcmFja3Mgc3VicmVnIGRlZmluaXRpb24uIFRoZSBzdG9yZWQgdmFsdWUgaXMgdGhlIGluc25faWR4IG9mIHRoZVxcbi1cXHQgKiB3cml0aW5nIGluc24uIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHN1YnJlZ19kZWYgaXMgdXNlZCBiZWZvcmUgYW55IGluc25cXG4tXFx0ICogcGF0Y2hpbmcgd2hpY2ggb25seSBoYXBwZW5zIGFmdGVyIG1haW4gdmVyaWZpY2F0aW9uIGZpbmlzaGVkLlxcbi1cXHQgKi9cXG4tXFx0czMyIHN1YnJlZ19kZWY7XFxuIFxcdC8qIGlmICghcHJlY2lzZSBcXHUwMDI2XFx1MDAyNiBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24ndCBhZmZlY3Qgc2FmZXR5ICovXFxuIFxcdGJvb2wgcHJlY2lzZTtcXG4gfTtcXG5AQCAtMTA1MCw2ICsxMDQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZ19pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnZcXG4gfVxcbiBcXG4gc3RydWN0IGJwZl9jYWxsX3N1bW1hcnkge1xcbitcXHRjb25zdCBzdHJ1Y3QgYnRmICpidGY7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuY19wcm90bztcXG4gXFx0dTggbnVtX3BhcmFtcztcXG4gXFx0Ym9vbCBpc192b2lkO1xcbiBcXHRib29sIGZhc3RjYWxsO1xcbkBAIC0xNjMxLDcgKzE2MjgsNyBAQCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiIHtcXG4gfTtcXG4gXFxuIC8qIEZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIHZlcmlmaWVyLmMsIHVzZWQgYnkgZml4dXBzLmMgKi9cXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KTtcXG4rYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcXG4gdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pO1xcbiB2b2lkIGJwZl9tYXJrX3N1YnByb2dfZXhjX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKTtcXG4gYm9vbCBicGZfYWxsb3dfdGFpbF9jYWxsX2luX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbkBAIC0xNjU1LDUgKzE2NTIsNiBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG4gaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuK2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9CUEZfVkVSSUZJRVJfSCAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbmluZGV4IDJlNGFlMGVmMDg2MDkuLjdjNDU5OWU2NWVjZWIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbisrKyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG5AQCAtMjg1LDYgKzI4NSw3IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwic3RhY2s9JXMgYmVmb3JlIFxcXCIsIGVudi1cXHUwMDNldG1wX3N0cl9idWYpO1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVkOiBcXFwiLCBpZHgpO1xcbiBcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XFxuK1xcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogSWYgdGhlcmUgaXMgYSBoaXN0b3J5IHJlY29yZCB0aGF0IHNvbWUgcmVnaXN0ZXJzIGdhaW5lZCByYW5nZSBhdCB0aGlzIGluc24sXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jXFxuaW5kZXggMDM5MWIzYmMwMDczNC4uNTBiM2NhNTE0OWEwYSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Rpc2FzbS5jXFxuKysrIGIva2VybmVsL2JwZi9kaXNhc20uY1xcbkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2VuZF9pbnNuKGJwZl9pbnNuX3ByaW50X3QgdmVyYm9zZSxcXG4gXFx0XFx0XFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4ge1xcbi1cXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSAlcyVkIHIlZFxcXFxuXFxcIixcXG4rXFx0dmVyYm9zZShwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gJXMlZCByJWRcXFwiLFxcbiBcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9UT19CRSA/IFxcXCJiZVxcXCIgOiBcXFwibGVcXFwiLFxcbiBcXHRcXHRpbnNuLVxcdTAwM2VpbW0sIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbkBAIC0xNDksNyArMTQ5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2Jzd2FwX2luc24oYnBmX2luc25fcHJpbnRfdCB2ZXJib3NlLFxcbiBcXHRcXHRcXHQgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiB7XFxuLVxcdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGJzd2FwJWQgciVkXFxcXG5cXFwiLFxcbitcXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFxcXCIsXFxuIFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdGluc24tXFx1MDAzZWltbSwgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuIH1cXG5AQCAtMTk3LDE5ICsxOTcsMTkgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0cHJpbnRfYnBmX2VuZF9pbnNuKHZlcmJvc2UsIGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX05FRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICVjJWQgPSAtJWMlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlYyVkID0gLSVjJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChpc19hZGRyX3NwYWNlX2Nhc3QoaW5zbikpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBhZGRyX3NwYWNlX2Nhc3QociVkLCAldSwgJXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnLCAoKHUzMilpbnNuLVxcdTAwM2VpbW0pIFxcdTAwM2VcXHUwMDNlIDE2LCAodTE2KWluc24tXFx1MDAzZWltbSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoaXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gXFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gXFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XVxcbkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdFxcdGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICVjJWQgJXMgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGlzX3NkaXZfc21vZChpbnNuKSA/IGJwZl9hbHVfc2lnbl9zdHJpbmdbQlBGX09QKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDRdXFxuQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVFgpIHtcXG4gXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0pXFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9IHIlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gciVkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0IChpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0FERCB8fCBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0FORCB8fFxcbiBcXHRcXHRcXHQgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfT1IgfHwgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9YT1IpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlK2QpICVzIHIlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBsb2NrICooJXMgKikociVkICUrZCkgJXMgciVkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYsXFxuQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0ICAgIGluc24tXFx1MDAzZWltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHxcXG4gXFx0XFx0XFx0ICAgIGluc24tXFx1MDAzZWltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fFxcbiBcXHRcXHRcXHQgICAgaW5zbi1cXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSkpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUrZCksIHIlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfYXRvbWljX2FsdV9zdHJpbmdbQlBGX09QKGluc24tXFx1MDAzZWltbSkgXFx1MDAzZVxcdTAwM2UgNF0sXFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUrZCksIHIwLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUrZCksIHIwLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuQEAgLTI2Miw0NCArMjYyLDQ0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfWENIRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiwgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJStkKSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJStkKSlcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX1NUT1JFX1JFTCkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYsIGluc24tXFx1MDAzZXNyY19yZWcpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHXyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHXyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkge1xcbiBcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICooJXMgKikociVkICUrZCkgPSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZW9mZiwgaW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSAweGMwIC8qIEJQRl9OT1NQRUMsIG5vIFVBUEkgKi8pIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBub3NwZWNcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIG5vc3BlY1xcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX3N0XyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX3N0XyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRFgpIHtcXG4gXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9NRU0gXFx1MDAyNlxcdTAwMjYgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX01FTVNYKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGR4XyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX2xkeF8lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbi1cXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICooJXMgKikociVkICUrZClcXFxcblxcXCIsXFxuK1xcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVxcXCIsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xcbiBcXHRcXHRcXHRcXHQgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdIDpcXG5AQCAtMzA3LDEyICszMDcsMTIgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuIFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUJTKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgcjAgPSAqKCVzICopc2tiWyVkXVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByMCA9ICooJXMgKilza2JbJWRdXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VpbW0pO1xcbiBcXHRcXHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9JTkQpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICsgJWRdXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgKyAlZF1cXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZWltbSk7XFxuQEAgLTMzMiwxMiArMzMyLDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiBcXHRcXHRcXHRpZiAoaXNfcHRyIFxcdTAwMjZcXHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXFxuIFxcdFxcdFxcdFxcdGltbSA9IDA7XFxuIFxcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICVzXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlZHN0X3JlZyxcXG4gXFx0XFx0XFx0XFx0X19mdW5jX2ltbV9uYW1lKGNicywgaW5zbiwgaW1tLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR0bXAsIHNpemVvZih0bXApKSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGRfJTAyeFxcXFxuXFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGRfJTAyeFxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkge1xcbkBAIC0zNDcsMzUgKzM0NywzNSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0Y2hhciB0bXBbNjRdO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKSB7XFxuLVxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgY2FsbCBwYyVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGNhbGwgcGMlc1xcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsXFxuIFxcdFxcdFxcdFxcdFxcdF9fZnVuY19nZXRfbmFtZShjYnMsIGluc24sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0c3RyY3B5KHRtcCwgXFxcInVua25vd25cXFwiKTtcXG4tXFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBjYWxsICVzIyVkXFxcXG5cXFwiLCBpbnNuLVxcdTAwM2Vjb2RlLFxcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGNhbGwgJXMjJWRcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHR0bXAsIHNpemVvZih0bXApKSxcXG4gXFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgZ290byBwYyUrZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvIHBjJStkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfSk1QIHwgQlBGX0pBIHwgQlBGX1gpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgZ290b3ggciVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGdvdG94IHIlZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkNPTkQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX01BWV9HT1RPKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbWF5X2dvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbWF5X2dvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2VvZmYpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAzMiB8IEJQRl9KQSkpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvbCBwYyUrZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvbCBwYyUrZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWltbSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9FWElUKSkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGV4aXRcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGV4aXRcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAlYyVkIGdvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAlYyVkIGdvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XSxcXG5AQCAtMzgzLDE0ICszODMsMTQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XSxcXG4gXFx0XFx0XFx0XFx0KHUzMilpbnNuLVxcdTAwM2VpbW0sIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlc1xcXCIsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGJwZl9jbGFzc19zdHJpbmdbY2xhc3NdKTtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuaW5kZXggYTBiZGRhZGE3OTY0ZS4uNzNhYjk1NTczZjYwOSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbkBAIC00NCwxNSArNDQsMTggQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdH1cXG4gfVxcbiBcXG4tLyogUmV0dXJuIFRSVUUgaWYgSU5TTiBoYXMgZGVmaW5lZCBhbnkgMzItYml0IHZhbHVlIGV4cGxpY2l0bHkuICovXFxuLXN0YXRpYyBib29sIGluc25faGFzX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4rLypcXG4rICogUmV0dXJuIHRoZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5lZCBieSBJTlNOLCBvciAtMSBpZiBJTlNOIGRvZXMgbm90XFxuKyAqIGV4cGxpY2l0bHkgZGVmaW5lIGEgMzItYml0IHZhbHVlLlxcbisgKi9cXG4raW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4ge1xcbiBcXHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xcbiBcXG4tXFx0aWYgKGRzdF9yZWcgPT0gLTEpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGRzdF9yZWcgXFx1MDAzYyAwIHx8IGJwZl9pc19yZWc2NChpbnNuKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0cmV0dXJuICFicGZfaXNfcmVnNjQoaW5zbiwgZHN0X3JlZywgTlVMTCwgRFNUX09QKTtcXG4rXFx0cmV0dXJuIGRzdF9yZWc7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQga2Z1bmNfZGVzY19jbXBfYnlfaW1tX29mZihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxcbkBAIC0xNjksNyArMTcyLDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0ICogKGNudCA9PSAxKSBpcyB0YWtlbiBvciBub3QuIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSBJTlNOIGF0IE9GRiBpcyB0aGVcXG4gXFx0ICogb3JpZ2luYWwgaW5zbiBhdCBvbGQgcHJvZy5cXG4gXFx0ICovXFxuLVxcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gKyBvZmYgKyBjbnQgLSAxKTtcXG4rXFx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiArIG9mZiArIGNudCAtIDEpIFxcdTAwM2U9IDA7XFxuIFxcbiBcXHRpZiAoY250ID09IDEpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMTgxLDcgKzE4NCw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdGZvciAoaSA9IG9mZjsgaSBcXHUwMDNjIG9mZiArIGNudCAtIDE7IGkrKykge1xcbiBcXHRcXHQvKiBFeHBhbmQgaW5zbmlbb2ZmXSdzIHNlZW4gY291bnQgdG8gdGhlIHBhdGNoZWQgcmFuZ2UuICovXFxuIFxcdFxcdGRhdGFbaV0uc2VlbiA9IG9sZF9zZWVuO1xcbi1cXHRcXHRkYXRhW2ldLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiArIGkpO1xcbitcXHRcXHRkYXRhW2ldLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiArIGkpIFxcdTAwM2U9IDA7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTYyMCw3ICs2MjMsNyBAQCBpbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdCAqICAgICAgIEJQRl9TVFggKyBTUkNfT1AsIHNvIGl0IGlzIHNhZmUgdG8gcGFzcyBOVUxMXFxuIFxcdFxcdFxcdCAqICAgICAgIGhlcmUuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoYnBmX2lzX3JlZzY0KFxcdTAwMjZpbnNuLCBsb2FkX3JlZywgTlVMTCwgRFNUX09QKSkge1xcbitcXHRcXHRcXHRpZiAoYnBmX2lzX3JlZzY0KFxcdTAwMjZpbnNuKSkge1xcbiBcXHRcXHRcXHRcXHRpZiAoY2xhc3MgPT0gQlBGX0xEIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKVxcbiBcXHRcXHRcXHRcXHRcXHRpKys7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xcbmluZGV4IDBhYWRmYmFlMGFjYzUuLmVhMDAyNTUwNjcxYTggMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9saXZlbmVzcy5jXFxuKysrIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXFxuQEAgLTQ5Nyw3ICs0OTcsNiBAQCBzdGF0aWMgdm9pZCBwcmludF9pbnN0YW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaVxcbiBcXHRcXHRwb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUzZDogXFxcIiwgaW5zbl9pZHgpO1xcbiBcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXFx1MDAyNmluc25zW2luc25faWR4XSk7XFxuLVxcdFxcdGJwZl92bG9nX3Jlc2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgZW52LVxcdTAwM2Vsb2cuZW5kX3BvcyAtIDEpOyAvKiByZW1vdmUgXFxcXG4gKi9cXG4gXFx0XFx0aW5zbl9wb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUqYztcXFwiLCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAnICcpO1xcbiBcXHRcXHRwb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbkBAIC0xMDQzLDcgKzEwNDIsNiBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfbG9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaVxcbiBcXHRcXHRpZiAoIXByaW50ZWQpIHtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxuIFxcdFxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcXG4tXFx0XFx0XFx0YnBmX3Zsb2dfcmVzZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XFxuIFxcdFxcdFxcdHByaW50ZWQgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXHRyJWQ6IFxcXCIsIGkpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZhdF9pbltpXSk7XFxuQEAgLTEwNTgsNyArMTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXFxuIFxcdFxcdGlmICghcHJpbnRlZCkge1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUzZDogXFxcIiwgaWR4KTtcXG4gXFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbi1cXHRcXHRcXHRicGZfdmxvZ19yZXNldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIGVudi1cXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTtcXG4gXFx0XFx0XFx0cHJpbnRlZCA9IHRydWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcdHNhJWQ6IFxcXCIsIGkpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZhdF9pblthaV0pO1xcbkBAIC0xMDcwLDcgKzEwNjcsNiBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfbG9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaVxcbiBcXHRcXHRpZiAoIXByaW50ZWQpIHtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxuIFxcdFxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcXG4tXFx0XFx0XFx0YnBmX3Zsb2dfcmVzZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XFxuIFxcdFxcdFxcdHByaW50ZWQgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXHRmcCUrZDogXFxcIiwgLShpICsgMSkgKiA4KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcXHUwMDI2YXRfc3RhY2tfaW5baV0pO1xcbkBAIC0xNTQ1LDYgKzE1NDEsNyBAQCBzdGF0aWMgdm9pZCBwcmludF9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJTNkOiBcXFwiLCBpZHgpO1xcbiBcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXFx1MDAyNmluc25zW2lkeF0pO1xcbitcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlxcXFxuXFxcIik7XFxuIFxcbiBcXHRcXHQvKiBDb2xsZWN0IHdoYXQgbmVlZHMgcHJpbnRpbmcgKi9cXG4gXFx0XFx0aWYgKGlzX2xkeF9zdHhfY2FsbCBcXHUwMDI2XFx1MDAyNlxcbkBAIC0yMDUwLDI5ICsyMDQ3LDY3IEBAIGludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFxuIC8qIEVhY2ggZmllbGQgaXMgYSByZWdpc3RlciBiaXRtYXNrICovXFxuIHN0cnVjdCBpbnNuX2xpdmVfcmVncyB7XFxuLVxcdHUxNiB1c2U7XFx0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cXG4tXFx0dTE2IGRlZjtcXHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xcbi1cXHR1MTYgaW47XFx0XFx0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGJlZm9yZSBpbnN0cnVjdGlvbiAqL1xcbi1cXHR1MTYgb3V0O1xcdC8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqL1xcbitcXHR1MzIgdXNlO1xcdC8qIHJlZ2lzdGVycyByZWFkIGJ5IGluc3RydWN0aW9uICovXFxuK1xcdHUzMiBkZWY7XFx0LyogcmVnaXN0ZXJzIHdyaXR0ZW4gYnkgaW5zdHJ1Y3Rpb24gKi9cXG4rXFx0dTMyIGluO1xcdFxcdC8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBiZWZvcmUgaW5zdHJ1Y3Rpb24gKi9cXG4rXFx0dTMyIG91dDtcXHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYWZ0ZXIgaW5zdHJ1Y3Rpb24gKi9cXG4gfTtcXG4gXFxuIC8qIEJpdG1hc2sgd2l0aCAxcyBmb3IgYWxsIGNhbGxlciBzYXZlZCByZWdpc3RlcnMgKi9cXG4gI2RlZmluZSBBTExfQ0FMTEVSX1NBVkVEX1JFR1MgKCgxdSBcXHUwMDNjXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUykgLSAxKVxcbiBcXG4rc3RhdGljIGlubGluZSB1MzIgcmVnMzJfbWFzayh1MzIgbikgeyByZXR1cm4gQklUKG4pOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTMyIHJlZzY0X21hc2sodTMyIG4pIHsgcmV0dXJuIEJJVChuKSB8IEJJVChuICsgMTYpOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTMyIG1hc2tfd2lkZW4odTMyIG0pIHsgcmV0dXJuIG0gfCAobSBcXHUwMDNjXFx1MDAzYyAxNik7IH1cXG4rc3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTE2IG1hc2tfaGkodTMyIG0pIHsgcmV0dXJuICh1MTYpKG0gXFx1MDAzZVxcdTAwM2UgMTYpOyB9XFxuK1xcbisvKiBJbmZlciB1c2UgbWFzayBiYXNlZCBvbiBudW1iZXIgYW5kIHNpemVzIG9mIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLiAqL1xcbitzdGF0aWMgdTMyIGNhbGxfdXNlX21hc2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbit7XFxuK1xcdHUzMiBpLCB1c2UsIHNpemUsIHJlZ19wYXJhbXNfbnVtO1xcbitcXHRzdHJ1Y3QgYnBmX2NhbGxfc3VtbWFyeSBjcztcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqcDtcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xcbitcXG4rXFx0aWYgKCFicGZfZ2V0X2NhbGxfc3VtbWFyeShlbnYsIGluc24sIFxcdTAwMjZjcykpXFxuK1xcdFxcdC8qIGUuZy4gYSBicGYtdG8tYnBmIGNhbGwsIGFzc3VtZSB0aGF0IGNhbGxzIHVzZSBmdWxsIDY0LWJpdCBmb3IgZWFjaCBwYXJhbSAqL1xcbitcXHRcXHRyZXR1cm4gbWFza193aWRlbihBTExfQ0FMTEVSX1NBVkVEX1JFR1MgXFx1MDAyNiB+QklUKEJQRl9SRUdfMCkpO1xcbitcXG4rXFx0aWYgKGNzLmZ1bmNfcHJvdG8pIHtcXG4rXFx0XFx0dXNlID0gMDtcXG4rXFx0XFx0cCA9IGJ0Zl9wYXJhbXMoY3MuZnVuY19wcm90byk7XFxuK1xcdFxcdHJlZ19wYXJhbXNfbnVtID0gbWluKGJ0Zl90eXBlX3ZsZW4oY3MuZnVuY19wcm90byksIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyByZWdfcGFyYW1zX251bTsgaSsrKSB7XFxuK1xcdFxcdFxcdHQgPSBidGZfdHlwZV9ieV9pZChjcy5idGYsIHBbaV0udHlwZSk7XFxuK1xcdFxcdFxcdGlmIChJU19FUlIoYnRmX3Jlc29sdmVfc2l6ZShjcy5idGYsIHQsIFxcdTAwMjZzaXplKSkpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuK1xcdFxcdFxcdHVzZSB8PSBzaXplIFxcdTAwM2M9IHNpemVvZih1MzIpID8gcmVnMzJfbWFzayhpICsgMSkgOiByZWc2NF9tYXNrKGkgKyAxKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gdXNlO1xcbitcXHR9XFxuK1xcbitmYWxsYmFjazpcXG4rXFx0LyogYnkgZGVmYXVsdCBhc3N1bWUgdGhhdCBjYWxscyB1c2UgZnVsbCA2NC1iaXQgZm9yIGVhY2ggcGFyYW0gKi9cXG4rXFx0cmV0dXJuIG1hc2tfd2lkZW4oR0VOTUFTSyhtaW5fdCh1OCwgY3MubnVtX3BhcmFtcywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKSwgMSkpO1xcbit9XFxuK1xcbiAvKiBDb21wdXRlIGluZm8tXFx1MDAzZXt1c2UsZGVmfSBmaWVsZHMgZm9yIHRoZSBpbnN0cnVjdGlvbiAqL1xcbiBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGluc25fbGl2ZV9yZWdzICppbmZvKVxcbiB7XFxuLVxcdHN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzO1xcbi1cXHR1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKTtcXG4tXFx0dTggY29kZSA9IEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKTtcXG4tXFx0dTggbW9kZSA9IEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpO1xcbi1cXHR1MTYgc3JjID0gQklUKGluc24tXFx1MDAzZXNyY19yZWcpO1xcbi1cXHR1MTYgZHN0ID0gQklUKGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbi1cXHR1MTYgcjAgID0gQklUKDApO1xcbi1cXHR1MTYgZGVmID0gMDtcXG4tXFx0dTE2IHVzZSA9IDB4ZmZmZjtcXG4rXFx0Y29uc3QgdTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdGNvbnN0IHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdGNvbnN0IHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0Y29uc3QgdTggc2l6ZSA9IEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRjb25zdCB1MzIgc3JjID0gcmVnNjRfbWFzayhpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4rXFx0Y29uc3QgdTMyIGRzdCA9IHJlZzY0X21hc2soaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuK1xcdGNvbnN0IHUzMiBzcmMzMiA9IG1hc2tfbG8oc3JjKTtcXG4rXFx0Y29uc3QgdTMyIGRzdDMyID0gbWFza19sbyhkc3QpO1xcbitcXHRjb25zdCB1MzIgcjAgID0gcmVnNjRfbWFzaygwKTtcXG4rXFx0dTMyIGRlZiA9IDA7XFxuK1xcdHUzMiB1c2UgPSBVMzJfTUFYO1xcbiBcXG4gXFx0c3dpdGNoIChjbGFzcykge1xcbiBcXHRjYXNlIEJQRl9MRDpcXG5AQCAtMjA4Myw4ICsyMTE4LDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHR1c2UgPSAwO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIEJQRl9MRCB8IEJQRl9BQlM6XFxuLVxcdFxcdGNhc2UgQlBGX0xEIHwgQlBGX0lORDpcXG4rXFx0XFx0Y2FzZSBCUEZfQUJTOlxcbitcXHRcXHRjYXNlIEJQRl9JTkQ6XFxuIFxcdFxcdFxcdC8qIHN0aWNrIHdpdGggZGVmYXVsdHMgKi9cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtMjA5Miw3ICsyMTI3LDE1IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0Y2FzZSBCUEZfTERYOlxcbiBcXHRcXHRzd2l0Y2ggKG1vZGUpIHtcXG4gXFx0XFx0Y2FzZSBCUEZfTUVNOlxcbitcXHRcXHRcXHQvKiBhIG5hcnJvdyBsb2FkIHN0aWxsIHJlZGVmaW5lcyB0aGUgd2hvbGUgcmVnaXN0ZXIgKi9cXG4rXFx0XFx0XFx0ZGVmID0gZHN0O1xcbitcXHRcXHRcXHR1c2UgPSBzcmM7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEJQRl9NRU1TWDpcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogc2lnbiBleHRlbnNpb24gZGVmaW5lcyB0aGUgd2hvbGUgcmVnaXN0ZXI7XFxuK1xcdFxcdFxcdCAqIHNyYyBob2xkcyBhIHBvaW50ZXIsIGhlbmNlIGlzIHVzZWQgYXMgNjQtYml0LlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0ZGVmID0gZHN0O1xcbiBcXHRcXHRcXHR1c2UgPSBzcmM7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0yMTEwLDEyICsyMTUzLDE5IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0c3dpdGNoIChtb2RlKSB7XFxuIFxcdFxcdGNhc2UgQlBGX01FTTpcXG4gXFx0XFx0XFx0ZGVmID0gMDtcXG4tXFx0XFx0XFx0dXNlID0gZHN0IHwgc3JjO1xcbitcXHRcXHRcXHR1c2UgPSBkc3QgfCAoc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIEJQRl9BVE9NSUM6XFxuK1xcdFxcdGNhc2UgQlBGX0FUT01JQzoge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBkc3QgaG9sZHMgYSBwb2ludGVyIGFuZCBpcyBhbHdheXMgdXNlZCBhcyA2NC1iaXQ7XFxuK1xcdFxcdFxcdCAqIHRoZSB2YWx1ZSBvcGVyYW5kIGFuZCByMCBhcmUgcmVhZCBhcyAzMi1iaXQgZm9yIEJQRl9XIGF0b21pY3MuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR1MzIgc3JjdiA9IHNpemUgPT0gQlBGX0RXID8gc3JjIDogc3JjMzI7XFxuK1xcdFxcdFxcdHUzMiByMHYgID0gc2l6ZSA9PSBCUEZfRFcgPyByMCA6IG1hc2tfbG8ocjApO1xcbitcXG4gXFx0XFx0XFx0c3dpdGNoIChpbnNuLVxcdTAwM2VpbW0pIHtcXG4gXFx0XFx0XFx0Y2FzZSBCUEZfQ01QWENIRzpcXG4tXFx0XFx0XFx0XFx0dXNlID0gcjAgfCBkc3QgfCBzcmM7XFxuK1xcdFxcdFxcdFxcdHVzZSA9IHIwdiB8IGRzdCB8IHNyY3Y7XFxuIFxcdFxcdFxcdFxcdGRlZiA9IHIwO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuQEAgLTIxMjQsMTAgKzIxNzQsMTAgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0Y2FzZSBCUEZfU1RPUkVfUkVMOlxcbiBcXHRcXHRcXHRcXHRkZWYgPSAwO1xcbi1cXHRcXHRcXHRcXHR1c2UgPSBkc3QgfCBzcmM7XFxuK1xcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyY3Y7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRcXHR1c2UgPSBkc3QgfCBzcmM7XFxuK1xcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyY3Y7XFxuIFxcdFxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VpbW0gXFx1MDAyNiBCUEZfRkVUQ0gpXFxuIFxcdFxcdFxcdFxcdFxcdGRlZiA9IHNyYztcXG4gXFx0XFx0XFx0XFx0ZWxzZVxcbkBAIC0yMTM1LDYgKzIxODUsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4rXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfQUxVOlxcbiBcXHRjYXNlIEJQRl9BTFU2NDpcXG5AQCAtMjE0OCwxNCArMjE5OSwxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9LKVxcbiBcXHRcXHRcXHRcXHR1c2UgPSAwO1xcbiBcXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdHVzZSA9IHNyYztcXG4rXFx0XFx0XFx0XFx0dXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gc3JjIDogc3JjMzI7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRkZWYgPSBkc3Q7XFxuIFxcdFxcdFxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9LKVxcbi1cXHRcXHRcXHRcXHR1c2UgPSBkc3Q7XFxuK1xcdFxcdFxcdFxcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IGRzdCA6IGRzdDMyO1xcbiBcXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyYztcXG4rXFx0XFx0XFx0XFx0dXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gKGRzdCB8IHNyYykgOiAoZHN0MzIgfCBzcmMzMik7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQlBGX0pNUDpcXG5AQCAtMjE3NywxNyArMjIyOCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdHVzZSA9IHIwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBCUEZfQ0FMTDpcXG4tXFx0XFx0XFx0ZGVmID0gQUxMX0NBTExFUl9TQVZFRF9SRUdTO1xcbi1cXHRcXHRcXHR1c2UgPSBkZWYgXFx1MDAyNiB+QklUKEJQRl9SRUdfMCk7XFxuLVxcdFxcdFxcdGlmIChicGZfZ2V0X2NhbGxfc3VtbWFyeShlbnYsIGluc24sIFxcdTAwMjZjcykpXFxuLVxcdFxcdFxcdFxcdHVzZSA9IEdFTk1BU0sobWluX3QodTgsIGNzLm51bV9wYXJhbXMsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyksIDEpO1xcbitcXHRcXHRcXHRkZWYgPSBtYXNrX3dpZGVuKEFMTF9DQUxMRVJfU0FWRURfUkVHUyk7XFxuK1xcdFxcdFxcdHVzZSA9IGNhbGxfdXNlX21hc2soZW52LCBpbnNuKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGRlZiA9IDA7XFxuIFxcdFxcdFxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9LKVxcbiBcXHRcXHRcXHRcXHR1c2UgPSBkc3Q7XFxuIFxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0dXNlID0gZHN0IHwgc3JjO1xcbitcXHRcXHRcXHRcXHR1c2UgPSBkc3QgfCAoY29kZSA9PSBCUEZfSk1QMzIgPyBzcmMgOiBzcmMzMik7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtMjIwOSw2ICsyMjU4LDcgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4gXFx0c3RydWN0IGluc25fbGl2ZV9yZWdzICpzdGF0ZTtcXG4gXFx0aW50IGluc25fY250ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW47XFxuK1xcdHU2NCBwb3MsIGluc25fcG9zO1xcbiBcXHRpbnQgZXJyID0gMCwgaSwgajtcXG4gXFx0Ym9vbCBjaGFuZ2VkO1xcbiBcXG5AQCAtMjI1Miw4ICsyMzAyLDggQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGludCBpbnNuX2lkeCA9IGVudi1cXHUwMDNlY2ZnLmluc25fcG9zdG9yZGVyW2ldO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKmxpdmUgPSBcXHUwMDI2c3RhdGVbaW5zbl9pZHhdO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgYnBmX2lhcnJheSAqc3VjYztcXG4tXFx0XFx0XFx0dTE2IG5ld19vdXQgPSAwO1xcbi1cXHRcXHRcXHR1MTYgbmV3X2luID0gMDtcXG4rXFx0XFx0XFx0dTMyIG5ld19vdXQgPSAwO1xcbitcXHRcXHRcXHR1MzIgbmV3X2luID0gMDtcXG4gXFxuIFxcdFxcdFxcdHN1Y2MgPSBicGZfaW5zbl9zdWNjZXNzb3JzKGVudiwgaW5zbl9pZHgpO1xcbiBcXHRcXHRcXHRmb3IgKGludCBzID0gMDsgcyBcXHUwMDNjIHN1Y2MtXFx1MDAzZWNudDsgKytzKVxcbkBAIC0yMjY3LDggKzIzMTcsMjAgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluc25fY250OyArK2kpXFxuLVxcdFxcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBzdGF0ZVtpXS5pbjtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluc25fY250OyArK2kpIHtcXG4rXFx0XFx0aW50IGRlZjMyID0gYnBmX2luc25fZGVmMzIoXFx1MDAyNmluc25zW2ldKTtcXG4rXFx0XFx0dTMyIG91dCA9IHN0YXRlW2ldLm91dDtcXG4rXFx0XFx0dTMyIGluID0gc3RhdGVbaV0uaW47XFxuK1xcbitcXHRcXHRpbnNuX2F1eFtpXS5saXZlX3JlZ3NfYmVmb3JlID0gbWFza19sbyhpbikgfCBtYXNrX2hpKGluKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT24gYXJjaGl0ZWN0dXJlcyB3aGVyZSAzMi1iaXQgb3BlcmF0aW9ucyBkbyBub3QgcmVzZXQgdXBwZXIgaGFsdmVzXFxuK1xcdFxcdCAqIG9mIHRoZSByZWdpc3RlcnMsIHRoZSB2ZXJpZmllciBuZWVkcyB0byB6ZXJvIGV4dGVuZCBhIGRlc3RpbmF0aW9uXFxuK1xcdFxcdCAqIHJlZ2lzdGVyIGlmIGFuIGluc3RydWN0aW9uIGRlZmluZXMgYSAzMi1iaXQgc3VicmVnaXN0ZXIgYW5kIHRoZVxcbitcXHRcXHQgKiB1cHBlciBoYWxmIG9mIHRoYXQgcmVnaXN0ZXIgaXMgYWxpdmUgYWZ0ZXIgdGhlIGluc3RydWN0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aW5zbl9hdXhbaV0uemV4dF9kc3QgPSBkZWYzMiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IChtYXNrX2hpKG91dCkgXFx1MDAyNiBCSVQoZGVmMzIpKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGVudi1cXHUwMDNlbG9nLmxldmVsIFxcdTAwMjYgQlBGX0xPR19MRVZFTDIpIHtcXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJMaXZlIHJlZ3MgYmVmb3JlIGluc246XFxcXG5cXFwiKTtcXG5AQCAtMjI4NCw3ICsyMzQ2LDEyIEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiLlxcXCIpO1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiBcXFwiKTtcXG4rXFx0XFx0XFx0cG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG4gXFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFxcdTAwMjZpbnNuc1tpXSk7XFxuK1xcdFxcdFxcdGluc25fcG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG4rXFx0XFx0XFx0aWYgKGluc25fYXV4W2ldLnpleHRfZHN0KVxcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUqYzsgemV4dFxcXCIsIGJwZl92bG9nX2FsaWdubWVudChpbnNuX3BvcyAtIHBvcyksICcgJyk7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0aWYgKGJwZl9pc19sZGltbTY0KFxcdTAwMjZpbnNuc1tpXSkpXFxuIFxcdFxcdFxcdFxcdGkrKztcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBlNmYzNWY0ZTcxNWI2Li5kNWI2ZmVmMWFkODk3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0yMTI5LDEyICsyMTI5LDkgQEAgc3RhdGljIGludCByZWdfYm91bmRzX3Nhbml0eV9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiAvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xcbiB2b2lkIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiB7XFxuLVxcdHMzMiBzdWJyZWdfZGVmID0gcmVnLVxcdTAwM2VzdWJyZWdfZGVmO1xcbi1cXG4gXFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcXG4gXFx0cmVnLVxcdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xcbiBcXHRyZWctXFx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XFxuLVxcdHJlZy1cXHUwMDNlc3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7XFxuIFxcdF9fbWFya19yZWdfdW5ib3VuZGVkKHJlZyk7XFxuIH1cXG4gXFxuQEAgLTIyMTAsNyArMjIwNyw2IEBAIHN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdH1cXG4gfVxcbiBcXG4tI2RlZmluZSBERUZfTk9UX1NVQlJFR1xcdCgwKVxcbiBzdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKVxcbiB7XFxuQEAgLTIyMTksNyArMjIxNSw2IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0JQRl9SRUc7IGkrKykge1xcbiBcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tpXSk7XFxuLVxcdFxcdHJlZ3NbaV0uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBmcmFtZSBwb2ludGVyICovXFxuQEAgLTMwMzMsMTEgKzMwMjgsMTAgQEAgc3RhdGljIHZvaWQgbWFya19zdGFja19zbG90c19zY3JhdGNoZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gfVxcbiBcXG4gLyogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgMzItYml0IG9wdGltaXphdGlvblxcbi0gKiBjb2RlIG9ubHkuIEl0IHJldHVybnMgVFJVRSBpZiB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzXFxuLSAqIG9uIDY0LWJpdCwgb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cXG4rICogY29kZSBvbmx5LiBJdCByZXR1cm5zIFRSVUUgaWYgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzIG9uIDY0LWJpdCxcXG4rICogb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cXG4gICovXFxuLWJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tXFx0ICAgICAgdTMyIHJlZ25vLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdClcXG4rYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiB7XFxuIFxcdHU4IGNvZGUsIGNsYXNzLCBvcDtcXG4gXFxuQEAgLTMwNTgsMTEgKzMwNTIsNiBAQCBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0XFx0LyogSGVscGVyIGNhbGwgd2lsbCByZWFjaCBoZXJlIGJlY2F1c2Ugb2YgYXJnIHR5cGVcXG4tXFx0XFx0XFx0ICogY2hlY2ssIGNvbnNlcnZhdGl2ZWx5IHJldHVybiBUUlVFLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKHQgPT0gU1JDX09QKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0fVxcbkBAIC0zMDc4LDIyICszMDY3LDExIEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0aWYgKGNsYXNzID09IEJQRl9BTFUgfHwgY2xhc3MgPT0gQlBGX0pNUDMyKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xcbi1cXHRcXHRpZiAodCAhPSBTUkNfT1ApXFxuLVxcdFxcdFxcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFcgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX01FTVNYO1xcbi1cXHRcXHQvKiBMRFggc291cmNlIG11c3QgYmUgcHRyLiAqL1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0fVxcbitcXHRpZiAoY2xhc3MgPT0gQlBGX0xEWClcXG4rXFx0XFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7XFxuIFxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xcbi1cXHRcXHQvKiBCUEZfU1RYIChpbmNsdWRpbmcgYXRvbWljIHZhcmlhbnRzKSBoYXMgb25lIG9yIG1vcmUgc291cmNlXFxuLVxcdFxcdCAqIG9wZXJhbmRzLCBvbmUgb2Ygd2hpY2ggaXMgYSBwdHIuIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxlciBpc1xcbi1cXHRcXHQgKiBhc2tpbmcgYWJvdXQgaXQuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAodCA9PSBTUkNfT1AgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChjbGFzcyA9PSBCUEZfU1RYKVxcbiBcXHRcXHRyZXR1cm4gQlBGX1NJWkUoY29kZSkgPT0gQlBGX0RXO1xcbi1cXHR9XFxuIFxcbiBcXHRpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuIFxcdFxcdHU4IG1vZGUgPSBCUEZfTU9ERShjb2RlKTtcXG5AQCAtMzEwMywxNSArMzA4MSw3IEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRcXHQvKiBCb3RoIExEX0lORCBhbmQgTERfQUJTIHJldHVybiAzMi1iaXQgZGF0YS4gKi9cXG4tXFx0XFx0aWYgKHQgIT0gU1JDX09QKVxcbi1cXHRcXHRcXHRyZXR1cm4gIGZhbHNlO1xcbi1cXG4tXFx0XFx0LyogSW1wbGljaXQgY3R4IHB0ci4gKi9cXG4tXFx0XFx0aWYgKHJlZ25vID09IEJQRl9SRUdfNilcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcbi1cXHRcXHQvKiBFeHBsaWNpdCBzb3VyY2UgY291bGQgYmUgYW55IHdpZHRoLiAqL1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoY2xhc3MgPT0gQlBGX1NUKVxcbkBAIC0zMTIyLDMwICszMDkyLDE0IEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLXtcXG4tXFx0czMyIGRlZl9pZHggPSByZWctXFx1MDAzZXN1YnJlZ19kZWY7XFxuLVxcbi1cXHRpZiAoZGVmX2lkeCA9PSBERUZfTk9UX1NVQlJFRylcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2RlZl9pZHggLSAxXS56ZXh0X2RzdCA9IHRydWU7XFxuLVxcdC8qIFRoZSBkc3Qgd2lsbCBiZSB6ZXJvIGV4dGVuZGVkLCBzbyB3b24ndCBiZSBzdWItcmVnaXN0ZXIgYW55bW9yZS4gKi9cXG4tXFx0cmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXFxuIFxcdFxcdFxcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxcbiB7XFxuLVxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpICsgZW52LVxcdTAwM2VpbnNuX2lkeDtcXG4gXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4tXFx0Ym9vbCBydzY0O1xcbiBcXG4gXFx0bWFya19yZWdfc2NyYXRjaGVkKGVudiwgcmVnbm8pO1xcbiBcXG4gXFx0cmVnID0gXFx1MDAyNnJlZ3NbcmVnbm9dO1xcbi1cXHRydzY0ID0gYnBmX2lzX3JlZzY0KGluc24sIHJlZ25vLCByZWcsIHQpO1xcbiBcXHRpZiAodCA9PSBTUkNfT1ApIHtcXG4gXFx0XFx0LyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIHNvdXJjZSBvcGVyYW5kIGNhbiBiZSByZWFkICovXFxuIFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgPT0gTk9UX0lOSVQpIHtcXG5AQCAtMzE1Niw5ICszMTEwLDYgQEAgc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJcXG4gXFx0XFx0aWYgKHJlZ25vID09IEJQRl9SRUdfRlApXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0XFx0aWYgKHJ3NjQpXFxuLVxcdFxcdFxcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcXG4tXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgZGVzdCBvcGVyYW5kIGNhbiBiZSB3cml0dGVuIHRvICovXFxuQEAgLTMxNjYsNyArMzExNyw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZnJhbWUgcG9pbnRlciBpcyByZWFkIG9ubHlcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBydzY0ID8gREVGX05PVF9TVUJSRUcgOiBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0XFx0aWYgKHQgPT0gRFNUX09QKVxcbiBcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xcbiBcXHR9XFxuQEAgLTM4MjIsMTEgKzM3NzIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcbiBcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNjPSBzcGlsbF9zaXplIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBicGZfc3RhY2tfbmFycm93X2FjY2Vzc19vayhvZmYsIHNpemUsIHNwaWxsX3NpemUpKSB7XFxuLVxcdFxcdFxcdFxcdC8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGVcXG4tXFx0XFx0XFx0XFx0ICogc3VicmVnX2RlZiBmb3IgdGhpcyBpbnNuLiAgU2F2ZSBpdCBmaXJzdC5cXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHMzMiBzdWJyZWdfZGVmID0gc3RhdGUtXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmO1xcbi1cXG4gXFx0XFx0XFx0XFx0aWYgKGVudi1cXHUwMDNlYnBmX2NhcGFibGUgXFx1MDAyNlxcdTAwMjYgc2l6ZSA9PSA0IFxcdTAwMjZcXHUwMDI2IHNwaWxsX3NpemUgPT0gNCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHQgICAgZ2V0X3JlZ193aWR0aChyZWcpIFxcdTAwM2M9IDMyKVxcbiBcXHRcXHRcXHRcXHRcXHQvKiBFbnN1cmUgc3RhY2sgc2xvdCBoYXMgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvblxcbkBAIC0zODM0LDcgKzM3NzksNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCByZWcpO1xcbiBcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlcmVnc1tkc3RfcmVnbm9dID0gKnJlZztcXG4tXFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmID0gc3VicmVnX2RlZjtcXG4gXFxuIFxcdFxcdFxcdFxcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBmaWxsLlxcbiBcXHRcXHRcXHRcXHQgKiBjb2VyY2VfcmVnX3RvX3NpemUgd2lsbCBhZGp1c3QgdGhlIGJvdW5kYXJpZXMuXFxuQEAgLTYyNzEsMTIgKzYyMTUsNiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZhbHVlX3JlZ25vKTtcXG4tXFx0XFx0XFx0XFx0LyogQSBsb2FkIG9mIGN0eCBmaWVsZCBjb3VsZCBoYXZlIGRpZmZlcmVudFxcbi1cXHRcXHRcXHRcXHQgKiBhY3R1YWwgbG9hZCBzaXplIHdpdGggdGhlIG9uZSBlbmNvZGVkIGluIHRoZVxcbi1cXHRcXHRcXHRcXHQgKiBpbnNuLiBXaGVuIHRoZSBkc3QgaXMgUFRSLCBpdCBpcyBmb3Igc3VyZSBub3RcXG4tXFx0XFx0XFx0XFx0ICogYSBzdWItcmVnaXN0ZXIuXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdFxcdFxcdFxcdGlmIChiYXNlX3R5cGUoaW5mby5yZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkge1xcbiBcXHRcXHRcXHRcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS5idGYgPSBpbmZvLmJ0ZjtcXG4gXFx0XFx0XFx0XFx0XFx0cmVnc1t2YWx1ZV9yZWdub10uYnRmX2lkID0gaW5mby5idGZfaWQ7XFxuQEAgLTczODAsMTAgKzczMTgsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdFxcbiBcXHRcXHRcXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHNwaTtcXG4gXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xcbi1cXHRcXHRcXHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxcbi1cXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0bWFya19zdGFja19zbG90c19zY3JhdGNoZWQoZW52LCBzcGksIEJQRl9EWU5QVFJfTlJfU0xPVFMpO1xcbiBcXG4gXFx0XFx0XFx0cmVnID0gXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbkBAIC05NDYzLDcgKzkzOTcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdC8qIEFsbCBub24tdm9pZCBnbG9iYWwgZnVuY3Rpb25zIHJldHVybiBhIDY0LWJpdCBTQ0FMQVJfVkFMVUUuICovXFxuIFxcdFxcdGlmICghc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKSkge1xcbiBcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVxcdTAwM2VyZWdzLCBCUEZfUkVHXzApO1xcbi1cXHRcXHRcXHRjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5taWdodF90aHJvdykge1xcbkBAIC0xMDQ4Miw5ICsxMDQxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdH1cXG4gXFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XFxuIFxcbi1cXHQvKiBoZWxwZXIgY2FsbCByZXR1cm5zIDY0LWJpdCB2YWx1ZS4gKi9cXG4tXFx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcXG4tXFxuIFxcdC8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovXFxuIFxcdHJldF90eXBlID0gZm4tXFx1MDAzZXJldF90eXBlO1xcbiBcXHRyZXRfZmxhZyA9IHR5cGVfZmxhZyhyZXRfdHlwZSk7XFxuQEAgLTEwNzIyLDMwICsxMDY1Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKiBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKCkgaXMgdXNlZCB3aGVuIHRoZSByZWcgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5XFxuLSAqIHRoZSBCVEYgZnVuY19wcm90bydzIHJldHVybiB2YWx1ZSBzaXplIGFuZCBhcmd1bWVudC5cXG4tICovXFxuLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyxcXG4tXFx0XFx0XFx0XFx0ICAgICB1MzIgcmVnbm8sIHNpemVfdCByZWdfc2l6ZSlcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gXFx1MDAyNnJlZ3NbcmVnbm9dO1xcbi1cXG4tXFx0aWYgKHJlZ25vID09IEJQRl9SRUdfMCkge1xcbi1cXHRcXHQvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi9cXG4tXFx0XFx0cmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgP1xcbi1cXHRcXHRcXHRERUZfTk9UX1NVQlJFRyA6IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbi1cXHR9IGVsc2UgaWYgKHJlZ19zaXplID09IHNpemVvZih1NjQpKSB7XFxuLVxcdFxcdC8qIEZ1bmN0aW9uIGFyZ3VtZW50ICovXFxuLVxcdFxcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcXG4tXFx0fVxcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcXG4tXFx0XFx0XFx0XFx0ICAgc2l6ZV90IHJlZ19zaXplKVxcbi17XFxuLVxcdHJldHVybiBfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBjdXJfcmVncyhlbnYpLCByZWdubywgcmVnX3NpemUpO1xcbi19XFxuLVxcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hY3F1aXJlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4ge1xcbiBcXHRyZXR1cm4gbWV0YS1cXHUwMDNla2Z1bmNfZmxhZ3MgXFx1MDAyNiBLRl9BQ1FVSVJFO1xcbkBAIC0xMjk3NCw3ICsxMjg4MCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4O1xcbiBcXHRpbnQgZXJyLCBpbnNuX2lkeCA9ICppbnNuX2lkeF9wO1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzO1xcbiBcXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xcbiBcXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcXG4gXFx0aW50IGlkO1xcbkBAIC0xMzAxOCw3ICsxMjkyMyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZmFpbGVkIHRvIG1hcmsgczMyIHJhbmdlIGZvciByZXR2YWwgaW4gZm9ya2VkIHN0YXRlIGZvciBsb2NrXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbi1cXHRcXHRfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdzLCBCUEZfUkVHXzAsIHNpemVvZih1MzIpKTtcXG4gXFx0fSBlbHNlIGlmICghaW5zbi1cXHUwMDNlb2ZmIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfX19icGZfdHJhcF0pIHtcXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5AQCAtMTMxNjgsNyArMTMwNzIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XFxuIFxcbiBcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tyZWdub10pO1xcbi1cXHRcXHRyZWdzW3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdH1cXG4gXFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XFxuIFxcbkBAIC0xMzE5MCw3ICsxMzA5Myw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcXHUwMDI2XFx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcXG4gXFx0XFx0ICAgIG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKVxcbiBcXHRcXHRcXHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcXG4tXFx0XFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgdC1cXHUwMDNlc2l6ZSk7XFxuIFxcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XFxuIFxcdFxcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZwdHJfdHlwZV9pZCk7XFxuIFxcdFxcdGVyciA9IGNoZWNrX3NwZWNpYWxfa2Z1bmMoZW52LCBcXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XFxuQEAgLTEzMjgxLDcgKzEzMTgzLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0LyogRm9yIG1hcmtfcHRyX29yX251bGxfcmVnLCBzZWUgOTNjMjMwZTNmNWJkNiAqL1xcbiBcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHNpemVvZih2b2lkICopKTtcXG4gXFx0XFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXFx1MDAyNm1ldGEpKSB7XFxuIFxcdFxcdFxcdGlkID0gYWNxdWlyZV9yZWZlcmVuY2UoZW52LCBpbnNuX2lkeCwgMCk7XFxuIFxcdFxcdFxcdGlmIChpZCBcXHUwMDNjIDApXFxuQEAgLTEzMzE4LDE4ICsxMzIxOSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdGNhbGxlcl9pbmZvLVxcdTAwM2VzdGFja19hcmdfY250ID0gc3RhY2tfYXJnX2NudDtcXG4gXFx0fVxcbiBcXG4tXFx0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEuZnVuY19wcm90byArIDEpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWluX3QoaW50LCBuYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XFxuLVxcdFxcdHUzMiByZWdubyA9IGkgKyAxO1xcbi1cXG4tXFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xcbi1cXHRcXHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKVxcbi1cXHRcXHRcXHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHQvKiBzY2FsYXIuIGVuc3VyZWQgYnkgY2hlY2tfa2Z1bmNfYXJncygpICovXFxuLVxcdFxcdFxcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgdC1cXHUwMDNlc2l6ZSk7XFxuLVxcdH1cXG4tXFxuIFxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSkge1xcbiBcXHRcXHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFxcdTAwMjZtZXRhKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtMTQ4MjMsOCArMTQ3MTIsNiBAQCBzdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdGlmIChkc3RfcmVnLVxcdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSlcXG4gXFx0XFx0XFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcXG4gXFxuLVxcdFxcdGRzdF9yZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4tXFxuIFxcdFxcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0KVxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiAzMi1iaXQgb3BlcmF0aW9ucyB6ZXJvIHVwcGVyIGJpdHMgYXV0b21hdGljYWxseS5cXG5AQCAtMTUwMjgsOCArMTQ5MTUsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSAxKSB7IC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqL1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2V0eXBlID0gUFRSX1RPX0FSRU5BO1xcbi1cXHRcXHRcXHRcXHRcXHRcXHQvKiBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0XFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZW9mZiA9PSAwKSB7XFxuIFxcdFxcdFxcdFxcdFxcdC8qIGNhc2U6IFIxID0gUjJcXG5AQCAtMTUwMzcsNyArMTQ5MjIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcXG4tXFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbiBcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHQvKiBjYXNlOiBSMSA9IChzOCwgczE2IHMzMilSMiAqL1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXFx1MDAzZXNyY19yZWcpKSB7XFxuQEAgLTE1MDU1LDcgKzE0OTM5LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiBcXHUwMDNlXFx1MDAzZSAzKTtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbiBcXHRcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuIFxcdFxcdFxcdFxcdFxcdH1cXG5AQCAtMTUwODAsNyArMTQ5NjMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWlzX3NyY19yZWdfdTMyKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0LyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqL1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRib29sIG5vX3NleHQgPSByZWdfdW1heChzcmNfcmVnKSBcXHUwMDNjICgxVUxMIFxcdTAwM2NcXHUwMDNjIChpbnNuLVxcdTAwM2VvZmYgLSAxKSk7XFxuQEAgLTE1MDkwLDcgKzE0OTcyLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRjb2VyY2Vfc3VicmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmIFxcdTAwM2VcXHUwMDNlIDMpO1xcbiBcXHRcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuQEAgLTE1OTU5LDEyICsxNTg0MCw4IEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoKCEocmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpIFxcdTAwMjZcXHUwMDI2ICEoa25vd25fcmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxcbiBcXHRcXHQgICAgcmVnLVxcdTAwM2VkZWx0YSA9PSBrbm93bl9yZWctXFx1MDAzZWRlbHRhKSB7XFxuLVxcdFxcdFxcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVxcdTAwM2VzdWJyZWdfZGVmO1xcbi1cXG4gXFx0XFx0XFx0KnJlZyA9ICprbm93bl9yZWc7XFxuLVxcdFxcdFxcdHJlZy1cXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVxcdTAwM2VzdWJyZWdfZGVmO1xcbiBcXHRcXHRcXHRzMzIgc2F2ZWRfb2ZmID0gcmVnLVxcdTAwM2VkZWx0YTtcXG4gXFx0XFx0XFx0dTMyIHNhdmVkX2lkID0gcmVnLVxcdTAwM2VpZDtcXG4gXFxuQEAgLTE1OTc0LDEyICsxNTg1MSwxMSBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xcbiBcXHRcXHRcXHQvKiByZWcgPSBrbm93bl9yZWc7IHJlZyArPSBkZWx0YSAqL1xcbiBcXHRcXHRcXHQqcmVnID0gKmtub3duX3JlZztcXG4gXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYsIGlkIGFuZCBzdWJyZWdfZGVmIGZsYWcsXFxuLVxcdFxcdFxcdCAqIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKSB3aWxsIGJlIGluY29ycmVjdC5cXG4rXFx0XFx0XFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYgYW5kIGlkLCBvdGhlcndpc2UgYW5vdGhlciBzeW5jX2xpbmtlZF9yZWdzKClcXG4rXFx0XFx0XFx0ICogd2lsbCBiZSBpbmNvcnJlY3QuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRyZWctXFx1MDAzZWRlbHRhID0gc2F2ZWRfb2ZmO1xcbiBcXHRcXHRcXHRyZWctXFx1MDAzZWlkID0gc2F2ZWRfaWQ7XFxuLVxcdFxcdFxcdHJlZy1cXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XFxuIFxcbiBcXHRcXHRcXHRzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxuIFxcdFxcdFxcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxuQEAgLTE2NDE0LDggKzE2MjkwLDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHQgKiBBbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlLlxcbiBcXHQgKi9cXG4gXFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxuLVxcdC8qIGxkX2FicyBsb2FkIHVwIHRvIDMyLWJpdCBza2IgZGF0YS4gKi9cXG4tXFx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0LypcXG4gXFx0ICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wXFxuIFxcdCAqIHdoaWNoIG11c3QgYmUgZXhwbG9yZWQgYnkgdGhlIHZlcmlmaWVyIHdoZW4gaW4gYSBzdWJwcm9nLlxcbkBAIC0xNjczMCwxMCArMTY2MDQsMTEgQEAgYm9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXFxuIFxcdGludCBpO1xcbiBcXG4gXFx0aWYgKGJwZl9oZWxwZXJfY2FsbChjYWxsKSkge1xcbi1cXG4gXFx0XFx0aWYgKGJwZl9nZXRfaGVscGVyX3Byb3RvKGVudiwgY2FsbC1cXHUwMDNlaW1tLCBcXHUwMDI2Zm4pIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0LyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi9cXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRjcy1cXHUwMDNlYnRmID0gTlVMTDtcXG4rXFx0XFx0Y3MtXFx1MDAzZWZ1bmNfcHJvdG8gPSBOVUxMO1xcbiBcXHRcXHRjcy1cXHUwMDNlZmFzdGNhbGwgPSBmbi1cXHUwMDNlYWxsb3dfZmFzdGNhbGwgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgICAgIChicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGNhbGwtXFx1MDAzZWltbSkgfHxcXG4gXFx0XFx0XFx0XFx0YnBmX2ppdF9pbmxpbmVzX2hlbHBlcl9jYWxsKGNhbGwtXFx1MDAzZWltbSkpO1xcbkBAIC0xNjc1NCw2ICsxNjYyOSw4IEBAIGJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0LyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi9cXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRjcy1cXHUwMDNlYnRmID0gbWV0YS5idGY7XFxuK1xcdFxcdGNzLVxcdTAwM2VmdW5jX3Byb3RvID0gbWV0YS5mdW5jX3Byb3RvO1xcbiBcXHRcXHRjcy1cXHUwMDNlbnVtX3BhcmFtcyA9IGJ0Zl90eXBlX3ZsZW4obWV0YS5mdW5jX3Byb3RvKTtcXG4gXFx0XFx0Y3MtXFx1MDAzZWZhc3RjYWxsID0gbWV0YS5rZnVuY19mbGFncyBcXHUwMDI2IEtGX0ZBU1RDQUxMO1xcbiBcXHRcXHRjcy1cXHUwMDNlaXNfdm9pZCA9IGJ0Zl90eXBlX2lzX3ZvaWQoYnRmX3R5cGVfYnlfaWQobWV0YS5idGYsIG1ldGEuZnVuY19wcm90by1cXHUwMDNldHlwZSkpO1xcbkBAIC0xNzQ3NSw2ICsxNzM1Miw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0ZW52LVxcdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVkOiBcXFwiLCBlbnYtXFx1MDAzZWluc25faWR4KTtcXG4gXFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGVudi1cXHUwMDNlcHJldl9pbnNuX3ByaW50X3BvcyA9IGVudi1cXHUwMDNlbG9nLmVuZF9wb3MgLSBlbnYtXFx1MDAzZXByZXZfbG9nX3BvcztcXG4gXFx0XFx0XFx0ZW52LVxcdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xcbmluZGV4IDVlN2NiOGIzNmZlZjIuLjdiMzNkODQ3ZDgwMGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jXFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jXFxuQEAgLTEyOSwxNiArMTI5LDEwIEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIHN0YXRpYyB2b2lkIF9fcHJpbnRmKDIsIDMpXFxuIHByaW50X2luc25fanNvbih2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBsID0gc3RybGVuKGZtdCk7XFxuLVxcdGNoYXIgY2hvbXBlZF9mbXRbbF07XFxuIFxcdHZhX2xpc3QgYXJncztcXG4gXFxuIFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuLVxcdGlmIChsIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRzdHJuY3B5KGNob21wZWRfZm10LCBmbXQsIGwgLSAxKTtcXG4tXFx0XFx0Y2hvbXBlZF9mbXRbbCAtIDFdID0gJ1xcXFwwJztcXG4tXFx0fVxcbi1cXHRqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGNob21wZWRfZm10LCBhcmdzKTtcXG4rXFx0anNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBmbXQsIGFyZ3MpO1xcbiBcXHR2YV9lbmQoYXJncyk7XFxuIH1cXG4gXFxuQEAgLTM1MSw2ICszNDUsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX3BsYWluKHN0cnVjdCBkdW1wX2RhdGEgKmRkLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4sXFxuIFxcbiBcXHRcXHRwcmludGYoXFxcIiU0dTogXFxcIiwgaSk7XFxuIFxcdFxcdHByaW50X2JwZl9pbnNuKFxcdTAwMjZjYnMsIGluc24gKyBpLCB0cnVlKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJcXFxcblxcXCIpO1xcbiBcXG4gXFx0XFx0aWYgKG9wY29kZXMpIHtcXG4gXFx0XFx0XFx0cHJpbnRmKFxcXCIgICAgICAgXFxcIik7XFxuQEAgLTQxNyw2ICs0MTIsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX2Zvcl9ncmFwaChzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmX3N0YXJ0LCB2b2lkICpidWZfZW5kLFxcbiBcXG4gXFx0XFx0cHJpbnRmKFxcXCIldTogXFxcIiwgaW5zbl9vZmYpO1xcbiBcXHRcXHRwcmludF9icGZfaW5zbihcXHUwMDI2Y2JzLCBjdXIsIHRydWUpO1xcbitcXHRcXHRwcmludGYoXFxcIlxcXFxcXFxcbFxcXFxcXFxcXFxcXG5cXFwiKTtcXG4gXFxuIFxcdFxcdGlmIChvcGNvZGVzKSB7XFxuIFxcdFxcdFxcdHByaW50ZihcXFwiXFxcXFxcXFwgXFxcXFxcXFwgXFxcXFxcXFwgXFxcXFxcXFwgXFxcIik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcXG5pbmRleCBmNTI5ZjFjOGMxNzFkLi4zMDIyMTM1MjU2OGQ3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcXG5AQCAtNTUsMTAgKzU1LDkgQEAgc3RydWN0IGJwZl9pbnNuICpkaXNhc21faW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcXG4gXFx0ICogZm9yIGVhY2ggaW5zdHJ1Y3Rpb24gKEZGIHN0YW5kcyBmb3IgaW5zdHJ1Y3Rpb24gYGNvZGVgIGJ5dGUpLlxcbiBcXHQgKiBSZW1vdmUgdGhlIHByZWZpeCBpbnBsYWNlLCBhbmQgYWxzbyBzaW1wbGlmeSBjYWxsIGluc3RydWN0aW9ucy5cXG4gXFx0ICogRS5nLjogXFxcIig4NSkgY2FsbCBmb28jMTBcXFwiIC1cXHUwMDNlIFxcXCJjYWxsIGZvb1xcXCIuXFxuLVxcdCAqIEFsc28gcmVtb3ZlIG5ld2xpbmUgaW4gdGhlIGVuZCAodGhlICdtYXgoc3RybGVuKGJ1ZikgLSAxLCAwKScgdGhpbmcpLlxcbiBcXHQgKi9cXG4gXFx0cGZ4X2VuZCA9IGJ1ZiArIDU7XFxuLVxcdHNmeF9zdGFydCA9IGJ1ZiArIG1heCgoaW50KXN0cmxlbihidWYpIC0gMSwgMCk7XFxuK1xcdHNmeF9zdGFydCA9IGJ1ZiArIChpbnQpc3RybGVuKGJ1Zik7XFxuIFxcdGlmIChzdHJuY21wKHBmeF9lbmQsIFxcXCJjYWxsIFxcXCIsIDUpID09IDAgXFx1MDAyNlxcdTAwMjYgKHRtcCA9IHN0cnJjaHIoYnVmLCAnIycpKSlcXG4gXFx0XFx0c2Z4X3N0YXJ0ID0gdG1wO1xcbiBcXHRsZW4gPSBzZnhfc3RhcnQgLSBwZnhfZW5kO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbmluZGV4IGJlOTdmNjg4N2YwZTcuLmZiYTU2MmM4MTk2OTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5AQCAtMTI0LDYgKzEyNCw3IEBAXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9qaXRfaW5saW5lLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlycS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInZlcmlmaWVyX3pleHQuc2tlbC5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQVhfRU5UUklFUyAxMVxcbiBcXG5AQCAtMjc3LDYgKzI3OCw3IEBAIHZvaWQgdGVzdF9pcnEodm9pZClcXHRcXHRcXHQgICAgICB7IFJVTihpcnEpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcXHRcXHQgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH1cXG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX3pleHQodm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKHZlcmlmaWVyX3pleHQpOyB9XFxuIFxcbiBzdGF0aWMgaW50IGluaXRfdGVzdF92YWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNoYXIgKm1hcF9uYW1lKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iNGM4MmEzMWU2NjgyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmNcXG5AQCAtMCwwICsxLDI2MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcXG4rX19mbGFnKEJQRl9GX1RFU1RfUk5EX0hJMzIpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX25ha2VkIHZvaWQgemV4dF9sb3N0X2Fjcm9zc19jaGVja3BvaW50KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2t0aW1lX2dldF9uc107XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSAweGRlYWRiZWVmY2FmZWJhYmUgbGw7XFx0LyogaW5qZWN0IHNvbWUgdmFsdWUgZm9yIHI2J3MgdXBwZXIgaGFsZiAqL1xcdFxcXFxcXG4rXFx0aWYgcjggIT0gMCBnb3RvIDFmO1xcdFxcdC8qIGZhbGwtdGhyb3VnaCBjYWNoZWQgZmlyc3QsIGJyYW5jaCBwcnVuZWQgKi9cXHRcXFxcXFxuK1xcdHI2ID0gMzI7XFx0XFx0XFx0LyogZnVsbCA2NC1iaXQgZGVmICovXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRnb3RvIDJmO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHc2ID0gMzI7XFx0XFx0XFx0LyogMzItYml0IGRlZiwgemV4dCBtYXJrIGxvc3QgKi9cXHRcXHRcXFxcXFxuKzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IHI2O1xcdFxcdFxcdC8qIGJ1Z2d5IHZlcmlmaWVyIGJlbGlldmVkIHVwcGVyIDMyIGJpdHMgYXJlIDAgKi8gXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQvKiBhbmQgdGh1cyBkaWQgbm90IHplcm8gZXh0ZW5kZWQgdzYgPSAzMi4gKi9cXHRcXFxcXFxuK1xcdHIwIFxcdTAwM2VcXHUwMDNlPSAzMjtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9rdGltZV9nZXRfbnMpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIDMyLWJpdCBBTFUgcmVzdWx0IHJlYWQgYXMgNjQtYml0IC1cXHUwMDNlIHpleHQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcIncxID0gdzB7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgemV4dF9hbHUzMl9oaV91c2VkKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IHcwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByMTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIDMyLWJpdCBBTFUgcmVzdWx0IHJlYWQgb25seSBhcyAzMi1iaXQgLVxcdTAwM2Ugbm8gemV4dCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX25vdF9tc2coXFxcIncxID0gdzB7ey4qfX07IHpleHRcXFwiKVxcbitfX25vdF9tc2coXFxcIncyID0gdzF7ey4qfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgbm9femV4dF9hbHUzMl9oaV91bnVzZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gdzA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MiA9IHcxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogNjQtYml0IGRlZmluaXRpb24gaXMgbmV2ZXIgemVybyBleHRlbmRlZCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX25vdF9tc2coXFxcInIxID0gcjB7ey4qfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgbm9femV4dF9tb3Y2NCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiBOYXJyb3cgbG9hZCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLVxcdTAwM2UgemV4dCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwicjEgPSAqKHUzMiAqKShyMTAgLTgpe3sgK319OyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfbmFycm93X2xvYWRfaGlfdXNlZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSByMDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gKih1MzIgKikocjEwIC0gOCk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IHIxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIDMyLWJpdCBhdG9taWMgZmV0Y2ggcmVzdWx0IHJlYWQgYXMgNjQtYml0IC1cXHUwMDNlIHpleHQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcInIxID0gYXRvbWljX2ZldGNoX2FkZCgodTMyICopKHIxMCAtOCksIHIxKXt7ICt9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCB6ZXh0X2F0b21pY19mZXRjaDMyX2hpX3VzZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQuOGJ5dGUgJVtmZXRjaF9hZGQzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IHIxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW1faW5zbihmZXRjaF9hZGQzMixcXG4rXFx0XFx0ICAgICBCUEZfQVRPTUlDX09QKEJQRl9XLCBCUEZfQUREIHwgQlBGX0ZFVENILCBCUEZfUkVHXzEwLCBCUEZfUkVHXzEsIC04KSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogMzItYml0IGF0b21pYyBjbXB4Y2hnIHJlc3VsdCAocjApIHJlYWQgYXMgNjQtYml0IC1cXHUwMDNlIHpleHQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcInIwID0gYXRvbWljX2NtcHhjaGcoKHUzMiAqKShyMTAgLTgpLCByMCwgcjEpe3sgK319OyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfY21weGNoZzMyX2hpX3VzZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQuOGJ5dGUgJVtjbXB4Y2hnMzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjI7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9pbnNuKGNtcHhjaGczMixcXG4rXFx0XFx0ICAgICBCUEZfQVRPTUlDX09QKEJQRl9XLCBCUEZfQ01QWENIRywgQlBGX1JFR18xMCwgQlBGX1JFR18xLCAtOCkpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIDMyLWJpdCBkZWYgYmVmb3JlIGEgYnJhbmNoLCB1cHBlciBoYWxmIHVzZWQgb24gb25lIGJyYW5jaCAtXFx1MDAzZSB6ZXh0ICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbXNnKFxcXCJ3NiA9IDMye3sgK319OyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfY2ZnX2hpX3VzZWRfb25lX2JyYW5jaCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcXFxcXG4rXFx0dzYgPSAzMjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHIwID09IDAgZ290byBsMF8lPTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjY7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rbDBfJT06XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiByMSdzIHVwcGVyIGhhbGYgaXMgZGVhZCwgc28gJ3cxID0gMScgbXVzdCBOT1QgYmUgbWFya2VkIGZvciB6ZXJvIGV4dGVuc2lvbi4gKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19ub3RfbXNnKFxcXCJ3MSA9IDF7ey4qfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgbm9femV4dF9vdGhlcl9yZWdfaGlfdXNlZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2IFxcdTAwM2NcXHUwMDNjPSAzMjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gMTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjY7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiBMRF9BQlMgZGVmaW5lcyByMDsgd2hlbiByMCBpcyByZWFkIGFzIDY0LWJpdCBpdCBtdXN0IGJlIHplcm8gZXh0ZW5kZWQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcInIwID0gKih1OCAqKXNrYlswXXt7Lip9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCB6ZXh0X2xkX2Fic19oaV91c2VkKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAqKHU4ICopc2tiWzBdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjcgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjc7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogSGVscGVyIHBhcmFtZXRlcnMgYXJlIHJlYWQgYXMgNjQtYml0IChjYWxsX3VzZV9tYXNrKCkgZmFsbGJhY2spICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbXNnKFxcXCJ3MiA9IDF7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgaGVscGVyX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgKz0gLTg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MiA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX3RyYWNlX3ByaW50a107XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfdHJhY2VfcHJpbnRrKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitzdGF0aWMgX191c2VkIF9fbmFrZWQgaW50IHN1YnByb2dfcmVhZHNfYXJnX2FzXzY0Yml0KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IHIxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIHN1YnByb2dyYW0gcGFyYW1ldGVycyBhcmUgY29uc2VydmF0aXZlbHkgcmVhZCBhcyA2NC1iaXQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcIncxID0gdzB7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgc3VicHJvZ19wYXJhbV9yZWFkX2FzXzY0Yml0KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IHcwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCBzdWJwcm9nX3JlYWRzX2FyZ19hc182NGJpdDtcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK2V4dGVybiBsb25nIGJwZl9rZnVuY19jYWxsX3Rlc3Q0KHNpZ25lZCBjaGFyIGEsIHNob3J0IGIsIGludCBjLCBsb25nIGQpIF9fa3N5bTtcXG4rXFxuKy8qIEZvcmNlIGtmdW5jIGV4dGVybiBCVEYgZ2VuZXJhdGlvbi4gKi9cXG4raW50IF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcXG4re1xcbitcXHRyZXR1cm4gYnBmX2tmdW5jX2NhbGxfdGVzdDQoMCwgMCwgMCwgMCk7XFxuK31cXG4rXFxuKy8qIGtmdW5jIHBhcmFtZXRlcnMgYXJlIHJlYWQgYWNjb3JkaW5nIHRvIHRoZWlyIEJURiB0eXBlIHdpZHRoICovXFxuK1NFQyhcXFwidGNcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19ub3RfbXNnKFxcXCJ3MyA9IDF7ey4qfX07IHpleHRcXFwiKVxcdFxcdC8qIGludCBjICAtXFx1MDAzZSByZWFkIGFzIDMyLWJpdCAqL1xcbitfX21zZyhcXFwidzQgPSAxe3sgK319OyB6ZXh0XFxcIilcXHRcXHQvKiBsb25nIGQgLVxcdTAwM2UgcmVhZCBhcyA2NC1iaXQgKi9cXG4rX19uYWtlZCB2b2lkIGtmdW5jX3BhcmFtX3JlYWRfcGVyX2J0Zih2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzEgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzIgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzMgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzQgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCBicGZfa2Z1bmNfY2FsbF90ZXN0NDtcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6Mzk6NDYuNjgzNDI4NTc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjI3MDM5NTUwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiLFxuICAgIFwiY29tcHV0ZV9pbnNuX2xpdmVfcmVnc1wiLFxuICAgIFwiY2FsbF91c2VfbWFza1wiLFxuICAgIFwiYnBmX2luc25fZGVmMzJcIixcbiAgICBcImJwZl9pc19yZWc2NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgemVyby1leHRlbnNpb24gdHJhY2tpbmcgbG9naWMuIEl0IHJlbW92ZXMgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCBpbnN0ZWFkIGNvbXB1dGVzIHplcm8gZXh0ZW5zaW9uIHJlcXVpcmVtZW50cyBkaXJlY3RseSBkdXJpbmcgbGl2ZW5lc3MgYW5hbHlzaXMgYnkgdHJhY2tpbmcgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgdXNlcyBzZXBhcmF0ZWx5LiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgYWZmZWN0cyBob3cgcmVnaXN0ZXIgc3RhdGVzIGFyZSB0cmFja2VkIGFuZCBvcHRpbWl6ZWQsIHdoaWNoIGlzIGEgY3JpdGljYWwgYXJlYSBmb3Igc2VjdXJpdHkgYW5kIGNvcnJlY3RuZXNzIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgxOThkYjFkNzE3MTgyMzg4OWUzZWViZjc1YmFlNTBkY2FkNzQxZGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA0OjM5OjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDY4MmMyY2QzYjg0NDMuLjMyMWViZDMwOGQzOGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTYyLDExICsxNjIsNiBAQCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG4gXHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cbiBcdCAqL1xuIFx0dTMyIGZyYW1lbm87XG4tXHQvKiBUcmFja3Mgc3VicmVnIGRlZmluaXRpb24uIFRoZSBzdG9yZWQgdmFsdWUgaXMgdGhlIGluc25faWR4IG9mIHRoZVxuLVx0ICogd3JpdGluZyBpbnNuLiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBzdWJyZWdfZGVmIGlzIHVzZWQgYmVmb3JlIGFueSBpbnNuXG4tXHQgKiBwYXRjaGluZyB3aGljaCBvbmx5IGhhcHBlbnMgYWZ0ZXIgbWFpbiB2ZXJpZmljYXRpb24gZmluaXNoZWQuXG4tXHQgKi9cbi1cdHMzMiBzdWJyZWdfZGVmO1xuIFx0LyogaWYgKCFwcmVjaXNlIFx1MDAyNlx1MDAyNiBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24ndCBhZmZlY3Qgc2FmZXR5ICovXG4gXHRib29sIHByZWNpc2U7XG4gfTtcbkBAIC0xMDUwLDYgKzEwNDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudlxuIH1cbiBcbiBzdHJ1Y3QgYnBmX2NhbGxfc3VtbWFyeSB7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmICpidGY7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG87XG4gXHR1OCBudW1fcGFyYW1zO1xuIFx0Ym9vbCBpc192b2lkO1xuIFx0Ym9vbCBmYXN0Y2FsbDtcbkBAIC0xNjMxLDcgKzE2MjgsNyBAQCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiIHtcbiB9O1xuIFxuIC8qIEZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIHZlcmlmaWVyLmMsIHVzZWQgYnkgZml4dXBzLmMgKi9cbi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sIHUzMiByZWdubywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpO1xuK2Jvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG4gdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pO1xuIHZvaWQgYnBmX21hcmtfc3VicHJvZ19leGNfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpO1xuIGJvb2wgYnBmX2FsbG93X3RhaWxfY2FsbF9pbl9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbkBAIC0xNjU1LDUgKzE2NTIsNiBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG4raW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9CUEZfVkVSSUZJRVJfSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmMgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG5pbmRleCAyZTRhZTBlZjA4NjA5Li43YzQ1OTllNjVlY2ViIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuKysrIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuQEAgLTI4NSw2ICsyODUsNyBAQCBzdGF0aWMgaW50IGJhY2t0cmFja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsIGludCBzdWJzZXFfaWR4LFxuIFx0XHR2ZXJib3NlKGVudiwgXCJzdGFjaz0lcyBiZWZvcmUgXCIsIGVudi1cdTAwM2V0bXBfc3RyX2J1Zik7XG4gXHRcdHZlcmJvc2UoZW52LCBcIiVkOiBcIiwgaWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuK1x0XHR2ZXJib3NlKGVudiwgXCJcXG5cIik7XG4gXHR9XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBhIGhpc3RvcnkgcmVjb3JkIHRoYXQgc29tZSByZWdpc3RlcnMgZ2FpbmVkIHJhbmdlIGF0IHRoaXMgaW5zbixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uY1xuaW5kZXggMDM5MWIzYmMwMDczNC4uNTBiM2NhNTE0OWEwYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmNcbisrKyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcbkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2VuZF9pbnNuKGJwZl9pbnNuX3ByaW50X3QgdmVyYm9zZSxcbiBcdFx0XHQgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4ge1xuLVx0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9ICVzJWQgciVkXFxuXCIsXG4rXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gJXMlZCByJWRcIixcbiBcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfVE9fQkUgPyBcImJlXCIgOiBcImxlXCIsXG4gXHRcdGluc24tXHUwMDNlaW1tLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMgdm9pZCBwcmludF9icGZfYnN3YXBfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsXG4gXHRcdFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbi1cdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFxcblwiLFxuK1x0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGJzd2FwJWQgciVkXCIsXG4gXHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbiB9XG5AQCAtMTk3LDE5ICsxOTcsMTkgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0cHJpbnRfYnBmX2VuZF9pbnNuKHZlcmJvc2UsIGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIGluc24pO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9ORUcpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICVjJWQgPSAtJWMlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJWMlZCA9IC0lYyVkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKGlzX2FkZHJfc3BhY2VfY2FzdChpbnNuKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KVxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsICgodTMyKWluc24tXHUwMDNlaW1tKSBcdTAwM2VcdTAwM2UgMTYsICh1MTYpaW5zbi1cdTAwM2VpbW0pO1xuIFx0XHR9IGVsc2UgaWYgKGlzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAlYyVkICVzICVzJWMlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0FMVSA/ICd3JyA6ICdyJyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGlzX3NkaXZfc21vZChpbnNuKSA/IGJwZl9hbHVfc2lnbl9zdHJpbmdbQlBGX09QKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDRdXG5AQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdFx0Y2xhc3MgPT0gQlBGX0FMVSA/ICd3JyA6ICdyJyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAlYyVkICVzICVkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAlYyVkICVzICVkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfU1RYKSB7XG4gXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0pXG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gciVkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gciVkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG5AQCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0IChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQUREIHx8IGluc24tXHUwMDNlaW1tID09IEJQRl9BTkQgfHxcbiBcdFx0XHQgIGluc24tXHUwMDNlaW1tID09IEJQRl9PUiB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWE9SKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlK2QpICVzIHIlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlK2QpICVzIHIlZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZixcbkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxuIFx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fFxuIFx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX1hPUiB8IEJQRl9GRVRDSCkpKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUrZCksIHIlZClcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX2ZldGNoXyVzKCglcyAqKShyJWQgJStkKSwgciVkKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwiNjRcIiA6IFwiXCIsXG4gXHRcdFx0XHRicGZfYXRvbWljX2FsdV9zdHJpbmdbQlBGX09QKGluc24tXHUwMDNlaW1tKSBcdTAwM2VcdTAwM2UgNF0sXG5AQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0NNUFhDSEcpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUrZCksIHIwLCByJWQpXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9IGF0b21pYyVzX2NtcHhjaGcoKCVzICopKHIlZCAlK2QpLCByMCwgciVkKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0QlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcgPyBcIjY0XCIgOiBcIlwiLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuQEAgLTI2Miw0NCArMjYyLDQ0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX1hDSEcpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlK2QpLCByJWQpXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBhdG9taWMlc194Y2hnKCglcyAqKShyJWQgJStkKSwgciVkKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwiNjRcIiA6IFwiXCIsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1EpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGxvYWRfYWNxdWlyZSgoJXMgKikociVkICUrZCkpXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlK2QpKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX1NUT1JFX1JFTCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUrZCksIHIlZClcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfJTAyeFxcblwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfJTAyeFwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gJWRcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICooJXMgKikociVkICUrZCkgPSAlZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgbm9zcGVjXFxuXCIsIGluc24tXHUwMDNlY29kZSk7XG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBub3NwZWNcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiQlVHX3N0XyUwMnhcXG5cIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiQlVHX3N0XyUwMnhcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTERYKSB7XG4gXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU0gXHUwMDI2XHUwMDI2IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX01FTVNYKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZHhfJTAyeFxcblwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfbGR4XyUwMnhcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlK2QpXFxuXCIsXG4rXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVwiLFxuIFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTSA/XG4gXHRcdFx0XHQgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdIDpcbkBAIC0zMDcsMTIgKzMwNywxMiBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XG4gXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BQlMpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9JTkQpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgKyAlZF1cXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgKyAlZF1cIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VpbW0pO1xuQEAgLTMzMiwxMiArMzMyLDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGlmIChpc19wdHIgXHUwMDI2XHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXG4gXHRcdFx0XHRpbW0gPSAwO1xuIFxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gJXNcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9ICVzXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdF9fZnVuY19pbW1fbmFtZShjYnMsIGluc24sIGltbSxcbiBcdFx0XHRcdFx0XHR0bXAsIHNpemVvZih0bXApKSk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZF8lMDJ4XFxuXCIsIGluc24tXHUwMDNlY29kZSk7XG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZF8lMDJ4XCIsIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9KTVAzMiB8fCBjbGFzcyA9PSBCUEZfSk1QKSB7XG5AQCAtMzQ3LDM1ICszNDcsMzUgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0Y2hhciB0bXBbNjRdO1xuIFxuIFx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKSB7XG4tXHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGNhbGwgcGMlc1xcblwiLFxuK1x0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBjYWxsIHBjJXNcIixcbiBcdFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0XHRfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLFxuIFx0XHRcdFx0XHRcdFx0dG1wLCBzaXplb2YodG1wKSkpO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRzdHJjcHkodG1wLCBcInVua25vd25cIik7XG4tXHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGNhbGwgJXMjJWRcXG5cIiwgaW5zbi1cdTAwM2Vjb2RlLFxuK1x0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBjYWxsICVzIyVkXCIsIGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdFx0X19mdW5jX2dldF9uYW1lKGNicywgaW5zbixcbiBcdFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpLFxuIFx0XHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gXHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQSkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGdvdG8gcGMlK2RcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGdvdG8gcGMlK2RcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQSB8IEJQRl9YKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZ290b3ggciVkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBnb3RveCByJWRcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkNPTkQpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfTUFZX0dPVE8pIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIG1heV9nb3RvIHBjJStkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBtYXlfZ290byBwYyUrZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QMzIgfCBCUEZfSkEpKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBnb3RvbCBwYyUrZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZ290b2wgcGMlK2RcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VpbW0pO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9FWElUKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZXhpdFxcblwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZXhpdFwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuIFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSxcbi1cdFx0XHRcdFwiKCUwMngpIGlmICVjJWQgJXMgJWMlZCBnb3RvIHBjJStkXFxuXCIsXG4rXHRcdFx0XHRcIiglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUrZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRicGZfam1wX3N0cmluZ1tCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgNF0sXG5AQCAtMzgzLDE0ICszODMsMTQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsXG4tXHRcdFx0XHRcIiglMDJ4KSBpZiAlYyVkICVzIDB4JXggZ290byBwYyUrZFxcblwiLFxuK1x0XHRcdFx0XCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0pNUDMyID8gJ3cnIDogJ3InLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0YnBmX2ptcF9zdHJpbmdbQlBGX09QKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDRdLFxuIFx0XHRcdFx0KHUzMilpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICVzXFxuXCIsXG4rXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJXNcIixcbiBcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGJwZl9jbGFzc19zdHJpbmdbY2xhc3NdKTtcbiBcdH1cbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbmluZGV4IGEwYmRkYWRhNzk2NGUuLjczYWI5NTU3M2Y2MDkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtNDQsMTUgKzQ0LDE4IEBAIHN0YXRpYyBpbnQgaW5zbl9kZWZfcmVnbm8oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0fVxuIH1cbiBcbi0vKiBSZXR1cm4gVFJVRSBpZiBJTlNOIGhhcyBkZWZpbmVkIGFueSAzMi1iaXQgdmFsdWUgZXhwbGljaXRseS4gKi9cbi1zdGF0aWMgYm9vbCBpbnNuX2hhc19kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4rLypcbisgKiBSZXR1cm4gdGhlIDMyLWJpdCBzdWJyZWdpc3RlciBkZWZpbmVkIGJ5IElOU04sIG9yIC0xIGlmIElOU04gZG9lcyBub3RcbisgKiBleHBsaWNpdGx5IGRlZmluZSBhIDMyLWJpdCB2YWx1ZS5cbisgKi9cbitpbnQgYnBmX2luc25fZGVmMzIoc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbiBcdGludCBkc3RfcmVnID0gaW5zbl9kZWZfcmVnbm8oaW5zbik7XG4gXG4tXHRpZiAoZHN0X3JlZyA9PSAtMSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKGRzdF9yZWcgXHUwMDNjIDAgfHwgYnBmX2lzX3JlZzY0KGluc24pKVxuK1x0XHRyZXR1cm4gLTE7XG4gXG4tXHRyZXR1cm4gIWJwZl9pc19yZWc2NChpbnNuLCBkc3RfcmVnLCBOVUxMLCBEU1RfT1ApO1xuK1x0cmV0dXJuIGRzdF9yZWc7XG4gfVxuIFxuIHN0YXRpYyBpbnQga2Z1bmNfZGVzY19jbXBfYnlfaW1tX29mZihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuQEAgLTE2OSw3ICsxNzIsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0ICogKGNudCA9PSAxKSBpcyB0YWtlbiBvciBub3QuIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSBJTlNOIGF0IE9GRiBpcyB0aGVcbiBcdCAqIG9yaWdpbmFsIGluc24gYXQgb2xkIHByb2cuXG4gXHQgKi9cbi1cdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gKyBvZmYgKyBjbnQgLSAxKTtcbitcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gKyBvZmYgKyBjbnQgLSAxKSBcdTAwM2U9IDA7XG4gXG4gXHRpZiAoY250ID09IDEpXG4gXHRcdHJldHVybjtcbkBAIC0xODEsNyArMTg0LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGZvciAoaSA9IG9mZjsgaSBcdTAwM2Mgb2ZmICsgY250IC0gMTsgaSsrKSB7XG4gXHRcdC8qIEV4cGFuZCBpbnNuaVtvZmZdJ3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi9cbiBcdFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XG4tXHRcdGRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICsgaSk7XG4rXHRcdGRhdGFbaV0uemV4dF9kc3QgPSBicGZfaW5zbl9kZWYzMihpbnNuICsgaSkgXHUwMDNlPSAwO1xuIFx0fVxuIFxuIFx0LypcbkBAIC02MjAsNyArNjIzLDcgQEAgaW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAqICAgICAgIEJQRl9TVFggKyBTUkNfT1AsIHNvIGl0IGlzIHNhZmUgdG8gcGFzcyBOVUxMXG4gXHRcdFx0ICogICAgICAgaGVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAoYnBmX2lzX3JlZzY0KFx1MDAyNmluc24sIGxvYWRfcmVnLCBOVUxMLCBEU1RfT1ApKSB7XG4rXHRcdFx0aWYgKGJwZl9pc19yZWc2NChcdTAwMjZpbnNuKSkge1xuIFx0XHRcdFx0aWYgKGNsYXNzID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKVxuIFx0XHRcdFx0XHRpKys7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9saXZlbmVzcy5jIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5pbmRleCAwYWFkZmJhZTBhY2M1Li5lYTAwMjU1MDY3MWE4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9saXZlbmVzcy5jXG4rKysgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbkBAIC00OTcsNyArNDk3LDYgQEAgc3RhdGljIHZvaWQgcHJpbnRfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmlcbiBcdFx0cG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCIlM2Q6IFwiLCBpbnNuX2lkeCk7XG4gXHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpbnNuX2lkeF0pO1xuLVx0XHRicGZfdmxvZ19yZXNldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTsgLyogcmVtb3ZlIFxcbiAqL1xuIFx0XHRpbnNuX3BvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbiBcdFx0dmVyYm9zZShlbnYsIFwiJSpjO1wiLCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAnICcpO1xuIFx0XHRwb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG5AQCAtMTA0Myw3ICsxMDQyLDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGlcbiBcdFx0aWYgKCFwcmludGVkKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiJTNkOiBcIiwgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwiXFx0ciVkOiBcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2YXRfaW5baV0pO1xuQEAgLTEwNTgsNyArMTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuLVx0XHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpO1xuIFx0XHRcdHByaW50ZWQgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHZlcmJvc2UoZW52LCBcIlxcdHNhJWQ6IFwiLCBpKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9pblthaV0pO1xuQEAgLTEwNzAsNyArMTA2Nyw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuLVx0XHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpO1xuIFx0XHRcdHByaW50ZWQgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHZlcmJvc2UoZW52LCBcIlxcdGZwJStkOiBcIiwgLShpICsgMSkgKiA4KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9zdGFja19pbltpXSk7XG5AQCAtMTU0NSw2ICsxNTQxLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpZHhdKTtcbitcdFx0dmVyYm9zZShlbnYsIFwiXFxuXCIpO1xuIFxuIFx0XHQvKiBDb2xsZWN0IHdoYXQgbmVlZHMgcHJpbnRpbmcgKi9cbiBcdFx0aWYgKGlzX2xkeF9zdHhfY2FsbCBcdTAwMjZcdTAwMjZcbkBAIC0yMDUwLDI5ICsyMDQ3LDY3IEBAIGludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiAvKiBFYWNoIGZpZWxkIGlzIGEgcmVnaXN0ZXIgYml0bWFzayAqL1xuIHN0cnVjdCBpbnNuX2xpdmVfcmVncyB7XG4tXHR1MTYgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbi1cdHUxNiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuLVx0dTE2IGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4tXHR1MTYgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4rXHR1MzIgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbitcdHUzMiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuK1x0dTMyIGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4rXHR1MzIgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4gfTtcbiBcbiAvKiBCaXRtYXNrIHdpdGggMXMgZm9yIGFsbCBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBBTExfQ0FMTEVSX1NBVkVEX1JFR1MgKCgxdSBcdTAwM2NcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1MpIC0gMSlcbiBcbitzdGF0aWMgaW5saW5lIHUzMiByZWczMl9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobik7IH1cbitzdGF0aWMgaW5saW5lIHUzMiByZWc2NF9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobikgfCBCSVQobiArIDE2KTsgfVxuK3N0YXRpYyBpbmxpbmUgdTMyIG1hc2tfd2lkZW4odTMyIG0pIHsgcmV0dXJuIG0gfCAobSBcdTAwM2NcdTAwM2MgMTYpOyB9XG4rc3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9XG4rc3RhdGljIGlubGluZSB1MTYgbWFza19oaSh1MzIgbSkgeyByZXR1cm4gKHUxNikobSBcdTAwM2VcdTAwM2UgMTYpOyB9XG4rXG4rLyogSW5mZXIgdXNlIG1hc2sgYmFzZWQgb24gbnVtYmVyIGFuZCBzaXplcyBvZiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4gKi9cbitzdGF0aWMgdTMyIGNhbGxfdXNlX21hc2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuK3tcbitcdHUzMiBpLCB1c2UsIHNpemUsIHJlZ19wYXJhbXNfbnVtO1xuK1x0c3RydWN0IGJwZl9jYWxsX3N1bW1hcnkgY3M7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICpwO1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xuK1xuK1x0aWYgKCFicGZfZ2V0X2NhbGxfc3VtbWFyeShlbnYsIGluc24sIFx1MDAyNmNzKSlcbitcdFx0LyogZS5nLiBhIGJwZi10by1icGYgY2FsbCwgYXNzdW1lIHRoYXQgY2FsbHMgdXNlIGZ1bGwgNjQtYml0IGZvciBlYWNoIHBhcmFtICovXG4rXHRcdHJldHVybiBtYXNrX3dpZGVuKEFMTF9DQUxMRVJfU0FWRURfUkVHUyBcdTAwMjYgfkJJVChCUEZfUkVHXzApKTtcbitcbitcdGlmIChjcy5mdW5jX3Byb3RvKSB7XG4rXHRcdHVzZSA9IDA7XG4rXHRcdHAgPSBidGZfcGFyYW1zKGNzLmZ1bmNfcHJvdG8pO1xuK1x0XHRyZWdfcGFyYW1zX251bSA9IG1pbihidGZfdHlwZV92bGVuKGNzLmZ1bmNfcHJvdG8pLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZWdfcGFyYW1zX251bTsgaSsrKSB7XG4rXHRcdFx0dCA9IGJ0Zl90eXBlX2J5X2lkKGNzLmJ0ZiwgcFtpXS50eXBlKTtcbitcdFx0XHRpZiAoSVNfRVJSKGJ0Zl9yZXNvbHZlX3NpemUoY3MuYnRmLCB0LCBcdTAwMjZzaXplKSkpXG4rXHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuK1x0XHRcdHVzZSB8PSBzaXplIFx1MDAzYz0gc2l6ZW9mKHUzMikgPyByZWczMl9tYXNrKGkgKyAxKSA6IHJlZzY0X21hc2soaSArIDEpO1xuK1x0XHR9XG4rXHRcdHJldHVybiB1c2U7XG4rXHR9XG4rXG4rZmFsbGJhY2s6XG4rXHQvKiBieSBkZWZhdWx0IGFzc3VtZSB0aGF0IGNhbGxzIHVzZSBmdWxsIDY0LWJpdCBmb3IgZWFjaCBwYXJhbSAqL1xuK1x0cmV0dXJuIG1hc2tfd2lkZW4oR0VOTUFTSyhtaW5fdCh1OCwgY3MubnVtX3BhcmFtcywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKSwgMSkpO1xuK31cbitcbiAvKiBDb21wdXRlIGluZm8tXHUwMDNle3VzZSxkZWZ9IGZpZWxkcyBmb3IgdGhlIGluc3RydWN0aW9uICovXG4gc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgc3RydWN0IGluc25fbGl2ZV9yZWdzICppbmZvKVxuIHtcbi1cdHN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzO1xuLVx0dTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpO1xuLVx0dTE2IHNyYyA9IEJJVChpbnNuLVx1MDAzZXNyY19yZWcpO1xuLVx0dTE2IGRzdCA9IEJJVChpbnNuLVx1MDAzZWRzdF9yZWcpO1xuLVx0dTE2IHIwICA9IEJJVCgwKTtcbi1cdHUxNiBkZWYgPSAwO1xuLVx0dTE2IHVzZSA9IDB4ZmZmZjtcbitcdGNvbnN0IHU4IGNsYXNzID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSk7XG4rXHRjb25zdCB1OCBjb2RlID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4rXHRjb25zdCB1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKTtcbitcdGNvbnN0IHU4IHNpemUgPSBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpO1xuK1x0Y29uc3QgdTMyIHNyYyA9IHJlZzY0X21hc2soaW5zbi1cdTAwM2VzcmNfcmVnKTtcbitcdGNvbnN0IHUzMiBkc3QgPSByZWc2NF9tYXNrKGluc24tXHUwMDNlZHN0X3JlZyk7XG4rXHRjb25zdCB1MzIgc3JjMzIgPSBtYXNrX2xvKHNyYyk7XG4rXHRjb25zdCB1MzIgZHN0MzIgPSBtYXNrX2xvKGRzdCk7XG4rXHRjb25zdCB1MzIgcjAgID0gcmVnNjRfbWFzaygwKTtcbitcdHUzMiBkZWYgPSAwO1xuK1x0dTMyIHVzZSA9IFUzMl9NQVg7XG4gXG4gXHRzd2l0Y2ggKGNsYXNzKSB7XG4gXHRjYXNlIEJQRl9MRDpcbkBAIC0yMDgzLDggKzIxMTgsOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHR1c2UgPSAwO1xuIFx0XHRcdH1cbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfTEQgfCBCUEZfQUJTOlxuLVx0XHRjYXNlIEJQRl9MRCB8IEJQRl9JTkQ6XG4rXHRcdGNhc2UgQlBGX0FCUzpcbitcdFx0Y2FzZSBCUEZfSU5EOlxuIFx0XHRcdC8qIHN0aWNrIHdpdGggZGVmYXVsdHMgKi9cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTIwOTIsNyArMjEyNywxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRjYXNlIEJQRl9MRFg6XG4gXHRcdHN3aXRjaCAobW9kZSkge1xuIFx0XHRjYXNlIEJQRl9NRU06XG4rXHRcdFx0LyogYSBuYXJyb3cgbG9hZCBzdGlsbCByZWRlZmluZXMgdGhlIHdob2xlIHJlZ2lzdGVyICovXG4rXHRcdFx0ZGVmID0gZHN0O1xuK1x0XHRcdHVzZSA9IHNyYztcbitcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBCUEZfTUVNU1g6XG4rXHRcdFx0LypcbitcdFx0XHQgKiBzaWduIGV4dGVuc2lvbiBkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlcjtcbitcdFx0XHQgKiBzcmMgaG9sZHMgYSBwb2ludGVyLCBoZW5jZSBpcyB1c2VkIGFzIDY0LWJpdC5cbitcdFx0XHQgKi9cbiBcdFx0XHRkZWYgPSBkc3Q7XG4gXHRcdFx0dXNlID0gc3JjO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTIxMTAsMTIgKzIxNTMsMTkgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBCUEZfTUVNOlxuIFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuK1x0XHRcdHVzZSA9IGRzdCB8IChzaXplID09IEJQRl9EVyA/IHNyYyA6IHNyYzMyKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfQVRPTUlDOlxuK1x0XHRjYXNlIEJQRl9BVE9NSUM6IHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGRzdCBob2xkcyBhIHBvaW50ZXIgYW5kIGlzIGFsd2F5cyB1c2VkIGFzIDY0LWJpdDtcbitcdFx0XHQgKiB0aGUgdmFsdWUgb3BlcmFuZCBhbmQgcjAgYXJlIHJlYWQgYXMgMzItYml0IGZvciBCUEZfVyBhdG9taWNzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHUzMiBzcmN2ID0gc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMjtcbitcdFx0XHR1MzIgcjB2ICA9IHNpemUgPT0gQlBGX0RXID8gcjAgOiBtYXNrX2xvKHIwKTtcbitcbiBcdFx0XHRzd2l0Y2ggKGluc24tXHUwMDNlaW1tKSB7XG4gXHRcdFx0Y2FzZSBCUEZfQ01QWENIRzpcbi1cdFx0XHRcdHVzZSA9IHIwIHwgZHN0IHwgc3JjO1xuK1x0XHRcdFx0dXNlID0gcjB2IHwgZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGRlZiA9IHIwO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XG5AQCAtMjEyNCwxMCArMjE3NCwxMCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4gXHRcdFx0XHRkZWYgPSAwO1xuLVx0XHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuK1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGRlZmF1bHQ6XG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4rXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmN2O1xuIFx0XHRcdFx0aWYgKGluc24tXHUwMDNlaW1tIFx1MDAyNiBCUEZfRkVUQ0gpXG4gXHRcdFx0XHRcdGRlZiA9IHNyYztcbiBcdFx0XHRcdGVsc2VcbkBAIC0yMTM1LDYgKzIxODUsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4rXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9BTFU6XG4gXHRjYXNlIEJQRl9BTFU2NDpcbkBAIC0yMTQ4LDE0ICsyMTk5LDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9LKVxuIFx0XHRcdFx0dXNlID0gMDtcbiBcdFx0XHRlbHNlXG4tXHRcdFx0XHR1c2UgPSBzcmM7XG4rXHRcdFx0XHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyBzcmMgOiBzcmMzMjtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRkZWYgPSBkc3Q7XG4gXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbi1cdFx0XHRcdHVzZSA9IGRzdDtcbitcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IGRzdCA6IGRzdDMyO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdHVzZSA9IGRzdCB8IHNyYztcbitcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IChkc3QgfCBzcmMpIDogKGRzdDMyIHwgc3JjMzIpO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfSk1QOlxuQEAgLTIxNzcsMTcgKzIyMjgsMTUgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHVzZSA9IHIwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEJQRl9DQUxMOlxuLVx0XHRcdGRlZiA9IEFMTF9DQUxMRVJfU0FWRURfUkVHUztcbi1cdFx0XHR1c2UgPSBkZWYgXHUwMDI2IH5CSVQoQlBGX1JFR18wKTtcbi1cdFx0XHRpZiAoYnBmX2dldF9jYWxsX3N1bW1hcnkoZW52LCBpbnNuLCBcdTAwMjZjcykpXG4tXHRcdFx0XHR1c2UgPSBHRU5NQVNLKG1pbl90KHU4LCBjcy5udW1fcGFyYW1zLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpLCAxKTtcbitcdFx0XHRkZWYgPSBtYXNrX3dpZGVuKEFMTF9DQUxMRVJfU0FWRURfUkVHUyk7XG4rXHRcdFx0dXNlID0gY2FsbF91c2VfbWFzayhlbnYsIGluc24pO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGRlZiA9IDA7XG4gXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbiBcdFx0XHRcdHVzZSA9IGRzdDtcbiBcdFx0XHRlbHNlXG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4rXHRcdFx0XHR1c2UgPSBkc3QgfCAoY29kZSA9PSBCUEZfSk1QMzIgPyBzcmMgOiBzcmMzMik7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjIwOSw2ICsyMjU4LDcgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuIFx0c3RydWN0IGluc25fbGl2ZV9yZWdzICpzdGF0ZTtcbiBcdGludCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbitcdHU2NCBwb3MsIGluc25fcG9zO1xuIFx0aW50IGVyciA9IDAsIGksIGo7XG4gXHRib29sIGNoYW5nZWQ7XG4gXG5AQCAtMjI1Miw4ICsyMzAyLDggQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW50IGluc25faWR4ID0gZW52LVx1MDAzZWNmZy5pbnNuX3Bvc3RvcmRlcltpXTtcbiBcdFx0XHRzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKmxpdmUgPSBcdTAwMjZzdGF0ZVtpbnNuX2lkeF07XG4gXHRcdFx0c3RydWN0IGJwZl9pYXJyYXkgKnN1Y2M7XG4tXHRcdFx0dTE2IG5ld19vdXQgPSAwO1xuLVx0XHRcdHUxNiBuZXdfaW4gPSAwO1xuK1x0XHRcdHUzMiBuZXdfb3V0ID0gMDtcbitcdFx0XHR1MzIgbmV3X2luID0gMDtcbiBcbiBcdFx0XHRzdWNjID0gYnBmX2luc25fc3VjY2Vzc29ycyhlbnYsIGluc25faWR4KTtcbiBcdFx0XHRmb3IgKGludCBzID0gMDsgcyBcdTAwM2Mgc3VjYy1cdTAwM2VjbnQ7ICsrcylcbkBAIC0yMjY3LDggKzIzMTcsMjAgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyArK2kpXG4tXHRcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBzdGF0ZVtpXS5pbjtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyArK2kpIHtcbitcdFx0aW50IGRlZjMyID0gYnBmX2luc25fZGVmMzIoXHUwMDI2aW5zbnNbaV0pO1xuK1x0XHR1MzIgb3V0ID0gc3RhdGVbaV0ub3V0O1xuK1x0XHR1MzIgaW4gPSBzdGF0ZVtpXS5pbjtcbitcbitcdFx0aW5zbl9hdXhbaV0ubGl2ZV9yZWdzX2JlZm9yZSA9IG1hc2tfbG8oaW4pIHwgbWFza19oaShpbik7XG4rXHRcdC8qXG4rXHRcdCAqIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG8gbm90IHJlc2V0IHVwcGVyIGhhbHZlc1xuK1x0XHQgKiBvZiB0aGUgcmVnaXN0ZXJzLCB0aGUgdmVyaWZpZXIgbmVlZHMgdG8gemVybyBleHRlbmQgYSBkZXN0aW5hdGlvblxuK1x0XHQgKiByZWdpc3RlciBpZiBhbiBpbnN0cnVjdGlvbiBkZWZpbmVzIGEgMzItYml0IHN1YnJlZ2lzdGVyIGFuZCB0aGVcbitcdFx0ICogdXBwZXIgaGFsZiBvZiB0aGF0IHJlZ2lzdGVyIGlzIGFsaXZlIGFmdGVyIHRoZSBpbnN0cnVjdGlvbi5cbitcdFx0ICovXG4rXHRcdGluc25fYXV4W2ldLnpleHRfZHN0ID0gZGVmMzIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiAobWFza19oaShvdXQpIFx1MDAyNiBCSVQoZGVmMzIpKTtcbitcdH1cbiBcbiBcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xuIFx0XHR2ZXJib3NlKGVudiwgXCJMaXZlIHJlZ3MgYmVmb3JlIGluc246XFxuXCIpO1xuQEAgLTIyODQsNyArMjM0NiwxMiBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdGVsc2VcbiBcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiLlwiKTtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCIgXCIpO1xuK1x0XHRcdHBvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXHUwMDI2aW5zbnNbaV0pO1xuK1x0XHRcdGluc25fcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuK1x0XHRcdGlmIChpbnNuX2F1eFtpXS56ZXh0X2RzdClcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiUqYzsgemV4dFwiLCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAnICcpO1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcIlxcblwiKTtcbiBcdFx0XHRpZiAoYnBmX2lzX2xkaW1tNjQoXHUwMDI2aW5zbnNbaV0pKVxuIFx0XHRcdFx0aSsrO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlNmYzNWY0ZTcxNWI2Li5kNWI2ZmVmMWFkODk3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yMTI5LDEyICsyMTI5LDkgQEAgc3RhdGljIGludCByZWdfYm91bmRzX3Nhbml0eV9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovXG4gdm9pZCBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Uoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiB7XG4tXHRzMzIgc3VicmVnX2RlZiA9IHJlZy1cdTAwM2VzdWJyZWdfZGVmO1xuLVxuIFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcbiBcdHJlZy1cdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xuIFx0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XG4tXHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7XG4gXHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xuIH1cbiBcbkBAIC0yMjEwLDcgKzIyMDcsNiBAQCBzdGF0aWMgaW50IG1hcmtfYnRmX2xkX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0fVxuIH1cbiBcbi0jZGVmaW5lIERFRl9OT1RfU1VCUkVHXHQoMClcbiBzdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpXG4ge1xuQEAgLTIyMTksNyArMjIxNSw2IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfQlBGX1JFRzsgaSsrKSB7XG4gXHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbaV0pO1xuLVx0XHRyZWdzW2ldLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdH1cbiBcbiBcdC8qIGZyYW1lIHBvaW50ZXIgKi9cbkBAIC0zMDMzLDExICszMDI4LDEwIEBAIHN0YXRpYyB2b2lkIG1hcmtfc3RhY2tfc2xvdHNfc2NyYXRjaGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gfVxuIFxuIC8qIFRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBieSB0aGUgZm9sbG93aW5nIDMyLWJpdCBvcHRpbWl6YXRpb25cbi0gKiBjb2RlIG9ubHkuIEl0IHJldHVybnMgVFJVRSBpZiB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzXG4tICogb24gNjQtYml0LCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLlxuKyAqIGNvZGUgb25seS4gSXQgcmV0dXJucyBUUlVFIGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlcyBvbiA2NC1iaXQsXG4rICogb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cbiAgKi9cbi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tXHQgICAgICB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuK2Jvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4gXHR1OCBjb2RlLCBjbGFzcywgb3A7XG4gXG5AQCAtMzA1OCwxMSArMzA1Miw2IEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcbiBcdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHQvKiBIZWxwZXIgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBhcmcgdHlwZVxuLVx0XHRcdCAqIGNoZWNrLCBjb25zZXJ2YXRpdmVseSByZXR1cm4gVFJVRS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAodCA9PSBTUkNfT1ApXG4tXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbkBAIC0zMDc4LDIyICszMDY3LDExIEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdGlmIChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9KTVAzMilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGNsYXNzID09IEJQRl9MRFgpIHtcbi1cdFx0aWYgKHQgIT0gU1JDX09QKVxuLVx0XHRcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFcgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX01FTVNYO1xuLVx0XHQvKiBMRFggc291cmNlIG11c3QgYmUgcHRyLiAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdH1cbitcdGlmIChjbGFzcyA9PSBCUEZfTERYKVxuK1x0XHRyZXR1cm4gQlBGX1NJWkUoY29kZSkgPT0gQlBGX0RXIHx8IEJQRl9NT0RFKGNvZGUpID09IEJQRl9NRU1TWDtcbiBcbi1cdGlmIChjbGFzcyA9PSBCUEZfU1RYKSB7XG4tXHRcdC8qIEJQRl9TVFggKGluY2x1ZGluZyBhdG9taWMgdmFyaWFudHMpIGhhcyBvbmUgb3IgbW9yZSBzb3VyY2Vcbi1cdFx0ICogb3BlcmFuZHMsIG9uZSBvZiB3aGljaCBpcyBhIHB0ci4gQ2hlY2sgd2hldGhlciB0aGUgY2FsbGVyIGlzXG4tXHRcdCAqIGFza2luZyBhYm91dCBpdC5cbi1cdFx0ICovXG4tXHRcdGlmICh0ID09IFNSQ19PUCBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKGNsYXNzID09IEJQRl9TVFgpXG4gXHRcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFc7XG4tXHR9XG4gXG4gXHRpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XG4gXHRcdHU4IG1vZGUgPSBCUEZfTU9ERShjb2RlKTtcbkBAIC0zMTAzLDE1ICszMDgxLDcgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0XHQvKiBCb3RoIExEX0lORCBhbmQgTERfQUJTIHJldHVybiAzMi1iaXQgZGF0YS4gKi9cbi1cdFx0aWYgKHQgIT0gU1JDX09QKVxuLVx0XHRcdHJldHVybiAgZmFsc2U7XG4tXG4tXHRcdC8qIEltcGxpY2l0IGN0eCBwdHIuICovXG4tXHRcdGlmIChyZWdubyA9PSBCUEZfUkVHXzYpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdC8qIEV4cGxpY2l0IHNvdXJjZSBjb3VsZCBiZSBhbnkgd2lkdGguICovXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRpZiAoY2xhc3MgPT0gQlBGX1NUKVxuQEAgLTMxMjIsMzAgKzMwOTIsMTQgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi17XG4tXHRzMzIgZGVmX2lkeCA9IHJlZy1cdTAwM2VzdWJyZWdfZGVmO1xuLVxuLVx0aWYgKGRlZl9pZHggPT0gREVGX05PVF9TVUJSRUcpXG4tXHRcdHJldHVybjtcbi1cbi1cdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2RlZl9pZHggLSAxXS56ZXh0X2RzdCA9IHRydWU7XG4tXHQvKiBUaGUgZHN0IHdpbGwgYmUgemVybyBleHRlbmRlZCwgc28gd29uJ3QgYmUgc3ViLXJlZ2lzdGVyIGFueW1vcmUuICovXG4tXHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuLX1cbi1cbiBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLFxuIFx0XHRcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuIHtcbi1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaSArIGVudi1cdTAwM2VpbnNuX2lkeDtcbiBcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4tXHRib29sIHJ3NjQ7XG4gXG4gXHRtYXJrX3JlZ19zY3JhdGNoZWQoZW52LCByZWdubyk7XG4gXG4gXHRyZWcgPSBcdTAwMjZyZWdzW3JlZ25vXTtcbi1cdHJ3NjQgPSBicGZfaXNfcmVnNjQoaW5zbiwgcmVnbm8sIHJlZywgdCk7XG4gXHRpZiAodCA9PSBTUkNfT1ApIHtcbiBcdFx0LyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIHNvdXJjZSBvcGVyYW5kIGNhbiBiZSByZWFkICovXG4gXHRcdGlmIChyZWctXHUwMDNldHlwZSA9PSBOT1RfSU5JVCkge1xuQEAgLTMxNTYsOSArMzExMCw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXG4gXHRcdGlmIChyZWdubyA9PSBCUEZfUkVHX0ZQKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuLVx0XHRpZiAocnc2NClcbi1cdFx0XHRtYXJrX2luc25femV4dChlbnYsIHJlZyk7XG4tXG4gXHRcdHJldHVybiAwO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIGRlc3Qgb3BlcmFuZCBjYW4gYmUgd3JpdHRlbiB0byAqL1xuQEAgLTMxNjYsNyArMzExNyw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiZnJhbWUgcG9pbnRlciBpcyByZWFkIG9ubHlcXG5cIik7XG4gXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdH1cbi1cdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBydzY0ID8gREVGX05PVF9TVUJSRUcgOiBlbnYtXHUwMDNlaW5zbl9pZHggKyAxO1xuIFx0XHRpZiAodCA9PSBEU1RfT1ApXG4gXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJlZ25vKTtcbiBcdH1cbkBAIC0zODIyLDExICszNzcyLDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFxuIFx0XHRcdGlmIChzaXplIFx1MDAzYz0gc3BpbGxfc2l6ZSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgYnBmX3N0YWNrX25hcnJvd19hY2Nlc3Nfb2sob2ZmLCBzaXplLCBzcGlsbF9zaXplKSkge1xuLVx0XHRcdFx0LyogVGhlIGVhcmxpZXIgY2hlY2tfcmVnX2FyZygpIGhhcyBkZWNpZGVkIHRoZVxuLVx0XHRcdFx0ICogc3VicmVnX2RlZiBmb3IgdGhpcyBpbnNuLiAgU2F2ZSBpdCBmaXJzdC5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0czMyIHN1YnJlZ19kZWYgPSBzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10uc3VicmVnX2RlZjtcbi1cbiBcdFx0XHRcdGlmIChlbnYtXHUwMDNlYnBmX2NhcGFibGUgXHUwMDI2XHUwMDI2IHNpemUgPT0gNCBcdTAwMjZcdTAwMjYgc3BpbGxfc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIGdldF9yZWdfd2lkdGgocmVnKSBcdTAwM2M9IDMyKVxuIFx0XHRcdFx0XHQvKiBFbnN1cmUgc3RhY2sgc2xvdCBoYXMgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvblxuQEAgLTM4MzQsNyArMzc3OSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdFx0ICovXG4gXHRcdFx0XHRcdGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHJlZyk7XG4gXHRcdFx0XHRzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10gPSAqcmVnO1xuLVx0XHRcdFx0c3RhdGUtXHUwMDNlcmVnc1tkc3RfcmVnbm9dLnN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmO1xuIFxuIFx0XHRcdFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIGZpbGwuXG4gXHRcdFx0XHQgKiBjb2VyY2VfcmVnX3RvX3NpemUgd2lsbCBhZGp1c3QgdGhlIGJvdW5kYXJpZXMuXG5AQCAtNjI3MSwxMiArNjIxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLFxuIFx0XHRcdFx0XHRcdCAgICB2YWx1ZV9yZWdubyk7XG4tXHRcdFx0XHQvKiBBIGxvYWQgb2YgY3R4IGZpZWxkIGNvdWxkIGhhdmUgZGlmZmVyZW50XG4tXHRcdFx0XHQgKiBhY3R1YWwgbG9hZCBzaXplIHdpdGggdGhlIG9uZSBlbmNvZGVkIGluIHRoZVxuLVx0XHRcdFx0ICogaW5zbi4gV2hlbiB0aGUgZHN0IGlzIFBUUiwgaXQgaXMgZm9yIHN1cmUgbm90XG4tXHRcdFx0XHQgKiBhIHN1Yi1yZWdpc3Rlci5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0aWYgKGJhc2VfdHlwZShpbmZvLnJlZ190eXBlKSA9PSBQVFJfVE9fQlRGX0lEKSB7XG4gXHRcdFx0XHRcdHJlZ3NbdmFsdWVfcmVnbm9dLmJ0ZiA9IGluZm8uYnRmO1xuIFx0XHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5idGZfaWQgPSBpbmZvLmJ0Zl9pZDtcbkBAIC03MzgwLDEwICs3MzE4LDYgQEAgc3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRcbiBcdFx0XHRpZiAoc3BpIFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHNwaTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xuLVx0XHRcdCAqIGluIGNoZWNrX2hlbHBlcl9jYWxsIGFuZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplIGluIGNoZWNrX2tmdW5jX2NhbGwuXG4tXHRcdFx0ICovXG4gXHRcdFx0bWFya19zdGFja19zbG90c19zY3JhdGNoZWQoZW52LCBzcGksIEJQRl9EWU5QVFJfTlJfU0xPVFMpO1xuIFxuIFx0XHRcdHJlZyA9IFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG5AQCAtOTQ2Myw3ICs5Mzk3LDYgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQvKiBBbGwgbm9uLXZvaWQgZ2xvYmFsIGZ1bmN0aW9ucyByZXR1cm4gYSA2NC1iaXQgU0NBTEFSX1ZBTFVFLiAqL1xuIFx0XHRpZiAoIXN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZykpIHtcbiBcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIEJQRl9SRUdfMCk7XG4tXHRcdFx0Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHtcbkBAIC0xMDQ4Miw5ICsxMDQxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXHR9XG4gXHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjdXJfZnVuYyhlbnYpKTtcbiBcbi1cdC8qIGhlbHBlciBjYWxsIHJldHVybnMgNjQtYml0IHZhbHVlLiAqL1xuLVx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbi1cbiBcdC8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovXG4gXHRyZXRfdHlwZSA9IGZuLVx1MDAzZXJldF90eXBlO1xuIFx0cmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpO1xuQEAgLTEwNzIyLDMwICsxMDY1Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLyogbWFya19idGZfZnVuY19yZWdfc2l6ZSgpIGlzIHVzZWQgd2hlbiB0aGUgcmVnIHNpemUgaXMgZGV0ZXJtaW5lZCBieVxuLSAqIHRoZSBCVEYgZnVuY19wcm90bydzIHJldHVybiB2YWx1ZSBzaXplIGFuZCBhcmd1bWVudC5cbi0gKi9cbi1zdGF0aWMgdm9pZCBfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXG4tXHRcdFx0XHQgICAgIHUzMiByZWdubywgc2l6ZV90IHJlZ19zaXplKVxuLXtcbi1cdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSBcdTAwMjZyZWdzW3JlZ25vXTtcbi1cbi1cdGlmIChyZWdubyA9PSBCUEZfUkVHXzApIHtcbi1cdFx0LyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlICovXG4tXHRcdHJlZy1cdTAwM2VzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgP1xuLVx0XHRcdERFRl9OT1RfU1VCUkVHIDogZW52LVx1MDAzZWluc25faWR4ICsgMTtcbi1cdH0gZWxzZSBpZiAocmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkpIHtcbi1cdFx0LyogRnVuY3Rpb24gYXJndW1lbnQgKi9cbi1cdFx0bWFya19pbnNuX3pleHQoZW52LCByZWcpO1xuLVx0fVxuLX1cbi1cbi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcbi1cdFx0XHRcdCAgIHNpemVfdCByZWdfc2l6ZSlcbi17XG4tXHRyZXR1cm4gX19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgY3VyX3JlZ3MoZW52KSwgcmVnbm8sIHJlZ19zaXplKTtcbi19XG4tXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYWNxdWlyZShzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4ge1xuIFx0cmV0dXJuIG1ldGEtXHUwMDNla2Z1bmNfZmxhZ3MgXHUwMDI2IEtGX0FDUVVJUkU7XG5AQCAtMTI5NzQsNyArMTI4ODAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0c3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhIG1ldGE7XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4O1xuIFx0aW50IGVyciwgaW5zbl9pZHggPSAqaW5zbl9pZHhfcDtcbi1cdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3M7XG4gXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xuIFx0c3RydWN0IGJ0ZiAqZGVzY19idGY7XG4gXHRpbnQgaWQ7XG5AQCAtMTMwMTgsNyArMTI5MjMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdHZlcmJvc2UoZW52LCBcImZhaWxlZCB0byBtYXJrIHMzMiByYW5nZSBmb3IgcmV0dmFsIGluIGZvcmtlZCBzdGF0ZSBmb3IgbG9ja1xcblwiKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4tXHRcdF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ3MsIEJQRl9SRUdfMCwgc2l6ZW9mKHUzMikpO1xuIFx0fSBlbHNlIGlmICghaW5zbi1cdTAwM2VvZmYgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9fX2JwZl90cmFwXSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCJ1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXG5cIik7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTEzMTY4LDcgKzEzMDcyLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0dTMyIHJlZ25vID0gY2FsbGVyX3NhdmVkW2ldO1xuIFxuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW3JlZ25vXSk7XG4tXHRcdHJlZ3NbcmVnbm9dLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdH1cbiBcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpO1xuIFxuQEAgLTEzMTkwLDcgKzEzMDkzLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFx1MDAyNlx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbiBcdFx0ICAgIG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKVxuIFx0XHRcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XG4tXHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHQtXHUwMDNlc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuIFx0XHRwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnB0cl90eXBlX2lkKTtcbiBcdFx0ZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsIFx1MDAyNm1ldGEsIHJlZ3MsIGluc25fYXV4LCBwdHJfdHlwZSwgZGVzY19idGYpO1xuQEAgLTEzMjgxLDcgKzEzMTgzLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHQvKiBGb3IgbWFya19wdHJfb3JfbnVsbF9yZWcsIHNlZSA5M2MyMzBlM2Y1YmQ2ICovXG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFx0XHR9XG4tXHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHNpemVvZih2b2lkICopKTtcbiBcdFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXHUwMDI2bWV0YSkpIHtcbiBcdFx0XHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xuIFx0XHRcdGlmIChpZCBcdTAwM2MgMClcbkBAIC0xMzMxOCwxOCArMTMyMTksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdGNhbGxlcl9pbmZvLVx1MDAzZXN0YWNrX2FyZ19jbnQgPSBzdGFja19hcmdfY250O1xuIFx0fVxuIFxuLVx0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEuZnVuY19wcm90byArIDEpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBuYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XG4tXHRcdHUzMiByZWdubyA9IGkgKyAxO1xuLVxuLVx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGFyZ3NbaV0udHlwZSwgTlVMTCk7XG4tXHRcdGlmIChidGZfdHlwZV9pc19wdHIodCkpXG4tXHRcdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCBzaXplb2Yodm9pZCAqKSk7XG4tXHRcdGVsc2Vcbi1cdFx0XHQvKiBzY2FsYXIuIGVuc3VyZWQgYnkgY2hlY2tfa2Z1bmNfYXJncygpICovXG4tXHRcdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCB0LVx1MDAzZXNpemUpO1xuLVx0fVxuLVxuIFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkpIHtcbiBcdFx0ZXJyID0gcHJvY2Vzc19pdGVyX25leHRfY2FsbChlbnYsIGluc25faWR4LCBcdTAwMjZtZXRhKTtcbiBcdFx0aWYgKGVycilcbkBAIC0xNDgyMyw4ICsxNDcxMiw2IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0aWYgKGRzdF9yZWctXHUwMDNldHlwZSAhPSBQVFJfVE9fQVJFTkEpXG4gXHRcdFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcbiBcbi1cdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICsgMTtcbi1cbiBcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NClcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LlxuQEAgLTE1MDI4LDggKzE0OTE1LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbiBcdFx0XHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IDEpIHsgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXG4gXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2V0eXBlID0gUFRSX1RPX0FSRU5BO1xuLVx0XHRcdFx0XHRcdC8qIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi9cbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggKyAxO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlb2ZmID09IDApIHtcbiBcdFx0XHRcdFx0LyogY2FzZTogUjEgPSBSMlxuQEAgLTE1MDM3LDcgKzE0OTIyLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4gXHRcdFx0XHRcdCpkc3RfcmVnID0gKnNyY19yZWc7XG4tXHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0LyogY2FzZTogUjEgPSAoczgsIHMxNiBzMzIpUjIgKi9cbiBcdFx0XHRcdFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpKSB7XG5AQCAtMTUwNTUsNyArMTQ5MzksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRcdFx0XHRcdFx0aWYgKCFub19zZXh0KVxuIFx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xuIFx0XHRcdFx0XHRcdGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiBcdTAwM2VcdTAwM2UgMyk7XG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHRcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRcdFx0XHRcdH1cbkBAIC0xNTA4MCw3ICsxNDk2Myw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0XHRpZiAoIWlzX3NyY19yZWdfdTMyKVxuIFx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xuLVx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cdTAwM2VpbnNuX2lkeCArIDE7XG4gXHRcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdFx0LyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqL1xuIFx0XHRcdFx0XHRcdGJvb2wgbm9fc2V4dCA9IHJlZ191bWF4KHNyY19yZWcpIFx1MDAzYyAoMVVMTCBcdTAwM2NcdTAwM2MgKGluc24tXHUwMDNlb2ZmIC0gMSkpO1xuQEAgLTE1MDkwLDcgKzE0OTcyLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdCpkc3RfcmVnID0gKnNyY19yZWc7XG4gXHRcdFx0XHRcdFx0aWYgKCFub19zZXh0KVxuIFx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xuLVx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cdTAwM2VpbnNuX2lkeCArIDE7XG4gXHRcdFx0XHRcdFx0Y29lcmNlX3N1YnJlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXHUwMDNlb2ZmIFx1MDAzZVx1MDAzZSAzKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fSBlbHNlIHtcbkBAIC0xNTk1OSwxMiArMTU4NDAsOCBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoKCEocmVnLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSBcdTAwMjZcdTAwMjYgIShrbm93bl9yZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxuIFx0XHQgICAgcmVnLVx1MDAzZWRlbHRhID09IGtub3duX3JlZy1cdTAwM2VkZWx0YSkge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4tXG4gXHRcdFx0KnJlZyA9ICprbm93bl9yZWc7XG4tXHRcdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4gXHRcdFx0czMyIHNhdmVkX29mZiA9IHJlZy1cdTAwM2VkZWx0YTtcbiBcdFx0XHR1MzIgc2F2ZWRfaWQgPSByZWctXHUwMDNlaWQ7XG4gXG5AQCAtMTU5NzQsMTIgKzE1ODUxLDExIEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zXG4gXHRcdFx0LyogcmVnID0ga25vd25fcmVnOyByZWcgKz0gZGVsdGEgKi9cbiBcdFx0XHQqcmVnID0gKmtub3duX3JlZztcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIE11c3QgcHJlc2VydmUgb2ZmLCBpZCBhbmQgc3VicmVnX2RlZiBmbGFnLFxuLVx0XHRcdCAqIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKSB3aWxsIGJlIGluY29ycmVjdC5cbitcdFx0XHQgKiBNdXN0IHByZXNlcnZlIG9mZiBhbmQgaWQsIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKVxuK1x0XHRcdCAqIHdpbGwgYmUgaW5jb3JyZWN0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdHJlZy1cdTAwM2VkZWx0YSA9IHNhdmVkX29mZjtcbiBcdFx0XHRyZWctXHUwMDNlaWQgPSBzYXZlZF9pZDtcbi1cdFx0XHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XG4gXG4gXHRcdFx0c2NhbGFyMzJfbWluX21heF9hZGQocmVnLCBcdTAwMjZmYWtlX3JlZyk7XG4gXHRcdFx0c2NhbGFyX21pbl9tYXhfYWRkKHJlZywgXHUwMDI2ZmFrZV9yZWcpO1xuQEAgLTE2NDE0LDggKzE2MjkwLDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0ICogQWxyZWFkeSBtYXJrZWQgYXMgd3JpdHRlbiBhYm92ZS5cbiBcdCAqL1xuIFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG4tXHQvKiBsZF9hYnMgbG9hZCB1cCB0byAzMi1iaXQgc2tiIGRhdGEuICovXG4tXHRyZWdzW0JQRl9SRUdfMF0uc3VicmVnX2RlZiA9IGVudi1cdTAwM2VpbnNuX2lkeCArIDE7XG4gXHQvKlxuIFx0ICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wXG4gXHQgKiB3aGljaCBtdXN0IGJlIGV4cGxvcmVkIGJ5IHRoZSB2ZXJpZmllciB3aGVuIGluIGEgc3VicHJvZy5cbkBAIC0xNjczMCwxMCArMTY2MDQsMTEgQEAgYm9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXG4gXHRpbnQgaTtcbiBcbiBcdGlmIChicGZfaGVscGVyX2NhbGwoY2FsbCkpIHtcbi1cbiBcdFx0aWYgKGJwZl9nZXRfaGVscGVyX3Byb3RvKGVudiwgY2FsbC1cdTAwM2VpbW0sIFx1MDAyNmZuKSBcdTAwM2MgMClcbiBcdFx0XHQvKiBlcnJvciB3b3VsZCBiZSByZXBvcnRlZCBsYXRlciAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0Y3MtXHUwMDNlYnRmID0gTlVMTDtcbitcdFx0Y3MtXHUwMDNlZnVuY19wcm90byA9IE5VTEw7XG4gXHRcdGNzLVx1MDAzZWZhc3RjYWxsID0gZm4tXHUwMDNlYWxsb3dfZmFzdGNhbGwgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIChicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGNhbGwtXHUwMDNlaW1tKSB8fFxuIFx0XHRcdFx0YnBmX2ppdF9pbmxpbmVzX2hlbHBlcl9jYWxsKGNhbGwtXHUwMDNlaW1tKSk7XG5AQCAtMTY3NTQsNiArMTY2MjksOCBAQCBib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0XHQvKiBlcnJvciB3b3VsZCBiZSByZXBvcnRlZCBsYXRlciAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0Y3MtXHUwMDNlYnRmID0gbWV0YS5idGY7XG4rXHRcdGNzLVx1MDAzZWZ1bmNfcHJvdG8gPSBtZXRhLmZ1bmNfcHJvdG87XG4gXHRcdGNzLVx1MDAzZW51bV9wYXJhbXMgPSBidGZfdHlwZV92bGVuKG1ldGEuZnVuY19wcm90byk7XG4gXHRcdGNzLVx1MDAzZWZhc3RjYWxsID0gbWV0YS5rZnVuY19mbGFncyBcdTAwMjYgS0ZfRkFTVENBTEw7XG4gXHRcdGNzLVx1MDAzZWlzX3ZvaWQgPSBidGZfdHlwZV9pc192b2lkKGJ0Zl90eXBlX2J5X2lkKG1ldGEuYnRmLCBtZXRhLmZ1bmNfcHJvdG8tXHUwMDNldHlwZSkpO1xuQEAgLTE3NDc1LDYgKzE3MzUyLDcgQEAgc3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGVudi1cdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiJWQ6IFwiLCBlbnYtXHUwMDNlaW5zbl9pZHgpO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbitcdFx0XHR2ZXJib3NlKGVudiwgXCJcXG5cIik7XG4gXHRcdFx0ZW52LVx1MDAzZXByZXZfaW5zbl9wcmludF9wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSBlbnYtXHUwMDNlcHJldl9sb2dfcG9zO1xuIFx0XHRcdGVudi1cdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbmluZGV4IDVlN2NiOGIzNmZlZjIuLjdiMzNkODQ3ZDgwMGMgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xuQEAgLTEyOSwxNiArMTI5LDEwIEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4gc3RhdGljIHZvaWQgX19wcmludGYoMiwgMylcbiBwcmludF9pbnNuX2pzb24odm9pZCAqcHJpdmF0ZV9kYXRhLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbCA9IHN0cmxlbihmbXQpO1xuLVx0Y2hhciBjaG9tcGVkX2ZtdFtsXTtcbiBcdHZhX2xpc3QgYXJncztcbiBcbiBcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHRpZiAobCBcdTAwM2UgMCkge1xuLVx0XHRzdHJuY3B5KGNob21wZWRfZm10LCBmbXQsIGwgLSAxKTtcbi1cdFx0Y2hvbXBlZF9mbXRbbCAtIDFdID0gJ1xcMCc7XG4tXHR9XG4tXHRqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGNob21wZWRfZm10LCBhcmdzKTtcbitcdGpzb253X3ZwcmludGZfZW5xdW90ZShqc29uX3d0ciwgZm10LCBhcmdzKTtcbiBcdHZhX2VuZChhcmdzKTtcbiB9XG4gXG5AQCAtMzUxLDYgKzM0NSw3IEBAIHZvaWQgZHVtcF94bGF0ZWRfcGxhaW4oc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbixcbiBcbiBcdFx0cHJpbnRmKFwiJTR1OiBcIiwgaSk7XG4gXHRcdHByaW50X2JwZl9pbnNuKFx1MDAyNmNicywgaW5zbiArIGksIHRydWUpO1xuK1x0XHRwcmludGYoXCJcXG5cIik7XG4gXG4gXHRcdGlmIChvcGNvZGVzKSB7XG4gXHRcdFx0cHJpbnRmKFwiICAgICAgIFwiKTtcbkBAIC00MTcsNiArNDEyLDcgQEAgdm9pZCBkdW1wX3hsYXRlZF9mb3JfZ3JhcGgoc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1Zl9zdGFydCwgdm9pZCAqYnVmX2VuZCxcbiBcbiBcdFx0cHJpbnRmKFwiJXU6IFwiLCBpbnNuX29mZik7XG4gXHRcdHByaW50X2JwZl9pbnNuKFx1MDAyNmNicywgY3VyLCB0cnVlKTtcbitcdFx0cHJpbnRmKFwiXFxcXGxcXFxcXFxuXCIpO1xuIFxuIFx0XHRpZiAob3Bjb2Rlcykge1xuIFx0XHRcdHByaW50ZihcIlxcXFwgXFxcXCBcXFxcIFxcXFwgXCIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcbmluZGV4IGY1MjlmMWM4YzE3MWQuLjMwMjIxMzUyNTY4ZDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcbkBAIC01NSwxMCArNTUsOSBAQCBzdHJ1Y3QgYnBmX2luc24gKmRpc2FzbV9pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxuIFx0ICogZm9yIGVhY2ggaW5zdHJ1Y3Rpb24gKEZGIHN0YW5kcyBmb3IgaW5zdHJ1Y3Rpb24gYGNvZGVgIGJ5dGUpLlxuIFx0ICogUmVtb3ZlIHRoZSBwcmVmaXggaW5wbGFjZSwgYW5kIGFsc28gc2ltcGxpZnkgY2FsbCBpbnN0cnVjdGlvbnMuXG4gXHQgKiBFLmcuOiBcIig4NSkgY2FsbCBmb28jMTBcIiAtXHUwMDNlIFwiY2FsbCBmb29cIi5cbi1cdCAqIEFsc28gcmVtb3ZlIG5ld2xpbmUgaW4gdGhlIGVuZCAodGhlICdtYXgoc3RybGVuKGJ1ZikgLSAxLCAwKScgdGhpbmcpLlxuIFx0ICovXG4gXHRwZnhfZW5kID0gYnVmICsgNTtcbi1cdHNmeF9zdGFydCA9IGJ1ZiArIG1heCgoaW50KXN0cmxlbihidWYpIC0gMSwgMCk7XG4rXHRzZnhfc3RhcnQgPSBidWYgKyAoaW50KXN0cmxlbihidWYpO1xuIFx0aWYgKHN0cm5jbXAocGZ4X2VuZCwgXCJjYWxsIFwiLCA1KSA9PSAwIFx1MDAyNlx1MDAyNiAodG1wID0gc3RycmNocihidWYsICcjJykpKVxuIFx0XHRzZnhfc3RhcnQgPSB0bXA7XG4gXHRsZW4gPSBzZnhfc3RhcnQgLSBwZnhfZW5kO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCBiZTk3ZjY4ODdmMGU3Li5mYmE1NjJjODE5NjkxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTEyNCw2ICsxMjQsNyBAQFxuICNpbmNsdWRlIFwidmVyaWZpZXJfaml0X2lubGluZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiaXJxLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJ2ZXJpZmllcl96ZXh0LnNrZWwuaFwiXG4gXG4gI2RlZmluZSBNQVhfRU5UUklFUyAxMVxuIFxuQEAgLTI3Nyw2ICsyNzgsNyBAQCB2b2lkIHRlc3RfaXJxKHZvaWQpXHRcdFx0ICAgICAgeyBSVU4oaXJxKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcdFx0ICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY3R4X3B0cl9wYXJhbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jdHhfcHRyX3BhcmFtKTsgfVxuK3ZvaWQgdGVzdF92ZXJpZmllcl96ZXh0KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyh2ZXJpZmllcl96ZXh0KTsgfVxuIFxuIHN0YXRpYyBpbnQgaW5pdF90ZXN0X3ZhbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY2hhciAqbWFwX25hbWUpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjRjODJhMzFlNjY4MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3pleHQuY1xuQEAgLTAsMCArMSwyNjAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uLy4uLy4uL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitfX2ZsYWcoQlBGX0ZfVEVTVF9STkRfSEkzMilcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitfX25ha2VkIHZvaWQgemV4dF9sb3N0X2Fjcm9zc19jaGVja3BvaW50KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2t0aW1lX2dldF9uc107XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjggPSByMDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjYgPSAweGRlYWRiZWVmY2FmZWJhYmUgbGw7XHQvKiBpbmplY3Qgc29tZSB2YWx1ZSBmb3IgcjYncyB1cHBlciBoYWxmICovXHRcXFxuK1x0aWYgcjggIT0gMCBnb3RvIDFmO1x0XHQvKiBmYWxsLXRocm91Z2ggY2FjaGVkIGZpcnN0LCBicmFuY2ggcHJ1bmVkICovXHRcXFxuK1x0cjYgPSAzMjtcdFx0XHQvKiBmdWxsIDY0LWJpdCBkZWYgKi9cdFx0XHRcdFxcXG4rXHRnb3RvIDJmO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHc2ID0gMzI7XHRcdFx0LyogMzItYml0IGRlZiwgemV4dCBtYXJrIGxvc3QgKi9cdFx0XFxcbisyOlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSByNjtcdFx0XHQvKiBidWdneSB2ZXJpZmllciBiZWxpZXZlZCB1cHBlciAzMiBiaXRzIGFyZSAwICovIFxcXG4rXHRcdFx0XHRcdC8qIGFuZCB0aHVzIGRpZCBub3QgemVybyBleHRlbmRlZCB3NiA9IDMyLiAqL1x0XFxcbitcdHIwIFx1MDAzZVx1MDAzZT0gMzI7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9rdGltZV9nZXRfbnMpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIncxID0gdzB7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9hbHUzMl9oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuK1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBvbmx5IGFzIDMyLWJpdCAtXHUwMDNlIG5vIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX25vdF9tc2coXCJ3MSA9IHcwe3suKn19OyB6ZXh0XCIpXG4rX19ub3RfbXNnKFwidzIgPSB3MXt7Lip9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCBub196ZXh0X2FsdTMyX2hpX3VudXNlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0dzEgPSB3MDtcdFx0XHRcdFx0XFxcbitcdHcyID0gdzE7XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogNjQtYml0IGRlZmluaXRpb24gaXMgbmV2ZXIgemVybyBleHRlbmRlZCAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbm90X21zZyhcInIxID0gcjB7ey4qfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgbm9femV4dF9tb3Y2NCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0cjEgPSByMDtcdFx0XHRcdFx0XFxcbitcdHIwID0gcjE7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIE5hcnJvdyBsb2FkIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcInIxID0gKih1MzIgKikocjEwIC04KXt7ICt9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19sb2FkX2hpX3VzZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjA7XHRcdFx0XHRcXFxuK1x0cjEgPSAqKHUzMiAqKShyMTAgLSA4KTtcdFx0XHRcdFxcXG4rXHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6OjogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIDMyLWJpdCBhdG9taWMgZmV0Y2ggcmVzdWx0IHJlYWQgYXMgNjQtYml0IC1cdTAwM2UgemV4dCAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwicjEgPSBhdG9taWNfZmV0Y2hfYWRkKCh1MzIgKikocjEwIC04KSwgcjEpe3sgK319OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIHpleHRfYXRvbWljX2ZldGNoMzJfaGlfdXNlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcdFx0XHRcdFxcXG4rXHR3MSA9IDE7XHRcdFx0XHRcdFx0XFxcbitcdC44Ynl0ZSAlW2ZldGNoX2FkZDMyXTtcdFx0XHRcdFxcXG4rXHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2luc24oZmV0Y2hfYWRkMzIsXG4rXHRcdCAgICAgQlBGX0FUT01JQ19PUChCUEZfVywgQlBGX0FERCB8IEJQRl9GRVRDSCwgQlBGX1JFR18xMCwgQlBGX1JFR18xLCAtOCkpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiAzMi1iaXQgYXRvbWljIGNtcHhjaGcgcmVzdWx0IChyMCkgcmVhZCBhcyA2NC1iaXQgLVx1MDAzZSB6ZXh0ICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJyMCA9IGF0b21pY19jbXB4Y2hnKCh1MzIgKikocjEwIC04KSwgcjAsIHIxKXt7ICt9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X2NtcHhjaGczMl9oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjEgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IHIxO1x0XHRcdFx0XFxcbitcdHcwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzEgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHQuOGJ5dGUgJVtjbXB4Y2hnMzJdO1x0XHRcdFx0XFxcbitcdHIyID0gcjA7XHRcdFx0XHRcdFxcXG4rXHRyMCA9IHIyO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2luc24oY21weGNoZzMyLFxuK1x0XHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9DTVBYQ0hHLCBCUEZfUkVHXzEwLCBCUEZfUkVHXzEsIC04KSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIDMyLWJpdCBkZWYgYmVmb3JlIGEgYnJhbmNoLCB1cHBlciBoYWxmIHVzZWQgb24gb25lIGJyYW5jaCAtXHUwMDNlIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcInc2ID0gMzJ7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9jZmdfaGlfdXNlZF9vbmVfYnJhbmNoKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHR3NiA9IDMyO1x0XHRcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIGwwXyU9O1x0XHRcdFx0XFxcbitcdHIwID0gcjY7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rbDBfJT06XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIHIxJ3MgdXBwZXIgaGFsZiBpcyBkZWFkLCBzbyAndzEgPSAxJyBtdXN0IE5PVCBiZSBtYXJrZWQgZm9yIHplcm8gZXh0ZW5zaW9uLiAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbm90X21zZyhcIncxID0gMXt7Lip9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCBub196ZXh0X290aGVyX3JlZ19oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0cjYgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XFxcbitcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSByNjtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogTERfQUJTIGRlZmluZXMgcjA7IHdoZW4gcjAgaXMgcmVhZCBhcyA2NC1iaXQgaXQgbXVzdCBiZSB6ZXJvIGV4dGVuZGVkICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJyMCA9ICoodTggKilza2JbMF17ey4qfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9sZF9hYnNfaGlfdXNlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHI2ID0gcjE7XHRcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTggKilza2JbMF07XHRcdFx0XHRcXFxuK1x0cjcgPSByMDtcdFx0XHRcdFx0XFxcbitcdHIwID0gcjc7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogSGVscGVyIHBhcmFtZXRlcnMgYXJlIHJlYWQgYXMgNjQtYml0IChjYWxsX3VzZV9tYXNrKCkgZmFsbGJhY2spICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJ3MiA9IDF7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgaGVscGVyX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMSA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIxICs9IC04O1x0XHRcdFx0XHRcXFxuK1x0dzIgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX3RyYWNlX3ByaW50a107XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl90cmFjZV9wcmludGspXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitzdGF0aWMgX191c2VkIF9fbmFrZWQgaW50IHN1YnByb2dfcmVhZHNfYXJnX2FzXzY0Yml0KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBzdWJwcm9ncmFtIHBhcmFtZXRlcnMgYXJlIGNvbnNlcnZhdGl2ZWx5IHJlYWQgYXMgNjQtYml0ICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJ3MSA9IHcwe3sgK319OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIHN1YnByb2dfcGFyYW1fcmVhZF9hc182NGJpdCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0dzEgPSB3MDtcdFx0XHRcdFx0XFxcbitcdGNhbGwgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQ7XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rZXh0ZXJuIGxvbmcgYnBmX2tmdW5jX2NhbGxfdGVzdDQoc2lnbmVkIGNoYXIgYSwgc2hvcnQgYiwgaW50IGMsIGxvbmcgZCkgX19rc3ltO1xuK1xuKy8qIEZvcmNlIGtmdW5jIGV4dGVybiBCVEYgZ2VuZXJhdGlvbi4gKi9cbitpbnQgX19rZnVuY19idGZfcm9vdCh2b2lkKVxuK3tcbitcdHJldHVybiBicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTtcbit9XG4rXG4rLyoga2Z1bmMgcGFyYW1ldGVycyBhcmUgcmVhZCBhY2NvcmRpbmcgdG8gdGhlaXIgQlRGIHR5cGUgd2lkdGggKi9cbitTRUMoXCJ0Y1wiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbm90X21zZyhcInczID0gMXt7Lip9fTsgemV4dFwiKVx0XHQvKiBpbnQgYyAgLVx1MDAzZSByZWFkIGFzIDMyLWJpdCAqL1xuK19fbXNnKFwidzQgPSAxe3sgK319OyB6ZXh0XCIpXHRcdC8qIGxvbmcgZCAtXHUwMDNlIHJlYWQgYXMgNjQtYml0ICovXG4rX19uYWtlZCB2b2lkIGtmdW5jX3BhcmFtX3JlYWRfcGVyX2J0Zih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0dzIgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHR3MyA9IDE7XHRcdFx0XHRcdFx0XFxcbitcdHc0ID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCBicGZfa2Z1bmNfY2FsbF90ZXN0NDtcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6Mzk6NDYuNjgzNDMzNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjk2MTU2Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIExpdmVuZXNzIGFuZCBaZXJvLUV4dGVuc2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBCUEYgdmVyaWZpZXIgYW5kIGl0J3MgYSBwcmV0dHkgc3Vic3RhbnRpYWwgb3ZlcmhhdWwgb2YgaG93IHplcm8tZXh0ZW5zaW9uIGlzIGhhbmRsZWQuIFByZXZpb3VzbHksIHRoZSBgc3VicmVnX2RlZmAgd2FzIHRyYWNrZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBgYnBmX3JlZ19zdGF0ZWAsIGJ1dCBub3csIHRoZXkndmUgcHVsbGVkIHRoYXQgb3V0IGFuZCBhcmUgY2FsY3VsYXRpbmcgdGhlIHplcm8tZXh0ZW5zaW9uIGR5bmFtaWNhbGx5LCB1c2luZyBsaXZlbmVzcyBhbmFseXNpcyB0aHJvdWdoIGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AuIEludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHRoZSBsaXZlbmVzcyBhbmFseXNpcyBpdHNlbGYgaGFzIHRvIGJlIGZhciBtb3JlIG51YW5jZWQuXG5cbk15IGZvY3VzIGlzIG9uIGhvdyB0aGV54oCZdmUgYWNoaWV2ZWQgdGhpcy4gVGhleSd2ZSBpbnRyb2R1Y2VkIGEgbmV3IHN0cnVjdHVyZSwgYGJwZl9pbnNuX2RlZjMyYCwgYW5kIHRoZXkndmUgbW9kaWZpZWQgYGNvbXB1dGVfaW5zbl9saXZlX3JlZ3NgIHRvIHRyYWNrIHRoZSB1c2UgYW5kIGRlZmluaXRpb24gb2YgMzItYml0IHZlcnN1cyA2NC1iaXQgcmVnaXN0ZXJzIGV4cGxpY2l0bHkuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIHdheSBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIG5vdyB0cmFja3MgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBsaXZlbmVzcyBzZXBhcmF0ZWx5LCB1c2luZyBhIDMyLWJpdCBtYXNrIGZvciBlYWNoIHJlZ2lzdGVyLiBFc3NlbnRpYWxseSwgdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIG1hc2sgd2lsbCByZXByZXNlbnQgMzItYml0IHVzYWdlIGFuZCB0aGUgdXBwZXIgMTYgZm9yIDY0LWJpdC4gVGhpcyBoYXMgcHJvcGFnYXRlZCBvdXR3YXJkcyB0byBtb2RpZnlpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZmllbGRzIGB1c2VgLCBgZGVmYCwgYGluYCwgYW5kIGBvdXRgIGluIHRoZSBgaW5zbl9saXZlX3JlZ3NgIHRvIGJlIGB1MzJgIGluc3RlYWQgb2YgYHUxNmAuXG5cblRoZSBhZGRpdGlvbiBvZiBgY2FsbF91c2VfbWFza2AgaXMgY2xldmVyLiBJdCBpbmZlcnMgdGhlIHVzZSBtYXNrIGJhc2VkIG9uIHRoZSBudW1iZXIgYW5kIHNpemVzIG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMuIEFuZCwgb2YgY291cnNlLCB0aGVyZSdzIGBicGZfaW5zbl9kZWYzMmAsIHdoaWNoIGV4cGxpY2l0bHkgY2hlY2tzIGlmIGFuIGluc3RydWN0aW9uIGRlZmluZXMgYSAzMi1iaXQgc3VicmVnaXN0ZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGB6ZXh0X2RzdGAgaXMgYmVpbmcgc2V0IGluIGBpbnNuX2F1eGAgZHVyaW5nIGxpdmVuZXNzIGFuYWx5c2lzIGlmIGEgMzItYml0IHN1YnJlZ2lzdGVyIGlzIGRlZmluZWQgYW5kIGl0cyB1cHBlciBoYWxmIHJlbWFpbnMgXCJhbGl2ZVwiIGFmdGVyIHRoZSBpbnN0cnVjdGlvbi5cblxuVGhpcyBpcyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIHRoZSB2ZXJpZmllcidzIGFwcHJvYWNoIHRvIGxpdmVuZXNzIGFuZCB6ZXJvLWV4dGVuc2lvbiB0cmFja2luZy4gSXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSB0aG9yb3VnaGx5IGZ1enplZC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIHdpdGggZXhpc3RpbmcgQlBGIHByb2dyYW1zIGlzIGltcGFjdGVkLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBzeW1ib2xzIHNvIEkgY2FuIGZvY3VzIG15IHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBlZmZvcnRzOiBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgLCBgY29tcHV0ZV9pbnNuX2xpdmVfcmVnc2AsIGBjYWxsX3VzZV9tYXNrYCwgYGJwZl9pbnNuX2RlZjMyYCwgYW5kIG9mIGNvdXJzZSBgYnBmX2lzX3JlZzY0YC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEJQRiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gbW9zdCBmdXp6aW5nIGNvbmZpZ3MsIGJ1dCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3JpdGljYWwgb25lLiBHaXZlbiB0aGF0IGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AgaXMgcGFydCBvZiBga2VybmVsL2JwZi9saXZlbmVzcy5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhY3RpdmUuIEnigJlsbCBxdWlja2x5IHZlcmlmeSB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6Mzk6NTQuOTc5NTkyMzE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODMxMDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjA5Nj1zdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjI1NC0gKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjI1NTppbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjI1Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5Mzg9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxMDMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTA0OlxcdHJldCA9IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTA1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDozOTo1NS4wOTc5MjY5MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYxOTU2MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgUmVnaXN0ZXIgTGl2ZW5lc3MqKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIGlzIGNhbGxlZCBieSBgYnBmX2NoZWNrYC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggcmVnaXN0ZXIgbGl2ZW5lc3MgYW5hbHlzaXMsIHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIEJQRiBieXRlY29kZSB2ZXJpZmljYXRpb24uIFRoZSBrZXJuZWwgbmVlZHMgdG8gZW5zdXJlIHJlZ2lzdGVycyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgdGhyb3VnaG91dCB0aGUgZXhlY3V0aW9uIG9mIGEgQlBGIHByb2dyYW0gdG8gZ3VhcmFudGVlIHNhZmV0eSBhbmQgcHJldmVudCBleHBsb2l0cy5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGlzIGxpdmVuZXNzIGFuYWx5c2lzLiBJIGtub3cgdGhhdCBgbGl2ZW5lc3MuY2AgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIGxvZ2ljLCBzbyBsZXQncyBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBLbm93aW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2hlcmUgdGhpcyBhbmFseXNpcyBpcyBlbmFibGVkLCBhbmQgcG90ZW50aWFsbHkgaG93IGl0J3Mgb3B0aW1pemVkLiBJcyB0aGlzIGZlYXR1cmUgZW5hYmxlZCBieSBkZWZhdWx0PyBJcyB0aGVyZSBhIGRlYnVnIGZsYWc/IEtub3dpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkZWVwbHkgSSBjYW4gZGlnLCBhbmQgd2hhdCBJIG1pZ2h0IGJlIGFibGUgdG8gaW5mbHVlbmNlIGR1cmluZyBrZXJuZWwgZGV2ZWxvcG1lbnQsIG9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDozOTo1OS4zNTk4ODU0NjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM4NDEzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGl2ZW5lc3Mub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6Mzk6NTkuNDIzNzYwNzM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMTE0OTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gQlBGIENvbmZpZ3VyYXRpb24gYW5kIEluc3RydWN0aW9uIEFuYWx5c2lzKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBCUEYsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCdzIHRoZSBrZXkgZW5hYmxpbmcgc3dpdGNoIGZvciB0aGUgd2hvbGUgQlBGIHN5c2NhbGwgaW50ZXJmYWNlLCBzbyBpdCdzIHRoZSBmaXJzdCB0aGluZyBJJ2QgY2hlY2sgd2hlbiBkZWJ1Z2dpbmcgb3IgZXhwbG9yaW5nIEJQRiBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoZXNlIGluc3RydWN0aW9ucyBhcmUgdHJlYXRlZC4gTGV0J3MgZGVsdmUgaW50byBgYnBmX2luc25fZGVmMzJgLiBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIG9mIDMyLWJpdCBCUEYgaW5zdHJ1Y3Rpb25zIHJlc2lkZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGVmaW5pdGlvbiB3b3JrcyBhbmQgd2hhdCBpdCBtZWFucyBmb3IgaW5zdHJ1Y3Rpb24gc2V0cy4gQW5kLCBvZiBjb3Vyc2UsIEknbGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhlIFwibGl2ZSByZWdpc3RlcnNcIiBhcmUgY29tcHV0ZWQuIFRoaXMgaXMgbGlrZWx5IGRvbmUgYnkgYGNvbXB1dGVfaW5zbl9saXZlX3JlZ3NgLiBVbmRlcnN0YW5kaW5nIHJlZ2lzdGVyIGxpdmVuZXNzIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3Igb3B0aW1pemF0aW9uIGFuZCB2ZXJpZnlpbmcgdGhlIGNvcnJlY3RuZXNzIG9mIEJQRiBwcm9ncmFtcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhvc2UgY2FsY3VsYXRpb25zLCBiZWNhdXNlIHJlZ2lzdGVyIG1pc3VzZSBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgQlBGIHByb2dyYW0gZmFpbHVyZXMuIFRoZSBwcm9ncmFtIHJlbGllcyBvbiB2YWxpZCByZWdpc3RlciB1c2UuIFRpbWUgdG8gZ28gb3ZlciB0aG9zZSBkZXRhaWxzIGFnYWluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk5OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjQwOjAzLjMzNDkxMzUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDQ1NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnNuX2RlZjMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmM9MjQ9c3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUwLSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NTE6aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUyLXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTYyPXN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NC1cXHQgKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NTpcXHRkYXRhW29mZl0uemV4dF9kc3QgPSBicGZfaW5zbl9kZWYzMihpbnNuICsgb2ZmICsgY250IC0gMSkgXFx1MDAzZT0gMDtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3Ni1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg2LVxcdFxcdGRhdGFbaV0uc2VlbiA9IG9sZF9zZWVuO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg3OlxcdFxcdGRhdGFbaV0uemV4dF9kc3QgPSBicGZfaW5zbl9kZWYzMihpbnNuICsgaSkgXFx1MDAzZT0gMDtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4OC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjI1NT1pbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMzIwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbnNuX2NudDsgKytpKSB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjIzMjE6XFx0XFx0aW50IGRlZjMyID0gYnBmX2luc25fZGVmMzIoXFx1MDAyNmluc25zW2ldKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjMyMi1cXHRcXHR1MzIgb3V0ID0gc3RhdGVbaV0ub3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDo0MDowMy4zOTg5NjQwMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODU4MDkxMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgQlBGIFZlcmlmaWVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBkZWVwLCByaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgQlBGIHZlcmlmaWVyJ3MgbG9naWMuIEl0J3MgdG91Y2hpbmcgdGhlIGNvcmUgb2YgaG93IGl0IGhhbmRsZXMgcmVnaXN0ZXIgbGl2ZW5lc3MgYW5kIHplcm8tZXh0ZW5zaW9uIHRyYWNraW5nLCB3aGljaCBpcyAqY3JpdGljYWwqIGZvciB0aGUgc2VjdXJpdHkgYW5kIGVmZmljaWVuY3kgb2YgQlBGIHByb2dyYW1zLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiBoZXJlLlxuXG5NeSBmb2N1cyBoYXMgdG8gYmUgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AsIGBjb21wdXRlX2luc25fbGl2ZV9yZWdzYCwgYGNhbGxfdXNlX21hc2tgLCBgYnBmX2luc25fZGVmMzJgLCBhbmQgYGJwZl9pc19yZWc2NGAuIFRoZXknbGwgaWxsdW1pbmF0ZSB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgdGhlIHJlbW92YWwgb2YgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCB0aGUgc2hpZnQgdG8gZGlyZWN0IHplcm8tZXh0ZW5zaW9uIGNvbXB1dGF0aW9uIGR1cmluZyBsaXZlbmVzcyBhbmFseXNpcyBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBzaGlmdCBpbiBob3cgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgc3RhdGVzIGFyZSBtYW5hZ2VkIGFuZCBvcHRpbWl6ZWQuIExpdmVuZXNzIGFuYWx5c2lzIGlzIHdoZXJlIHRoZSB2ZXJpZmllciBkZXRlcm1pbmVzIHdoaWNoIHJlZ2lzdGVycyBhcmUgYWN0aXZlbHkgdXNlZCBhdCBkaWZmZXJlbnQgcG9pbnRzIGluIGEgQlBGIHByb2dyYW0ncyBleGVjdXRpb24sIGFuZCB0aGlzIGNoYW5nZSBjb3VsZCBoYXZlIHNlcmlvdXMgaW1wbGljYXRpb25zIGZvciBib3RoIHRoZSBwZXJmb3JtYW5jZSBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZSAqY29ycmVjdG5lc3MqIG9mIHRoZSB2ZXJpZmljYXRpb24gcHJvY2Vzcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBJdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIGZvciB0aGlzIHNwZWNpZmljIGNoYW5nZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cbk5vdywgbGV0J3MgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3OTQsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjQwOjA5LjI1NzA1ODk3N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDMxOTIwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiLFxuICAgIFwiY29tcHV0ZV9pbnNuX2xpdmVfcmVnc1wiLFxuICAgIFwiY2FsbF91c2VfbWFza1wiLFxuICAgIFwiYnBmX2luc25fZGVmMzJcIixcbiAgICBcImJwZl9pc19yZWc2NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgemVyby1leHRlbnNpb24gdHJhY2tpbmcgbG9naWMuIEl0IHJlbW92ZXMgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCBpbnN0ZWFkIGNvbXB1dGVzIHplcm8gZXh0ZW5zaW9uIHJlcXVpcmVtZW50cyBkaXJlY3RseSBkdXJpbmcgbGl2ZW5lc3MgYW5hbHlzaXMgYnkgdHJhY2tpbmcgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgdXNlcyBzZXBhcmF0ZWx5LiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgYWZmZWN0cyBob3cgcmVnaXN0ZXIgc3RhdGVzIGFyZSB0cmFja2VkIGFuZCBvcHRpbWl6ZWQsIHdoaWNoIGlzIGEgY3JpdGljYWwgYXJlYSBmb3Igc2VjdXJpdHkgYW5kIGNvcnJlY3RuZXNzIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiLFxuICAgIFwiY29tcHV0ZV9pbnNuX2xpdmVfcmVnc1wiLFxuICAgIFwiY2FsbF91c2VfbWFza1wiLFxuICAgIFwiYnBmX2luc25fZGVmMzJcIixcbiAgICBcImJwZl9pc19yZWc2NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgemVyby1leHRlbnNpb24gdHJhY2tpbmcgbG9naWMuIEl0IHJlbW92ZXMgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCBpbnN0ZWFkIGNvbXB1dGVzIHplcm8gZXh0ZW5zaW9uIHJlcXVpcmVtZW50cyBkaXJlY3RseSBkdXJpbmcgbGl2ZW5lc3MgYW5hbHlzaXMgYnkgdHJhY2tpbmcgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgdXNlcyBzZXBhcmF0ZWx5LiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgYWZmZWN0cyBob3cgcmVnaXN0ZXIgc3RhdGVzIGFyZSB0cmFja2VkIGFuZCBvcHRpbWl6ZWQsIHdoaWNoIGlzIGEgY3JpdGljYWwgYXJlYSBmb3Igc2VjdXJpdHkgYW5kIGNvcnJlY3RuZXNzIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxxl5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 04:37:54 +0000 UTC FinishedAt: 2026-08-02 04:40:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "fa901743-3083-420d-91a6-087a9ca7fd9b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_compute_live_registers", "compute_insn_live_regs", "call_use_mask", "bpf_insn_def32", "bpf_is_reg64" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMmIzM0OywKICAgICYjMzQ7Y29tcHV0ZV9pbnNuX2xpdmVfcmVncyYjMzQ7LAogICAgJiMzNDtjYWxsX3VzZV9tYXNrJiMzNDssCiAgICAmIzM0O2JwZl9pbnNuX2RlZjMyJiMzNDssCiAgICAmIzM0O2JwZl9pc19yZWc2NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCB6ZXJvLWV4dGVuc2lvbiB0cmFja2luZyBsb2dpYy4gSXQgcmVtb3ZlcyBgc3VicmVnX2RlZmAgZnJvbSBgYnBmX3JlZ19zdGF0ZWAgYW5kIGluc3RlYWQgY29tcHV0ZXMgemVybyBleHRlbnNpb24gcmVxdWlyZW1lbnRzIGRpcmVjdGx5IGR1cmluZyBsaXZlbmVzcyBhbmFseXNpcyBieSB0cmFja2luZyAzMi1iaXQgYW5kIDY0LWJpdCByZWdpc3RlciB1c2VzIHNlcGFyYXRlbHkuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBhZmZlY3RzIGhvdyByZWdpc3RlciBzdGF0ZXMgYXJlIHRyYWNrZWQgYW5kIG9wdGltaXplZCwgd2hpY2ggaXMgYSBjcml0aWNhbCBhcmVhIGZvciBzZWN1cml0eSBhbmQgY29ycmVjdG5lc3MgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgxOThkYjFkNzE3MTgyMzg4OWUzZWViZjc1YmFlNTBkY2FkNzQxZGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA0OjM5OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA2ODJjMmNkM2I4NDQzLi4zMjFlYmQzMDhkMzhhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTE2MiwxMSAmIzQzOzE2Miw2IEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbiBcdCAqIHBvaW50aW5nIHRvIGJwZl9mdW5jX3N0YXRlLlxuIFx0ICovXG4gXHR1MzIgZnJhbWVubztcbi1cdC8qIFRyYWNrcyBzdWJyZWcgZGVmaW5pdGlvbi4gVGhlIHN0b3JlZCB2YWx1ZSBpcyB0aGUgaW5zbl9pZHggb2YgdGhlXG4tXHQgKiB3cml0aW5nIGluc24uIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHN1YnJlZ19kZWYgaXMgdXNlZCBiZWZvcmUgYW55IGluc25cbi1cdCAqIHBhdGNoaW5nIHdoaWNoIG9ubHkgaGFwcGVucyBhZnRlciBtYWluIHZlcmlmaWNhdGlvbiBmaW5pc2hlZC5cbi1cdCAqL1xuLVx0czMyIHN1YnJlZ19kZWY7XG4gXHQvKiBpZiAoIXByZWNpc2UgXHUwMDI2XHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbiYjMzk7dCBhZmZlY3Qgc2FmZXR5ICovXG4gXHRib29sIHByZWNpc2U7XG4gfTtcbkBAIC0xMDUwLDYgJiM0MzsxMDQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZ19pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnZcbiB9XG4gXG4gc3RydWN0IGJwZl9jYWxsX3N1bW1hcnkge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG87XG4gXHR1OCBudW1fcGFyYW1zO1xuIFx0Ym9vbCBpc192b2lkO1xuIFx0Ym9vbCBmYXN0Y2FsbDtcbkBAIC0xNjMxLDcgJiM0MzsxNjI4LDcgQEAgc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiB7XG4gfTtcbiBcbiAvKiBGdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSB2ZXJpZmllci5jLCB1c2VkIGJ5IGZpeHVwcy5jICovXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KTtcbiYjNDM7Ym9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcbiB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbik7XG4gdm9pZCBicGZfbWFya19zdWJwcm9nX2V4Y19jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7XG4gYm9vbCBicGZfYWxsb3dfdGFpbF9jYWxsX2luX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuQEAgLTE2NTUsNSAmIzQzOzE2NTIsNiBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG4mIzQzO2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xuIFxuICNlbmRpZiAvKiBfTElOVVhfQlBGX1ZFUklGSUVSX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggMmU0YWUwZWYwODYwOS4uN2M0NTk5ZTY1ZWNlYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtzdGFjaz0lcyBiZWZvcmUgXCYjMzQ7LCBlbnYtXHUwMDNldG1wX3N0cl9idWYpO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JWQ6IFwmIzM0OywgaWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHR9XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBhIGhpc3RvcnkgcmVjb3JkIHRoYXQgc29tZSByZWdpc3RlcnMgZ2FpbmVkIHJhbmdlIGF0IHRoaXMgaW5zbixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uY1xuaW5kZXggMDM5MWIzYmMwMDczNC4uNTBiM2NhNTE0OWEwYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcbkBAIC0xMzksNyAmIzQzOzEzOSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2JwZl9lbmRfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsXG4gXHRcdFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbi1cdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gJXMlZCByJWRcXG5cJiMzNDssXG4mIzQzO1x0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAlcyVkIHIlZFwmIzM0OyxcbiBcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfVE9fQkUgPyBcJiMzNDtiZVwmIzM0OyA6IFwmIzM0O2xlXCYjMzQ7LFxuIFx0XHRpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbkBAIC0xNDksNyAmIzQzOzE0OSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2JwZl9ic3dhcF9pbnNuKGJwZl9pbnNuX3ByaW50X3QgdmVyYm9zZSxcbiBcdFx0XHQgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4ge1xuLVx0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFxcblwmIzM0OyxcbiYjNDM7XHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGJzd2FwJWQgciVkXCYjMzQ7LFxuIFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0aW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gfVxuQEAgLTE5NywxOSAmIzQzOzE5NywxOSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRwcmludF9icGZfZW5kX2luc24odmVyYm9zZSwgY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbik7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX05FRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVjJWQgPSAtJWMlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCA9IC0lYyVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKGlzX2FkZHJfc3BhY2VfY2FzdChpbnNuKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgKCh1MzIpaW5zbi1cdTAwM2VpbW0pIFx1MDAzZVx1MDAzZSAxNiwgKHUxNilpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoaXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVjJWQgJXMgJXMlYyVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAlYyVkICVzICVzJWMlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIxOCw3ICYjNDM7MjE4LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIyNyw3ICYjNDM7MjI3LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNKVxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICooJXMgKikociVkICUmIzQzO2QpID0gciVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9IHIlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbkBAIC0yMzUsNyAmIzQzOzIzNSw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0IChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQUREIHx8IGluc24tXHUwMDNlaW1tID09IEJQRl9BTkQgfHxcbiBcdFx0XHQgIGluc24tXHUwMDNlaW1tID09IEJQRl9PUiB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWE9SKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGxvY2sgKiglcyAqKShyJWQgJSYjNDM7ZCkgJXMgciVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBsb2NrICooJXMgKikociVkICUmIzQzO2QpICVzIHIlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsXG5AQCAtMjQ2LDcgJiM0MzsyNDYsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9BTkQgfCBCUEZfRkVUQ0gpIHx8XG4gXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XG4gXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwmIzM0OzY0XCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuIFx0XHRcdFx0YnBmX2F0b21pY19hbHVfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWltbSkgXHUwMDNlXHUwMDNlIDRdLFxuQEAgLTI1NCw3ICYjNDM7MjU0LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUmIzQzO2QpLCByMCwgciVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSBhdG9taWMlc19jbXB4Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIwLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0QlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcgPyBcJiMzNDs2NFwmIzM0OyA6IFwmIzM0O1wmIzM0OyxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbkBAIC0yNjIsNDQgJiM0MzsyNjIsNDQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWENIRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfeGNoZygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwmIzM0OzY0XCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJSYjNDM7ZCkpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlJiM0MztkKSlcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfU1RPUkVfUkVMKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUmIzQzO2QpLCByJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBzdG9yZV9yZWxlYXNlKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZClcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHXyUwMnhcXG5cJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHXyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUKSB7XG4gXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0pIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9ICVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIG5vc3BlY1xcblwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbm9zcGVjXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcXG5cJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX2xkeF8lMDJ4XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZHhfJTAyeFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZClcXG5cJiMzNDssXG4mIzQzO1x0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKVwmIzM0OyxcbiBcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xuIFx0XHRcdFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSA6XG5AQCAtMzA3LDEyICYjNDM7MzA3LDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiBcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FCUykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSAqKCVzICopc2tiW3IlZCAmIzQzOyAlZF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgJiM0MzsgJWRdXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZWltbSk7XG5AQCAtMzMyLDEyICYjNDM7MzMyLDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGlmIChpc19wdHIgXHUwMDI2XHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXG4gXHRcdFx0XHRpbW0gPSAwO1xuIFxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAlc1wmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0X19mdW5jX2ltbV9uYW1lKGNicywgaW5zbiwgaW1tLFxuIFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZF8lMDJ4XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkge1xuQEAgLTM0NywzNSAmIzQzOzM0NywzNSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRjaGFyIHRtcFs2NF07XG4gXG4gXHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpIHtcbi1cdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGNhbGwgcGMlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBjYWxsIHBjJXNcJiMzNDssXG4gXHRcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdFx0X19mdW5jX2dldF9uYW1lKGNicywgaW5zbixcbiBcdFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0c3RyY3B5KHRtcCwgXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4tXHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBjYWxsICVzIyVkXFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUsXG4mIzQzO1x0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgY2FsbCAlcyMlZFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0XHRfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLFxuIFx0XHRcdFx0XHRcdFx0dG1wLCBzaXplb2YodG1wKSksXG4gXHRcdFx0XHRcdGluc24tXHUwMDNlaW1tKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QIHwgQlBGX0pBKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGdvdG8gcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBnb3RvIHBjJSYjNDM7ZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQSB8IEJQRl9YKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGdvdG94IHIlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgZ290b3ggciVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9NQVlfR09UTykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIG1heV9nb3RvIHBjJSYjNDM7ZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbWF5X2dvdG8gcGMlJiM0MztkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QMzIgfCBCUEZfSkEpKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgZ290b2wgcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBnb3RvbCBwYyUmIzQzO2RcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBleGl0XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBleGl0XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuIFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSxcbi1cdFx0XHRcdFwmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2RcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7KCUwMngpIGlmICVjJWQgJXMgJWMlZCBnb3RvIHBjJSYjNDM7ZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0pNUDMyID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XSxcbkBAIC0zODMsMTQgJiM0MzszODMsMTQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsXG4tXHRcdFx0XHRcJiMzNDsoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0OyglMDJ4KSBpZiAlYyVkICVzIDB4JXggZ290byBwYyUmIzQzO2RcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9KTVAzMiA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRicGZfam1wX3N0cmluZ1tCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgNF0sXG4gXHRcdFx0XHQodTMyKWluc24tXHUwMDNlaW1tLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJXNcJiMzNDssXG4gXHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBicGZfY2xhc3Nfc3RyaW5nW2NsYXNzXSk7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBhMGJkZGFkYTc5NjRlLi43M2FiOTU1NzNmNjA5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTQ0LDE1ICYjNDM7NDQsMTggQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHR9XG4gfVxuIFxuLS8qIFJldHVybiBUUlVFIGlmIElOU04gaGFzIGRlZmluZWQgYW55IDMyLWJpdCB2YWx1ZSBleHBsaWNpdGx5LiAqL1xuLXN0YXRpYyBib29sIGluc25faGFzX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJuIHRoZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5lZCBieSBJTlNOLCBvciAtMSBpZiBJTlNOIGRvZXMgbm90XG4mIzQzOyAqIGV4cGxpY2l0bHkgZGVmaW5lIGEgMzItYml0IHZhbHVlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4gXHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xuIFxuLVx0aWYgKGRzdF9yZWcgPT0gLTEpXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoZHN0X3JlZyBcdTAwM2MgMCB8fCBicGZfaXNfcmVnNjQoaW5zbikpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4gXG4tXHRyZXR1cm4gIWJwZl9pc19yZWc2NChpbnNuLCBkc3RfcmVnLCBOVUxMLCBEU1RfT1ApO1xuJiM0MztcdHJldHVybiBkc3RfcmVnO1xuIH1cbiBcbiBzdGF0aWMgaW50IGtmdW5jX2Rlc2NfY21wX2J5X2ltbV9vZmYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbkBAIC0xNjksNyAmIzQzOzE3Miw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKiAoY250ID09IDEpIGlzIHRha2VuIG9yIG5vdC4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIElOU04gYXQgT0ZGIGlzIHRoZVxuIFx0ICogb3JpZ2luYWwgaW5zbiBhdCBvbGQgcHJvZy5cbiBcdCAqL1xuLVx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7XG4mIzQzO1x0ZGF0YVtvZmZdLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSkgXHUwMDNlPSAwO1xuIFxuIFx0aWYgKGNudCA9PSAxKVxuIFx0XHRyZXR1cm47XG5AQCAtMTgxLDcgJiM0MzsxODQsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Zm9yIChpID0gb2ZmOyBpIFx1MDAzYyBvZmYgJiM0MzsgY250IC0gMTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0LyogRXhwYW5kIGluc25pW29mZl0mIzM5O3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi9cbiBcdFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XG4tXHRcdGRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICYjNDM7IGkpO1xuJiM0MztcdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0MzsgaSkgXHUwMDNlPSAwO1xuIFx0fVxuIFxuIFx0LypcbkBAIC02MjAsNyAmIzQzOzYyMyw3IEBAIGludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHQgKiAgICAgICBCUEZfU1RYICYjNDM7IFNSQ19PUCwgc28gaXQgaXMgc2FmZSB0byBwYXNzIE5VTExcbiBcdFx0XHQgKiAgICAgICBoZXJlLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmIChicGZfaXNfcmVnNjQoXHUwMDI2aW5zbiwgbG9hZF9yZWcsIE5VTEwsIERTVF9PUCkpIHtcbiYjNDM7XHRcdFx0aWYgKGJwZl9pc19yZWc2NChcdTAwMjZpbnNuKSkge1xuIFx0XHRcdFx0aWYgKGNsYXNzID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKVxuIFx0XHRcdFx0XHRpJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbmluZGV4IDBhYWRmYmFlMGFjYzUuLmVhMDAyNTUwNjcxYTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuQEAgLTQ5Nyw3ICYjNDM7NDk3LDYgQEAgc3RhdGljIHZvaWQgcHJpbnRfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmlcbiBcdFx0cG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JTNkOiBcJiMzNDssIGluc25faWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2luc25faWR4XSk7XG4tXHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpOyAvKiByZW1vdmUgXFxuICovXG4gXHRcdGluc25fcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JSpjO1wmIzM0OywgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJiMzOTsgJiMzOTspO1xuIFx0XHRwb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG5AQCAtMTA0Myw3ICYjNDM7MTA0Miw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcdHIlZDogXCYjMzQ7LCBpKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9pbltpXSk7XG5AQCAtMTA1OCw3ICYjNDM7MTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcdHNhJWQ6IFwmIzM0OywgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2YXRfaW5bYWldKTtcbkBAIC0xMDcwLDcgJiM0MzsxMDY3LDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGlcbiBcdFx0aWYgKCFwcmludGVkKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyUzZDogXCYjMzQ7LCBpZHgpO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbi1cdFx0XHRicGZfdmxvZ19yZXNldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTtcbiBcdFx0XHRwcmludGVkID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFx0ZnAlJiM0MztkOiBcJiMzNDssIC0oaSAmIzQzOyAxKSAqIDgpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFx1MDAyNmF0X3N0YWNrX2luW2ldKTtcbkBAIC0xNTQ1LDYgJiM0MzsxNTQxLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2lkeF0pO1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXG4gXHRcdC8qIENvbGxlY3Qgd2hhdCBuZWVkcyBwcmludGluZyAqL1xuIFx0XHRpZiAoaXNfbGR4X3N0eF9jYWxsIFx1MDAyNlx1MDAyNlxuQEAgLTIwNTAsMjkgJiM0MzsyMDQ3LDY3IEBAIGludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiAvKiBFYWNoIGZpZWxkIGlzIGEgcmVnaXN0ZXIgYml0bWFzayAqL1xuIHN0cnVjdCBpbnNuX2xpdmVfcmVncyB7XG4tXHR1MTYgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbi1cdHUxNiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuLVx0dTE2IGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4tXHR1MTYgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIHVzZTtcdC8qIHJlZ2lzdGVycyByZWFkIGJ5IGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIGRlZjtcdC8qIHJlZ2lzdGVycyB3cml0dGVuIGJ5IGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIG91dDtcdC8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqL1xuIH07XG4gXG4gLyogQml0bWFzayB3aXRoIDFzIGZvciBhbGwgY2FsbGVyIHNhdmVkIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQUxMX0NBTExFUl9TQVZFRF9SRUdTICgoMXUgXHUwMDNjXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTKSAtIDEpXG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIHJlZzMyX21hc2sodTMyIG4pIHsgcmV0dXJuIEJJVChuKTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHUzMiByZWc2NF9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobikgfCBCSVQobiAmIzQzOyAxNik7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MzIgbWFza193aWRlbih1MzIgbSkgeyByZXR1cm4gbSB8IChtIFx1MDAzY1x1MDAzYyAxNik7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTE2IG1hc2tfaGkodTMyIG0pIHsgcmV0dXJuICh1MTYpKG0gXHUwMDNlXHUwMDNlIDE2KTsgfVxuJiM0MztcbiYjNDM7LyogSW5mZXIgdXNlIG1hc2sgYmFzZWQgb24gbnVtYmVyIGFuZCBzaXplcyBvZiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4gKi9cbiYjNDM7c3RhdGljIHUzMiBjYWxsX3VzZV9tYXNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7e1xuJiM0MztcdHUzMiBpLCB1c2UsIHNpemUsIHJlZ19wYXJhbXNfbnVtO1xuJiM0MztcdHN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKnA7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwZl9nZXRfY2FsbF9zdW1tYXJ5KGVudiwgaW5zbiwgXHUwMDI2Y3MpKVxuJiM0MztcdFx0LyogZS5nLiBhIGJwZi10by1icGYgY2FsbCwgYXNzdW1lIHRoYXQgY2FsbHMgdXNlIGZ1bGwgNjQtYml0IGZvciBlYWNoIHBhcmFtICovXG4mIzQzO1x0XHRyZXR1cm4gbWFza193aWRlbihBTExfQ0FMTEVSX1NBVkVEX1JFR1MgXHUwMDI2IH5CSVQoQlBGX1JFR18wKSk7XG4mIzQzO1xuJiM0MztcdGlmIChjcy5mdW5jX3Byb3RvKSB7XG4mIzQzO1x0XHR1c2UgPSAwO1xuJiM0MztcdFx0cCA9IGJ0Zl9wYXJhbXMoY3MuZnVuY19wcm90byk7XG4mIzQzO1x0XHRyZWdfcGFyYW1zX251bSA9IG1pbihidGZfdHlwZV92bGVuKGNzLmZ1bmNfcHJvdG8pLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVnX3BhcmFtc19udW07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHQgPSBidGZfdHlwZV9ieV9pZChjcy5idGYsIHBbaV0udHlwZSk7XG4mIzQzO1x0XHRcdGlmIChJU19FUlIoYnRmX3Jlc29sdmVfc2l6ZShjcy5idGYsIHQsIFx1MDAyNnNpemUpKSlcbiYjNDM7XHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuJiM0MztcdFx0XHR1c2UgfD0gc2l6ZSBcdTAwM2M9IHNpemVvZih1MzIpID8gcmVnMzJfbWFzayhpICYjNDM7IDEpIDogcmVnNjRfbWFzayhpICYjNDM7IDEpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIHVzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztmYWxsYmFjazpcbiYjNDM7XHQvKiBieSBkZWZhdWx0IGFzc3VtZSB0aGF0IGNhbGxzIHVzZSBmdWxsIDY0LWJpdCBmb3IgZWFjaCBwYXJhbSAqL1xuJiM0MztcdHJldHVybiBtYXNrX3dpZGVuKEdFTk1BU0sobWluX3QodTgsIGNzLm51bV9wYXJhbXMsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyksIDEpKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBDb21wdXRlIGluZm8tXHUwMDNle3VzZSxkZWZ9IGZpZWxkcyBmb3IgdGhlIGluc3RydWN0aW9uICovXG4gc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgc3RydWN0IGluc25fbGl2ZV9yZWdzICppbmZvKVxuIHtcbi1cdHN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzO1xuLVx0dTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpO1xuLVx0dTE2IHNyYyA9IEJJVChpbnNuLVx1MDAzZXNyY19yZWcpO1xuLVx0dTE2IGRzdCA9IEJJVChpbnNuLVx1MDAzZWRzdF9yZWcpO1xuLVx0dTE2IHIwICA9IEJJVCgwKTtcbi1cdHUxNiBkZWYgPSAwO1xuLVx0dTE2IHVzZSA9IDB4ZmZmZjtcbiYjNDM7XHRjb25zdCB1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdGNvbnN0IHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1OCBzaXplID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1MzIgc3JjID0gcmVnNjRfbWFzayhpbnNuLVx1MDAzZXNyY19yZWcpO1xuJiM0MztcdGNvbnN0IHUzMiBkc3QgPSByZWc2NF9tYXNrKGluc24tXHUwMDNlZHN0X3JlZyk7XG4mIzQzO1x0Y29uc3QgdTMyIHNyYzMyID0gbWFza19sbyhzcmMpO1xuJiM0MztcdGNvbnN0IHUzMiBkc3QzMiA9IG1hc2tfbG8oZHN0KTtcbiYjNDM7XHRjb25zdCB1MzIgcjAgID0gcmVnNjRfbWFzaygwKTtcbiYjNDM7XHR1MzIgZGVmID0gMDtcbiYjNDM7XHR1MzIgdXNlID0gVTMyX01BWDtcbiBcbiBcdHN3aXRjaCAoY2xhc3MpIHtcbiBcdGNhc2UgQlBGX0xEOlxuQEAgLTIwODMsOCAmIzQzOzIxMTgsOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHR1c2UgPSAwO1xuIFx0XHRcdH1cbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfTEQgfCBCUEZfQUJTOlxuLVx0XHRjYXNlIEJQRl9MRCB8IEJQRl9JTkQ6XG4mIzQzO1x0XHRjYXNlIEJQRl9BQlM6XG4mIzQzO1x0XHRjYXNlIEJQRl9JTkQ6XG4gXHRcdFx0Lyogc3RpY2sgd2l0aCBkZWZhdWx0cyAqL1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMjA5Miw3ICYjNDM7MjEyNywxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRjYXNlIEJQRl9MRFg6XG4gXHRcdHN3aXRjaCAobW9kZSkge1xuIFx0XHRjYXNlIEJQRl9NRU06XG4mIzQzO1x0XHRcdC8qIGEgbmFycm93IGxvYWQgc3RpbGwgcmVkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlciAqL1xuJiM0MztcdFx0XHRkZWYgPSBkc3Q7XG4mIzQzO1x0XHRcdHVzZSA9IHNyYztcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX01FTVNYOlxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBzaWduIGV4dGVuc2lvbiBkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlcjtcbiYjNDM7XHRcdFx0ICogc3JjIGhvbGRzIGEgcG9pbnRlciwgaGVuY2UgaXMgdXNlZCBhcyA2NC1iaXQuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdGRlZiA9IGRzdDtcbiBcdFx0XHR1c2UgPSBzcmM7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMjExMCwxMiAmIzQzOzIxNTMsMTkgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBCUEZfTUVNOlxuIFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuJiM0MztcdFx0XHR1c2UgPSBkc3QgfCAoc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMik7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0FUT01JQzpcbiYjNDM7XHRcdGNhc2UgQlBGX0FUT01JQzoge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBkc3QgaG9sZHMgYSBwb2ludGVyIGFuZCBpcyBhbHdheXMgdXNlZCBhcyA2NC1iaXQ7XG4mIzQzO1x0XHRcdCAqIHRoZSB2YWx1ZSBvcGVyYW5kIGFuZCByMCBhcmUgcmVhZCBhcyAzMi1iaXQgZm9yIEJQRl9XIGF0b21pY3MuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR1MzIgc3JjdiA9IHNpemUgPT0gQlBGX0RXID8gc3JjIDogc3JjMzI7XG4mIzQzO1x0XHRcdHUzMiByMHYgID0gc2l6ZSA9PSBCUEZfRFcgPyByMCA6IG1hc2tfbG8ocjApO1xuJiM0MztcbiBcdFx0XHRzd2l0Y2ggKGluc24tXHUwMDNlaW1tKSB7XG4gXHRcdFx0Y2FzZSBCUEZfQ01QWENIRzpcbi1cdFx0XHRcdHVzZSA9IHIwIHwgZHN0IHwgc3JjO1xuJiM0MztcdFx0XHRcdHVzZSA9IHIwdiB8IGRzdCB8IHNyY3Y7XG4gXHRcdFx0XHRkZWYgPSByMDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgQlBGX0xPQURfQUNROlxuQEAgLTIxMjQsMTAgJiM0MzsyMTc0LDEwIEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgQlBGX1NUT1JFX1JFTDpcbiBcdFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4mIzQzO1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGRlZmF1bHQ6XG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4mIzQzO1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKVxuIFx0XHRcdFx0XHRkZWYgPSBzcmM7XG4gXHRcdFx0XHRlbHNlXG5AQCAtMjEzNSw2ICYjNDM7MjE4NSw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9BTFU6XG4gXHRjYXNlIEJQRl9BTFU2NDpcbkBAIC0yMTQ4LDE0ICYjNDM7MjE5OSwxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbiBcdFx0XHRcdHVzZSA9IDA7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0dXNlID0gc3JjO1xuJiM0MztcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IHNyYyA6IHNyYzMyO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGRlZiA9IGRzdDtcbiBcdFx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9LKVxuLVx0XHRcdFx0dXNlID0gZHN0O1xuJiM0MztcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IGRzdCA6IGRzdDMyO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdHVzZSA9IGRzdCB8IHNyYztcbiYjNDM7XHRcdFx0XHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyAoZHN0IHwgc3JjKSA6IChkc3QzMiB8IHNyYzMyKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0pNUDpcbkBAIC0yMTc3LDE3ICYjNDM7MjIyOCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0dXNlID0gcjA7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX0NBTEw6XG4tXHRcdFx0ZGVmID0gQUxMX0NBTExFUl9TQVZFRF9SRUdTO1xuLVx0XHRcdHVzZSA9IGRlZiBcdTAwMjYgfkJJVChCUEZfUkVHXzApO1xuLVx0XHRcdGlmIChicGZfZ2V0X2NhbGxfc3VtbWFyeShlbnYsIGluc24sIFx1MDAyNmNzKSlcbi1cdFx0XHRcdHVzZSA9IEdFTk1BU0sobWluX3QodTgsIGNzLm51bV9wYXJhbXMsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyksIDEpO1xuJiM0MztcdFx0XHRkZWYgPSBtYXNrX3dpZGVuKEFMTF9DQUxMRVJfU0FWRURfUkVHUyk7XG4mIzQzO1x0XHRcdHVzZSA9IGNhbGxfdXNlX21hc2soZW52LCBpbnNuKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRkZWYgPSAwO1xuIFx0XHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0spXG4gXHRcdFx0XHR1c2UgPSBkc3Q7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuJiM0MztcdFx0XHRcdHVzZSA9IGRzdCB8IChjb2RlID09IEJQRl9KTVAzMiA/IHNyYyA6IHNyYzMyKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0yMjA5LDYgJiM0MzsyMjU4LDcgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuIFx0c3RydWN0IGluc25fbGl2ZV9yZWdzICpzdGF0ZTtcbiBcdGludCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiYjNDM7XHR1NjQgcG9zLCBpbnNuX3BvcztcbiBcdGludCBlcnIgPSAwLCBpLCBqO1xuIFx0Ym9vbCBjaGFuZ2VkO1xuIFxuQEAgLTIyNTIsOCAmIzQzOzIzMDIsOCBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnQgaW5zbl9pZHggPSBlbnYtXHUwMDNlY2ZnLmluc25fcG9zdG9yZGVyW2ldO1xuIFx0XHRcdHN0cnVjdCBpbnNuX2xpdmVfcmVncyAqbGl2ZSA9IFx1MDAyNnN0YXRlW2luc25faWR4XTtcbiBcdFx0XHRzdHJ1Y3QgYnBmX2lhcnJheSAqc3VjYztcbi1cdFx0XHR1MTYgbmV3X291dCA9IDA7XG4tXHRcdFx0dTE2IG5ld19pbiA9IDA7XG4mIzQzO1x0XHRcdHUzMiBuZXdfb3V0ID0gMDtcbiYjNDM7XHRcdFx0dTMyIG5ld19pbiA9IDA7XG4gXG4gXHRcdFx0c3VjYyA9IGJwZl9pbnNuX3N1Y2Nlc3NvcnMoZW52LCBpbnNuX2lkeCk7XG4gXHRcdFx0Zm9yIChpbnQgcyA9IDA7IHMgXHUwMDNjIHN1Y2MtXHUwMDNlY250OyAmIzQzOyYjNDM7cylcbkBAIC0yMjY3LDggJiM0MzsyMzE3LDIwIEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgJiM0MzsmIzQzO2kpXG4tXHRcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBzdGF0ZVtpXS5pbjtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdGludCBkZWYzMiA9IGJwZl9pbnNuX2RlZjMyKFx1MDAyNmluc25zW2ldKTtcbiYjNDM7XHRcdHUzMiBvdXQgPSBzdGF0ZVtpXS5vdXQ7XG4mIzQzO1x0XHR1MzIgaW4gPSBzdGF0ZVtpXS5pbjtcbiYjNDM7XG4mIzQzO1x0XHRpbnNuX2F1eFtpXS5saXZlX3JlZ3NfYmVmb3JlID0gbWFza19sbyhpbikgfCBtYXNrX2hpKGluKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBPbiBhcmNoaXRlY3R1cmVzIHdoZXJlIDMyLWJpdCBvcGVyYXRpb25zIGRvIG5vdCByZXNldCB1cHBlciBoYWx2ZXNcbiYjNDM7XHRcdCAqIG9mIHRoZSByZWdpc3RlcnMsIHRoZSB2ZXJpZmllciBuZWVkcyB0byB6ZXJvIGV4dGVuZCBhIGRlc3RpbmF0aW9uXG4mIzQzO1x0XHQgKiByZWdpc3RlciBpZiBhbiBpbnN0cnVjdGlvbiBkZWZpbmVzIGEgMzItYml0IHN1YnJlZ2lzdGVyIGFuZCB0aGVcbiYjNDM7XHRcdCAqIHVwcGVyIGhhbGYgb2YgdGhhdCByZWdpc3RlciBpcyBhbGl2ZSBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGluc25fYXV4W2ldLnpleHRfZHN0ID0gZGVmMzIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiAobWFza19oaShvdXQpIFx1MDAyNiBCSVQoZGVmMzIpKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTDIpIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0xpdmUgcmVncyBiZWZvcmUgaW5zbjpcXG5cJiMzNDspO1xuQEAgLTIyODQsNyAmIzQzOzIzNDYsMTIgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRlbHNlXG4gXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDsuXCYjMzQ7KTtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7IFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHBvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXHUwMDI2aW5zbnNbaV0pO1xuJiM0MztcdFx0XHRpbnNuX3BvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbiYjNDM7XHRcdFx0aWYgKGluc25fYXV4W2ldLnpleHRfZHN0KVxuJiM0MztcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslKmM7IHpleHRcJiMzNDssIGJwZl92bG9nX2FsaWdubWVudChpbnNuX3BvcyAtIHBvcyksICYjMzk7ICYjMzk7KTtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHRcdFx0aWYgKGJwZl9pc19sZGltbTY0KFx1MDAyNmluc25zW2ldKSlcbiBcdFx0XHRcdGkmIzQzOyYjNDM7O1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlNmYzNWY0ZTcxNWI2Li5kNWI2ZmVmMWFkODk3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yMTI5LDEyICYjNDM7MjEyOSw5IEBAIHN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiAvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xuIHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4ge1xuLVx0czMyIHN1YnJlZ19kZWYgPSByZWctXHUwMDNlc3VicmVnX2RlZjtcbi1cbiBcdG1lbXNldChyZWcsIDAsIHNpemVvZigqcmVnKSk7XG4gXHRyZWctXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcbiBcdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV91bmtub3duO1xuLVx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmO1xuIFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcbiB9XG4gXG5AQCAtMjIxMCw3ICYjNDM7MjIwNyw2IEBAIHN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR9XG4gfVxuIFxuLSNkZWZpbmUgREVGX05PVF9TVUJSRUdcdCgwKVxuIHN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSlcbiB7XG5AQCAtMjIxOSw3ICYjNDM7MjIxNSw2IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfQlBGX1JFRzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tpXSk7XG4tXHRcdHJlZ3NbaV0uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0fVxuIFxuIFx0LyogZnJhbWUgcG9pbnRlciAqL1xuQEAgLTMwMzMsMTEgJiM0MzszMDI4LDEwIEBAIHN0YXRpYyB2b2lkIG1hcmtfc3RhY2tfc2xvdHNfc2NyYXRjaGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gfVxuIFxuIC8qIFRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBieSB0aGUgZm9sbG93aW5nIDMyLWJpdCBvcHRpbWl6YXRpb25cbi0gKiBjb2RlIG9ubHkuIEl0IHJldHVybnMgVFJVRSBpZiB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzXG4tICogb24gNjQtYml0LCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLlxuJiM0MzsgKiBjb2RlIG9ubHkuIEl0IHJldHVybnMgVFJVRSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXMgb24gNjQtYml0LFxuJiM0MzsgKiBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLlxuICAqL1xuLWJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi1cdCAgICAgIHUzMiByZWdubywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpXG4mIzQzO2Jvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4gXHR1OCBjb2RlLCBjbGFzcywgb3A7XG4gXG5AQCAtMzA1OCwxMSAmIzQzOzMwNTIsNiBAQCBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdFx0LyogSGVscGVyIGNhbGwgd2lsbCByZWFjaCBoZXJlIGJlY2F1c2Ugb2YgYXJnIHR5cGVcbi1cdFx0XHQgKiBjaGVjaywgY29uc2VydmF0aXZlbHkgcmV0dXJuIFRSVUUuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHQgPT0gU1JDX09QKVxuLVx0XHRcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG5AQCAtMzA3OCwyMiAmIzQzOzMwNjcsMTEgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0aWYgKGNsYXNzID09IEJQRl9BTFUgfHwgY2xhc3MgPT0gQlBGX0pNUDMyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuLVx0XHRpZiAodCAhPSBTUkNfT1ApXG4tXHRcdFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7XG4tXHRcdC8qIExEWCBzb3VyY2UgbXVzdCBiZSBwdHIuICovXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuJiM0MztcdGlmIChjbGFzcyA9PSBCUEZfTERYKVxuJiM0MztcdFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7XG4gXG4tXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xuLVx0XHQvKiBCUEZfU1RYIChpbmNsdWRpbmcgYXRvbWljIHZhcmlhbnRzKSBoYXMgb25lIG9yIG1vcmUgc291cmNlXG4tXHRcdCAqIG9wZXJhbmRzLCBvbmUgb2Ygd2hpY2ggaXMgYSBwdHIuIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxlciBpc1xuLVx0XHQgKiBhc2tpbmcgYWJvdXQgaXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAodCA9PSBTUkNfT1AgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoY2xhc3MgPT0gQlBGX1NUWClcbiBcdFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVztcbi1cdH1cbiBcbiBcdGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiBcdFx0dTggbW9kZSA9IEJQRl9NT0RFKGNvZGUpO1xuQEAgLTMxMDMsMTUgJiM0MzszMDgxLDcgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0XHQvKiBCb3RoIExEX0lORCBhbmQgTERfQUJTIHJldHVybiAzMi1iaXQgZGF0YS4gKi9cbi1cdFx0aWYgKHQgIT0gU1JDX09QKVxuLVx0XHRcdHJldHVybiAgZmFsc2U7XG4tXG4tXHRcdC8qIEltcGxpY2l0IGN0eCBwdHIuICovXG4tXHRcdGlmIChyZWdubyA9PSBCUEZfUkVHXzYpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdC8qIEV4cGxpY2l0IHNvdXJjZSBjb3VsZCBiZSBhbnkgd2lkdGguICovXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0aWYgKGNsYXNzID09IEJQRl9TVClcbkBAIC0zMTIyLDMwICYjNDM7MzA5MiwxNCBAQCBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFya19pbnNuX3pleHQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLXtcbi1cdHMzMiBkZWZfaWR4ID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4tXG4tXHRpZiAoZGVmX2lkeCA9PSBERUZfTk9UX1NVQlJFRylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbZGVmX2lkeCAtIDFdLnpleHRfZHN0ID0gdHJ1ZTtcbi1cdC8qIFRoZSBkc3Qgd2lsbCBiZSB6ZXJvIGV4dGVuZGVkLCBzbyB3b24mIzM5O3QgYmUgc3ViLXJlZ2lzdGVyIGFueW1vcmUuICovXG4tXHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuLX1cbi1cbiBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLFxuIFx0XHRcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuIHtcbi1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaSAmIzQzOyBlbnYtXHUwMDNlaW5zbl9pZHg7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuLVx0Ym9vbCBydzY0O1xuIFxuIFx0bWFya19yZWdfc2NyYXRjaGVkKGVudiwgcmVnbm8pO1xuIFxuIFx0cmVnID0gXHUwMDI2cmVnc1tyZWdub107XG4tXHRydzY0ID0gYnBmX2lzX3JlZzY0KGluc24sIHJlZ25vLCByZWcsIHQpO1xuIFx0aWYgKHQgPT0gU1JDX09QKSB7XG4gXHRcdC8qIGNoZWNrIHdoZXRoZXIgcmVnaXN0ZXIgdXNlZCBhcyBzb3VyY2Ugb3BlcmFuZCBjYW4gYmUgcmVhZCAqL1xuIFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgPT0gTk9UX0lOSVQpIHtcbkBAIC0zMTU2LDkgJiM0MzszMTEwLDYgQEAgc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJcbiBcdFx0aWYgKHJlZ25vID09IEJQRl9SRUdfRlApXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRcdGlmIChydzY0KVxuLVx0XHRcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcbi1cbiBcdFx0cmV0dXJuIDA7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgZGVzdCBvcGVyYW5kIGNhbiBiZSB3cml0dGVuIHRvICovXG5AQCAtMzE2Niw3ICYjNDM7MzExNyw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2ZyYW1lIHBvaW50ZXIgaXMgcmVhZCBvbmx5XFxuXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuLVx0XHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHJ3NjQgPyBERUZfTk9UX1NVQlJFRyA6IGVudi1cdTAwM2VpbnNuX2lkeCAmIzQzOyAxO1xuIFx0XHRpZiAodCA9PSBEU1RfT1ApXG4gXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJlZ25vKTtcbiBcdH1cbkBAIC0zODIyLDExICYjNDM7Mzc3Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcbiBcdFx0XHRpZiAoc2l6ZSBcdTAwM2M9IHNwaWxsX3NpemUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIGJwZl9zdGFja19uYXJyb3dfYWNjZXNzX29rKG9mZiwgc2l6ZSwgc3BpbGxfc2l6ZSkpIHtcbi1cdFx0XHRcdC8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGVcbi1cdFx0XHRcdCAqIHN1YnJlZ19kZWYgZm9yIHRoaXMgaW5zbi4gIFNhdmUgaXQgZmlyc3QuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHMzMiBzdWJyZWdfZGVmID0gc3RhdGUtXHUwMDNlcmVnc1tkc3RfcmVnbm9dLnN1YnJlZ19kZWY7XG4tXG4gXHRcdFx0XHRpZiAoZW52LVx1MDAzZWJwZl9jYXBhYmxlIFx1MDAyNlx1MDAyNiBzaXplID09IDQgXHUwMDI2XHUwMDI2IHNwaWxsX3NpemUgPT0gNCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICBnZXRfcmVnX3dpZHRoKHJlZykgXHUwMDNjPSAzMilcbiBcdFx0XHRcdFx0LyogRW5zdXJlIHN0YWNrIHNsb3QgaGFzIGFuIElEIHRvIGJ1aWxkIGEgcmVsYXRpb25cbkBAIC0zODM0LDcgJiM0MzszNzc5LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbiBcdFx0XHRcdHN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSA9ICpyZWc7XG4tXHRcdFx0XHRzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10uc3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7XG4gXG4gXHRcdFx0XHQvKiBCcmVhayB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgZmlsbC5cbiBcdFx0XHRcdCAqIGNvZXJjZV9yZWdfdG9fc2l6ZSB3aWxsIGFkanVzdCB0aGUgYm91bmRhcmllcy5cbkBAIC02MjcxLDEyICYjNDM7NjIxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLFxuIFx0XHRcdFx0XHRcdCAgICB2YWx1ZV9yZWdubyk7XG4tXHRcdFx0XHQvKiBBIGxvYWQgb2YgY3R4IGZpZWxkIGNvdWxkIGhhdmUgZGlmZmVyZW50XG4tXHRcdFx0XHQgKiBhY3R1YWwgbG9hZCBzaXplIHdpdGggdGhlIG9uZSBlbmNvZGVkIGluIHRoZVxuLVx0XHRcdFx0ICogaW5zbi4gV2hlbiB0aGUgZHN0IGlzIFBUUiwgaXQgaXMgZm9yIHN1cmUgbm90XG4tXHRcdFx0XHQgKiBhIHN1Yi1yZWdpc3Rlci5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0aWYgKGJhc2VfdHlwZShpbmZvLnJlZ190eXBlKSA9PSBQVFJfVE9fQlRGX0lEKSB7XG4gXHRcdFx0XHRcdHJlZ3NbdmFsdWVfcmVnbm9dLmJ0ZiA9IGluZm8uYnRmO1xuIFx0XHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5idGZfaWQgPSBpbmZvLmJ0Zl9pZDtcbkBAIC03MzgwLDEwICYjNDM7NzMxOCw2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0XG4gXHRcdFx0aWYgKHNwaSBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiBzcGk7XG4gXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBGb3IgQ09OU1RfUFRSX1RPX0RZTlBUUiwgcmVnIGlzIGFscmVhZHkgc2NyYXRjaGVkIGJ5IGNoZWNrX3JlZ19hcmdcbi1cdFx0XHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxuLVx0XHRcdCAqL1xuIFx0XHRcdG1hcmtfc3RhY2tfc2xvdHNfc2NyYXRjaGVkKGVudiwgc3BpLCBCUEZfRFlOUFRSX05SX1NMT1RTKTtcbiBcbiBcdFx0XHRyZWcgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuQEAgLTk0NjMsNyAmIzQzOzkzOTcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdC8qIEFsbCBub24tdm9pZCBnbG9iYWwgZnVuY3Rpb25zIHJldHVybiBhIDY0LWJpdCBTQ0FMQVJfVkFMVUUuICovXG4gXHRcdGlmICghc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKSkge1xuIFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItXHUwMDNlcmVncywgQlBGX1JFR18wKTtcbi1cdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdFx0fVxuIFxuIFx0XHRpZiAoZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5taWdodF90aHJvdykge1xuQEAgLTEwNDgyLDkgJiM0MzsxMDQxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXHR9XG4gXHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjdXJfZnVuYyhlbnYpKTtcbiBcbi1cdC8qIGhlbHBlciBjYWxsIHJldHVybnMgNjQtYml0IHZhbHVlLiAqL1xuLVx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbi1cbiBcdC8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovXG4gXHRyZXRfdHlwZSA9IGZuLVx1MDAzZXJldF90eXBlO1xuIFx0cmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpO1xuQEAgLTEwNzIyLDMwICYjNDM7MTA2NTIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoKSBpcyB1c2VkIHdoZW4gdGhlIHJlZyBzaXplIGlzIGRldGVybWluZWQgYnlcbi0gKiB0aGUgQlRGIGZ1bmNfcHJvdG8mIzM5O3MgcmV0dXJuIHZhbHVlIHNpemUgYW5kIGFyZ3VtZW50LlxuLSAqL1xuLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyxcbi1cdFx0XHRcdCAgICAgdTMyIHJlZ25vLCBzaXplX3QgcmVnX3NpemUpXG4te1xuLVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IFx1MDAyNnJlZ3NbcmVnbm9dO1xuLVxuLVx0aWYgKHJlZ25vID09IEJQRl9SRUdfMCkge1xuLVx0XHQvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi9cbi1cdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSByZWdfc2l6ZSA9PSBzaXplb2YodTY0KSA/XG4tXHRcdFx0REVGX05PVF9TVUJSRUcgOiBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbi1cdH0gZWxzZSBpZiAocmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkpIHtcbi1cdFx0LyogRnVuY3Rpb24gYXJndW1lbnQgKi9cbi1cdFx0bWFya19pbnNuX3pleHQoZW52LCByZWcpO1xuLVx0fVxuLX1cbi1cbi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcbi1cdFx0XHRcdCAgIHNpemVfdCByZWdfc2l6ZSlcbi17XG4tXHRyZXR1cm4gX19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgY3VyX3JlZ3MoZW52KSwgcmVnbm8sIHJlZ19zaXplKTtcbi19XG4tXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYWNxdWlyZShzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4ge1xuIFx0cmV0dXJuIG1ldGEtXHUwMDNla2Z1bmNfZmxhZ3MgXHUwMDI2IEtGX0FDUVVJUkU7XG5AQCAtMTI5NzQsNyAmIzQzOzEyODgwLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhO1xuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDtcbiBcdGludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7XG4tXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzO1xuIFx0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZDtcbiBcdHN0cnVjdCBidGYgKmRlc2NfYnRmO1xuIFx0aW50IGlkO1xuQEAgLTEzMDE4LDcgJiM0MzsxMjkyMyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2ZhaWxlZCB0byBtYXJrIHMzMiByYW5nZSBmb3IgcmV0dmFsIGluIGZvcmtlZCBzdGF0ZSBmb3IgbG9ja1xcblwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuLVx0XHRfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdzLCBCUEZfUkVHXzAsIHNpemVvZih1MzIpKTtcbiBcdH0gZWxzZSBpZiAoIWluc24tXHUwMDNlb2ZmIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfX19icGZfdHJhcF0pIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3VuZXhwZWN0ZWQgX19icGZfdHJhcCgpIGR1ZSB0byB1bmluaXRpYWxpemVkIHZhcmlhYmxlP1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTEzMTY4LDcgJiM0MzsxMzA3Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdHUzMiByZWdubyA9IGNhbGxlcl9zYXZlZFtpXTtcbiBcbiBcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tyZWdub10pO1xuLVx0XHRyZWdzW3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHR9XG4gXHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjdXJfZnVuYyhlbnYpKTtcbiBcbkBAIC0xMzE5MCw3ICYjNDM7MTMwOTMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRpZiAobWV0YS5idGYgPT0gYnRmX3ZtbGludXggXHUwMDI2XHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxuIFx0XHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXG4gXHRcdFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcbi1cdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgdC1cdTAwM2VzaXplKTtcbiBcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4gXHRcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2cHRyX3R5cGVfaWQpO1xuIFx0XHRlcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XG5AQCAtMTMyODEsNyAmIzQzOzEzMTgzLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHQvKiBGb3IgbWFya19wdHJfb3JfbnVsbF9yZWcsIHNlZSA5M2MyMzBlM2Y1YmQ2ICovXG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4gXHRcdH1cbi1cdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgc2l6ZW9mKHZvaWQgKikpO1xuIFx0XHRpZiAoaXNfa2Z1bmNfYWNxdWlyZShcdTAwMjZtZXRhKSkge1xuIFx0XHRcdGlkID0gYWNxdWlyZV9yZWZlcmVuY2UoZW52LCBpbnNuX2lkeCwgMCk7XG4gXHRcdFx0aWYgKGlkIFx1MDAzYyAwKVxuQEAgLTEzMzE4LDE4ICYjNDM7MTMyMTksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdGNhbGxlcl9pbmZvLVx1MDAzZXN0YWNrX2FyZ19jbnQgPSBzdGFja19hcmdfY250O1xuIFx0fVxuIFxuLVx0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEuZnVuY19wcm90byAmIzQzOyAxKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbl90KGludCwgbmFyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHUzMiByZWdubyA9IGkgJiM0MzsgMTtcbi1cbi1cdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xuLVx0XHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKVxuLVx0XHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgc2l6ZW9mKHZvaWQgKikpO1xuLVx0XHRlbHNlXG4tXHRcdFx0Lyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqL1xuLVx0XHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgdC1cdTAwM2VzaXplKTtcbi1cdH1cbi1cbiBcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpKSB7XG4gXHRcdGVyciA9IHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoZW52LCBpbnNuX2lkeCwgXHUwMDI2bWV0YSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtMTQ4MjMsOCAmIzQzOzE0NzEyLDYgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRpZiAoZHN0X3JlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSlcbiBcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuIFxuLVx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbi1cbiBcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NClcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LlxuQEAgLTE1MDI4LDggJiM0MzsxNDkxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSAxKSB7IC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqL1xuIFx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNldHlwZSA9IFBUUl9UT19BUkVOQTtcbi1cdFx0XHRcdFx0XHQvKiBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovXG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2VvZmYgPT0gMCkge1xuIFx0XHRcdFx0XHQvKiBjYXNlOiBSMSA9IFIyXG5AQCAtMTUwMzcsNyAmIzQzOzE0OTIyLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4gXHRcdFx0XHRcdCpkc3RfcmVnID0gKnNyY19yZWc7XG4tXHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0LyogY2FzZTogUjEgPSAoczgsIHMxNiBzMzIpUjIgKi9cbiBcdFx0XHRcdFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpKSB7XG5AQCAtMTUwNTUsNyAmIzQzOzE0OTM5LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdGlmICghbm9fc2V4dClcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbiBcdFx0XHRcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuLVx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHRcdFx0XHR9XG5AQCAtMTUwODAsNyAmIzQzOzE0OTYzLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdCAqL1xuIFx0XHRcdFx0XHRcdGlmICghaXNfc3JjX3JlZ191MzIpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4gXHRcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdFx0LyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqL1xuIFx0XHRcdFx0XHRcdGJvb2wgbm9fc2V4dCA9IHJlZ191bWF4KHNyY19yZWcpIFx1MDAzYyAoMVVMTCBcdTAwM2NcdTAwM2MgKGluc24tXHUwMDNlb2ZmIC0gMSkpO1xuQEAgLTE1MDkwLDcgJiM0MzsxNDk3Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuIFx0XHRcdFx0XHRcdGlmICghbm9fc2V4dClcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbiBcdFx0XHRcdFx0XHRjb2VyY2Vfc3VicmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2Uge1xuQEAgLTE1OTU5LDEyICYjNDM7MTU4NDAsOCBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoKCEocmVnLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSBcdTAwMjZcdTAwMjYgIShrbm93bl9yZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxuIFx0XHQgICAgcmVnLVx1MDAzZWRlbHRhID09IGtub3duX3JlZy1cdTAwM2VkZWx0YSkge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4tXG4gXHRcdFx0KnJlZyA9ICprbm93bl9yZWc7XG4tXHRcdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4gXHRcdFx0czMyIHNhdmVkX29mZiA9IHJlZy1cdTAwM2VkZWx0YTtcbiBcdFx0XHR1MzIgc2F2ZWRfaWQgPSByZWctXHUwMDNlaWQ7XG4gXG5AQCAtMTU5NzQsMTIgJiM0MzsxNTg1MSwxMSBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdC8qIHJlZyA9IGtub3duX3JlZzsgcmVnICYjNDM7PSBkZWx0YSAqL1xuIFx0XHRcdCpyZWcgPSAqa25vd25fcmVnO1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYsIGlkIGFuZCBzdWJyZWdfZGVmIGZsYWcsXG4tXHRcdFx0ICogb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpIHdpbGwgYmUgaW5jb3JyZWN0LlxuJiM0MztcdFx0XHQgKiBNdXN0IHByZXNlcnZlIG9mZiBhbmQgaWQsIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKVxuJiM0MztcdFx0XHQgKiB3aWxsIGJlIGluY29ycmVjdC5cbiBcdFx0XHQgKi9cbiBcdFx0XHRyZWctXHUwMDNlZGVsdGEgPSBzYXZlZF9vZmY7XG4gXHRcdFx0cmVnLVx1MDAzZWlkID0gc2F2ZWRfaWQ7XG4tXHRcdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmO1xuIFxuIFx0XHRcdHNjYWxhcjMyX21pbl9tYXhfYWRkKHJlZywgXHUwMDI2ZmFrZV9yZWcpO1xuIFx0XHRcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFx1MDAyNmZha2VfcmVnKTtcbkBAIC0xNjQxNCw4ICYjNDM7MTYyOTAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHQgKiBBbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlLlxuIFx0ICovXG4gXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbi1cdC8qIGxkX2FicyBsb2FkIHVwIHRvIDMyLWJpdCBza2IgZGF0YS4gKi9cbi1cdHJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4gXHQvKlxuIFx0ICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wXG4gXHQgKiB3aGljaCBtdXN0IGJlIGV4cGxvcmVkIGJ5IHRoZSB2ZXJpZmllciB3aGVuIGluIGEgc3VicHJvZy5cbkBAIC0xNjczMCwxMCAmIzQzOzE2NjA0LDExIEBAIGJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxuIFx0aW50IGk7XG4gXG4gXHRpZiAoYnBmX2hlbHBlcl9jYWxsKGNhbGwpKSB7XG4tXG4gXHRcdGlmIChicGZfZ2V0X2hlbHBlcl9wcm90byhlbnYsIGNhbGwtXHUwMDNlaW1tLCBcdTAwMjZmbikgXHUwMDNjIDApXG4gXHRcdFx0LyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi9cbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRjcy1cdTAwM2VidGYgPSBOVUxMO1xuJiM0MztcdFx0Y3MtXHUwMDNlZnVuY19wcm90byA9IE5VTEw7XG4gXHRcdGNzLVx1MDAzZWZhc3RjYWxsID0gZm4tXHUwMDNlYWxsb3dfZmFzdGNhbGwgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIChicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGNhbGwtXHUwMDNlaW1tKSB8fFxuIFx0XHRcdFx0YnBmX2ppdF9pbmxpbmVzX2hlbHBlcl9jYWxsKGNhbGwtXHUwMDNlaW1tKSk7XG5AQCAtMTY3NTQsNiAmIzQzOzE2NjI5LDggQEAgYm9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0LyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi9cbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRjcy1cdTAwM2VidGYgPSBtZXRhLmJ0ZjtcbiYjNDM7XHRcdGNzLVx1MDAzZWZ1bmNfcHJvdG8gPSBtZXRhLmZ1bmNfcHJvdG87XG4gXHRcdGNzLVx1MDAzZW51bV9wYXJhbXMgPSBidGZfdHlwZV92bGVuKG1ldGEuZnVuY19wcm90byk7XG4gXHRcdGNzLVx1MDAzZWZhc3RjYWxsID0gbWV0YS5rZnVuY19mbGFncyBcdTAwMjYgS0ZfRkFTVENBTEw7XG4gXHRcdGNzLVx1MDAzZWlzX3ZvaWQgPSBidGZfdHlwZV9pc192b2lkKGJ0Zl90eXBlX2J5X2lkKG1ldGEuYnRmLCBtZXRhLmZ1bmNfcHJvdG8tXHUwMDNldHlwZSkpO1xuQEAgLTE3NDc1LDYgJiM0MzsxNzM1Miw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRlbnYtXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslZDogXCYjMzQ7LCBlbnYtXHUwMDNlaW5zbl9pZHgpO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHRcdFx0ZW52LVx1MDAzZXByZXZfaW5zbl9wcmludF9wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSBlbnYtXHUwMDNlcHJldl9sb2dfcG9zO1xuIFx0XHRcdGVudi1cdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbmluZGV4IDVlN2NiOGIzNmZlZjIuLjdiMzNkODQ3ZDgwMGMgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xuQEAgLTEyOSwxNiAmIzQzOzEyOSwxMCBAQCBwcmludF9pbnNuX2Zvcl9ncmFwaCh2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHN0YXRpYyB2b2lkIF9fcHJpbnRmKDIsIDMpXG4gcHJpbnRfaW5zbl9qc29uKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4ge1xuLVx0dW5zaWduZWQgaW50IGwgPSBzdHJsZW4oZm10KTtcbi1cdGNoYXIgY2hvbXBlZF9mbXRbbF07XG4gXHR2YV9saXN0IGFyZ3M7XG4gXG4gXHR2YV9zdGFydChhcmdzLCBmbXQpO1xuLVx0aWYgKGwgXHUwMDNlIDApIHtcbi1cdFx0c3RybmNweShjaG9tcGVkX2ZtdCwgZm10LCBsIC0gMSk7XG4tXHRcdGNob21wZWRfZm10W2wgLSAxXSA9ICYjMzk7XFwwJiMzOTs7XG4tXHR9XG4tXHRqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGNob21wZWRfZm10LCBhcmdzKTtcbiYjNDM7XHRqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGZtdCwgYXJncyk7XG4gXHR2YV9lbmQoYXJncyk7XG4gfVxuIFxuQEAgLTM1MSw2ICYjNDM7MzQ1LDcgQEAgdm9pZCBkdW1wX3hsYXRlZF9wbGFpbihzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLFxuIFxuIFx0XHRwcmludGYoXCYjMzQ7JTR1OiBcJiMzNDssIGkpO1xuIFx0XHRwcmludF9icGZfaW5zbihcdTAwMjZjYnMsIGluc24gJiM0MzsgaSwgdHJ1ZSk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcbiBcdFx0aWYgKG9wY29kZXMpIHtcbiBcdFx0XHRwcmludGYoXCYjMzQ7ICAgICAgIFwmIzM0Oyk7XG5AQCAtNDE3LDYgJiM0Mzs0MTIsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX2Zvcl9ncmFwaChzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmX3N0YXJ0LCB2b2lkICpidWZfZW5kLFxuIFxuIFx0XHRwcmludGYoXCYjMzQ7JXU6IFwmIzM0OywgaW5zbl9vZmYpO1xuIFx0XHRwcmludF9icGZfaW5zbihcdTAwMjZjYnMsIGN1ciwgdHJ1ZSk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7XFxcXGxcXFxcXFxuXCYjMzQ7KTtcbiBcbiBcdFx0aWYgKG9wY29kZXMpIHtcbiBcdFx0XHRwcmludGYoXCYjMzQ7XFxcXCBcXFxcIFxcXFwgXFxcXCBcJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcbmluZGV4IGY1MjlmMWM4YzE3MWQuLjMwMjIxMzUyNTY4ZDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcbkBAIC01NSwxMCAmIzQzOzU1LDkgQEAgc3RydWN0IGJwZl9pbnNuICpkaXNhc21faW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcbiBcdCAqIGZvciBlYWNoIGluc3RydWN0aW9uIChGRiBzdGFuZHMgZm9yIGluc3RydWN0aW9uIGBjb2RlYCBieXRlKS5cbiBcdCAqIFJlbW92ZSB0aGUgcHJlZml4IGlucGxhY2UsIGFuZCBhbHNvIHNpbXBsaWZ5IGNhbGwgaW5zdHJ1Y3Rpb25zLlxuIFx0ICogRS5nLjogXCYjMzQ7KDg1KSBjYWxsIGZvbyMxMFwmIzM0OyAtXHUwMDNlIFwmIzM0O2NhbGwgZm9vXCYjMzQ7LlxuLVx0ICogQWxzbyByZW1vdmUgbmV3bGluZSBpbiB0aGUgZW5kICh0aGUgJiMzOTttYXgoc3RybGVuKGJ1ZikgLSAxLCAwKSYjMzk7IHRoaW5nKS5cbiBcdCAqL1xuIFx0cGZ4X2VuZCA9IGJ1ZiAmIzQzOyA1O1xuLVx0c2Z4X3N0YXJ0ID0gYnVmICYjNDM7IG1heCgoaW50KXN0cmxlbihidWYpIC0gMSwgMCk7XG4mIzQzO1x0c2Z4X3N0YXJ0ID0gYnVmICYjNDM7IChpbnQpc3RybGVuKGJ1Zik7XG4gXHRpZiAoc3RybmNtcChwZnhfZW5kLCBcJiMzNDtjYWxsIFwmIzM0OywgNSkgPT0gMCBcdTAwMjZcdTAwMjYgKHRtcCA9IHN0cnJjaHIoYnVmLCAmIzM5OyMmIzM5OykpKVxuIFx0XHRzZnhfc3RhcnQgPSB0bXA7XG4gXHRsZW4gPSBzZnhfc3RhcnQgLSBwZnhfZW5kO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCBiZTk3ZjY4ODdmMGU3Li5mYmE1NjJjODE5NjkxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTEyNCw2ICYjNDM7MTI0LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9qaXRfaW5saW5lLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2lycS5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl96ZXh0LnNrZWwuaFwmIzM0O1xuIFxuICNkZWZpbmUgTUFYX0VOVFJJRVMgMTFcbiBcbkBAIC0yNzcsNiAmIzQzOzI3OCw3IEBAIHZvaWQgdGVzdF9pcnEodm9pZClcdFx0XHQgICAgICB7IFJVTihpcnEpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX210dSh2b2lkKVx0XHQgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2ppdF9pbmxpbmUodm9pZCkgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9qaXRfaW5saW5lKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jdHhfcHRyX3BhcmFtKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2N0eF9wdHJfcGFyYW0pOyB9XG4mIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl96ZXh0KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyh2ZXJpZmllcl96ZXh0KTsgfVxuIFxuIHN0YXRpYyBpbnQgaW5pdF90ZXN0X3ZhbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY2hhciAqbWFwX25hbWUpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjRjODJhMzFlNjY4MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3pleHQuY1xuQEAgLTAsMCAmIzQzOzEsMjYwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXG4mIzQzO19fZmxhZyhCUEZfRl9URVNUX1JORF9ISTMyKVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbG9zdF9hY3Jvc3NfY2hlY2twb2ludCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfa3RpbWVfZ2V0X25zXTtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjggPSByMDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI2ID0gMHhkZWFkYmVlZmNhZmViYWJlIGxsO1x0LyogaW5qZWN0IHNvbWUgdmFsdWUgZm9yIHI2JiMzOTtzIHVwcGVyIGhhbGYgKi9cdFxcXG4mIzQzO1x0aWYgcjggIT0gMCBnb3RvIDFmO1x0XHQvKiBmYWxsLXRocm91Z2ggY2FjaGVkIGZpcnN0LCBicmFuY2ggcHJ1bmVkICovXHRcXFxuJiM0MztcdHI2ID0gMzI7XHRcdFx0LyogZnVsbCA2NC1iaXQgZGVmICovXHRcdFx0XHRcXFxuJiM0MztcdGdvdG8gMmY7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3NiA9IDMyO1x0XHRcdC8qIDMyLWJpdCBkZWYsIHpleHQgbWFyayBsb3N0ICovXHRcdFxcXG4mIzQzOzI6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByNjtcdFx0XHQvKiBidWdneSB2ZXJpZmllciBiZWxpZXZlZCB1cHBlciAzMiBiaXRzIGFyZSAwICovIFxcXG4mIzQzO1x0XHRcdFx0XHQvKiBhbmQgdGh1cyBkaWQgbm90IHplcm8gZXh0ZW5kZWQgdzYgPSAzMi4gKi9cdFxcXG4mIzQzO1x0cjAgXHUwMDNlXHUwMDNlPSAzMjtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9rdGltZV9nZXRfbnMpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLVx1MDAzZSB6ZXh0ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfYWx1MzJfaGlfdXNlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBvbmx5IGFzIDMyLWJpdCAtXHUwMDNlIG5vIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbm90X21zZyhcJiMzNDt3MSA9IHcwe3suKn19OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25vdF9tc2coXCYjMzQ7dzIgPSB3MXt7Lip9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfYWx1MzJfaGlfdW51c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHcxID0gdzA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0dzIgPSB3MTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiA2NC1iaXQgZGVmaW5pdGlvbiBpcyBuZXZlciB6ZXJvIGV4dGVuZGVkICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX25vdF9tc2coXCYjMzQ7cjEgPSByMHt7Lip9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfbW92NjQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4mIzQzO1x0cjEgPSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE5hcnJvdyBsb2FkIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O3IxID0gKih1MzIgKikocjEwIC04KXt7ICYjNDM7fX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19sb2FkX2hpX3VzZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Kih1NjQgKikocjEwIC0gOCkgPSByMDtcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAqKHUzMiAqKShyMTAgLSA4KTtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAzMi1iaXQgYXRvbWljIGZldGNoIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O3IxID0gYXRvbWljX2ZldGNoX2FkZCgodTMyICopKHIxMCAtOCksIHIxKXt7ICYjNDM7fX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2F0b21pY19mZXRjaDMyX2hpX3VzZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcdFx0XHRcdFxcXG4mIzQzO1x0dzEgPSAxO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0LjhieXRlICVbZmV0Y2hfYWRkMzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbV9pbnNuKGZldGNoX2FkZDMyLFxuJiM0MztcdFx0ICAgICBCUEZfQVRPTUlDX09QKEJQRl9XLCBCUEZfQUREIHwgQlBGX0ZFVENILCBCUEZfUkVHXzEwLCBCUEZfUkVHXzEsIC04KSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAzMi1iaXQgYXRvbWljIGNtcHhjaGcgcmVzdWx0IChyMCkgcmVhZCBhcyA2NC1iaXQgLVx1MDAzZSB6ZXh0ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDtyMCA9IGF0b21pY19jbXB4Y2hnKCh1MzIgKikocjEwIC04KSwgcjAsIHIxKXt7ICYjNDM7fX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2NtcHhjaGczMl9oaV91c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIxID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XHRcdFx0XHRcXFxuJiM0MztcdHcwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdC44Ynl0ZSAlW2NtcHhjaGczMl07XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gcjA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByMjtcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW1faW5zbihjbXB4Y2hnMzIsXG4mIzQzO1x0XHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9DTVBYQ0hHLCBCUEZfUkVHXzEwLCBCUEZfUkVHXzEsIC04KSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAzMi1iaXQgZGVmIGJlZm9yZSBhIGJyYW5jaCwgdXBwZXIgaGFsZiB1c2VkIG9uIG9uZSBicmFuY2ggLVx1MDAzZSB6ZXh0ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3NiA9IDMye3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfY2ZnX2hpX3VzZWRfb25lX2JyYW5jaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3NiA9IDMyO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHIwID09IDAgZ290byBsMF8lPTtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByNjtcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO2wwXyU9Olx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiByMSYjMzk7cyB1cHBlciBoYWxmIGlzIGRlYWQsIHNvICYjMzk7dzEgPSAxJiMzOTsgbXVzdCBOT1QgYmUgbWFya2VkIGZvciB6ZXJvIGV4dGVuc2lvbi4gKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbm90X21zZyhcJiMzNDt3MSA9IDF7ey4qfX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCBub196ZXh0X290aGVyX3JlZ19oaV91c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjYgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XFxcbiYjNDM7XHR3MSA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHI2O1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIExEX0FCUyBkZWZpbmVzIHIwOyB3aGVuIHIwIGlzIHJlYWQgYXMgNjQtYml0IGl0IG11c3QgYmUgemVybyBleHRlbmRlZCAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7cjAgPSAqKHU4ICopc2tiWzBde3suKn19OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgemV4dF9sZF9hYnNfaGlfdXNlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIxO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1OCAqKXNrYlswXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjcgPSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHI3O1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6OjogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEhlbHBlciBwYXJhbWV0ZXJzIGFyZSByZWFkIGFzIDY0LWJpdCAoY2FsbF91c2VfbWFzaygpIGZhbGxiYWNrKSAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7dzIgPSAxe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGhlbHBlcl9wYXJhbV9yZWFkX2FzXzY0Yml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIxID0gcjEwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIxICYjNDM7PSAtODtcdFx0XHRcdFx0XFxcbiYjNDM7XHR3MiA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX3RyYWNlX3ByaW50a107XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX3RyYWNlX3ByaW50aylcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX191c2VkIF9fbmFrZWQgaW50IHN1YnByb2dfcmVhZHNfYXJnX2FzXzY0Yml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyogc3VicHJvZ3JhbSBwYXJhbWV0ZXJzIGFyZSBjb25zZXJ2YXRpdmVseSByZWFkIGFzIDY0LWJpdCAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7dzEgPSB3MHt7ICYjNDM7fX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCBzdWJwcm9nX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4mIzQzO1x0dzEgPSB3MDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsIHN1YnByb2dfcmVhZHNfYXJnX2FzXzY0Yml0O1x0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2V4dGVybiBsb25nIGJwZl9rZnVuY19jYWxsX3Rlc3Q0KHNpZ25lZCBjaGFyIGEsIHNob3J0IGIsIGludCBjLCBsb25nIGQpIF9fa3N5bTtcbiYjNDM7XG4mIzQzOy8qIEZvcmNlIGtmdW5jIGV4dGVybiBCVEYgZ2VuZXJhdGlvbi4gKi9cbiYjNDM7aW50IF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyoga2Z1bmMgcGFyYW1ldGVycyBhcmUgcmVhZCBhY2NvcmRpbmcgdG8gdGhlaXIgQlRGIHR5cGUgd2lkdGggKi9cbiYjNDM7U0VDKFwmIzM0O3RjXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19ub3RfbXNnKFwmIzM0O3czID0gMXt7Lip9fTsgemV4dFwmIzM0OylcdFx0LyogaW50IGMgIC1cdTAwM2UgcmVhZCBhcyAzMi1iaXQgKi9cbiYjNDM7X19tc2coXCYjMzQ7dzQgPSAxe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcdFx0LyogbG9uZyBkIC1cdTAwM2UgcmVhZCBhcyA2NC1iaXQgKi9cbiYjNDM7X19uYWtlZCB2b2lkIGtmdW5jX3BhcmFtX3JlYWRfcGVyX2J0Zih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHR3MSA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3MiA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3MyA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3NCA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsIGJwZl9rZnVuY19jYWxsX3Rlc3Q0O1x0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyYjMzQ7LAogICAgJiMzNDtjb21wdXRlX2luc25fbGl2ZV9yZWdzJiMzNDssCiAgICAmIzM0O2NhbGxfdXNlX21hc2smIzM0OywKICAgICYjMzQ7YnBmX2luc25fZGVmMzImIzM0OywKICAgICYjMzQ7YnBmX2lzX3JlZzY0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIHplcm8tZXh0ZW5zaW9uIHRyYWNraW5nIGxvZ2ljLiBJdCByZW1vdmVzIGBzdWJyZWdfZGVmYCBmcm9tIGBicGZfcmVnX3N0YXRlYCBhbmQgaW5zdGVhZCBjb21wdXRlcyB6ZXJvIGV4dGVuc2lvbiByZXF1aXJlbWVudHMgZGlyZWN0bHkgZHVyaW5nIGxpdmVuZXNzIGFuYWx5c2lzIGJ5IHRyYWNraW5nIDMyLWJpdCBhbmQgNjQtYml0IHJlZ2lzdGVyIHVzZXMgc2VwYXJhdGVseS4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGFmZmVjdHMgaG93IHJlZ2lzdGVyIHN0YXRlcyBhcmUgdHJhY2tlZCBhbmQgb3B0aW1pemVkLCB3aGljaCBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIHNlY3VyaXR5IGFuZCBjb3JyZWN0bmVzcyBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODE5OGRiMWQ3MTcxODIzODg5ZTNlZWJmNzViYWU1MGRjYWQ3NDFkYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMDQ6Mzk6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCA2ODJjMmNkM2I4NDQzLi4zMjFlYmQzMDhkMzhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTE2MiwxMSAmIzQzOzE2Miw2IEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHsKIAkgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS4KIAkgKi8KIAl1MzIgZnJhbWVubzsKLQkvKiBUcmFja3Mgc3VicmVnIGRlZmluaXRpb24uIFRoZSBzdG9yZWQgdmFsdWUgaXMgdGhlIGluc25faWR4IG9mIHRoZQotCSAqIHdyaXRpbmcgaW5zbi4gVGhpcyBpcyBzYWZlIGJlY2F1c2Ugc3VicmVnX2RlZiBpcyB1c2VkIGJlZm9yZSBhbnkgaW5zbgotCSAqIHBhdGNoaW5nIHdoaWNoIG9ubHkgaGFwcGVucyBhZnRlciBtYWluIHZlcmlmaWNhdGlvbiBmaW5pc2hlZC4KLQkgKi8KLQlzMzIgc3VicmVnX2RlZjsKIAkvKiBpZiAoIXByZWNpc2UgJmFtcDsmYW1wOyBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24mIzM5O3QgYWZmZWN0IHNhZmV0eSAqLwogCWJvb2wgcHJlY2lzZTsKIH07CkBAIC0xMDUwLDYgJiM0MzsxMDQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZ19pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYKIH0KIAogc3RydWN0IGJwZl9jYWxsX3N1bW1hcnkgewomIzQzOwljb25zdCBzdHJ1Y3QgYnRmICpidGY7CiYjNDM7CWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuY19wcm90bzsKIAl1OCBudW1fcGFyYW1zOwogCWJvb2wgaXNfdm9pZDsKIAlib29sIGZhc3RjYWxsOwpAQCAtMTYzMSw3ICYjNDM7MTYyOCw3IEBAIHN0cnVjdCBicGZfa2Z1bmNfZGVzY190YWIgewogfTsKIAogLyogRnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gdmVyaWZpZXIuYywgdXNlZCBieSBmaXh1cHMuYyAqLwotYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KTsKJiM0Mztib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24pOwogdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pOwogdm9pZCBicGZfbWFya19zdWJwcm9nX2V4Y19jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7CiBib29sIGJwZl9hbGxvd190YWlsX2NhbGxfaW5fc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7CkBAIC0xNjU1LDUgJiM0MzsxNjUyLDYgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTsKIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpOwogaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7CiBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpOwomIzQzO2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pOwogCiAjZW5kaWYgLyogX0xJTlVYX0JQRl9WRVJJRklFUl9IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suYwppbmRleCAyZTRhZTBlZjA4NjA5Li43YzQ1OTllNjVlY2ViIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmMKQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCwKIAkJdmVyYm9zZShlbnYsICYjMzQ7c3RhY2s9JXMgYmVmb3JlICYjMzQ7LCBlbnYtJmd0O3RtcF9zdHJfYnVmKTsKIAkJdmVyYm9zZShlbnYsICYjMzQ7JWQ6ICYjMzQ7LCBpZHgpOwogCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDtcbiYjMzQ7KTsKIAl9CiAKIAkvKiBJZiB0aGVyZSBpcyBhIGhpc3RvcnkgcmVjb3JkIHRoYXQgc29tZSByZWdpc3RlcnMgZ2FpbmVkIHJhbmdlIGF0IHRoaXMgaW5zbiwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jCmluZGV4IDAzOTFiM2JjMDA3MzQuLjUwYjNjYTUxNDlhMGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9kaXNhc20uYwpAQCAtMTM5LDcgJiM0MzsxMzksNyBAQCBzdGF0aWMgdm9pZCBwcmludF9icGZfZW5kX2luc24oYnBmX2luc25fcHJpbnRfdCB2ZXJib3NlLAogCQkJICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiB7Ci0JdmVyYm9zZShwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9ICVzJWQgciVkXG4mIzM0OywKJiM0MzsJdmVyYm9zZShwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9ICVzJWQgciVkJiMzNDssCiAJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCUJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1RPX0JFID8gJiMzNDtiZSYjMzQ7IDogJiMzNDtsZSYjMzQ7LAogCQlpbnNuLSZndDtpbW0sIGluc24tJmd0O2RzdF9yZWcpOwpAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBzdGF0aWMgdm9pZCBwcmludF9icGZfYnN3YXBfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsCiAJCQkgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIHsKLQl2ZXJib3NlKHByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYnN3YXAlZCByJWRcbiYjMzQ7LAomIzQzOwl2ZXJib3NlKHByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYnN3YXAlZCByJWQmIzM0OywKIAkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJaW5zbi0mZ3Q7aW1tLCBpbnNuLSZndDtkc3RfcmVnKTsKIH0KQEAgLTE5NywxOSAmIzQzOzE5NywxOSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCWVsc2UKIAkJCQlwcmludF9icGZfZW5kX2luc24odmVyYm9zZSwgY2JzLSZndDtwcml2YXRlX2RhdGEsIGluc24pOwogCQl9IGVsc2UgaWYgKEJQRl9PUChpbnNuLSZndDtjb2RlKSA9PSBCUEZfTkVHKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlYyVkID0gLSVjJWRcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpICVjJWQgPSAtJWMlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcpOwogCQl9IGVsc2UgaWYgKGlzX2FkZHJfc3BhY2VfY2FzdChpbnNuKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQkJaW5zbi0mZ3Q7c3JjX3JlZywgKCh1MzIpaW5zbi0mZ3Q7aW1tKSAmZ3Q7Jmd0OyAxNiwgKHUxNilpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKGlzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gJmFtcDsodm9pZCBfX3BlcmNwdSAqKShyJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAmYW1wOyh2b2lkIF9fcGVyY3B1ICopKHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtzcmNfcmVnKTsKIAkJfSBlbHNlIGlmIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9YKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlYyVkICVzICVzJWMlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlcyVjJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OywKIAkJCQlpbnNuLSZndDtkc3RfcmVnLAogCQkJCWlzX3NkaXZfc21vZChpbnNuKSA/IGJwZl9hbHVfc2lnbl9zdHJpbmdbQlBGX09QKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDRdCkBAIC0yMTgsNyAmIzQzOzIxOCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O3NyY19yZWcpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJaXNfc2Rpdl9zbW9kKGluc24pID8gYnBmX2FsdV9zaWduX3N0cmluZ1tCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgJmd0OyZndDsgNF0KQEAgLTIyNyw3ICYjNDM7MjI3LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsCiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVFgpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU0pCi0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9IHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSByJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLApAQCAtMjM1LDcgJiM0MzsyMzUsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgKGluc24tJmd0O2ltbSA9PSBCUEZfQUREIHx8IGluc24tJmd0O2ltbSA9PSBCUEZfQU5EIHx8CiAJCQkgIGluc24tJmd0O2ltbSA9PSBCUEZfT1IgfHwgaW5zbi0mZ3Q7aW1tID09IEJQRl9YT1IpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBsb2NrICooJXMgKikociVkICUmIzQzO2QpICVzIHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlJiM0MztkKSAlcyByJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtvZmYsCkBAIC0yNDYsNyAmIzQzOzI0Niw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJICAgIGluc24tJmd0O2ltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHwKIAkJCSAgICBpbnNuLSZndDtpbW0gPT0gKEJQRl9PUiB8IEJQRl9GRVRDSCkgfHwKIAkJCSAgICBpbnNuLSZndDtpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O3NyY19yZWcsCiAJCQkJQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0RXID8gJiMzNDs2NCYjMzQ7IDogJiMzNDsmIzM0OywKIAkJCQlicGZfYXRvbWljX2FsdV9zdHJpbmdbQlBGX09QKGluc24tJmd0O2ltbSkgJmd0OyZndDsgNF0sCkBAIC0yNTQsNyAmIzQzOzI1NCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O29mZiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX0NNUFhDSEcpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUmIzQzO2QpLCByMCwgciVkKVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgcjAgPSBhdG9taWMlc19jbXB4Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIwLCByJWQpJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwKIAkJCQlCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFcgPyAmIzM0OzY0JiMzNDsgOiAmIzM0OyYjMzQ7LAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKQEAgLTI2Miw0NCAmIzQzOzI2Miw0NCBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCQlpbnNuLSZndDtzcmNfcmVnKTsKIAkJfSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfQVRPTUlDICZhbXA7JmFtcDsKIAkJCSAgIGluc24tJmd0O2ltbSA9PSBCUEZfWENIRykgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfeGNoZygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc194Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtzcmNfcmVnLAogCQkJCUJQRl9TSVpFKGluc24tJmd0O2NvZGUpID09IEJQRl9EVyA/ICYjMzQ7NjQmIzM0OyA6ICYjMzQ7JiMzNDssCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O29mZiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX0xPQURfQUNRKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlJiM0MztkKSlcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9IGxvYWRfYWNxdWlyZSgoJXMgKikociVkICUmIzQzO2QpKSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX1NUT1JFX1JFTCkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUmIzQzO2QpLCByJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBzdG9yZV9yZWxlYXNlKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtvZmYsIGluc24tJmd0O3NyY19yZWcpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfJTAyeFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHXyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkgewogCQlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01FTSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSAlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSAlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJaW5zbi0mZ3Q7b2ZmLCBpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbm9zcGVjXG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbm9zcGVjJiMzNDssIGluc24tJmd0O2NvZGUpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfc3RfJTAyeFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX3N0XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRFgpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9NRU0gJmFtcDsmYW1wOyBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfTUVNU1gpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX2xkeF8lMDJ4XG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfbGR4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZClcbiYjMzQ7LAomIzQzOwkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZCkmIzM0OywKIAkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQlCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfTUVNID8KIAkJCQkgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdIDoKQEAgLTMwNywxMiAmIzQzOzMwNywxMiBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJfSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9BQlMpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF0mIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9JTkQpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgJiM0MzsgJWRdXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICYjNDM7ICVkXSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O2ltbSk7CkBAIC0zMzIsMTIgJiM0MzszMzIsMTIgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsCiAJCQlpZiAoaXNfcHRyICZhbXA7JmFtcDsgIWFsbG93X3B0cl9sZWFrcykKIAkJCQlpbW0gPSAwOwogCi0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAlc1xuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gJXMmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtkc3RfcmVnLAogCQkJCV9fZnVuY19pbW1fbmFtZShjYnMsIGluc24sIGltbSwKIAkJCQkJCXRtcCwgc2l6ZW9mKHRtcCkpKTsKIAkJfSBlbHNlIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX2xkXyUwMnhcbiYjMzQ7LCBpbnNuLSZndDtjb2RlKTsKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0O0JVR19sZF8lMDJ4JiMzNDssIGluc24tJmd0O2NvZGUpOwogCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkgewpAQCAtMzQ3LDM1ICYjNDM7MzQ3LDM1IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJY2hhciB0bXBbNjRdOwogCiAJCQlpZiAoaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpIHsKLQkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsIHBjJXNcbiYjMzQ7LAomIzQzOwkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsIHBjJXMmIzM0OywKIAkJCQkJaW5zbi0mZ3Q7Y29kZSwKIAkJCQkJX19mdW5jX2dldF9uYW1lKGNicywgaW5zbiwKIAkJCQkJCQl0bXAsIHNpemVvZih0bXApKSk7CiAJCQl9IGVsc2UgewogCQkJCXN0cmNweSh0bXAsICYjMzQ7dW5rbm93biYjMzQ7KTsKLQkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsICVzIyVkXG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSwKJiM0MzsJCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgY2FsbCAlcyMlZCYjMzQ7LCBpbnNuLSZndDtjb2RlLAogCQkJCQlfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLAogCQkJCQkJCXRtcCwgc2l6ZW9mKHRtcCkpLAogCQkJCQlpbnNuLSZndDtpbW0pOwogCQkJfQogCQl9IGVsc2UgaWYgKGluc24tJmd0O2NvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBnb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZ290byBwYyUmIzQzO2QmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtvZmYpOwogCQl9IGVsc2UgaWYgKGluc24tJmd0O2NvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCkpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGdvdG94IHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZ290b3ggciVkJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZyk7CiAJCX0gZWxzZSBpZiAoaW5zbi0mZ3Q7Y29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgJmFtcDsmYW1wOwogCQkJICAgaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfTUFZX0dPVE8pIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIG1heV9nb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbWF5X2dvdG8gcGMlJiM0MztkJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7b2ZmKTsKIAkJfSBlbHNlIGlmIChpbnNuLSZndDtjb2RlID09IChCUEZfSk1QMzIgfCBCUEZfSkEpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBnb3RvbCBwYyUmIzQzO2RcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGdvdG9sIHBjJSYjNDM7ZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2ltbSk7CiAJCX0gZWxzZSBpZiAoaW5zbi0mZ3Q7Y29kZSA9PSAoQlBGX0pNUCB8IEJQRl9FWElUKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZXhpdFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGV4aXQmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0gZWxzZSBpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewogCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwKLQkJCQkmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2RcbiYjMzQ7LAomIzQzOwkJCQkmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2QmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJYnBmX2ptcF9zdHJpbmdbQlBGX09QKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDRdLApAQCAtMzgzLDE0ICYjNDM7MzgzLDE0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJCX0gZWxzZSB7CiAJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLAotCQkJCSYjMzQ7KCUwMngpIGlmICVjJWQgJXMgMHgleCBnb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJCSYjMzQ7KCUwMngpIGlmICVjJWQgJXMgMHgleCBnb3RvIHBjJSYjNDM7ZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9KTVAzMiA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssCiAJCQkJaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJCQlicGZfam1wX3N0cmluZ1tCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgJmd0OyZndDsgNF0sCiAJCQkJKHUzMilpbnNuLSZndDtpbW0sIGluc24tJmd0O29mZik7CiAJCX0KIAl9IGVsc2UgewotCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlc1xuJiMzNDssCiYjNDM7CQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlcyYjMzQ7LAogCQkJaW5zbi0mZ3Q7Y29kZSwgYnBmX2NsYXNzX3N0cmluZ1tjbGFzc10pOwogCX0KIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IGEwYmRkYWRhNzk2NGUuLjczYWI5NTU3M2Y2MDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtNDQsMTUgJiM0Mzs0NCwxOCBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAl9CiB9CiAKLS8qIFJldHVybiBUUlVFIGlmIElOU04gaGFzIGRlZmluZWQgYW55IDMyLWJpdCB2YWx1ZSBleHBsaWNpdGx5LiAqLwotc3RhdGljIGJvb2wgaW5zbl9oYXNfZGVmMzIoc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRoZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5lZCBieSBJTlNOLCBvciAtMSBpZiBJTlNOIGRvZXMgbm90CiYjNDM7ICogZXhwbGljaXRseSBkZWZpbmUgYSAzMi1iaXQgdmFsdWUuCiYjNDM7ICovCiYjNDM7aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIHsKIAlpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pOwogCi0JaWYgKGRzdF9yZWcgPT0gLTEpCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGRzdF9yZWcgJmx0OyAwIHx8IGJwZl9pc19yZWc2NChpbnNuKSkKJiM0MzsJCXJldHVybiAtMTsKIAotCXJldHVybiAhYnBmX2lzX3JlZzY0KGluc24sIGRzdF9yZWcsIE5VTEwsIERTVF9PUCk7CiYjNDM7CXJldHVybiBkc3RfcmVnOwogfQogCiBzdGF0aWMgaW50IGtmdW5jX2Rlc2NfY21wX2J5X2ltbV9vZmYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKQEAgLTE2OSw3ICYjNDM7MTcyLDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkgKiAoY250ID09IDEpIGlzIHRha2VuIG9yIG5vdC4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIElOU04gYXQgT0ZGIGlzIHRoZQogCSAqIG9yaWdpbmFsIGluc24gYXQgb2xkIHByb2cuCiAJICovCi0JZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7CiYjNDM7CWRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEpICZndDs9IDA7CiAKIAlpZiAoY250ID09IDEpCiAJCXJldHVybjsKQEAgLTE4MSw3ICYjNDM7MTg0LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlmb3IgKGkgPSBvZmY7IGkgJmx0OyBvZmYgJiM0MzsgY250IC0gMTsgaSYjNDM7JiM0MzspIHsKIAkJLyogRXhwYW5kIGluc25pW29mZl0mIzM5O3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi8KIAkJZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47Ci0JCWRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICYjNDM7IGkpOwomIzQzOwkJZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0MzsgaSkgJmd0Oz0gMDsKIAl9CiAKIAkvKgpAQCAtNjIwLDcgJiM0Mzs2MjMsNyBAQCBpbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkgKiAgICAgICBCUEZfU1RYICYjNDM7IFNSQ19PUCwgc28gaXQgaXMgc2FmZSB0byBwYXNzIE5VTEwKIAkJCSAqICAgICAgIGhlcmUuCiAJCQkgKi8KLQkJCWlmIChicGZfaXNfcmVnNjQoJmFtcDtpbnNuLCBsb2FkX3JlZywgTlVMTCwgRFNUX09QKSkgewomIzQzOwkJCWlmIChicGZfaXNfcmVnNjQoJmFtcDtpbnNuKSkgewogCQkJCWlmIChjbGFzcyA9PSBCUEZfTEQgJmFtcDsmYW1wOwogCQkJCSAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKQogCQkJCQlpJiM0MzsmIzQzOzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuYwppbmRleCAwYWFkZmJhZTBhY2M1Li5lYTAwMjU1MDY3MWE4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9saXZlbmVzcy5jCkBAIC00OTcsNyAmIzQzOzQ5Nyw2IEBAIHN0YXRpYyB2b2lkIHByaW50X2luc3RhbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBmdW5jX2luc3RhbmNlICppCiAJCXBvcyA9IGVudi0mZ3Q7bG9nLmVuZF9wb3M7CiAJCXZlcmJvc2UoZW52LCAmIzM0OyUzZDogJiMzNDssIGluc25faWR4KTsKIAkJYnBmX3ZlcmJvc2VfaW5zbihlbnYsICZhbXA7aW5zbnNbaW5zbl9pZHhdKTsKLQkJYnBmX3Zsb2dfcmVzZXQoJmFtcDtlbnYtJmd0O2xvZywgZW52LSZndDtsb2cuZW5kX3BvcyAtIDEpOyAvKiByZW1vdmUgXG4gKi8KIAkJaW5zbl9wb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zOwogCQl2ZXJib3NlKGVudiwgJiMzNDslKmM7JiMzNDssIGJwZl92bG9nX2FsaWdubWVudChpbnNuX3BvcyAtIHBvcyksICYjMzk7ICYjMzk7KTsKIAkJcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKQEAgLTEwNDMsNyAmIzQzOzEwNDIsNiBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfbG9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaQogCQlpZiAoIXByaW50ZWQpIHsKIAkJCXZlcmJvc2UoZW52LCAmIzM0OyUzZDogJiMzNDssIGlkeCk7CiAJCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7Ci0JCQlicGZfdmxvZ19yZXNldCgmYW1wO2Vudi0mZ3Q7bG9nLCBlbnYtJmd0O2xvZy5lbmRfcG9zIC0gMSk7CiAJCQlwcmludGVkID0gdHJ1ZTsKIAkJfQogCQl2ZXJib3NlKGVudiwgJiMzNDtcdHIlZDogJiMzNDssIGkpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsICZhbXA7YXRfaW5baV0pOwpAQCAtMTA1OCw3ICYjNDM7MTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpCiAJCWlmICghcHJpbnRlZCkgewogCQkJdmVyYm9zZShlbnYsICYjMzQ7JTNkOiAmIzM0OywgaWR4KTsKIAkJCWJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTsKLQkJCWJwZl92bG9nX3Jlc2V0KCZhbXA7ZW52LSZndDtsb2csIGVudi0mZ3Q7bG9nLmVuZF9wb3MgLSAxKTsKIAkJCXByaW50ZWQgPSB0cnVlOwogCQl9CiAJCXZlcmJvc2UoZW52LCAmIzM0O1x0c2ElZDogJiMzNDssIGkpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsICZhbXA7YXRfaW5bYWldKTsKQEAgLTEwNzAsNyAmIzQzOzEwNjcsNiBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfbG9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaQogCQlpZiAoIXByaW50ZWQpIHsKIAkJCXZlcmJvc2UoZW52LCAmIzM0OyUzZDogJiMzNDssIGlkeCk7CiAJCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7Ci0JCQlicGZfdmxvZ19yZXNldCgmYW1wO2Vudi0mZ3Q7bG9nLCBlbnYtJmd0O2xvZy5lbmRfcG9zIC0gMSk7CiAJCQlwcmludGVkID0gdHJ1ZTsKIAkJfQogCQl2ZXJib3NlKGVudiwgJiMzNDtcdGZwJSYjNDM7ZDogJiMzNDssIC0oaSAmIzQzOyAxKSAqIDgpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsICZhbXA7YXRfc3RhY2tfaW5baV0pOwpAQCAtMTU0NSw2ICYjNDM7MTU0MSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCiAJCXZlcmJvc2UoZW52LCAmIzM0OyUzZDogJiMzNDssIGlkeCk7CiAJCWJwZl92ZXJib3NlX2luc24oZW52LCAmYW1wO2luc25zW2lkeF0pOwomIzQzOwkJdmVyYm9zZShlbnYsICYjMzQ7XG4mIzM0Oyk7CiAKIAkJLyogQ29sbGVjdCB3aGF0IG5lZWRzIHByaW50aW5nICovCiAJCWlmIChpc19sZHhfc3R4X2NhbGwgJmFtcDsmYW1wOwpAQCAtMjA1MCwyOSAmIzQzOzIwNDcsNjcgQEAgaW50IGJwZl9jb21wdXRlX3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCiAvKiBFYWNoIGZpZWxkIGlzIGEgcmVnaXN0ZXIgYml0bWFzayAqLwogc3RydWN0IGluc25fbGl2ZV9yZWdzIHsKLQl1MTYgdXNlOwkvKiByZWdpc3RlcnMgcmVhZCBieSBpbnN0cnVjdGlvbiAqLwotCXUxNiBkZWY7CS8qIHJlZ2lzdGVycyB3cml0dGVuIGJ5IGluc3RydWN0aW9uICovCi0JdTE2IGluOwkJLyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGJlZm9yZSBpbnN0cnVjdGlvbiAqLwotCXUxNiBvdXQ7CS8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqLwomIzQzOwl1MzIgdXNlOwkvKiByZWdpc3RlcnMgcmVhZCBieSBpbnN0cnVjdGlvbiAqLwomIzQzOwl1MzIgZGVmOwkvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqLwomIzQzOwl1MzIgaW47CQkvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovCiYjNDM7CXUzMiBvdXQ7CS8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqLwogfTsKIAogLyogQml0bWFzayB3aXRoIDFzIGZvciBhbGwgY2FsbGVyIHNhdmVkIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBTExfQ0FMTEVSX1NBVkVEX1JFR1MgKCgxdSAmbHQ7Jmx0OyBDQUxMRVJfU0FWRURfUkVHUykgLSAxKQogCiYjNDM7c3RhdGljIGlubGluZSB1MzIgcmVnMzJfbWFzayh1MzIgbikgeyByZXR1cm4gQklUKG4pOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MzIgcmVnNjRfbWFzayh1MzIgbikgeyByZXR1cm4gQklUKG4pIHwgQklUKG4gJiM0MzsgMTYpOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MzIgbWFza193aWRlbih1MzIgbSkgeyByZXR1cm4gbSB8IChtICZsdDsmbHQ7IDE2KTsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTE2IG1hc2tfbG8odTMyIG0pIHsgcmV0dXJuICh1MTYpbTsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTE2IG1hc2tfaGkodTMyIG0pIHsgcmV0dXJuICh1MTYpKG0gJmd0OyZndDsgMTYpOyB9CiYjNDM7CiYjNDM7LyogSW5mZXIgdXNlIG1hc2sgYmFzZWQgb24gbnVtYmVyIGFuZCBzaXplcyBvZiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4gKi8KJiM0MztzdGF0aWMgdTMyIGNhbGxfdXNlX21hc2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJdTMyIGksIHVzZSwgc2l6ZSwgcmVnX3BhcmFtc19udW07CiYjNDM7CXN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICpwOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7CiYjNDM7CiYjNDM7CWlmICghYnBmX2dldF9jYWxsX3N1bW1hcnkoZW52LCBpbnNuLCAmYW1wO2NzKSkKJiM0MzsJCS8qIGUuZy4gYSBicGYtdG8tYnBmIGNhbGwsIGFzc3VtZSB0aGF0IGNhbGxzIHVzZSBmdWxsIDY0LWJpdCBmb3IgZWFjaCBwYXJhbSAqLwomIzQzOwkJcmV0dXJuIG1hc2tfd2lkZW4oQUxMX0NBTExFUl9TQVZFRF9SRUdTICZhbXA7IH5CSVQoQlBGX1JFR18wKSk7CiYjNDM7CiYjNDM7CWlmIChjcy5mdW5jX3Byb3RvKSB7CiYjNDM7CQl1c2UgPSAwOwomIzQzOwkJcCA9IGJ0Zl9wYXJhbXMoY3MuZnVuY19wcm90byk7CiYjNDM7CQlyZWdfcGFyYW1zX251bSA9IG1pbihidGZfdHlwZV92bGVuKGNzLmZ1bmNfcHJvdG8pLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHJlZ19wYXJhbXNfbnVtOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXQgPSBidGZfdHlwZV9ieV9pZChjcy5idGYsIHBbaV0udHlwZSk7CiYjNDM7CQkJaWYgKElTX0VSUihidGZfcmVzb2x2ZV9zaXplKGNzLmJ0ZiwgdCwgJmFtcDtzaXplKSkpCiYjNDM7CQkJCWdvdG8gZmFsbGJhY2s7CiYjNDM7CQkJdXNlIHw9IHNpemUgJmx0Oz0gc2l6ZW9mKHUzMikgPyByZWczMl9tYXNrKGkgJiM0MzsgMSkgOiByZWc2NF9tYXNrKGkgJiM0MzsgMSk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gdXNlOwomIzQzOwl9CiYjNDM7CiYjNDM7ZmFsbGJhY2s6CiYjNDM7CS8qIGJ5IGRlZmF1bHQgYXNzdW1lIHRoYXQgY2FsbHMgdXNlIGZ1bGwgNjQtYml0IGZvciBlYWNoIHBhcmFtICovCiYjNDM7CXJldHVybiBtYXNrX3dpZGVuKEdFTk1BU0sobWluX3QodTgsIGNzLm51bV9wYXJhbXMsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyksIDEpKTsKJiM0Mzt9CiYjNDM7CiAvKiBDb21wdXRlIGluZm8tJmd0O3t1c2UsZGVmfSBmaWVsZHMgZm9yIHRoZSBpbnN0cnVjdGlvbiAqLwogc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCSAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkJCQkgICBzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKmluZm8pCiB7Ci0Jc3RydWN0IGJwZl9jYWxsX3N1bW1hcnkgY3M7Ci0JdTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSk7Ci0JdTggY29kZSA9IEJQRl9PUChpbnNuLSZndDtjb2RlKTsKLQl1OCBtb2RlID0gQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSk7Ci0JdTE2IHNyYyA9IEJJVChpbnNuLSZndDtzcmNfcmVnKTsKLQl1MTYgZHN0ID0gQklUKGluc24tJmd0O2RzdF9yZWcpOwotCXUxNiByMCAgPSBCSVQoMCk7Ci0JdTE2IGRlZiA9IDA7Ci0JdTE2IHVzZSA9IDB4ZmZmZjsKJiM0MzsJY29uc3QgdTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CWNvbnN0IHU4IGNvZGUgPSBCUEZfT1AoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CWNvbnN0IHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLSZndDtjb2RlKTsKJiM0MzsJY29uc3QgdTggc2l6ZSA9IEJQRl9TSVpFKGluc24tJmd0O2NvZGUpOwomIzQzOwljb25zdCB1MzIgc3JjID0gcmVnNjRfbWFzayhpbnNuLSZndDtzcmNfcmVnKTsKJiM0MzsJY29uc3QgdTMyIGRzdCA9IHJlZzY0X21hc2soaW5zbi0mZ3Q7ZHN0X3JlZyk7CiYjNDM7CWNvbnN0IHUzMiBzcmMzMiA9IG1hc2tfbG8oc3JjKTsKJiM0MzsJY29uc3QgdTMyIGRzdDMyID0gbWFza19sbyhkc3QpOwomIzQzOwljb25zdCB1MzIgcjAgID0gcmVnNjRfbWFzaygwKTsKJiM0MzsJdTMyIGRlZiA9IDA7CiYjNDM7CXUzMiB1c2UgPSBVMzJfTUFYOwogCiAJc3dpdGNoIChjbGFzcykgewogCWNhc2UgQlBGX0xEOgpAQCAtMjA4Myw4ICYjNDM7MjExOCw4IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQl1c2UgPSAwOwogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEIHwgQlBGX0FCUzoKLQkJY2FzZSBCUEZfTEQgfCBCUEZfSU5EOgomIzQzOwkJY2FzZSBCUEZfQUJTOgomIzQzOwkJY2FzZSBCUEZfSU5EOgogCQkJLyogc3RpY2sgd2l0aCBkZWZhdWx0cyAqLwogCQkJYnJlYWs7CiAJCX0KQEAgLTIwOTIsNyAmIzQzOzIxMjcsMTUgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWNhc2UgQlBGX0xEWDoKIAkJc3dpdGNoIChtb2RlKSB7CiAJCWNhc2UgQlBGX01FTToKJiM0MzsJCQkvKiBhIG5hcnJvdyBsb2FkIHN0aWxsIHJlZGVmaW5lcyB0aGUgd2hvbGUgcmVnaXN0ZXIgKi8KJiM0MzsJCQlkZWYgPSBkc3Q7CiYjNDM7CQkJdXNlID0gc3JjOwomIzQzOwkJCWJyZWFrOwogCQljYXNlIEJQRl9NRU1TWDoKJiM0MzsJCQkvKgomIzQzOwkJCSAqIHNpZ24gZXh0ZW5zaW9uIGRlZmluZXMgdGhlIHdob2xlIHJlZ2lzdGVyOwomIzQzOwkJCSAqIHNyYyBob2xkcyBhIHBvaW50ZXIsIGhlbmNlIGlzIHVzZWQgYXMgNjQtYml0LgomIzQzOwkJCSAqLwogCQkJZGVmID0gZHN0OwogCQkJdXNlID0gc3JjOwogCQkJYnJlYWs7CkBAIC0yMTEwLDEyICYjNDM7MjE1MywxOSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXN3aXRjaCAobW9kZSkgewogCQljYXNlIEJQRl9NRU06CiAJCQlkZWYgPSAwOwotCQkJdXNlID0gZHN0IHwgc3JjOwomIzQzOwkJCXVzZSA9IGRzdCB8IChzaXplID09IEJQRl9EVyA/IHNyYyA6IHNyYzMyKTsKIAkJCWJyZWFrOwotCQljYXNlIEJQRl9BVE9NSUM6CiYjNDM7CQljYXNlIEJQRl9BVE9NSUM6IHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGRzdCBob2xkcyBhIHBvaW50ZXIgYW5kIGlzIGFsd2F5cyB1c2VkIGFzIDY0LWJpdDsKJiM0MzsJCQkgKiB0aGUgdmFsdWUgb3BlcmFuZCBhbmQgcjAgYXJlIHJlYWQgYXMgMzItYml0IGZvciBCUEZfVyBhdG9taWNzLgomIzQzOwkJCSAqLwomIzQzOwkJCXUzMiBzcmN2ID0gc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMjsKJiM0MzsJCQl1MzIgcjB2ICA9IHNpemUgPT0gQlBGX0RXID8gcjAgOiBtYXNrX2xvKHIwKTsKJiM0MzsKIAkJCXN3aXRjaCAoaW5zbi0mZ3Q7aW1tKSB7CiAJCQljYXNlIEJQRl9DTVBYQ0hHOgotCQkJCXVzZSA9IHIwIHwgZHN0IHwgc3JjOwomIzQzOwkJCQl1c2UgPSByMHYgfCBkc3QgfCBzcmN2OwogCQkJCWRlZiA9IHIwOwogCQkJCWJyZWFrOwogCQkJY2FzZSBCUEZfTE9BRF9BQ1E6CkBAIC0yMTI0LDEwICYjNDM7MjE3NCwxMCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJYnJlYWs7CiAJCQljYXNlIEJQRl9TVE9SRV9SRUw6CiAJCQkJZGVmID0gMDsKLQkJCQl1c2UgPSBkc3QgfCBzcmM7CiYjNDM7CQkJCXVzZSA9IGRzdCB8IHNyY3Y7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCXVzZSA9IGRzdCB8IHNyYzsKJiM0MzsJCQkJdXNlID0gZHN0IHwgc3JjdjsKIAkJCQlpZiAoaW5zbi0mZ3Q7aW1tICZhbXA7IEJQRl9GRVRDSCkKIAkJCQkJZGVmID0gc3JjOwogCQkJCWVsc2UKQEAgLTIxMzUsNiAmIzQzOzIxODUsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQl9CiAJCQlicmVhazsKIAkJfQomIzQzOwkJfQogCQlicmVhazsKIAljYXNlIEJQRl9BTFU6CiAJY2FzZSBCUEZfQUxVNjQ6CkBAIC0yMTQ4LDE0ICYjNDM7MjE5OSwxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfSykKIAkJCQl1c2UgPSAwOwogCQkJZWxzZQotCQkJCXVzZSA9IHNyYzsKJiM0MzsJCQkJdXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gc3JjIDogc3JjMzI7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWRlZiA9IGRzdDsKIAkJCWlmIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9LKQotCQkJCXVzZSA9IGRzdDsKJiM0MzsJCQkJdXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gZHN0IDogZHN0MzI7CiAJCQllbHNlCi0JCQkJdXNlID0gZHN0IHwgc3JjOwomIzQzOwkJCQl1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyAoZHN0IHwgc3JjKSA6IChkc3QzMiB8IHNyYzMyKTsKIAkJfQogCQlicmVhazsKIAljYXNlIEJQRl9KTVA6CkBAIC0yMTc3LDE3ICYjNDM7MjIyOCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQl1c2UgPSByMDsKIAkJCWJyZWFrOwogCQljYXNlIEJQRl9DQUxMOgotCQkJZGVmID0gQUxMX0NBTExFUl9TQVZFRF9SRUdTOwotCQkJdXNlID0gZGVmICZhbXA7IH5CSVQoQlBGX1JFR18wKTsKLQkJCWlmIChicGZfZ2V0X2NhbGxfc3VtbWFyeShlbnYsIGluc24sICZhbXA7Y3MpKQotCQkJCXVzZSA9IEdFTk1BU0sobWluX3QodTgsIGNzLm51bV9wYXJhbXMsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyksIDEpOwomIzQzOwkJCWRlZiA9IG1hc2tfd2lkZW4oQUxMX0NBTExFUl9TQVZFRF9SRUdTKTsKJiM0MzsJCQl1c2UgPSBjYWxsX3VzZV9tYXNrKGVudiwgaW5zbik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWRlZiA9IDA7CiAJCQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfSykKIAkJCQl1c2UgPSBkc3Q7CiAJCQllbHNlCi0JCQkJdXNlID0gZHN0IHwgc3JjOwomIzQzOwkJCQl1c2UgPSBkc3QgfCAoY29kZSA9PSBCUEZfSk1QMzIgPyBzcmMgOiBzcmMzMik7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMjIwOSw2ICYjNDM7MjI1OCw3IEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKIAlzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKnN0YXRlOwogCWludCBpbnNuX2NudCA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwomIzQzOwl1NjQgcG9zLCBpbnNuX3BvczsKIAlpbnQgZXJyID0gMCwgaSwgajsKIAlib29sIGNoYW5nZWQ7CiAKQEAgLTIyNTIsOCAmIzQzOzIzMDIsOCBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWludCBpbnNuX2lkeCA9IGVudi0mZ3Q7Y2ZnLmluc25fcG9zdG9yZGVyW2ldOwogCQkJc3RydWN0IGluc25fbGl2ZV9yZWdzICpsaXZlID0gJmFtcDtzdGF0ZVtpbnNuX2lkeF07CiAJCQlzdHJ1Y3QgYnBmX2lhcnJheSAqc3VjYzsKLQkJCXUxNiBuZXdfb3V0ID0gMDsKLQkJCXUxNiBuZXdfaW4gPSAwOwomIzQzOwkJCXUzMiBuZXdfb3V0ID0gMDsKJiM0MzsJCQl1MzIgbmV3X2luID0gMDsKIAogCQkJc3VjYyA9IGJwZl9pbnNuX3N1Y2Nlc3NvcnMoZW52LCBpbnNuX2lkeCk7CiAJCQlmb3IgKGludCBzID0gMDsgcyAmbHQ7IHN1Y2MtJmd0O2NudDsgJiM0MzsmIzQzO3MpCkBAIC0yMjY3LDggJiM0MzsyMzE3LDIwIEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyAmIzQzOyYjNDM7aSkKLQkJaW5zbl9hdXhbaV0ubGl2ZV9yZWdzX2JlZm9yZSA9IHN0YXRlW2ldLmluOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgaW5zbl9jbnQ7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlpbnQgZGVmMzIgPSBicGZfaW5zbl9kZWYzMigmYW1wO2luc25zW2ldKTsKJiM0MzsJCXUzMiBvdXQgPSBzdGF0ZVtpXS5vdXQ7CiYjNDM7CQl1MzIgaW4gPSBzdGF0ZVtpXS5pbjsKJiM0MzsKJiM0MzsJCWluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBtYXNrX2xvKGluKSB8IG1hc2tfaGkoaW4pOwomIzQzOwkJLyoKJiM0MzsJCSAqIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG8gbm90IHJlc2V0IHVwcGVyIGhhbHZlcwomIzQzOwkJICogb2YgdGhlIHJlZ2lzdGVycywgdGhlIHZlcmlmaWVyIG5lZWRzIHRvIHplcm8gZXh0ZW5kIGEgZGVzdGluYXRpb24KJiM0MzsJCSAqIHJlZ2lzdGVyIGlmIGFuIGluc3RydWN0aW9uIGRlZmluZXMgYSAzMi1iaXQgc3VicmVnaXN0ZXIgYW5kIHRoZQomIzQzOwkJICogdXBwZXIgaGFsZiBvZiB0aGF0IHJlZ2lzdGVyIGlzIGFsaXZlIGFmdGVyIHRoZSBpbnN0cnVjdGlvbi4KJiM0MzsJCSAqLwomIzQzOwkJaW5zbl9hdXhbaV0uemV4dF9kc3QgPSBkZWYzMiAmZ3Q7PSAwICZhbXA7JmFtcDsgKG1hc2tfaGkob3V0KSAmYW1wOyBCSVQoZGVmMzIpKTsKJiM0MzsJfQogCiAJaWYgKGVudi0mZ3Q7bG9nLmxldmVsICZhbXA7IEJQRl9MT0dfTEVWRUwyKSB7CiAJCXZlcmJvc2UoZW52LCAmIzM0O0xpdmUgcmVncyBiZWZvcmUgaW5zbjpcbiYjMzQ7KTsKQEAgLTIyODQsNyAmIzQzOzIzNDYsMTIgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJZWxzZQogCQkJCQl2ZXJib3NlKGVudiwgJiMzNDsuJiMzNDspOwogCQkJdmVyYm9zZShlbnYsICYjMzQ7ICYjMzQ7KTsKJiM0MzsJCQlwb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zOwogCQkJYnBmX3ZlcmJvc2VfaW5zbihlbnYsICZhbXA7aW5zbnNbaV0pOwomIzQzOwkJCWluc25fcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKJiM0MzsJCQlpZiAoaW5zbl9hdXhbaV0uemV4dF9kc3QpCiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0OyUqYzsgemV4dCYjMzQ7LCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAmIzM5OyAmIzM5Oyk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7XG4mIzM0Oyk7CiAJCQlpZiAoYnBmX2lzX2xkaW1tNjQoJmFtcDtpbnNuc1tpXSkpCiAJCQkJaSYjNDM7JiM0Mzs7CiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNmYzNWY0ZTcxNWI2Li5kNWI2ZmVmMWFkODk3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0yMTI5LDEyICYjNDM7MjEyOSw5IEBAIHN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovCiB2b2lkIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogewotCXMzMiBzdWJyZWdfZGVmID0gcmVnLSZndDtzdWJyZWdfZGVmOwotCiAJbWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTsKIAlyZWctJmd0O3R5cGUgPSBTQ0FMQVJfVkFMVUU7CiAJcmVnLSZndDt2YXJfb2ZmID0gdG51bV91bmtub3duOwotCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7CiAJX19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTsKIH0KIApAQCAtMjIxMCw3ICYjNDM7MjIwNyw2IEBAIHN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJfQogfQogCi0jZGVmaW5lIERFRl9OT1RfU1VCUkVHCSgwKQogc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCSAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpCiB7CkBAIC0yMjE5LDcgJiM0MzsyMjE1LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfQlBGX1JFRzsgaSYjNDM7JiM0MzspIHsKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtyZWdzW2ldKTsKLQkJcmVnc1tpXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJfQogCiAJLyogZnJhbWUgcG9pbnRlciAqLwpAQCAtMzAzMywxMSAmIzQzOzMwMjgsMTAgQEAgc3RhdGljIHZvaWQgbWFya19zdGFja19zbG90c19zY3JhdGNoZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgMzItYml0IG9wdGltaXphdGlvbgotICogY29kZSBvbmx5LiBJdCByZXR1cm5zIFRSVUUgaWYgdGhlIHNvdXJjZSBvciBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlcwotICogb24gNjQtYml0LCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLgomIzQzOyAqIGNvZGUgb25seS4gSXQgcmV0dXJucyBUUlVFIGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlcyBvbiA2NC1iaXQsCiYjNDM7ICogb3RoZXJ3aXNlIHJldHVybiBGQUxTRS4KICAqLwotYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLAotCSAgICAgIHUzMiByZWdubywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpCiYjNDM7Ym9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKQogewogCXU4IGNvZGUsIGNsYXNzLCBvcDsKIApAQCAtMzA1OCwxMSAmIzQzOzMwNTIsNiBAQCBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkgKi8KIAkJCWlmIChpbnNuLSZndDtzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTCkKIAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkvKiBIZWxwZXIgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBhcmcgdHlwZQotCQkJICogY2hlY2ssIGNvbnNlcnZhdGl2ZWx5IHJldHVybiBUUlVFLgotCQkJICovCi0JCQlpZiAodCA9PSBTUkNfT1ApCi0JCQkJcmV0dXJuIHRydWU7CiAKIAkJCXJldHVybiBmYWxzZTsKIAkJfQpAQCAtMzA3OCwyMiAmIzQzOzMwNjcsMTEgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLAogCWlmIChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9KTVAzMikKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGNsYXNzID09IEJQRl9MRFgpIHsKLQkJaWYgKHQgIT0gU1JDX09QKQotCQkJcmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7Ci0JCS8qIExEWCBzb3VyY2UgbXVzdCBiZSBwdHIuICovCi0JCXJldHVybiB0cnVlOwotCX0KJiM0MzsJaWYgKGNsYXNzID09IEJQRl9MRFgpCiYjNDM7CQlyZXR1cm4gQlBGX1NJWkUoY29kZSkgPT0gQlBGX0RXIHx8IEJQRl9NT0RFKGNvZGUpID09IEJQRl9NRU1TWDsKIAotCWlmIChjbGFzcyA9PSBCUEZfU1RYKSB7Ci0JCS8qIEJQRl9TVFggKGluY2x1ZGluZyBhdG9taWMgdmFyaWFudHMpIGhhcyBvbmUgb3IgbW9yZSBzb3VyY2UKLQkJICogb3BlcmFuZHMsIG9uZSBvZiB3aGljaCBpcyBhIHB0ci4gQ2hlY2sgd2hldGhlciB0aGUgY2FsbGVyIGlzCi0JCSAqIGFza2luZyBhYm91dCBpdC4KLQkJICovCi0JCWlmICh0ID09IFNSQ19PUCAmYW1wOyZhbXA7IHJlZy0mZ3Q7dHlwZSAhPSBTQ0FMQVJfVkFMVUUpCi0JCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKGNsYXNzID09IEJQRl9TVFgpCiAJCXJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFc7Ci0JfQogCiAJaWYgKGNsYXNzID09IEJQRl9MRCkgewogCQl1OCBtb2RlID0gQlBGX01PREUoY29kZSk7CkBAIC0zMTAzLDE1ICYjNDM7MzA4MSw3IEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkJCXJldHVybiB0cnVlOwogCiAJCS8qIEJvdGggTERfSU5EIGFuZCBMRF9BQlMgcmV0dXJuIDMyLWJpdCBkYXRhLiAqLwotCQlpZiAodCAhPSBTUkNfT1ApCi0JCQlyZXR1cm4gIGZhbHNlOwotCi0JCS8qIEltcGxpY2l0IGN0eCBwdHIuICovCi0JCWlmIChyZWdubyA9PSBCUEZfUkVHXzYpCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQkvKiBFeHBsaWNpdCBzb3VyY2UgY291bGQgYmUgYW55IHdpZHRoLiAqLwotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlpZiAoY2xhc3MgPT0gQlBGX1NUKQpAQCAtMzEyMiwzMCAmIzQzOzMwOTIsMTQgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBtYXJrX2luc25femV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKLXsKLQlzMzIgZGVmX2lkeCA9IHJlZy0mZ3Q7c3VicmVnX2RlZjsKLQotCWlmIChkZWZfaWR4ID09IERFRl9OT1RfU1VCUkVHKQotCQlyZXR1cm47Ci0KLQllbnYtJmd0O2luc25fYXV4X2RhdGFbZGVmX2lkeCAtIDFdLnpleHRfZHN0ID0gdHJ1ZTsKLQkvKiBUaGUgZHN0IHdpbGwgYmUgemVybyBleHRlbmRlZCwgc28gd29uJiMzOTt0IGJlIHN1Yi1yZWdpc3RlciBhbnltb3JlLiAqLwotCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwotfQotCiBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLAogCQkJICAgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpCiB7Ci0Jc3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LSZndDtwcm9nLSZndDtpbnNuc2kgJiM0MzsgZW52LSZndDtpbnNuX2lkeDsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwotCWJvb2wgcnc2NDsKIAogCW1hcmtfcmVnX3NjcmF0Y2hlZChlbnYsIHJlZ25vKTsKIAogCXJlZyA9ICZhbXA7cmVnc1tyZWdub107Ci0Jcnc2NCA9IGJwZl9pc19yZWc2NChpbnNuLCByZWdubywgcmVnLCB0KTsKIAlpZiAodCA9PSBTUkNfT1ApIHsKIAkJLyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIHNvdXJjZSBvcGVyYW5kIGNhbiBiZSByZWFkICovCiAJCWlmIChyZWctJmd0O3R5cGUgPT0gTk9UX0lOSVQpIHsKQEAgLTMxNTYsOSAmIzQzOzMxMTAsNiBAQCBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcgogCQlpZiAocmVnbm8gPT0gQlBGX1JFR19GUCkKIAkJCXJldHVybiAwOwogCi0JCWlmIChydzY0KQotCQkJbWFya19pbnNuX3pleHQoZW52LCByZWcpOwotCiAJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgcmVnaXN0ZXIgdXNlZCBhcyBkZXN0IG9wZXJhbmQgY2FuIGJlIHdyaXR0ZW4gdG8gKi8KQEAgLTMxNjYsNyAmIzQzOzMxMTcsNiBAQCBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcgogCQkJdmVyYm9zZShlbnYsICYjMzQ7ZnJhbWUgcG9pbnRlciBpcyByZWFkIG9ubHlcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9Ci0JCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IHJ3NjQgPyBERUZfTk9UX1NVQlJFRyA6IGVudi0mZ3Q7aW5zbl9pZHggJiM0MzsgMTsKIAkJaWYgKHQgPT0gRFNUX09QKQogCQkJbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJlZ25vKTsKIAl9CkBAIC0zODIyLDExICYjNDM7Mzc3Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCQkJaWYgKHNpemUgJmx0Oz0gc3BpbGxfc2l6ZSAmYW1wOyZhbXA7CiAJCQkgICAgYnBmX3N0YWNrX25hcnJvd19hY2Nlc3Nfb2sob2ZmLCBzaXplLCBzcGlsbF9zaXplKSkgewotCQkJCS8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGUKLQkJCQkgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LgotCQkJCSAqLwotCQkJCXMzMiBzdWJyZWdfZGVmID0gc3RhdGUtJmd0O3JlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmOwotCiAJCQkJaWYgKGVudi0mZ3Q7YnBmX2NhcGFibGUgJmFtcDsmYW1wOyBzaXplID09IDQgJmFtcDsmYW1wOyBzcGlsbF9zaXplID09IDQgJmFtcDsmYW1wOwogCQkJCSAgICBnZXRfcmVnX3dpZHRoKHJlZykgJmx0Oz0gMzIpCiAJCQkJCS8qIEVuc3VyZSBzdGFjayBzbG90IGhhcyBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uCkBAIC0zODM0LDcgJiM0MzszNzc5LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCQkgKi8KIAkJCQkJYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTsKIAkJCQlzdGF0ZS0mZ3Q7cmVnc1tkc3RfcmVnbm9dID0gKnJlZzsKLQkJCQlzdGF0ZS0mZ3Q7cmVnc1tkc3RfcmVnbm9dLnN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmOwogCiAJCQkJLyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIGZpbGwuCiAJCQkJICogY29lcmNlX3JlZ190b19zaXplIHdpbGwgYWRqdXN0IHRoZSBib3VuZGFyaWVzLgpAQCAtNjI3MSwxMiAmIzQzOzYyMTUsNiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYgogCQkJfSBlbHNlIHsKIAkJCQltYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywKIAkJCQkJCSAgICB2YWx1ZV9yZWdubyk7Ci0JCQkJLyogQSBsb2FkIG9mIGN0eCBmaWVsZCBjb3VsZCBoYXZlIGRpZmZlcmVudAotCQkJCSAqIGFjdHVhbCBsb2FkIHNpemUgd2l0aCB0aGUgb25lIGVuY29kZWQgaW4gdGhlCi0JCQkJICogaW5zbi4gV2hlbiB0aGUgZHN0IGlzIFBUUiwgaXQgaXMgZm9yIHN1cmUgbm90Ci0JCQkJICogYSBzdWItcmVnaXN0ZXIuCi0JCQkJICovCi0JCQkJcmVnc1t2YWx1ZV9yZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwogCQkJCWlmIChiYXNlX3R5cGUoaW5mby5yZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkgewogCQkJCQlyZWdzW3ZhbHVlX3JlZ25vXS5idGYgPSBpbmZvLmJ0ZjsKIAkJCQkJcmVnc1t2YWx1ZV9yZWdub10uYnRmX2lkID0gaW5mby5idGZfaWQ7CkBAIC03MzgwLDEwICYjNDM7NzMxOCw2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0CiAJCQlpZiAoc3BpICZsdDsgMCkKIAkJCQlyZXR1cm4gc3BpOwogCi0JCQkvKgotCQkJICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnCi0JCQkgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLgotCQkJICovCiAJCQltYXJrX3N0YWNrX3Nsb3RzX3NjcmF0Y2hlZChlbnYsIHNwaSwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7CiAKIAkJCXJlZyA9ICZhbXA7c3RhdGUtJmd0O3N0YWNrW3NwaV0uc3BpbGxlZF9wdHI7CkBAIC05NDYzLDcgJiM0Mzs5Mzk3LDYgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkvKiBBbGwgbm9uLXZvaWQgZ2xvYmFsIGZ1bmN0aW9ucyByZXR1cm4gYSA2NC1iaXQgU0NBTEFSX1ZBTFVFLiAqLwogCQlpZiAoIXN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZykpIHsKIAkJCW1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItJmd0O3JlZ3MsIEJQRl9SRUdfMCk7Ci0JCQljYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJCX0KIAogCQlpZiAoZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHsKQEAgLTEwNDgyLDkgJiM0MzsxMDQxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJfQogCWludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpOwogCi0JLyogaGVscGVyIGNhbGwgcmV0dXJucyA2NC1iaXQgdmFsdWUuICovCi0JcmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRzsKLQogCS8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovCiAJcmV0X3R5cGUgPSBmbi0mZ3Q7cmV0X3R5cGU7CiAJcmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpOwpAQCAtMTA3MjIsMzAgJiM0MzsxMDY1Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJcmV0dXJuIDA7CiB9CiAKLS8qIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoKSBpcyB1c2VkIHdoZW4gdGhlIHJlZyBzaXplIGlzIGRldGVybWluZWQgYnkKLSAqIHRoZSBCVEYgZnVuY19wcm90byYjMzk7cyByZXR1cm4gdmFsdWUgc2l6ZSBhbmQgYXJndW1lbnQuCi0gKi8KLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywKLQkJCQkgICAgIHUzMiByZWdubywgc2l6ZV90IHJlZ19zaXplKQotewotCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSAmYW1wO3JlZ3NbcmVnbm9dOwotCi0JaWYgKHJlZ25vID09IEJQRl9SRUdfMCkgewotCQkvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi8KLQkJcmVnLSZndDtzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgPwotCQkJREVGX05PVF9TVUJSRUcgOiBlbnYtJmd0O2luc25faWR4ICYjNDM7IDE7Ci0JfSBlbHNlIGlmIChyZWdfc2l6ZSA9PSBzaXplb2YodTY0KSkgewotCQkvKiBGdW5jdGlvbiBhcmd1bWVudCAqLwotCQltYXJrX2luc25femV4dChlbnYsIHJlZyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubywKLQkJCQkgICBzaXplX3QgcmVnX3NpemUpCi17Ci0JcmV0dXJuIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIGN1cl9yZWdzKGVudiksIHJlZ25vLCByZWdfc2l6ZSk7Ci19Ci0KIHN0YXRpYyBib29sIGlzX2tmdW5jX2FjcXVpcmUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKQogewogCXJldHVybiBtZXRhLSZndDtrZnVuY19mbGFncyAmYW1wOyBLRl9BQ1FVSVJFOwpAQCAtMTI5NzQsNyAmIzQzOzEyODgwLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAlzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4OwogCWludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7Ci0JY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnczsKIAl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkOwogCXN0cnVjdCBidGYgKmRlc2NfYnRmOwogCWludCBpZDsKQEAgLTEzMDE4LDcgJiM0MzsxMjkyMyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQl2ZXJib3NlKGVudiwgJiMzNDtmYWlsZWQgdG8gbWFyayBzMzIgcmFuZ2UgZm9yIHJldHZhbCBpbiBmb3JrZWQgc3RhdGUgZm9yIGxvY2tcbiYjMzQ7KTsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQkJX19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVncywgQlBGX1JFR18wLCBzaXplb2YodTMyKSk7CiAJfSBlbHNlIGlmICghaW5zbi0mZ3Q7b2ZmICZhbXA7JmFtcDsgaW5zbi0mZ3Q7aW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9fX2JwZl90cmFwXSkgewogCQl2ZXJib3NlKGVudiwgJiMzNDt1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cbiYjMzQ7KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMzE2OCw3ICYjNDM7MTMwNzIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQl1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07CiAKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtyZWdzW3JlZ25vXSk7Ci0JCXJlZ3NbcmVnbm9dLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRzsKIAl9CiAJaW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7CiAKQEAgLTEzMTkwLDcgJiM0MzsxMzA5Myw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCWlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCAmYW1wOyZhbXA7IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fAogCQkgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpCiAJCQlfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCAmYW1wO3JlZ3NbQlBGX1JFR18wXSk7Ci0JCW1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHQtJmd0O3NpemUpOwogCX0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7CiAJCXB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtJmd0O3R5cGUsICZhbXA7cHRyX3R5cGVfaWQpOwogCQllcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgJmFtcDttZXRhLCByZWdzLCBpbnNuX2F1eCwgcHRyX3R5cGUsIGRlc2NfYnRmKTsKQEAgLTEzMjgxLDcgJiM0MzsxMzE4Myw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkvKiBGb3IgbWFya19wdHJfb3JfbnVsbF9yZWcsIHNlZSA5M2MyMzBlM2Y1YmQ2ICovCiAJCQlyZWdzW0JQRl9SRUdfMF0uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAJCX0KLQkJbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgc2l6ZW9mKHZvaWQgKikpOwogCQlpZiAoaXNfa2Z1bmNfYWNxdWlyZSgmYW1wO21ldGEpKSB7CiAJCQlpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApOwogCQkJaWYgKGlkICZsdDsgMCkKQEAgLTEzMzE4LDE4ICYjNDM7MTMyMTksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJY2FsbGVyX2luZm8tJmd0O3N0YWNrX2FyZ19jbnQgPSBzdGFja19hcmdfY250OwogCX0KIAotCWFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLmZ1bmNfcHJvdG8gJiM0MzsgMSk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG1pbl90KGludCwgbmFyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiByZWdubyA9IGkgJiM0MzsgMTsKLQotCQl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGFyZ3NbaV0udHlwZSwgTlVMTCk7Ci0JCWlmIChidGZfdHlwZV9pc19wdHIodCkpCi0JCQltYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTsKLQkJZWxzZQotCQkJLyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqLwotCQkJbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCB0LSZndDtzaXplKTsKLQl9Ci0KIAlpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYygmYW1wO21ldGEpKSB7CiAJCWVyciA9IHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoZW52LCBpbnNuX2lkeCwgJmFtcDttZXRhKTsKIAkJaWYgKGVycikKQEAgLTE0ODIzLDggJiM0MzsxNDcxMiw2IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJaWYgKGRzdF9yZWctJmd0O3R5cGUgIT0gUFRSX1RPX0FSRU5BKQogCQkJKmRzdF9yZWcgPSAqc3JjX3JlZzsKIAotCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwotCiAJCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FMVTY0KQogCQkJLyoKIAkJCSAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LgpAQCAtMTUwMjgsOCAmIzQzOzE0OTE1LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogCQkJCQltYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi0mZ3Q7ZHN0X3JlZyk7CiAJCQkJCWlmIChpbnNuLSZndDtpbW0gPT0gMSkgeyAvKiBjYXN0IGZyb20gYXMoMSkgdG8gYXMoMCkgKi8KIAkJCQkJCWRzdF9yZWctJmd0O3R5cGUgPSBQVFJfVE9fQVJFTkE7Ci0JCQkJCQkvKiBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovCi0JCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwogCQkJCQl9CiAJCQkJfSBlbHNlIGlmIChpbnNuLSZndDtvZmYgPT0gMCkgewogCQkJCQkvKiBjYXNlOiBSMSA9IFIyCkBAIC0xNTAzNyw3ICYjNDM7MTQ5MjIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJCQkJCSAqLwogCQkJCQlhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTsKIAkJCQkJKmRzdF9yZWcgPSAqc3JjX3JlZzsKLQkJCQkJZHN0X3JlZy0mZ3Q7c3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwogCQkJCX0gZWxzZSB7CiAJCQkJCS8qIGNhc2U6IFIxID0gKHM4LCBzMTYgczMyKVIyICovCiAJCQkJCWlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi0mZ3Q7c3JjX3JlZykpIHsKQEAgLTE1MDU1LDcgJiM0MzsxNDkzOSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCQkJCWlmICghbm9fc2V4dCkKIAkJCQkJCQljbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7CiAJCQkJCQljb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi0mZ3Q7b2ZmICZndDsmZ3Q7IDMpOwotCQkJCQkJZHN0X3JlZy0mZ3Q7c3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwogCQkJCQl9IGVsc2UgewogCQkJCQkJbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tJmd0O2RzdF9yZWcpOwogCQkJCQl9CkBAIC0xNTA4MCw3ICYjNDM7MTQ5NjMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJCQkJCQkgKi8KIAkJCQkJCWlmICghaXNfc3JjX3JlZ191MzIpCiAJCQkJCQkJY2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpOwotCQkJCQkJZHN0X3JlZy0mZ3Q7c3VicmVnX2RlZiA9IGVudi0mZ3Q7aW5zbl9pZHggJiM0MzsgMTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCS8qIGNhc2U6IFcxID0gKHM4LCBzMTYpVzIgKi8KIAkJCQkJCWJvb2wgbm9fc2V4dCA9IHJlZ191bWF4KHNyY19yZWcpICZsdDsgKDFVTEwgJmx0OyZsdDsgKGluc24tJmd0O29mZiAtIDEpKTsKQEAgLTE1MDkwLDcgJiM0MzsxNDk3Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCQkJCSpkc3RfcmVnID0gKnNyY19yZWc7CiAJCQkJCQlpZiAoIW5vX3NleHQpCiAJCQkJCQkJY2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpOwotCQkJCQkJZHN0X3JlZy0mZ3Q7c3VicmVnX2RlZiA9IGVudi0mZ3Q7aW5zbl9pZHggJiM0MzsgMTsKIAkJCQkJCWNvZXJjZV9zdWJyZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLSZndDtvZmYgJmd0OyZndDsgMyk7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewpAQCAtMTU5NTksMTIgJiM0MzsxNTg0MCw4IEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zCiAJCQljb250aW51ZTsKIAkJaWYgKCghKHJlZy0mZ3Q7aWQgJmFtcDsgQlBGX0FERF9DT05TVCkgJmFtcDsmYW1wOyAhKGtub3duX3JlZy0mZ3Q7aWQgJmFtcDsgQlBGX0FERF9DT05TVCkpIHx8CiAJCSAgICByZWctJmd0O2RlbHRhID09IGtub3duX3JlZy0mZ3Q7ZGVsdGEpIHsKLQkJCXMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLSZndDtzdWJyZWdfZGVmOwotCiAJCQkqcmVnID0gKmtub3duX3JlZzsKLQkJCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7CiAJCX0gZWxzZSB7Ci0JCQlzMzIgc2F2ZWRfc3VicmVnX2RlZiA9IHJlZy0mZ3Q7c3VicmVnX2RlZjsKIAkJCXMzMiBzYXZlZF9vZmYgPSByZWctJmd0O2RlbHRhOwogCQkJdTMyIHNhdmVkX2lkID0gcmVnLSZndDtpZDsKIApAQCAtMTU5NzQsMTIgJiM0MzsxNTg1MSwxMSBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfcwogCQkJLyogcmVnID0ga25vd25fcmVnOyByZWcgJiM0Mzs9IGRlbHRhICovCiAJCQkqcmVnID0gKmtub3duX3JlZzsKIAkJCS8qCi0JCQkgKiBNdXN0IHByZXNlcnZlIG9mZiwgaWQgYW5kIHN1YnJlZ19kZWYgZmxhZywKLQkJCSAqIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKSB3aWxsIGJlIGluY29ycmVjdC4KJiM0MzsJCQkgKiBNdXN0IHByZXNlcnZlIG9mZiBhbmQgaWQsIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKQomIzQzOwkJCSAqIHdpbGwgYmUgaW5jb3JyZWN0LgogCQkJICovCiAJCQlyZWctJmd0O2RlbHRhID0gc2F2ZWRfb2ZmOwogCQkJcmVnLSZndDtpZCA9IHNhdmVkX2lkOwotCQkJcmVnLSZndDtzdWJyZWdfZGVmID0gc2F2ZWRfc3VicmVnX2RlZjsKIAogCQkJc2NhbGFyMzJfbWluX21heF9hZGQocmVnLCAmYW1wO2Zha2VfcmVnKTsKIAkJCXNjYWxhcl9taW5fbWF4X2FkZChyZWcsICZhbXA7ZmFrZV9yZWcpOwpAQCAtMTY0MTQsOCAmIzQzOzE2MjkwLDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogCSAqIEFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUuCiAJICovCiAJbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7Ci0JLyogbGRfYWJzIGxvYWQgdXAgdG8gMzItYml0IHNrYiBkYXRhLiAqLwotCXJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwogCS8qCiAJICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wCiAJICogd2hpY2ggbXVzdCBiZSBleHBsb3JlZCBieSB0aGUgdmVyaWZpZXIgd2hlbiBpbiBhIHN1YnByb2cuCkBAIC0xNjczMCwxMCAmIzQzOzE2NjA0LDExIEBAIGJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLAogCWludCBpOwogCiAJaWYgKGJwZl9oZWxwZXJfY2FsbChjYWxsKSkgewotCiAJCWlmIChicGZfZ2V0X2hlbHBlcl9wcm90byhlbnYsIGNhbGwtJmd0O2ltbSwgJmFtcDtmbikgJmx0OyAwKQogCQkJLyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi8KIAkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWNzLSZndDtidGYgPSBOVUxMOwomIzQzOwkJY3MtJmd0O2Z1bmNfcHJvdG8gPSBOVUxMOwogCQljcy0mZ3Q7ZmFzdGNhbGwgPSBmbi0mZ3Q7YWxsb3dfZmFzdGNhbGwgJmFtcDsmYW1wOwogCQkJICAgICAgIChicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGNhbGwtJmd0O2ltbSkgfHwKIAkJCQlicGZfaml0X2lubGluZXNfaGVscGVyX2NhbGwoY2FsbC0mZ3Q7aW1tKSk7CkBAIC0xNjc1NCw2ICYjNDM7MTY2MjksOCBAQCBib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCwKIAkJaWYgKGVyciAmbHQ7IDApCiAJCQkvKiBlcnJvciB3b3VsZCBiZSByZXBvcnRlZCBsYXRlciAqLwogCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJY3MtJmd0O2J0ZiA9IG1ldGEuYnRmOwomIzQzOwkJY3MtJmd0O2Z1bmNfcHJvdG8gPSBtZXRhLmZ1bmNfcHJvdG87CiAJCWNzLSZndDtudW1fcGFyYW1zID0gYnRmX3R5cGVfdmxlbihtZXRhLmZ1bmNfcHJvdG8pOwogCQljcy0mZ3Q7ZmFzdGNhbGwgPSBtZXRhLmtmdW5jX2ZsYWdzICZhbXA7IEtGX0ZBU1RDQUxMOwogCQljcy0mZ3Q7aXNfdm9pZCA9IGJ0Zl90eXBlX2lzX3ZvaWQoYnRmX3R5cGVfYnlfaWQobWV0YS5idGYsIG1ldGEuZnVuY19wcm90by0mZ3Q7dHlwZSkpOwpAQCAtMTc0NzUsNiAmIzQzOzE3MzUyLDcgQEAgc3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJZW52LSZndDtwcmV2X2xvZ19wb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zOwogCQkJdmVyYm9zZShlbnYsICYjMzQ7JWQ6ICYjMzQ7LCBlbnYtJmd0O2luc25faWR4KTsKIAkJCWJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTsKJiM0MzsJCQl2ZXJib3NlKGVudiwgJiMzNDtcbiYjMzQ7KTsKIAkJCWVudi0mZ3Q7cHJldl9pbnNuX3ByaW50X3BvcyA9IGVudi0mZ3Q7bG9nLmVuZF9wb3MgLSBlbnYtJmd0O3ByZXZfbG9nX3BvczsKIAkJCWVudi0mZ3Q7cHJldl9sb2dfcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKIAkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jIGIvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jCmluZGV4IDVlN2NiOGIzNmZlZjIuLjdiMzNkODQ3ZDgwMGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMKQEAgLTEyOSwxNiAmIzQzOzEyOSwxMCBAQCBwcmludF9pbnNuX2Zvcl9ncmFwaCh2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogc3RhdGljIHZvaWQgX19wcmludGYoMiwgMykKIHByaW50X2luc25fanNvbih2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewotCXVuc2lnbmVkIGludCBsID0gc3RybGVuKGZtdCk7Ci0JY2hhciBjaG9tcGVkX2ZtdFtsXTsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCWlmIChsICZndDsgMCkgewotCQlzdHJuY3B5KGNob21wZWRfZm10LCBmbXQsIGwgLSAxKTsKLQkJY2hvbXBlZF9mbXRbbCAtIDFdID0gJiMzOTtcMCYjMzk7OwotCX0KLQlqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGNob21wZWRfZm10LCBhcmdzKTsKJiM0MzsJanNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKIH0KIApAQCAtMzUxLDYgJiM0MzszNDUsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX3BsYWluKHN0cnVjdCBkdW1wX2RhdGEgKmRkLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4sCiAKIAkJcHJpbnRmKCYjMzQ7JTR1OiAmIzM0OywgaSk7CiAJCXByaW50X2JwZl9pbnNuKCZhbXA7Y2JzLCBpbnNuICYjNDM7IGksIHRydWUpOwomIzQzOwkJcHJpbnRmKCYjMzQ7XG4mIzM0Oyk7CiAKIAkJaWYgKG9wY29kZXMpIHsKIAkJCXByaW50ZigmIzM0OyAgICAgICAmIzM0Oyk7CkBAIC00MTcsNiAmIzQzOzQxMiw3IEBAIHZvaWQgZHVtcF94bGF0ZWRfZm9yX2dyYXBoKHN0cnVjdCBkdW1wX2RhdGEgKmRkLCB2b2lkICpidWZfc3RhcnQsIHZvaWQgKmJ1Zl9lbmQsCiAKIAkJcHJpbnRmKCYjMzQ7JXU6ICYjMzQ7LCBpbnNuX29mZik7CiAJCXByaW50X2JwZl9pbnNuKCZhbXA7Y2JzLCBjdXIsIHRydWUpOwomIzQzOwkJcHJpbnRmKCYjMzQ7XFxsXFxcbiYjMzQ7KTsKIAogCQlpZiAob3Bjb2RlcykgewogCQkJcHJpbnRmKCYjMzQ7XFwgXFwgXFwgXFwgJiMzNDspOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYwppbmRleCBmNTI5ZjFjOGMxNzFkLi4zMDIyMTM1MjU2OGQ3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYwpAQCAtNTUsMTAgJiM0Mzs1NSw5IEBAIHN0cnVjdCBicGZfaW5zbiAqZGlzYXNtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opCiAJICogZm9yIGVhY2ggaW5zdHJ1Y3Rpb24gKEZGIHN0YW5kcyBmb3IgaW5zdHJ1Y3Rpb24gYGNvZGVgIGJ5dGUpLgogCSAqIFJlbW92ZSB0aGUgcHJlZml4IGlucGxhY2UsIGFuZCBhbHNvIHNpbXBsaWZ5IGNhbGwgaW5zdHJ1Y3Rpb25zLgogCSAqIEUuZy46ICYjMzQ7KDg1KSBjYWxsIGZvbyMxMCYjMzQ7IC0mZ3Q7ICYjMzQ7Y2FsbCBmb28mIzM0Oy4KLQkgKiBBbHNvIHJlbW92ZSBuZXdsaW5lIGluIHRoZSBlbmQgKHRoZSAmIzM5O21heChzdHJsZW4oYnVmKSAtIDEsIDApJiMzOTsgdGhpbmcpLgogCSAqLwogCXBmeF9lbmQgPSBidWYgJiM0MzsgNTsKLQlzZnhfc3RhcnQgPSBidWYgJiM0MzsgbWF4KChpbnQpc3RybGVuKGJ1ZikgLSAxLCAwKTsKJiM0MzsJc2Z4X3N0YXJ0ID0gYnVmICYjNDM7IChpbnQpc3RybGVuKGJ1Zik7CiAJaWYgKHN0cm5jbXAocGZ4X2VuZCwgJiMzNDtjYWxsICYjMzQ7LCA1KSA9PSAwICZhbXA7JmFtcDsgKHRtcCA9IHN0cnJjaHIoYnVmLCAmIzM5OyMmIzM5OykpKQogCQlzZnhfc3RhcnQgPSB0bXA7CiAJbGVuID0gc2Z4X3N0YXJ0IC0gcGZ4X2VuZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCmluZGV4IGJlOTdmNjg4N2YwZTcuLmZiYTU2MmM4MTk2OTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwpAQCAtMTI0LDYgJiM0MzsxMjQsNyBAQAogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9qaXRfaW5saW5lLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2lycS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2ZXJpZmllcl96ZXh0LnNrZWwuaCYjMzQ7CiAKICNkZWZpbmUgTUFYX0VOVFJJRVMgMTEKIApAQCAtMjc3LDYgJiM0MzsyNzgsNyBAQCB2b2lkIHRlc3RfaXJxKHZvaWQpCQkJICAgICAgeyBSVU4oaXJxKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX210dSh2b2lkKQkJICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2ppdF9pbmxpbmUodm9pZCkgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9qaXRfaW5saW5lKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH0KJiM0Mzt2b2lkIHRlc3RfdmVyaWZpZXJfemV4dCh2b2lkKSAgICAgICAgICAgICAgICAgeyBSVU5fVEVTVFModmVyaWZpZXJfemV4dCk7IH0KIAogc3RhdGljIGludCBpbml0X3Rlc3RfdmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjaGFyICptYXBfbmFtZSkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmI0YzgyYTMxZTY2ODIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jCkBAIC0wLDAgJiM0MzsxLDI2MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uLy4uLy4uL2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSkKJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9STkRfSEkzMikKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIHZvaWQgemV4dF9sb3N0X2Fjcm9zc19jaGVja3BvaW50KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2t0aW1lX2dldF9uc107CQkJCQkJCVwKJiM0MzsJcjggPSByMDsJCQkJCQkJCQlcCiYjNDM7CXI2ID0gMHhkZWFkYmVlZmNhZmViYWJlIGxsOwkvKiBpbmplY3Qgc29tZSB2YWx1ZSBmb3IgcjYmIzM5O3MgdXBwZXIgaGFsZiAqLwlcCiYjNDM7CWlmIHI4ICE9IDAgZ290byAxZjsJCS8qIGZhbGwtdGhyb3VnaCBjYWNoZWQgZmlyc3QsIGJyYW5jaCBwcnVuZWQgKi8JXAomIzQzOwlyNiA9IDMyOwkJCS8qIGZ1bGwgNjQtYml0IGRlZiAqLwkJCQlcCiYjNDM7CWdvdG8gMmY7CQkJCQkJCQkJXAomIzQzOzE6CQkJCQkJCQkJCQlcCiYjNDM7CXc2ID0gMzI7CQkJLyogMzItYml0IGRlZiwgemV4dCBtYXJrIGxvc3QgKi8JCVwKJiM0MzsyOgkJCQkJCQkJCQkJXAomIzQzOwlyMCA9IHI2OwkJCS8qIGJ1Z2d5IHZlcmlmaWVyIGJlbGlldmVkIHVwcGVyIDMyIGJpdHMgYXJlIDAgKi8gXAomIzQzOwkJCQkJLyogYW5kIHRodXMgZGlkIG5vdCB6ZXJvIGV4dGVuZGVkIHc2ID0gMzIuICovCVwKJiM0MzsJcjAgJmd0OyZndDs9IDMyOwkJCQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfa3RpbWVfZ2V0X25zKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtJmd0OyB6ZXh0ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2FsdTMyX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJdzEgPSB3MDsJCQkJCVwKJiM0MzsJcjAgPSByMTsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIDMyLWJpdCBBTFUgcmVzdWx0IHJlYWQgb25seSBhcyAzMi1iaXQgLSZndDsgbm8gemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbm90X21zZygmIzM0O3cxID0gdzB7ey4qfX07IHpleHQmIzM0OykKJiM0MztfX25vdF9tc2coJiMzNDt3MiA9IHcxe3suKn19OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfYWx1MzJfaGlfdW51c2VkKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXcxID0gdzA7CQkJCQlcCiYjNDM7CXcyID0gdzE7CQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiA2NC1iaXQgZGVmaW5pdGlvbiBpcyBuZXZlciB6ZXJvIGV4dGVuZGVkICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19ub3RfbXNnKCYjMzQ7cjEgPSByMHt7Lip9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBub196ZXh0X21vdjY0KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXIxID0gcjA7CQkJCQlcCiYjNDM7CXIwID0gcjE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBOYXJyb3cgbG9hZCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjEgPSAqKHUzMiAqKShyMTAgLTgpe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19sb2FkX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMDsJCQkJXAomIzQzOwlyMSA9ICoodTMyICopKHIxMCAtIDgpOwkJCQlcCiYjNDM7CXIwID0gcjE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogMzItYml0IGF0b21pYyBmZXRjaCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjEgPSBhdG9taWNfZmV0Y2hfYWRkKCh1MzIgKikocjEwIC04KSwgcjEpe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2F0b21pY19mZXRjaDMyX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMTsJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwkuOGJ5dGUgJVtmZXRjaF9hZGQzMl07CQkJCVwKJiM0MzsJcjAgPSByMTsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2luc24oZmV0Y2hfYWRkMzIsCiYjNDM7CQkgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9BREQgfCBCUEZfRkVUQ0gsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgYXRvbWljIGNtcHhjaGcgcmVzdWx0IChyMCkgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjAgPSBhdG9taWNfY21weGNoZygodTMyICopKHIxMCAtOCksIHIwLCByMSl7eyAmIzQzO319OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfY21weGNoZzMyX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMTsJCQkJXAomIzQzOwl3MCA9IDA7CQkJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwkuOGJ5dGUgJVtjbXB4Y2hnMzJdOwkJCQlcCiYjNDM7CXIyID0gcjA7CQkJCQlcCiYjNDM7CXIwID0gcjI7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9pbnNuKGNtcHhjaGczMiwKJiM0MzsJCSAgICAgQlBGX0FUT01JQ19PUChCUEZfVywgQlBGX0NNUFhDSEcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgZGVmIGJlZm9yZSBhIGJyYW5jaCwgdXBwZXIgaGFsZiB1c2VkIG9uIG9uZSBicmFuY2ggLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7dzYgPSAzMnt7ICYjNDM7fX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9jZmdfaGlfdXNlZF9vbmVfYnJhbmNoKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXc2ID0gMzI7CQkJCQlcCiYjNDM7CWlmIHIwID09IDAgZ290byBsMF8lPTsJCQkJXAomIzQzOwlyMCA9IHI2OwkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MztsMF8lPToJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcjEmIzM5O3MgdXBwZXIgaGFsZiBpcyBkZWFkLCBzbyAmIzM5O3cxID0gMSYjMzk7IG11c3QgTk9UIGJlIG1hcmtlZCBmb3IgemVybyBleHRlbnNpb24uICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19ub3RfbXNnKCYjMzQ7dzEgPSAxe3suKn19OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfb3RoZXJfcmVnX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCVwKJiM0MzsJcjYgJmx0OyZsdDs9IDMyOwkJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwlyMCA9IHI2OwkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTERfQUJTIGRlZmluZXMgcjA7IHdoZW4gcjAgaXMgcmVhZCBhcyA2NC1iaXQgaXQgbXVzdCBiZSB6ZXJvIGV4dGVuZGVkICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtyMCA9ICoodTggKilza2JbMF17ey4qfX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9sZF9hYnNfaGlfdXNlZCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyNiA9IHIxOwkJCQkJXAomIzQzOwlyMCA9ICoodTggKilza2JbMF07CQkJCVwKJiM0MzsJcjcgPSByMDsJCQkJCVwKJiM0MzsJcjAgPSByNzsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBIZWxwZXIgcGFyYW1ldGVycyBhcmUgcmVhZCBhcyA2NC1iaXQgKGNhbGxfdXNlX21hc2soKSBmYWxsYmFjaykgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKJiM0MztfX21zZygmIzM0O3cyID0gMXt7ICYjNDM7fX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgaGVscGVyX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSByMTA7CQkJCQlcCiYjNDM7CXIxICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJdzIgPSAxOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl90cmFjZV9wcmludGtdOwkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl90cmFjZV9wcmludGspCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX3VzZWQgX19uYWtlZCBpbnQgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSByMTsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzdWJwcm9ncmFtIHBhcmFtZXRlcnMgYXJlIGNvbnNlcnZhdGl2ZWx5IHJlYWQgYXMgNjQtYml0ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBzdWJwcm9nX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJdzEgPSB3MDsJCQkJCVwKJiM0MzsJY2FsbCBzdWJwcm9nX3JlYWRzX2FyZ19hc182NGJpdDsJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO2V4dGVybiBsb25nIGJwZl9rZnVuY19jYWxsX3Rlc3Q0KHNpZ25lZCBjaGFyIGEsIHNob3J0IGIsIGludCBjLCBsb25nIGQpIF9fa3N5bTsKJiM0MzsKJiM0MzsvKiBGb3JjZSBrZnVuYyBleHRlcm4gQlRGIGdlbmVyYXRpb24uICovCiYjNDM7aW50IF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Lyoga2Z1bmMgcGFyYW1ldGVycyBhcmUgcmVhZCBhY2NvcmRpbmcgdG8gdGhlaXIgQlRGIHR5cGUgd2lkdGggKi8KJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbm90X21zZygmIzM0O3czID0gMXt7Lip9fTsgemV4dCYjMzQ7KQkJLyogaW50IGMgIC0mZ3Q7IHJlYWQgYXMgMzItYml0ICovCiYjNDM7X19tc2coJiMzNDt3NCA9IDF7eyAmIzQzO319OyB6ZXh0JiMzNDspCQkvKiBsb25nIGQgLSZndDsgcmVhZCBhcyA2NC1iaXQgKi8KJiM0MztfX25ha2VkIHZvaWQga2Z1bmNfcGFyYW1fcmVhZF9wZXJfYnRmKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXcxID0gMTsJCQkJCQlcCiYjNDM7CXcyID0gMTsJCQkJCQlcCiYjNDM7CXczID0gMTsJCQkJCQlcCiYjNDM7CXc0ID0gMTsJCQkJCQlcCiYjNDM7CWNhbGwgYnBmX2tmdW5jX2NhbGxfdGVzdDQ7CQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gTGl2ZW5lc3MgYW5kIFplcm8tRXh0ZW5zaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgQlBGIHZlcmlmaWVyIGFuZCBpdCYjMzk7cyBhIHByZXR0eSBzdWJzdGFudGlhbCBvdmVyaGF1bCBvZiBob3cgemVyby1leHRlbnNpb24gaXMgaGFuZGxlZC4gUHJldmlvdXNseSwgdGhlIGBzdWJyZWdfZGVmYCB3YXMgdHJhY2tlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGBicGZfcmVnX3N0YXRlYCwgYnV0IG5vdywgdGhleSYjMzk7dmUgcHVsbGVkIHRoYXQgb3V0IGFuZCBhcmUgY2FsY3VsYXRpbmcgdGhlIHplcm8tZXh0ZW5zaW9uIGR5bmFtaWNhbGx5LCB1c2luZyBsaXZlbmVzcyBhbmFseXNpcyB0aHJvdWdoIGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AuIEludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHRoZSBsaXZlbmVzcyBhbmFseXNpcyBpdHNlbGYgaGFzIHRvIGJlIGZhciBtb3JlIG51YW5jZWQuCgpNeSBmb2N1cyBpcyBvbiBob3cgdGhleeKAmXZlIGFjaGlldmVkIHRoaXMuIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYSBuZXcgc3RydWN0dXJlLCBgYnBmX2luc25fZGVmMzJgLCBhbmQgdGhleSYjMzk7dmUgbW9kaWZpZWQgYGNvbXB1dGVfaW5zbl9saXZlX3JlZ3NgIHRvIHRyYWNrIHRoZSB1c2UgYW5kIGRlZmluaXRpb24gb2YgMzItYml0IHZlcnN1cyA2NC1iaXQgcmVnaXN0ZXJzIGV4cGxpY2l0bHkuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIHdheSBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIG5vdyB0cmFja3MgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBsaXZlbmVzcyBzZXBhcmF0ZWx5LCB1c2luZyBhIDMyLWJpdCBtYXNrIGZvciBlYWNoIHJlZ2lzdGVyLiBFc3NlbnRpYWxseSwgdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIG1hc2sgd2lsbCByZXByZXNlbnQgMzItYml0IHVzYWdlIGFuZCB0aGUgdXBwZXIgMTYgZm9yIDY0LWJpdC4gVGhpcyBoYXMgcHJvcGFnYXRlZCBvdXR3YXJkcyB0byBtb2RpZnlpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZmllbGRzIGB1c2VgLCBgZGVmYCwgYGluYCwgYW5kIGBvdXRgIGluIHRoZSBgaW5zbl9saXZlX3JlZ3NgIHRvIGJlIGB1MzJgIGluc3RlYWQgb2YgYHUxNmAuCgpUaGUgYWRkaXRpb24gb2YgYGNhbGxfdXNlX21hc2tgIGlzIGNsZXZlci4gSXQgaW5mZXJzIHRoZSB1c2UgbWFzayBiYXNlZCBvbiB0aGUgbnVtYmVyIGFuZCBzaXplcyBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzLiBBbmQsIG9mIGNvdXJzZSwgdGhlcmUmIzM5O3MgYGJwZl9pbnNuX2RlZjMyYCwgd2hpY2ggZXhwbGljaXRseSBjaGVja3MgaWYgYW4gaW5zdHJ1Y3Rpb24gZGVmaW5lcyBhIDMyLWJpdCBzdWJyZWdpc3Rlci4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYHpleHRfZHN0YCBpcyBiZWluZyBzZXQgaW4gYGluc25fYXV4YCBkdXJpbmcgbGl2ZW5lc3MgYW5hbHlzaXMgaWYgYSAzMi1iaXQgc3VicmVnaXN0ZXIgaXMgZGVmaW5lZCBhbmQgaXRzIHVwcGVyIGhhbGYgcmVtYWlucyAmIzM0O2FsaXZlJiMzNDsgYWZ0ZXIgdGhlIGluc3RydWN0aW9uLgoKVGhpcyBpcyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIHRoZSB2ZXJpZmllciYjMzk7cyBhcHByb2FjaCB0byBsaXZlbmVzcyBhbmQgemVyby1leHRlbnNpb24gdHJhY2tpbmcuIEl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRob3JvdWdobHkgZnV6emVkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcywgYW5kIGhvdyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBleGlzdGluZyBCUEYgcHJvZ3JhbXMgaXMgaW1wYWN0ZWQuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBzeW1ib2xzIHNvIEkgY2FuIGZvY3VzIG15IHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBlZmZvcnRzOiBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgLCBgY29tcHV0ZV9pbnNuX2xpdmVfcmVnc2AsIGBjYWxsX3VzZV9tYXNrYCwgYGJwZl9pbnNuX2RlZjMyYCwgYW5kIG9mIGNvdXJzZSBgYnBmX2lzX3JlZzY0YC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBCUEYgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3QgZnV6emluZyBjb25maWdzLCBidXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNyaXRpY2FsIG9uZS4gR2l2ZW4gdGhhdCBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIGlzIHBhcnQgb2YgYGtlcm5lbC9icGYvbGl2ZW5lc3MuY2AsIHdoaWNoIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYWN0aXZlLiBJ4oCZbGwgcXVpY2tseSB2ZXJpZnkgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9saXZlbmVzcy5jPTIwOTY9c3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMjU0LSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjIyNTU6aW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjI1Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5OTM4PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDEwMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDEwNDpcdHJldCA9IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxMDUtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTM5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBSZWdpc3RlciBMaXZlbmVzcyoqCgpBbHJpZ2h0LCBzbyBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIGlzIGNhbGxlZCBieSBgYnBmX2NoZWNrYC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHJlZ2lzdGVyIGxpdmVuZXNzIGFuYWx5c2lzLCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBCUEYgYnl0ZWNvZGUgdmVyaWZpY2F0aW9uLiBUaGUga2VybmVsIG5lZWRzIHRvIGVuc3VyZSByZWdpc3RlcnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIHRocm91Z2hvdXQgdGhlIGV4ZWN1dGlvbiBvZiBhIEJQRiBwcm9ncmFtIHRvIGd1YXJhbnRlZSBzYWZldHkgYW5kIHByZXZlbnQgZXhwbG9pdHMuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoaXMgbGl2ZW5lc3MgYW5hbHlzaXMuIEkga25vdyB0aGF0IGBsaXZlbmVzcy5jYCBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMsIHNvIGxldCYjMzk7cyBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBLbm93aW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2hlcmUgdGhpcyBhbmFseXNpcyBpcyBlbmFibGVkLCBhbmQgcG90ZW50aWFsbHkgaG93IGl0JiMzOTtzIG9wdGltaXplZC4gSXMgdGhpcyBmZWF0dXJlIGVuYWJsZWQgYnkgZGVmYXVsdD8gSXMgdGhlcmUgYSBkZWJ1ZyBmbGFnPyBLbm93aW5nIHRoZXNlIGRldGFpbHMgd2lsbCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZGVlcGx5IEkgY2FuIGRpZywgYW5kIHdoYXQgSSBtaWdodCBiZSBhYmxlIHRvIGluZmx1ZW5jZSBkdXJpbmcga2VybmVsIGRldmVsb3BtZW50LCBvciBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGl2ZW5lc3MubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIEJQRiBDb25maWd1cmF0aW9uIGFuZCBJbnN0cnVjdGlvbiBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBCUEYsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCYjMzk7cyB0aGUga2V5IGVuYWJsaW5nIHN3aXRjaCBmb3IgdGhlIHdob2xlIEJQRiBzeXNjYWxsIGludGVyZmFjZSwgc28gaXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O2QgY2hlY2sgd2hlbiBkZWJ1Z2dpbmcgb3IgZXhwbG9yaW5nIEJQRiBmdW5jdGlvbmFsaXR5LgoKTm93LCBJIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGVzZSBpbnN0cnVjdGlvbnMgYXJlIHRyZWF0ZWQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBicGZfaW5zbl9kZWYzMmAuIEkga25vdyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkZWZpbml0aW9uIG9mIDMyLWJpdCBCUEYgaW5zdHJ1Y3Rpb25zIHJlc2lkZXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRlZmluaXRpb24gd29ya3MgYW5kIHdoYXQgaXQgbWVhbnMgZm9yIGluc3RydWN0aW9uIHNldHMuIEFuZCwgb2YgY291cnNlLCBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgJiMzNDtsaXZlIHJlZ2lzdGVycyYjMzQ7IGFyZSBjb21wdXRlZC4gVGhpcyBpcyBsaWtlbHkgZG9uZSBieSBgY29tcHV0ZV9pbnNuX2xpdmVfcmVnc2AuIFVuZGVyc3RhbmRpbmcgcmVnaXN0ZXIgbGl2ZW5lc3MgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciBvcHRpbWl6YXRpb24gYW5kIHZlcmlmeWluZyB0aGUgY29ycmVjdG5lc3Mgb2YgQlBGIHByb2dyYW1zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aG9zZSBjYWxjdWxhdGlvbnMsIGJlY2F1c2UgcmVnaXN0ZXIgbWlzdXNlIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBCUEYgcHJvZ3JhbSBmYWlsdXJlcy4gVGhlIHByb2dyYW0gcmVsaWVzIG9uIHZhbGlkIHJlZ2lzdGVyIHVzZS4gVGltZSB0byBnbyBvdmVyIHRob3NlIGRldGFpbHMgYWdhaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2luc25fZGVmMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2ZpeHVwcy5jPTI0PXN0YXRpYyBpbnQgaW5zbl9kZWZfcmVnbm8oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNTAtICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjUxOmludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUyLXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE2Mj1zdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTc0LVx0ICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NTpcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEpIFx1MDAzZT0gMDtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc2LVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTg2LVx0XHRkYXRhW2ldLnNlZW4gPSBvbGRfc2Vlbjtcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg3Olx0XHRkYXRhW2ldLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiAmIzQzOyBpKSBcdTAwM2U9IDA7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4OC1cdH1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjI1NT1pbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjMyMC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyAmIzQzOyYjNDM7aSkge1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjIzMjE6XHRcdGludCBkZWYzMiA9IGJwZl9pbnNuX2RlZjMyKFx1MDAyNmluc25zW2ldKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMzIyLVx0XHR1MzIgb3V0ID0gc3RhdGVbaV0ub3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Nzk0CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb3JlIEJQRiBWZXJpZmllciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGRlZXAsIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMuIEl0JiMzOTtzIHRvdWNoaW5nIHRoZSBjb3JlIG9mIGhvdyBpdCBoYW5kbGVzIHJlZ2lzdGVyIGxpdmVuZXNzIGFuZCB6ZXJvLWV4dGVuc2lvbiB0cmFja2luZywgd2hpY2ggaXMgKmNyaXRpY2FsKiBmb3IgdGhlIHNlY3VyaXR5IGFuZCBlZmZpY2llbmN5IG9mIEJQRiBwcm9ncmFtcy4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gaGVyZS4KCk15IGZvY3VzIGhhcyB0byBiZSBvbiB0aGVzZSBrZXkgc3ltYm9sczogYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYCwgYGNvbXB1dGVfaW5zbl9saXZlX3JlZ3NgLCBgY2FsbF91c2VfbWFza2AsIGBicGZfaW5zbl9kZWYzMmAsIGFuZCBgYnBmX2lzX3JlZzY0YC4gVGhleSYjMzk7bGwgaWxsdW1pbmF0ZSB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgdGhlIHJlbW92YWwgb2YgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCB0aGUgc2hpZnQgdG8gZGlyZWN0IHplcm8tZXh0ZW5zaW9uIGNvbXB1dGF0aW9uIGR1cmluZyBsaXZlbmVzcyBhbmFseXNpcyBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBzaGlmdCBpbiBob3cgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgc3RhdGVzIGFyZSBtYW5hZ2VkIGFuZCBvcHRpbWl6ZWQuIExpdmVuZXNzIGFuYWx5c2lzIGlzIHdoZXJlIHRoZSB2ZXJpZmllciBkZXRlcm1pbmVzIHdoaWNoIHJlZ2lzdGVycyBhcmUgYWN0aXZlbHkgdXNlZCBhdCBkaWZmZXJlbnQgcG9pbnRzIGluIGEgQlBGIHByb2dyYW0mIzM5O3MgZXhlY3V0aW9uLCBhbmQgdGhpcyBjaGFuZ2UgY291bGQgaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucyBmb3IgYm90aCB0aGUgcGVyZm9ybWFuY2UgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgKmNvcnJlY3RuZXNzKiBvZiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MuIEl0IGxvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcgZm9yIHRoaXMgc3BlY2lmaWMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuCgpOb3csIGxldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyYjMzQ7LAogICAgJiMzNDtjb21wdXRlX2luc25fbGl2ZV9yZWdzJiMzNDssCiAgICAmIzM0O2NhbGxfdXNlX21hc2smIzM0OywKICAgICYjMzQ7YnBmX2luc25fZGVmMzImIzM0OywKICAgICYjMzQ7YnBmX2lzX3JlZzY0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIHplcm8tZXh0ZW5zaW9uIHRyYWNraW5nIGxvZ2ljLiBJdCByZW1vdmVzIGBzdWJyZWdfZGVmYCBmcm9tIGBicGZfcmVnX3N0YXRlYCBhbmQgaW5zdGVhZCBjb21wdXRlcyB6ZXJvIGV4dGVuc2lvbiByZXF1aXJlbWVudHMgZGlyZWN0bHkgZHVyaW5nIGxpdmVuZXNzIGFuYWx5c2lzIGJ5IHRyYWNraW5nIDMyLWJpdCBhbmQgNjQtYml0IHJlZ2lzdGVyIHVzZXMgc2VwYXJhdGVseS4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGFmZmVjdHMgaG93IHJlZ2lzdGVyIHN0YXRlcyBhcmUgdHJhY2tlZCBhbmQgb3B0aW1pemVkLCB3aGljaCBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIHNlY3VyaXR5IGFuZCBjb3JyZWN0bmVzcyBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzJiMzNDssCiAgICAmIzM0O2NvbXB1dGVfaW5zbl9saXZlX3JlZ3MmIzM0OywKICAgICYjMzQ7Y2FsbF91c2VfbWFzayYjMzQ7LAogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7LAogICAgJiMzNDticGZfaXNfcmVnNjQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgemVyby1leHRlbnNpb24gdHJhY2tpbmcgbG9naWMuIEl0IHJlbW92ZXMgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCBpbnN0ZWFkIGNvbXB1dGVzIHplcm8gZXh0ZW5zaW9uIHJlcXVpcmVtZW50cyBkaXJlY3RseSBkdXJpbmcgbGl2ZW5lc3MgYW5hbHlzaXMgYnkgdHJhY2tpbmcgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgdXNlcyBzZXBhcmF0ZWx5LiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgYWZmZWN0cyBob3cgcmVnaXN0ZXIgc3RhdGVzIGFyZSB0cmFja2VkIGFuZCBvcHRpbWl6ZWQsIHdoaWNoIGlzIGEgY3JpdGljYWwgYXJlYSBmb3Igc2VjdXJpdHkgYW5kIGNvcnJlY3RuZXNzIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDozOTo0Ni4xMDEyNjc1NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI4NjEyNzczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzXCIsXG4gICAgXCJjb21wdXRlX2luc25fbGl2ZV9yZWdzXCIsXG4gICAgXCJjYWxsX3VzZV9tYXNrXCIsXG4gICAgXCJicGZfaW5zbl9kZWYzMlwiLFxuICAgIFwiYnBmX2lzX3JlZzY0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCB6ZXJvLWV4dGVuc2lvbiB0cmFja2luZyBsb2dpYy4gSXQgcmVtb3ZlcyBgc3VicmVnX2RlZmAgZnJvbSBgYnBmX3JlZ19zdGF0ZWAgYW5kIGluc3RlYWQgY29tcHV0ZXMgemVybyBleHRlbnNpb24gcmVxdWlyZW1lbnRzIGRpcmVjdGx5IGR1cmluZyBsaXZlbmVzcyBhbmFseXNpcyBieSB0cmFja2luZyAzMi1iaXQgYW5kIDY0LWJpdCByZWdpc3RlciB1c2VzIHNlcGFyYXRlbHkuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBhZmZlY3RzIGhvdyByZWdpc3RlciBzdGF0ZXMgYXJlIHRyYWNrZWQgYW5kIG9wdGltaXplZCwgd2hpY2ggaXMgYSBjcml0aWNhbCBhcmVhIGZvciBzZWN1cml0eSBhbmQgY29ycmVjdG5lc3MgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6Mzk6NDYuMTAxMjczMTQ2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODEyNTcxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MTk4ZGIxZDcxNzE4MjM4ODllM2VlYmY3NWJhZTUwZGNhZDc0MWRjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMDQ6Mzk6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5pbmRleCA2ODJjMmNkM2I4NDQzLi4zMjFlYmQzMDhkMzhhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuQEAgLTE2MiwxMSArMTYyLDYgQEAgc3RydWN0IGJwZl9yZWdfc3RhdGUge1xcbiBcXHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cXG4gXFx0ICovXFxuIFxcdHUzMiBmcmFtZW5vO1xcbi1cXHQvKiBUcmFja3Mgc3VicmVnIGRlZmluaXRpb24uIFRoZSBzdG9yZWQgdmFsdWUgaXMgdGhlIGluc25faWR4IG9mIHRoZVxcbi1cXHQgKiB3cml0aW5nIGluc24uIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHN1YnJlZ19kZWYgaXMgdXNlZCBiZWZvcmUgYW55IGluc25cXG4tXFx0ICogcGF0Y2hpbmcgd2hpY2ggb25seSBoYXBwZW5zIGFmdGVyIG1haW4gdmVyaWZpY2F0aW9uIGZpbmlzaGVkLlxcbi1cXHQgKi9cXG4tXFx0czMyIHN1YnJlZ19kZWY7XFxuIFxcdC8qIGlmICghcHJlY2lzZSBcXHUwMDI2XFx1MDAyNiBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24ndCBhZmZlY3Qgc2FmZXR5ICovXFxuIFxcdGJvb2wgcHJlY2lzZTtcXG4gfTtcXG5AQCAtMTA1MCw2ICsxMDQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZ19pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnZcXG4gfVxcbiBcXG4gc3RydWN0IGJwZl9jYWxsX3N1bW1hcnkge1xcbitcXHRjb25zdCBzdHJ1Y3QgYnRmICpidGY7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuY19wcm90bztcXG4gXFx0dTggbnVtX3BhcmFtcztcXG4gXFx0Ym9vbCBpc192b2lkO1xcbiBcXHRib29sIGZhc3RjYWxsO1xcbkBAIC0xNjMxLDcgKzE2MjgsNyBAQCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiIHtcXG4gfTtcXG4gXFxuIC8qIEZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIHZlcmlmaWVyLmMsIHVzZWQgYnkgZml4dXBzLmMgKi9cXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KTtcXG4rYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcXG4gdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pO1xcbiB2b2lkIGJwZl9tYXJrX3N1YnByb2dfZXhjX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKTtcXG4gYm9vbCBicGZfYWxsb3dfdGFpbF9jYWxsX2luX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbkBAIC0xNjU1LDUgKzE2NTIsNiBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG4gaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuK2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9CUEZfVkVSSUZJRVJfSCAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbmluZGV4IDJlNGFlMGVmMDg2MDkuLjdjNDU5OWU2NWVjZWIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbisrKyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG5AQCAtMjg1LDYgKzI4NSw3IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwic3RhY2s9JXMgYmVmb3JlIFxcXCIsIGVudi1cXHUwMDNldG1wX3N0cl9idWYpO1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVkOiBcXFwiLCBpZHgpO1xcbiBcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XFxuK1xcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogSWYgdGhlcmUgaXMgYSBoaXN0b3J5IHJlY29yZCB0aGF0IHNvbWUgcmVnaXN0ZXJzIGdhaW5lZCByYW5nZSBhdCB0aGlzIGluc24sXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jXFxuaW5kZXggMDM5MWIzYmMwMDczNC4uNTBiM2NhNTE0OWEwYSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Rpc2FzbS5jXFxuKysrIGIva2VybmVsL2JwZi9kaXNhc20uY1xcbkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2VuZF9pbnNuKGJwZl9pbnNuX3ByaW50X3QgdmVyYm9zZSxcXG4gXFx0XFx0XFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4ge1xcbi1cXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSAlcyVkIHIlZFxcXFxuXFxcIixcXG4rXFx0dmVyYm9zZShwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gJXMlZCByJWRcXFwiLFxcbiBcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9UT19CRSA/IFxcXCJiZVxcXCIgOiBcXFwibGVcXFwiLFxcbiBcXHRcXHRpbnNuLVxcdTAwM2VpbW0sIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbkBAIC0xNDksNyArMTQ5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2Jzd2FwX2luc24oYnBmX2luc25fcHJpbnRfdCB2ZXJib3NlLFxcbiBcXHRcXHRcXHQgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiB7XFxuLVxcdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGJzd2FwJWQgciVkXFxcXG5cXFwiLFxcbitcXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFxcXCIsXFxuIFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdGluc24tXFx1MDAzZWltbSwgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuIH1cXG5AQCAtMTk3LDE5ICsxOTcsMTkgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0cHJpbnRfYnBmX2VuZF9pbnNuKHZlcmJvc2UsIGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX05FRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICVjJWQgPSAtJWMlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlYyVkID0gLSVjJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChpc19hZGRyX3NwYWNlX2Nhc3QoaW5zbikpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBhZGRyX3NwYWNlX2Nhc3QociVkLCAldSwgJXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnLCAoKHUzMilpbnNuLVxcdTAwM2VpbW0pIFxcdTAwM2VcXHUwMDNlIDE2LCAodTE2KWluc24tXFx1MDAzZWltbSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoaXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gXFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gXFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XVxcbkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdFxcdGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICVjJWQgJXMgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGlzX3NkaXZfc21vZChpbnNuKSA/IGJwZl9hbHVfc2lnbl9zdHJpbmdbQlBGX09QKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDRdXFxuQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVFgpIHtcXG4gXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0pXFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9IHIlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gciVkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0IChpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0FERCB8fCBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0FORCB8fFxcbiBcXHRcXHRcXHQgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfT1IgfHwgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9YT1IpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlK2QpICVzIHIlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBsb2NrICooJXMgKikociVkICUrZCkgJXMgciVkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYsXFxuQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0ICAgIGluc24tXFx1MDAzZWltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHxcXG4gXFx0XFx0XFx0ICAgIGluc24tXFx1MDAzZWltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fFxcbiBcXHRcXHRcXHQgICAgaW5zbi1cXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSkpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUrZCksIHIlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfYXRvbWljX2FsdV9zdHJpbmdbQlBGX09QKGluc24tXFx1MDAzZWltbSkgXFx1MDAzZVxcdTAwM2UgNF0sXFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUrZCksIHIwLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUrZCksIHIwLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuQEAgLTI2Miw0NCArMjYyLDQ0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfWENIRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiwgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJStkKSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJStkKSlcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX1NUT1JFX1JFTCkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYsIGluc24tXFx1MDAzZXNyY19yZWcpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHXyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHXyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkge1xcbiBcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICooJXMgKikociVkICUrZCkgPSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZW9mZiwgaW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSAweGMwIC8qIEJQRl9OT1NQRUMsIG5vIFVBUEkgKi8pIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBub3NwZWNcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIG5vc3BlY1xcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX3N0XyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX3N0XyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRFgpIHtcXG4gXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9NRU0gXFx1MDAyNlxcdTAwMjYgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX01FTVNYKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGR4XyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX2xkeF8lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbi1cXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICooJXMgKikociVkICUrZClcXFxcblxcXCIsXFxuK1xcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVxcXCIsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xcbiBcXHRcXHRcXHRcXHQgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdIDpcXG5AQCAtMzA3LDEyICszMDcsMTIgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuIFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUJTKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgcjAgPSAqKCVzICopc2tiWyVkXVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByMCA9ICooJXMgKilza2JbJWRdXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VpbW0pO1xcbiBcXHRcXHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9JTkQpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICsgJWRdXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgKyAlZF1cXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZWltbSk7XFxuQEAgLTMzMiwxMiArMzMyLDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiBcXHRcXHRcXHRpZiAoaXNfcHRyIFxcdTAwMjZcXHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXFxuIFxcdFxcdFxcdFxcdGltbSA9IDA7XFxuIFxcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICVzXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlZHN0X3JlZyxcXG4gXFx0XFx0XFx0XFx0X19mdW5jX2ltbV9uYW1lKGNicywgaW5zbiwgaW1tLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR0bXAsIHNpemVvZih0bXApKSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGRfJTAyeFxcXFxuXFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGRfJTAyeFxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkge1xcbkBAIC0zNDcsMzUgKzM0NywzNSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0Y2hhciB0bXBbNjRdO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKSB7XFxuLVxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgY2FsbCBwYyVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGNhbGwgcGMlc1xcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsXFxuIFxcdFxcdFxcdFxcdFxcdF9fZnVuY19nZXRfbmFtZShjYnMsIGluc24sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0c3RyY3B5KHRtcCwgXFxcInVua25vd25cXFwiKTtcXG4tXFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBjYWxsICVzIyVkXFxcXG5cXFwiLCBpbnNuLVxcdTAwM2Vjb2RlLFxcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGNhbGwgJXMjJWRcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHR0bXAsIHNpemVvZih0bXApKSxcXG4gXFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgZ290byBwYyUrZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvIHBjJStkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfSk1QIHwgQlBGX0pBIHwgQlBGX1gpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgZ290b3ggciVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGdvdG94IHIlZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkNPTkQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX01BWV9HT1RPKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbWF5X2dvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbWF5X2dvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2VvZmYpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAzMiB8IEJQRl9KQSkpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvbCBwYyUrZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvbCBwYyUrZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWltbSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9FWElUKSkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGV4aXRcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGV4aXRcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAlYyVkIGdvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAlYyVkIGdvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XSxcXG5AQCAtMzgzLDE0ICszODMsMTQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XSxcXG4gXFx0XFx0XFx0XFx0KHUzMilpbnNuLVxcdTAwM2VpbW0sIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlc1xcXCIsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGJwZl9jbGFzc19zdHJpbmdbY2xhc3NdKTtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuaW5kZXggYTBiZGRhZGE3OTY0ZS4uNzNhYjk1NTczZjYwOSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbkBAIC00NCwxNSArNDQsMTggQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdH1cXG4gfVxcbiBcXG4tLyogUmV0dXJuIFRSVUUgaWYgSU5TTiBoYXMgZGVmaW5lZCBhbnkgMzItYml0IHZhbHVlIGV4cGxpY2l0bHkuICovXFxuLXN0YXRpYyBib29sIGluc25faGFzX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4rLypcXG4rICogUmV0dXJuIHRoZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5lZCBieSBJTlNOLCBvciAtMSBpZiBJTlNOIGRvZXMgbm90XFxuKyAqIGV4cGxpY2l0bHkgZGVmaW5lIGEgMzItYml0IHZhbHVlLlxcbisgKi9cXG4raW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4ge1xcbiBcXHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xcbiBcXG4tXFx0aWYgKGRzdF9yZWcgPT0gLTEpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGRzdF9yZWcgXFx1MDAzYyAwIHx8IGJwZl9pc19yZWc2NChpbnNuKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0cmV0dXJuICFicGZfaXNfcmVnNjQoaW5zbiwgZHN0X3JlZywgTlVMTCwgRFNUX09QKTtcXG4rXFx0cmV0dXJuIGRzdF9yZWc7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQga2Z1bmNfZGVzY19jbXBfYnlfaW1tX29mZihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxcbkBAIC0xNjksNyArMTcyLDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0ICogKGNudCA9PSAxKSBpcyB0YWtlbiBvciBub3QuIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSBJTlNOIGF0IE9GRiBpcyB0aGVcXG4gXFx0ICogb3JpZ2luYWwgaW5zbiBhdCBvbGQgcHJvZy5cXG4gXFx0ICovXFxuLVxcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gKyBvZmYgKyBjbnQgLSAxKTtcXG4rXFx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiArIG9mZiArIGNudCAtIDEpIFxcdTAwM2U9IDA7XFxuIFxcbiBcXHRpZiAoY250ID09IDEpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMTgxLDcgKzE4NCw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdGZvciAoaSA9IG9mZjsgaSBcXHUwMDNjIG9mZiArIGNudCAtIDE7IGkrKykge1xcbiBcXHRcXHQvKiBFeHBhbmQgaW5zbmlbb2ZmXSdzIHNlZW4gY291bnQgdG8gdGhlIHBhdGNoZWQgcmFuZ2UuICovXFxuIFxcdFxcdGRhdGFbaV0uc2VlbiA9IG9sZF9zZWVuO1xcbi1cXHRcXHRkYXRhW2ldLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiArIGkpO1xcbitcXHRcXHRkYXRhW2ldLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiArIGkpIFxcdTAwM2U9IDA7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTYyMCw3ICs2MjMsNyBAQCBpbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdCAqICAgICAgIEJQRl9TVFggKyBTUkNfT1AsIHNvIGl0IGlzIHNhZmUgdG8gcGFzcyBOVUxMXFxuIFxcdFxcdFxcdCAqICAgICAgIGhlcmUuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoYnBmX2lzX3JlZzY0KFxcdTAwMjZpbnNuLCBsb2FkX3JlZywgTlVMTCwgRFNUX09QKSkge1xcbitcXHRcXHRcXHRpZiAoYnBmX2lzX3JlZzY0KFxcdTAwMjZpbnNuKSkge1xcbiBcXHRcXHRcXHRcXHRpZiAoY2xhc3MgPT0gQlBGX0xEIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKVxcbiBcXHRcXHRcXHRcXHRcXHRpKys7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xcbmluZGV4IDBhYWRmYmFlMGFjYzUuLmVhMDAyNTUwNjcxYTggMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9saXZlbmVzcy5jXFxuKysrIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXFxuQEAgLTQ5Nyw3ICs0OTcsNiBAQCBzdGF0aWMgdm9pZCBwcmludF9pbnN0YW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaVxcbiBcXHRcXHRwb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUzZDogXFxcIiwgaW5zbl9pZHgpO1xcbiBcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXFx1MDAyNmluc25zW2luc25faWR4XSk7XFxuLVxcdFxcdGJwZl92bG9nX3Jlc2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgZW52LVxcdTAwM2Vsb2cuZW5kX3BvcyAtIDEpOyAvKiByZW1vdmUgXFxcXG4gKi9cXG4gXFx0XFx0aW5zbl9wb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUqYztcXFwiLCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAnICcpO1xcbiBcXHRcXHRwb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbkBAIC0xMDQzLDcgKzEwNDIsNiBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfbG9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaVxcbiBcXHRcXHRpZiAoIXByaW50ZWQpIHtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxuIFxcdFxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcXG4tXFx0XFx0XFx0YnBmX3Zsb2dfcmVzZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XFxuIFxcdFxcdFxcdHByaW50ZWQgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXHRyJWQ6IFxcXCIsIGkpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZhdF9pbltpXSk7XFxuQEAgLTEwNTgsNyArMTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXFxuIFxcdFxcdGlmICghcHJpbnRlZCkge1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUzZDogXFxcIiwgaWR4KTtcXG4gXFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbi1cXHRcXHRcXHRicGZfdmxvZ19yZXNldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIGVudi1cXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTtcXG4gXFx0XFx0XFx0cHJpbnRlZCA9IHRydWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcdHNhJWQ6IFxcXCIsIGkpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZhdF9pblthaV0pO1xcbkBAIC0xMDcwLDcgKzEwNjcsNiBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfbG9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaVxcbiBcXHRcXHRpZiAoIXByaW50ZWQpIHtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxuIFxcdFxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcXG4tXFx0XFx0XFx0YnBmX3Zsb2dfcmVzZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XFxuIFxcdFxcdFxcdHByaW50ZWQgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXHRmcCUrZDogXFxcIiwgLShpICsgMSkgKiA4KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcXHUwMDI2YXRfc3RhY2tfaW5baV0pO1xcbkBAIC0xNTQ1LDYgKzE1NDEsNyBAQCBzdGF0aWMgdm9pZCBwcmludF9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJTNkOiBcXFwiLCBpZHgpO1xcbiBcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXFx1MDAyNmluc25zW2lkeF0pO1xcbitcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlxcXFxuXFxcIik7XFxuIFxcbiBcXHRcXHQvKiBDb2xsZWN0IHdoYXQgbmVlZHMgcHJpbnRpbmcgKi9cXG4gXFx0XFx0aWYgKGlzX2xkeF9zdHhfY2FsbCBcXHUwMDI2XFx1MDAyNlxcbkBAIC0yMDUwLDI5ICsyMDQ3LDY3IEBAIGludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFxuIC8qIEVhY2ggZmllbGQgaXMgYSByZWdpc3RlciBiaXRtYXNrICovXFxuIHN0cnVjdCBpbnNuX2xpdmVfcmVncyB7XFxuLVxcdHUxNiB1c2U7XFx0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cXG4tXFx0dTE2IGRlZjtcXHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xcbi1cXHR1MTYgaW47XFx0XFx0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGJlZm9yZSBpbnN0cnVjdGlvbiAqL1xcbi1cXHR1MTYgb3V0O1xcdC8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqL1xcbitcXHR1MzIgdXNlO1xcdC8qIHJlZ2lzdGVycyByZWFkIGJ5IGluc3RydWN0aW9uICovXFxuK1xcdHUzMiBkZWY7XFx0LyogcmVnaXN0ZXJzIHdyaXR0ZW4gYnkgaW5zdHJ1Y3Rpb24gKi9cXG4rXFx0dTMyIGluO1xcdFxcdC8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBiZWZvcmUgaW5zdHJ1Y3Rpb24gKi9cXG4rXFx0dTMyIG91dDtcXHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYWZ0ZXIgaW5zdHJ1Y3Rpb24gKi9cXG4gfTtcXG4gXFxuIC8qIEJpdG1hc2sgd2l0aCAxcyBmb3IgYWxsIGNhbGxlciBzYXZlZCByZWdpc3RlcnMgKi9cXG4gI2RlZmluZSBBTExfQ0FMTEVSX1NBVkVEX1JFR1MgKCgxdSBcXHUwMDNjXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUykgLSAxKVxcbiBcXG4rc3RhdGljIGlubGluZSB1MzIgcmVnMzJfbWFzayh1MzIgbikgeyByZXR1cm4gQklUKG4pOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTMyIHJlZzY0X21hc2sodTMyIG4pIHsgcmV0dXJuIEJJVChuKSB8IEJJVChuICsgMTYpOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTMyIG1hc2tfd2lkZW4odTMyIG0pIHsgcmV0dXJuIG0gfCAobSBcXHUwMDNjXFx1MDAzYyAxNik7IH1cXG4rc3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTE2IG1hc2tfaGkodTMyIG0pIHsgcmV0dXJuICh1MTYpKG0gXFx1MDAzZVxcdTAwM2UgMTYpOyB9XFxuK1xcbisvKiBJbmZlciB1c2UgbWFzayBiYXNlZCBvbiBudW1iZXIgYW5kIHNpemVzIG9mIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLiAqL1xcbitzdGF0aWMgdTMyIGNhbGxfdXNlX21hc2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbit7XFxuK1xcdHUzMiBpLCB1c2UsIHNpemUsIHJlZ19wYXJhbXNfbnVtO1xcbitcXHRzdHJ1Y3QgYnBmX2NhbGxfc3VtbWFyeSBjcztcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqcDtcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xcbitcXG4rXFx0aWYgKCFicGZfZ2V0X2NhbGxfc3VtbWFyeShlbnYsIGluc24sIFxcdTAwMjZjcykpXFxuK1xcdFxcdC8qIGUuZy4gYSBicGYtdG8tYnBmIGNhbGwsIGFzc3VtZSB0aGF0IGNhbGxzIHVzZSBmdWxsIDY0LWJpdCBmb3IgZWFjaCBwYXJhbSAqL1xcbitcXHRcXHRyZXR1cm4gbWFza193aWRlbihBTExfQ0FMTEVSX1NBVkVEX1JFR1MgXFx1MDAyNiB+QklUKEJQRl9SRUdfMCkpO1xcbitcXG4rXFx0aWYgKGNzLmZ1bmNfcHJvdG8pIHtcXG4rXFx0XFx0dXNlID0gMDtcXG4rXFx0XFx0cCA9IGJ0Zl9wYXJhbXMoY3MuZnVuY19wcm90byk7XFxuK1xcdFxcdHJlZ19wYXJhbXNfbnVtID0gbWluKGJ0Zl90eXBlX3ZsZW4oY3MuZnVuY19wcm90byksIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyByZWdfcGFyYW1zX251bTsgaSsrKSB7XFxuK1xcdFxcdFxcdHQgPSBidGZfdHlwZV9ieV9pZChjcy5idGYsIHBbaV0udHlwZSk7XFxuK1xcdFxcdFxcdGlmIChJU19FUlIoYnRmX3Jlc29sdmVfc2l6ZShjcy5idGYsIHQsIFxcdTAwMjZzaXplKSkpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuK1xcdFxcdFxcdHVzZSB8PSBzaXplIFxcdTAwM2M9IHNpemVvZih1MzIpID8gcmVnMzJfbWFzayhpICsgMSkgOiByZWc2NF9tYXNrKGkgKyAxKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gdXNlO1xcbitcXHR9XFxuK1xcbitmYWxsYmFjazpcXG4rXFx0LyogYnkgZGVmYXVsdCBhc3N1bWUgdGhhdCBjYWxscyB1c2UgZnVsbCA2NC1iaXQgZm9yIGVhY2ggcGFyYW0gKi9cXG4rXFx0cmV0dXJuIG1hc2tfd2lkZW4oR0VOTUFTSyhtaW5fdCh1OCwgY3MubnVtX3BhcmFtcywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKSwgMSkpO1xcbit9XFxuK1xcbiAvKiBDb21wdXRlIGluZm8tXFx1MDAzZXt1c2UsZGVmfSBmaWVsZHMgZm9yIHRoZSBpbnN0cnVjdGlvbiAqL1xcbiBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGluc25fbGl2ZV9yZWdzICppbmZvKVxcbiB7XFxuLVxcdHN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzO1xcbi1cXHR1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKTtcXG4tXFx0dTggY29kZSA9IEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKTtcXG4tXFx0dTggbW9kZSA9IEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpO1xcbi1cXHR1MTYgc3JjID0gQklUKGluc24tXFx1MDAzZXNyY19yZWcpO1xcbi1cXHR1MTYgZHN0ID0gQklUKGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbi1cXHR1MTYgcjAgID0gQklUKDApO1xcbi1cXHR1MTYgZGVmID0gMDtcXG4tXFx0dTE2IHVzZSA9IDB4ZmZmZjtcXG4rXFx0Y29uc3QgdTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdGNvbnN0IHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdGNvbnN0IHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0Y29uc3QgdTggc2l6ZSA9IEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRjb25zdCB1MzIgc3JjID0gcmVnNjRfbWFzayhpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4rXFx0Y29uc3QgdTMyIGRzdCA9IHJlZzY0X21hc2soaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuK1xcdGNvbnN0IHUzMiBzcmMzMiA9IG1hc2tfbG8oc3JjKTtcXG4rXFx0Y29uc3QgdTMyIGRzdDMyID0gbWFza19sbyhkc3QpO1xcbitcXHRjb25zdCB1MzIgcjAgID0gcmVnNjRfbWFzaygwKTtcXG4rXFx0dTMyIGRlZiA9IDA7XFxuK1xcdHUzMiB1c2UgPSBVMzJfTUFYO1xcbiBcXG4gXFx0c3dpdGNoIChjbGFzcykge1xcbiBcXHRjYXNlIEJQRl9MRDpcXG5AQCAtMjA4Myw4ICsyMTE4LDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHR1c2UgPSAwO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIEJQRl9MRCB8IEJQRl9BQlM6XFxuLVxcdFxcdGNhc2UgQlBGX0xEIHwgQlBGX0lORDpcXG4rXFx0XFx0Y2FzZSBCUEZfQUJTOlxcbitcXHRcXHRjYXNlIEJQRl9JTkQ6XFxuIFxcdFxcdFxcdC8qIHN0aWNrIHdpdGggZGVmYXVsdHMgKi9cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtMjA5Miw3ICsyMTI3LDE1IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0Y2FzZSBCUEZfTERYOlxcbiBcXHRcXHRzd2l0Y2ggKG1vZGUpIHtcXG4gXFx0XFx0Y2FzZSBCUEZfTUVNOlxcbitcXHRcXHRcXHQvKiBhIG5hcnJvdyBsb2FkIHN0aWxsIHJlZGVmaW5lcyB0aGUgd2hvbGUgcmVnaXN0ZXIgKi9cXG4rXFx0XFx0XFx0ZGVmID0gZHN0O1xcbitcXHRcXHRcXHR1c2UgPSBzcmM7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEJQRl9NRU1TWDpcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogc2lnbiBleHRlbnNpb24gZGVmaW5lcyB0aGUgd2hvbGUgcmVnaXN0ZXI7XFxuK1xcdFxcdFxcdCAqIHNyYyBob2xkcyBhIHBvaW50ZXIsIGhlbmNlIGlzIHVzZWQgYXMgNjQtYml0LlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0ZGVmID0gZHN0O1xcbiBcXHRcXHRcXHR1c2UgPSBzcmM7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0yMTEwLDEyICsyMTUzLDE5IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0c3dpdGNoIChtb2RlKSB7XFxuIFxcdFxcdGNhc2UgQlBGX01FTTpcXG4gXFx0XFx0XFx0ZGVmID0gMDtcXG4tXFx0XFx0XFx0dXNlID0gZHN0IHwgc3JjO1xcbitcXHRcXHRcXHR1c2UgPSBkc3QgfCAoc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIEJQRl9BVE9NSUM6XFxuK1xcdFxcdGNhc2UgQlBGX0FUT01JQzoge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBkc3QgaG9sZHMgYSBwb2ludGVyIGFuZCBpcyBhbHdheXMgdXNlZCBhcyA2NC1iaXQ7XFxuK1xcdFxcdFxcdCAqIHRoZSB2YWx1ZSBvcGVyYW5kIGFuZCByMCBhcmUgcmVhZCBhcyAzMi1iaXQgZm9yIEJQRl9XIGF0b21pY3MuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR1MzIgc3JjdiA9IHNpemUgPT0gQlBGX0RXID8gc3JjIDogc3JjMzI7XFxuK1xcdFxcdFxcdHUzMiByMHYgID0gc2l6ZSA9PSBCUEZfRFcgPyByMCA6IG1hc2tfbG8ocjApO1xcbitcXG4gXFx0XFx0XFx0c3dpdGNoIChpbnNuLVxcdTAwM2VpbW0pIHtcXG4gXFx0XFx0XFx0Y2FzZSBCUEZfQ01QWENIRzpcXG4tXFx0XFx0XFx0XFx0dXNlID0gcjAgfCBkc3QgfCBzcmM7XFxuK1xcdFxcdFxcdFxcdHVzZSA9IHIwdiB8IGRzdCB8IHNyY3Y7XFxuIFxcdFxcdFxcdFxcdGRlZiA9IHIwO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuQEAgLTIxMjQsMTAgKzIxNzQsMTAgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0Y2FzZSBCUEZfU1RPUkVfUkVMOlxcbiBcXHRcXHRcXHRcXHRkZWYgPSAwO1xcbi1cXHRcXHRcXHRcXHR1c2UgPSBkc3QgfCBzcmM7XFxuK1xcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyY3Y7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRcXHR1c2UgPSBkc3QgfCBzcmM7XFxuK1xcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyY3Y7XFxuIFxcdFxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VpbW0gXFx1MDAyNiBCUEZfRkVUQ0gpXFxuIFxcdFxcdFxcdFxcdFxcdGRlZiA9IHNyYztcXG4gXFx0XFx0XFx0XFx0ZWxzZVxcbkBAIC0yMTM1LDYgKzIxODUsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4rXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfQUxVOlxcbiBcXHRjYXNlIEJQRl9BTFU2NDpcXG5AQCAtMjE0OCwxNCArMjE5OSwxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9LKVxcbiBcXHRcXHRcXHRcXHR1c2UgPSAwO1xcbiBcXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdHVzZSA9IHNyYztcXG4rXFx0XFx0XFx0XFx0dXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gc3JjIDogc3JjMzI7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRkZWYgPSBkc3Q7XFxuIFxcdFxcdFxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9LKVxcbi1cXHRcXHRcXHRcXHR1c2UgPSBkc3Q7XFxuK1xcdFxcdFxcdFxcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IGRzdCA6IGRzdDMyO1xcbiBcXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyYztcXG4rXFx0XFx0XFx0XFx0dXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gKGRzdCB8IHNyYykgOiAoZHN0MzIgfCBzcmMzMik7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQlBGX0pNUDpcXG5AQCAtMjE3NywxNyArMjIyOCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdHVzZSA9IHIwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBCUEZfQ0FMTDpcXG4tXFx0XFx0XFx0ZGVmID0gQUxMX0NBTExFUl9TQVZFRF9SRUdTO1xcbi1cXHRcXHRcXHR1c2UgPSBkZWYgXFx1MDAyNiB+QklUKEJQRl9SRUdfMCk7XFxuLVxcdFxcdFxcdGlmIChicGZfZ2V0X2NhbGxfc3VtbWFyeShlbnYsIGluc24sIFxcdTAwMjZjcykpXFxuLVxcdFxcdFxcdFxcdHVzZSA9IEdFTk1BU0sobWluX3QodTgsIGNzLm51bV9wYXJhbXMsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyksIDEpO1xcbitcXHRcXHRcXHRkZWYgPSBtYXNrX3dpZGVuKEFMTF9DQUxMRVJfU0FWRURfUkVHUyk7XFxuK1xcdFxcdFxcdHVzZSA9IGNhbGxfdXNlX21hc2soZW52LCBpbnNuKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGRlZiA9IDA7XFxuIFxcdFxcdFxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9LKVxcbiBcXHRcXHRcXHRcXHR1c2UgPSBkc3Q7XFxuIFxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0dXNlID0gZHN0IHwgc3JjO1xcbitcXHRcXHRcXHRcXHR1c2UgPSBkc3QgfCAoY29kZSA9PSBCUEZfSk1QMzIgPyBzcmMgOiBzcmMzMik7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtMjIwOSw2ICsyMjU4LDcgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4gXFx0c3RydWN0IGluc25fbGl2ZV9yZWdzICpzdGF0ZTtcXG4gXFx0aW50IGluc25fY250ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW47XFxuK1xcdHU2NCBwb3MsIGluc25fcG9zO1xcbiBcXHRpbnQgZXJyID0gMCwgaSwgajtcXG4gXFx0Ym9vbCBjaGFuZ2VkO1xcbiBcXG5AQCAtMjI1Miw4ICsyMzAyLDggQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGludCBpbnNuX2lkeCA9IGVudi1cXHUwMDNlY2ZnLmluc25fcG9zdG9yZGVyW2ldO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKmxpdmUgPSBcXHUwMDI2c3RhdGVbaW5zbl9pZHhdO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgYnBmX2lhcnJheSAqc3VjYztcXG4tXFx0XFx0XFx0dTE2IG5ld19vdXQgPSAwO1xcbi1cXHRcXHRcXHR1MTYgbmV3X2luID0gMDtcXG4rXFx0XFx0XFx0dTMyIG5ld19vdXQgPSAwO1xcbitcXHRcXHRcXHR1MzIgbmV3X2luID0gMDtcXG4gXFxuIFxcdFxcdFxcdHN1Y2MgPSBicGZfaW5zbl9zdWNjZXNzb3JzKGVudiwgaW5zbl9pZHgpO1xcbiBcXHRcXHRcXHRmb3IgKGludCBzID0gMDsgcyBcXHUwMDNjIHN1Y2MtXFx1MDAzZWNudDsgKytzKVxcbkBAIC0yMjY3LDggKzIzMTcsMjAgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluc25fY250OyArK2kpXFxuLVxcdFxcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBzdGF0ZVtpXS5pbjtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluc25fY250OyArK2kpIHtcXG4rXFx0XFx0aW50IGRlZjMyID0gYnBmX2luc25fZGVmMzIoXFx1MDAyNmluc25zW2ldKTtcXG4rXFx0XFx0dTMyIG91dCA9IHN0YXRlW2ldLm91dDtcXG4rXFx0XFx0dTMyIGluID0gc3RhdGVbaV0uaW47XFxuK1xcbitcXHRcXHRpbnNuX2F1eFtpXS5saXZlX3JlZ3NfYmVmb3JlID0gbWFza19sbyhpbikgfCBtYXNrX2hpKGluKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT24gYXJjaGl0ZWN0dXJlcyB3aGVyZSAzMi1iaXQgb3BlcmF0aW9ucyBkbyBub3QgcmVzZXQgdXBwZXIgaGFsdmVzXFxuK1xcdFxcdCAqIG9mIHRoZSByZWdpc3RlcnMsIHRoZSB2ZXJpZmllciBuZWVkcyB0byB6ZXJvIGV4dGVuZCBhIGRlc3RpbmF0aW9uXFxuK1xcdFxcdCAqIHJlZ2lzdGVyIGlmIGFuIGluc3RydWN0aW9uIGRlZmluZXMgYSAzMi1iaXQgc3VicmVnaXN0ZXIgYW5kIHRoZVxcbitcXHRcXHQgKiB1cHBlciBoYWxmIG9mIHRoYXQgcmVnaXN0ZXIgaXMgYWxpdmUgYWZ0ZXIgdGhlIGluc3RydWN0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aW5zbl9hdXhbaV0uemV4dF9kc3QgPSBkZWYzMiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IChtYXNrX2hpKG91dCkgXFx1MDAyNiBCSVQoZGVmMzIpKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGVudi1cXHUwMDNlbG9nLmxldmVsIFxcdTAwMjYgQlBGX0xPR19MRVZFTDIpIHtcXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJMaXZlIHJlZ3MgYmVmb3JlIGluc246XFxcXG5cXFwiKTtcXG5AQCAtMjI4NCw3ICsyMzQ2LDEyIEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiLlxcXCIpO1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiBcXFwiKTtcXG4rXFx0XFx0XFx0cG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG4gXFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFxcdTAwMjZpbnNuc1tpXSk7XFxuK1xcdFxcdFxcdGluc25fcG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG4rXFx0XFx0XFx0aWYgKGluc25fYXV4W2ldLnpleHRfZHN0KVxcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUqYzsgemV4dFxcXCIsIGJwZl92bG9nX2FsaWdubWVudChpbnNuX3BvcyAtIHBvcyksICcgJyk7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0aWYgKGJwZl9pc19sZGltbTY0KFxcdTAwMjZpbnNuc1tpXSkpXFxuIFxcdFxcdFxcdFxcdGkrKztcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBlNmYzNWY0ZTcxNWI2Li5kNWI2ZmVmMWFkODk3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0yMTI5LDEyICsyMTI5LDkgQEAgc3RhdGljIGludCByZWdfYm91bmRzX3Nhbml0eV9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiAvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xcbiB2b2lkIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiB7XFxuLVxcdHMzMiBzdWJyZWdfZGVmID0gcmVnLVxcdTAwM2VzdWJyZWdfZGVmO1xcbi1cXG4gXFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcXG4gXFx0cmVnLVxcdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xcbiBcXHRyZWctXFx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XFxuLVxcdHJlZy1cXHUwMDNlc3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7XFxuIFxcdF9fbWFya19yZWdfdW5ib3VuZGVkKHJlZyk7XFxuIH1cXG4gXFxuQEAgLTIyMTAsNyArMjIwNyw2IEBAIHN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdH1cXG4gfVxcbiBcXG4tI2RlZmluZSBERUZfTk9UX1NVQlJFR1xcdCgwKVxcbiBzdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKVxcbiB7XFxuQEAgLTIyMTksNyArMjIxNSw2IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0JQRl9SRUc7IGkrKykge1xcbiBcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tpXSk7XFxuLVxcdFxcdHJlZ3NbaV0uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBmcmFtZSBwb2ludGVyICovXFxuQEAgLTMwMzMsMTEgKzMwMjgsMTAgQEAgc3RhdGljIHZvaWQgbWFya19zdGFja19zbG90c19zY3JhdGNoZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gfVxcbiBcXG4gLyogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgMzItYml0IG9wdGltaXphdGlvblxcbi0gKiBjb2RlIG9ubHkuIEl0IHJldHVybnMgVFJVRSBpZiB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzXFxuLSAqIG9uIDY0LWJpdCwgb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cXG4rICogY29kZSBvbmx5LiBJdCByZXR1cm5zIFRSVUUgaWYgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzIG9uIDY0LWJpdCxcXG4rICogb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cXG4gICovXFxuLWJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tXFx0ICAgICAgdTMyIHJlZ25vLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdClcXG4rYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiB7XFxuIFxcdHU4IGNvZGUsIGNsYXNzLCBvcDtcXG4gXFxuQEAgLTMwNTgsMTEgKzMwNTIsNiBAQCBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0XFx0LyogSGVscGVyIGNhbGwgd2lsbCByZWFjaCBoZXJlIGJlY2F1c2Ugb2YgYXJnIHR5cGVcXG4tXFx0XFx0XFx0ICogY2hlY2ssIGNvbnNlcnZhdGl2ZWx5IHJldHVybiBUUlVFLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKHQgPT0gU1JDX09QKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0fVxcbkBAIC0zMDc4LDIyICszMDY3LDExIEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0aWYgKGNsYXNzID09IEJQRl9BTFUgfHwgY2xhc3MgPT0gQlBGX0pNUDMyKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xcbi1cXHRcXHRpZiAodCAhPSBTUkNfT1ApXFxuLVxcdFxcdFxcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFcgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX01FTVNYO1xcbi1cXHRcXHQvKiBMRFggc291cmNlIG11c3QgYmUgcHRyLiAqL1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0fVxcbitcXHRpZiAoY2xhc3MgPT0gQlBGX0xEWClcXG4rXFx0XFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7XFxuIFxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xcbi1cXHRcXHQvKiBCUEZfU1RYIChpbmNsdWRpbmcgYXRvbWljIHZhcmlhbnRzKSBoYXMgb25lIG9yIG1vcmUgc291cmNlXFxuLVxcdFxcdCAqIG9wZXJhbmRzLCBvbmUgb2Ygd2hpY2ggaXMgYSBwdHIuIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxlciBpc1xcbi1cXHRcXHQgKiBhc2tpbmcgYWJvdXQgaXQuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAodCA9PSBTUkNfT1AgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChjbGFzcyA9PSBCUEZfU1RYKVxcbiBcXHRcXHRyZXR1cm4gQlBGX1NJWkUoY29kZSkgPT0gQlBGX0RXO1xcbi1cXHR9XFxuIFxcbiBcXHRpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuIFxcdFxcdHU4IG1vZGUgPSBCUEZfTU9ERShjb2RlKTtcXG5AQCAtMzEwMywxNSArMzA4MSw3IEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRcXHQvKiBCb3RoIExEX0lORCBhbmQgTERfQUJTIHJldHVybiAzMi1iaXQgZGF0YS4gKi9cXG4tXFx0XFx0aWYgKHQgIT0gU1JDX09QKVxcbi1cXHRcXHRcXHRyZXR1cm4gIGZhbHNlO1xcbi1cXG4tXFx0XFx0LyogSW1wbGljaXQgY3R4IHB0ci4gKi9cXG4tXFx0XFx0aWYgKHJlZ25vID09IEJQRl9SRUdfNilcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcbi1cXHRcXHQvKiBFeHBsaWNpdCBzb3VyY2UgY291bGQgYmUgYW55IHdpZHRoLiAqL1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoY2xhc3MgPT0gQlBGX1NUKVxcbkBAIC0zMTIyLDMwICszMDkyLDE0IEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLXtcXG4tXFx0czMyIGRlZl9pZHggPSByZWctXFx1MDAzZXN1YnJlZ19kZWY7XFxuLVxcbi1cXHRpZiAoZGVmX2lkeCA9PSBERUZfTk9UX1NVQlJFRylcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2RlZl9pZHggLSAxXS56ZXh0X2RzdCA9IHRydWU7XFxuLVxcdC8qIFRoZSBkc3Qgd2lsbCBiZSB6ZXJvIGV4dGVuZGVkLCBzbyB3b24ndCBiZSBzdWItcmVnaXN0ZXIgYW55bW9yZS4gKi9cXG4tXFx0cmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXFxuIFxcdFxcdFxcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxcbiB7XFxuLVxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpICsgZW52LVxcdTAwM2VpbnNuX2lkeDtcXG4gXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4tXFx0Ym9vbCBydzY0O1xcbiBcXG4gXFx0bWFya19yZWdfc2NyYXRjaGVkKGVudiwgcmVnbm8pO1xcbiBcXG4gXFx0cmVnID0gXFx1MDAyNnJlZ3NbcmVnbm9dO1xcbi1cXHRydzY0ID0gYnBmX2lzX3JlZzY0KGluc24sIHJlZ25vLCByZWcsIHQpO1xcbiBcXHRpZiAodCA9PSBTUkNfT1ApIHtcXG4gXFx0XFx0LyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIHNvdXJjZSBvcGVyYW5kIGNhbiBiZSByZWFkICovXFxuIFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgPT0gTk9UX0lOSVQpIHtcXG5AQCAtMzE1Niw5ICszMTEwLDYgQEAgc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJcXG4gXFx0XFx0aWYgKHJlZ25vID09IEJQRl9SRUdfRlApXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0XFx0aWYgKHJ3NjQpXFxuLVxcdFxcdFxcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcXG4tXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgZGVzdCBvcGVyYW5kIGNhbiBiZSB3cml0dGVuIHRvICovXFxuQEAgLTMxNjYsNyArMzExNyw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZnJhbWUgcG9pbnRlciBpcyByZWFkIG9ubHlcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBydzY0ID8gREVGX05PVF9TVUJSRUcgOiBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0XFx0aWYgKHQgPT0gRFNUX09QKVxcbiBcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xcbiBcXHR9XFxuQEAgLTM4MjIsMTEgKzM3NzIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcbiBcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNjPSBzcGlsbF9zaXplIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBicGZfc3RhY2tfbmFycm93X2FjY2Vzc19vayhvZmYsIHNpemUsIHNwaWxsX3NpemUpKSB7XFxuLVxcdFxcdFxcdFxcdC8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGVcXG4tXFx0XFx0XFx0XFx0ICogc3VicmVnX2RlZiBmb3IgdGhpcyBpbnNuLiAgU2F2ZSBpdCBmaXJzdC5cXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHMzMiBzdWJyZWdfZGVmID0gc3RhdGUtXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmO1xcbi1cXG4gXFx0XFx0XFx0XFx0aWYgKGVudi1cXHUwMDNlYnBmX2NhcGFibGUgXFx1MDAyNlxcdTAwMjYgc2l6ZSA9PSA0IFxcdTAwMjZcXHUwMDI2IHNwaWxsX3NpemUgPT0gNCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHQgICAgZ2V0X3JlZ193aWR0aChyZWcpIFxcdTAwM2M9IDMyKVxcbiBcXHRcXHRcXHRcXHRcXHQvKiBFbnN1cmUgc3RhY2sgc2xvdCBoYXMgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvblxcbkBAIC0zODM0LDcgKzM3NzksNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCByZWcpO1xcbiBcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlcmVnc1tkc3RfcmVnbm9dID0gKnJlZztcXG4tXFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmID0gc3VicmVnX2RlZjtcXG4gXFxuIFxcdFxcdFxcdFxcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBmaWxsLlxcbiBcXHRcXHRcXHRcXHQgKiBjb2VyY2VfcmVnX3RvX3NpemUgd2lsbCBhZGp1c3QgdGhlIGJvdW5kYXJpZXMuXFxuQEAgLTYyNzEsMTIgKzYyMTUsNiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZhbHVlX3JlZ25vKTtcXG4tXFx0XFx0XFx0XFx0LyogQSBsb2FkIG9mIGN0eCBmaWVsZCBjb3VsZCBoYXZlIGRpZmZlcmVudFxcbi1cXHRcXHRcXHRcXHQgKiBhY3R1YWwgbG9hZCBzaXplIHdpdGggdGhlIG9uZSBlbmNvZGVkIGluIHRoZVxcbi1cXHRcXHRcXHRcXHQgKiBpbnNuLiBXaGVuIHRoZSBkc3QgaXMgUFRSLCBpdCBpcyBmb3Igc3VyZSBub3RcXG4tXFx0XFx0XFx0XFx0ICogYSBzdWItcmVnaXN0ZXIuXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdFxcdFxcdFxcdGlmIChiYXNlX3R5cGUoaW5mby5yZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkge1xcbiBcXHRcXHRcXHRcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS5idGYgPSBpbmZvLmJ0ZjtcXG4gXFx0XFx0XFx0XFx0XFx0cmVnc1t2YWx1ZV9yZWdub10uYnRmX2lkID0gaW5mby5idGZfaWQ7XFxuQEAgLTczODAsMTAgKzczMTgsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdFxcbiBcXHRcXHRcXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHNwaTtcXG4gXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xcbi1cXHRcXHRcXHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxcbi1cXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0bWFya19zdGFja19zbG90c19zY3JhdGNoZWQoZW52LCBzcGksIEJQRl9EWU5QVFJfTlJfU0xPVFMpO1xcbiBcXG4gXFx0XFx0XFx0cmVnID0gXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbkBAIC05NDYzLDcgKzkzOTcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdC8qIEFsbCBub24tdm9pZCBnbG9iYWwgZnVuY3Rpb25zIHJldHVybiBhIDY0LWJpdCBTQ0FMQVJfVkFMVUUuICovXFxuIFxcdFxcdGlmICghc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKSkge1xcbiBcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVxcdTAwM2VyZWdzLCBCUEZfUkVHXzApO1xcbi1cXHRcXHRcXHRjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5taWdodF90aHJvdykge1xcbkBAIC0xMDQ4Miw5ICsxMDQxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdH1cXG4gXFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XFxuIFxcbi1cXHQvKiBoZWxwZXIgY2FsbCByZXR1cm5zIDY0LWJpdCB2YWx1ZS4gKi9cXG4tXFx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcXG4tXFxuIFxcdC8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovXFxuIFxcdHJldF90eXBlID0gZm4tXFx1MDAzZXJldF90eXBlO1xcbiBcXHRyZXRfZmxhZyA9IHR5cGVfZmxhZyhyZXRfdHlwZSk7XFxuQEAgLTEwNzIyLDMwICsxMDY1Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKiBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKCkgaXMgdXNlZCB3aGVuIHRoZSByZWcgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5XFxuLSAqIHRoZSBCVEYgZnVuY19wcm90bydzIHJldHVybiB2YWx1ZSBzaXplIGFuZCBhcmd1bWVudC5cXG4tICovXFxuLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyxcXG4tXFx0XFx0XFx0XFx0ICAgICB1MzIgcmVnbm8sIHNpemVfdCByZWdfc2l6ZSlcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gXFx1MDAyNnJlZ3NbcmVnbm9dO1xcbi1cXG4tXFx0aWYgKHJlZ25vID09IEJQRl9SRUdfMCkge1xcbi1cXHRcXHQvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi9cXG4tXFx0XFx0cmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgP1xcbi1cXHRcXHRcXHRERUZfTk9UX1NVQlJFRyA6IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbi1cXHR9IGVsc2UgaWYgKHJlZ19zaXplID09IHNpemVvZih1NjQpKSB7XFxuLVxcdFxcdC8qIEZ1bmN0aW9uIGFyZ3VtZW50ICovXFxuLVxcdFxcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcXG4tXFx0fVxcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcXG4tXFx0XFx0XFx0XFx0ICAgc2l6ZV90IHJlZ19zaXplKVxcbi17XFxuLVxcdHJldHVybiBfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBjdXJfcmVncyhlbnYpLCByZWdubywgcmVnX3NpemUpO1xcbi19XFxuLVxcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hY3F1aXJlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4ge1xcbiBcXHRyZXR1cm4gbWV0YS1cXHUwMDNla2Z1bmNfZmxhZ3MgXFx1MDAyNiBLRl9BQ1FVSVJFO1xcbkBAIC0xMjk3NCw3ICsxMjg4MCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4O1xcbiBcXHRpbnQgZXJyLCBpbnNuX2lkeCA9ICppbnNuX2lkeF9wO1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzO1xcbiBcXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xcbiBcXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcXG4gXFx0aW50IGlkO1xcbkBAIC0xMzAxOCw3ICsxMjkyMyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZmFpbGVkIHRvIG1hcmsgczMyIHJhbmdlIGZvciByZXR2YWwgaW4gZm9ya2VkIHN0YXRlIGZvciBsb2NrXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbi1cXHRcXHRfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdzLCBCUEZfUkVHXzAsIHNpemVvZih1MzIpKTtcXG4gXFx0fSBlbHNlIGlmICghaW5zbi1cXHUwMDNlb2ZmIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfX19icGZfdHJhcF0pIHtcXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5AQCAtMTMxNjgsNyArMTMwNzIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XFxuIFxcbiBcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tyZWdub10pO1xcbi1cXHRcXHRyZWdzW3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdH1cXG4gXFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XFxuIFxcbkBAIC0xMzE5MCw3ICsxMzA5Myw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcXHUwMDI2XFx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcXG4gXFx0XFx0ICAgIG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKVxcbiBcXHRcXHRcXHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcXG4tXFx0XFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgdC1cXHUwMDNlc2l6ZSk7XFxuIFxcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XFxuIFxcdFxcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZwdHJfdHlwZV9pZCk7XFxuIFxcdFxcdGVyciA9IGNoZWNrX3NwZWNpYWxfa2Z1bmMoZW52LCBcXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XFxuQEAgLTEzMjgxLDcgKzEzMTgzLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0LyogRm9yIG1hcmtfcHRyX29yX251bGxfcmVnLCBzZWUgOTNjMjMwZTNmNWJkNiAqL1xcbiBcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHNpemVvZih2b2lkICopKTtcXG4gXFx0XFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXFx1MDAyNm1ldGEpKSB7XFxuIFxcdFxcdFxcdGlkID0gYWNxdWlyZV9yZWZlcmVuY2UoZW52LCBpbnNuX2lkeCwgMCk7XFxuIFxcdFxcdFxcdGlmIChpZCBcXHUwMDNjIDApXFxuQEAgLTEzMzE4LDE4ICsxMzIxOSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdGNhbGxlcl9pbmZvLVxcdTAwM2VzdGFja19hcmdfY250ID0gc3RhY2tfYXJnX2NudDtcXG4gXFx0fVxcbiBcXG4tXFx0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEuZnVuY19wcm90byArIDEpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWluX3QoaW50LCBuYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XFxuLVxcdFxcdHUzMiByZWdubyA9IGkgKyAxO1xcbi1cXG4tXFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xcbi1cXHRcXHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKVxcbi1cXHRcXHRcXHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHQvKiBzY2FsYXIuIGVuc3VyZWQgYnkgY2hlY2tfa2Z1bmNfYXJncygpICovXFxuLVxcdFxcdFxcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgdC1cXHUwMDNlc2l6ZSk7XFxuLVxcdH1cXG4tXFxuIFxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSkge1xcbiBcXHRcXHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFxcdTAwMjZtZXRhKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtMTQ4MjMsOCArMTQ3MTIsNiBAQCBzdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdGlmIChkc3RfcmVnLVxcdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSlcXG4gXFx0XFx0XFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcXG4gXFxuLVxcdFxcdGRzdF9yZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4tXFxuIFxcdFxcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0KVxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiAzMi1iaXQgb3BlcmF0aW9ucyB6ZXJvIHVwcGVyIGJpdHMgYXV0b21hdGljYWxseS5cXG5AQCAtMTUwMjgsOCArMTQ5MTUsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSAxKSB7IC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqL1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2V0eXBlID0gUFRSX1RPX0FSRU5BO1xcbi1cXHRcXHRcXHRcXHRcXHRcXHQvKiBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0XFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZW9mZiA9PSAwKSB7XFxuIFxcdFxcdFxcdFxcdFxcdC8qIGNhc2U6IFIxID0gUjJcXG5AQCAtMTUwMzcsNyArMTQ5MjIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcXG4tXFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbiBcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHQvKiBjYXNlOiBSMSA9IChzOCwgczE2IHMzMilSMiAqL1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXFx1MDAzZXNyY19yZWcpKSB7XFxuQEAgLTE1MDU1LDcgKzE0OTM5LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiBcXHUwMDNlXFx1MDAzZSAzKTtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbiBcXHRcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuIFxcdFxcdFxcdFxcdFxcdH1cXG5AQCAtMTUwODAsNyArMTQ5NjMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWlzX3NyY19yZWdfdTMyKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0LyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqL1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRib29sIG5vX3NleHQgPSByZWdfdW1heChzcmNfcmVnKSBcXHUwMDNjICgxVUxMIFxcdTAwM2NcXHUwMDNjIChpbnNuLVxcdTAwM2VvZmYgLSAxKSk7XFxuQEAgLTE1MDkwLDcgKzE0OTcyLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRjb2VyY2Vfc3VicmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmIFxcdTAwM2VcXHUwMDNlIDMpO1xcbiBcXHRcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuQEAgLTE1OTU5LDEyICsxNTg0MCw4IEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoKCEocmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpIFxcdTAwMjZcXHUwMDI2ICEoa25vd25fcmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxcbiBcXHRcXHQgICAgcmVnLVxcdTAwM2VkZWx0YSA9PSBrbm93bl9yZWctXFx1MDAzZWRlbHRhKSB7XFxuLVxcdFxcdFxcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVxcdTAwM2VzdWJyZWdfZGVmO1xcbi1cXG4gXFx0XFx0XFx0KnJlZyA9ICprbm93bl9yZWc7XFxuLVxcdFxcdFxcdHJlZy1cXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVxcdTAwM2VzdWJyZWdfZGVmO1xcbiBcXHRcXHRcXHRzMzIgc2F2ZWRfb2ZmID0gcmVnLVxcdTAwM2VkZWx0YTtcXG4gXFx0XFx0XFx0dTMyIHNhdmVkX2lkID0gcmVnLVxcdTAwM2VpZDtcXG4gXFxuQEAgLTE1OTc0LDEyICsxNTg1MSwxMSBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xcbiBcXHRcXHRcXHQvKiByZWcgPSBrbm93bl9yZWc7IHJlZyArPSBkZWx0YSAqL1xcbiBcXHRcXHRcXHQqcmVnID0gKmtub3duX3JlZztcXG4gXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYsIGlkIGFuZCBzdWJyZWdfZGVmIGZsYWcsXFxuLVxcdFxcdFxcdCAqIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKSB3aWxsIGJlIGluY29ycmVjdC5cXG4rXFx0XFx0XFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYgYW5kIGlkLCBvdGhlcndpc2UgYW5vdGhlciBzeW5jX2xpbmtlZF9yZWdzKClcXG4rXFx0XFx0XFx0ICogd2lsbCBiZSBpbmNvcnJlY3QuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRyZWctXFx1MDAzZWRlbHRhID0gc2F2ZWRfb2ZmO1xcbiBcXHRcXHRcXHRyZWctXFx1MDAzZWlkID0gc2F2ZWRfaWQ7XFxuLVxcdFxcdFxcdHJlZy1cXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XFxuIFxcbiBcXHRcXHRcXHRzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxuIFxcdFxcdFxcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxuQEAgLTE2NDE0LDggKzE2MjkwLDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHQgKiBBbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlLlxcbiBcXHQgKi9cXG4gXFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxuLVxcdC8qIGxkX2FicyBsb2FkIHVwIHRvIDMyLWJpdCBza2IgZGF0YS4gKi9cXG4tXFx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0LypcXG4gXFx0ICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wXFxuIFxcdCAqIHdoaWNoIG11c3QgYmUgZXhwbG9yZWQgYnkgdGhlIHZlcmlmaWVyIHdoZW4gaW4gYSBzdWJwcm9nLlxcbkBAIC0xNjczMCwxMCArMTY2MDQsMTEgQEAgYm9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXFxuIFxcdGludCBpO1xcbiBcXG4gXFx0aWYgKGJwZl9oZWxwZXJfY2FsbChjYWxsKSkge1xcbi1cXG4gXFx0XFx0aWYgKGJwZl9nZXRfaGVscGVyX3Byb3RvKGVudiwgY2FsbC1cXHUwMDNlaW1tLCBcXHUwMDI2Zm4pIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0LyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi9cXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRjcy1cXHUwMDNlYnRmID0gTlVMTDtcXG4rXFx0XFx0Y3MtXFx1MDAzZWZ1bmNfcHJvdG8gPSBOVUxMO1xcbiBcXHRcXHRjcy1cXHUwMDNlZmFzdGNhbGwgPSBmbi1cXHUwMDNlYWxsb3dfZmFzdGNhbGwgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgICAgIChicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGNhbGwtXFx1MDAzZWltbSkgfHxcXG4gXFx0XFx0XFx0XFx0YnBmX2ppdF9pbmxpbmVzX2hlbHBlcl9jYWxsKGNhbGwtXFx1MDAzZWltbSkpO1xcbkBAIC0xNjc1NCw2ICsxNjYyOSw4IEBAIGJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0LyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi9cXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRjcy1cXHUwMDNlYnRmID0gbWV0YS5idGY7XFxuK1xcdFxcdGNzLVxcdTAwM2VmdW5jX3Byb3RvID0gbWV0YS5mdW5jX3Byb3RvO1xcbiBcXHRcXHRjcy1cXHUwMDNlbnVtX3BhcmFtcyA9IGJ0Zl90eXBlX3ZsZW4obWV0YS5mdW5jX3Byb3RvKTtcXG4gXFx0XFx0Y3MtXFx1MDAzZWZhc3RjYWxsID0gbWV0YS5rZnVuY19mbGFncyBcXHUwMDI2IEtGX0ZBU1RDQUxMO1xcbiBcXHRcXHRjcy1cXHUwMDNlaXNfdm9pZCA9IGJ0Zl90eXBlX2lzX3ZvaWQoYnRmX3R5cGVfYnlfaWQobWV0YS5idGYsIG1ldGEuZnVuY19wcm90by1cXHUwMDNldHlwZSkpO1xcbkBAIC0xNzQ3NSw2ICsxNzM1Miw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0ZW52LVxcdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVkOiBcXFwiLCBlbnYtXFx1MDAzZWluc25faWR4KTtcXG4gXFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGVudi1cXHUwMDNlcHJldl9pbnNuX3ByaW50X3BvcyA9IGVudi1cXHUwMDNlbG9nLmVuZF9wb3MgLSBlbnYtXFx1MDAzZXByZXZfbG9nX3BvcztcXG4gXFx0XFx0XFx0ZW52LVxcdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xcbmluZGV4IDVlN2NiOGIzNmZlZjIuLjdiMzNkODQ3ZDgwMGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jXFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jXFxuQEAgLTEyOSwxNiArMTI5LDEwIEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIHN0YXRpYyB2b2lkIF9fcHJpbnRmKDIsIDMpXFxuIHByaW50X2luc25fanNvbih2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBsID0gc3RybGVuKGZtdCk7XFxuLVxcdGNoYXIgY2hvbXBlZF9mbXRbbF07XFxuIFxcdHZhX2xpc3QgYXJncztcXG4gXFxuIFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuLVxcdGlmIChsIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRzdHJuY3B5KGNob21wZWRfZm10LCBmbXQsIGwgLSAxKTtcXG4tXFx0XFx0Y2hvbXBlZF9mbXRbbCAtIDFdID0gJ1xcXFwwJztcXG4tXFx0fVxcbi1cXHRqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGNob21wZWRfZm10LCBhcmdzKTtcXG4rXFx0anNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBmbXQsIGFyZ3MpO1xcbiBcXHR2YV9lbmQoYXJncyk7XFxuIH1cXG4gXFxuQEAgLTM1MSw2ICszNDUsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX3BsYWluKHN0cnVjdCBkdW1wX2RhdGEgKmRkLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4sXFxuIFxcbiBcXHRcXHRwcmludGYoXFxcIiU0dTogXFxcIiwgaSk7XFxuIFxcdFxcdHByaW50X2JwZl9pbnNuKFxcdTAwMjZjYnMsIGluc24gKyBpLCB0cnVlKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJcXFxcblxcXCIpO1xcbiBcXG4gXFx0XFx0aWYgKG9wY29kZXMpIHtcXG4gXFx0XFx0XFx0cHJpbnRmKFxcXCIgICAgICAgXFxcIik7XFxuQEAgLTQxNyw2ICs0MTIsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX2Zvcl9ncmFwaChzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmX3N0YXJ0LCB2b2lkICpidWZfZW5kLFxcbiBcXG4gXFx0XFx0cHJpbnRmKFxcXCIldTogXFxcIiwgaW5zbl9vZmYpO1xcbiBcXHRcXHRwcmludF9icGZfaW5zbihcXHUwMDI2Y2JzLCBjdXIsIHRydWUpO1xcbitcXHRcXHRwcmludGYoXFxcIlxcXFxcXFxcbFxcXFxcXFxcXFxcXG5cXFwiKTtcXG4gXFxuIFxcdFxcdGlmIChvcGNvZGVzKSB7XFxuIFxcdFxcdFxcdHByaW50ZihcXFwiXFxcXFxcXFwgXFxcXFxcXFwgXFxcXFxcXFwgXFxcXFxcXFwgXFxcIik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcXG5pbmRleCBmNTI5ZjFjOGMxNzFkLi4zMDIyMTM1MjU2OGQ3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcXG5AQCAtNTUsMTAgKzU1LDkgQEAgc3RydWN0IGJwZl9pbnNuICpkaXNhc21faW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcXG4gXFx0ICogZm9yIGVhY2ggaW5zdHJ1Y3Rpb24gKEZGIHN0YW5kcyBmb3IgaW5zdHJ1Y3Rpb24gYGNvZGVgIGJ5dGUpLlxcbiBcXHQgKiBSZW1vdmUgdGhlIHByZWZpeCBpbnBsYWNlLCBhbmQgYWxzbyBzaW1wbGlmeSBjYWxsIGluc3RydWN0aW9ucy5cXG4gXFx0ICogRS5nLjogXFxcIig4NSkgY2FsbCBmb28jMTBcXFwiIC1cXHUwMDNlIFxcXCJjYWxsIGZvb1xcXCIuXFxuLVxcdCAqIEFsc28gcmVtb3ZlIG5ld2xpbmUgaW4gdGhlIGVuZCAodGhlICdtYXgoc3RybGVuKGJ1ZikgLSAxLCAwKScgdGhpbmcpLlxcbiBcXHQgKi9cXG4gXFx0cGZ4X2VuZCA9IGJ1ZiArIDU7XFxuLVxcdHNmeF9zdGFydCA9IGJ1ZiArIG1heCgoaW50KXN0cmxlbihidWYpIC0gMSwgMCk7XFxuK1xcdHNmeF9zdGFydCA9IGJ1ZiArIChpbnQpc3RybGVuKGJ1Zik7XFxuIFxcdGlmIChzdHJuY21wKHBmeF9lbmQsIFxcXCJjYWxsIFxcXCIsIDUpID09IDAgXFx1MDAyNlxcdTAwMjYgKHRtcCA9IHN0cnJjaHIoYnVmLCAnIycpKSlcXG4gXFx0XFx0c2Z4X3N0YXJ0ID0gdG1wO1xcbiBcXHRsZW4gPSBzZnhfc3RhcnQgLSBwZnhfZW5kO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbmluZGV4IGJlOTdmNjg4N2YwZTcuLmZiYTU2MmM4MTk2OTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5AQCAtMTI0LDYgKzEyNCw3IEBAXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9qaXRfaW5saW5lLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlycS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInZlcmlmaWVyX3pleHQuc2tlbC5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQVhfRU5UUklFUyAxMVxcbiBcXG5AQCAtMjc3LDYgKzI3OCw3IEBAIHZvaWQgdGVzdF9pcnEodm9pZClcXHRcXHRcXHQgICAgICB7IFJVTihpcnEpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcXHRcXHQgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH1cXG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX3pleHQodm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKHZlcmlmaWVyX3pleHQpOyB9XFxuIFxcbiBzdGF0aWMgaW50IGluaXRfdGVzdF92YWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNoYXIgKm1hcF9uYW1lKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iNGM4MmEzMWU2NjgyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmNcXG5AQCAtMCwwICsxLDI2MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcXG4rX19mbGFnKEJQRl9GX1RFU1RfUk5EX0hJMzIpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX25ha2VkIHZvaWQgemV4dF9sb3N0X2Fjcm9zc19jaGVja3BvaW50KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2t0aW1lX2dldF9uc107XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSAweGRlYWRiZWVmY2FmZWJhYmUgbGw7XFx0LyogaW5qZWN0IHNvbWUgdmFsdWUgZm9yIHI2J3MgdXBwZXIgaGFsZiAqL1xcdFxcXFxcXG4rXFx0aWYgcjggIT0gMCBnb3RvIDFmO1xcdFxcdC8qIGZhbGwtdGhyb3VnaCBjYWNoZWQgZmlyc3QsIGJyYW5jaCBwcnVuZWQgKi9cXHRcXFxcXFxuK1xcdHI2ID0gMzI7XFx0XFx0XFx0LyogZnVsbCA2NC1iaXQgZGVmICovXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRnb3RvIDJmO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHc2ID0gMzI7XFx0XFx0XFx0LyogMzItYml0IGRlZiwgemV4dCBtYXJrIGxvc3QgKi9cXHRcXHRcXFxcXFxuKzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IHI2O1xcdFxcdFxcdC8qIGJ1Z2d5IHZlcmlmaWVyIGJlbGlldmVkIHVwcGVyIDMyIGJpdHMgYXJlIDAgKi8gXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQvKiBhbmQgdGh1cyBkaWQgbm90IHplcm8gZXh0ZW5kZWQgdzYgPSAzMi4gKi9cXHRcXFxcXFxuK1xcdHIwIFxcdTAwM2VcXHUwMDNlPSAzMjtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9rdGltZV9nZXRfbnMpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIDMyLWJpdCBBTFUgcmVzdWx0IHJlYWQgYXMgNjQtYml0IC1cXHUwMDNlIHpleHQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcIncxID0gdzB7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgemV4dF9hbHUzMl9oaV91c2VkKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IHcwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByMTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIDMyLWJpdCBBTFUgcmVzdWx0IHJlYWQgb25seSBhcyAzMi1iaXQgLVxcdTAwM2Ugbm8gemV4dCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX25vdF9tc2coXFxcIncxID0gdzB7ey4qfX07IHpleHRcXFwiKVxcbitfX25vdF9tc2coXFxcIncyID0gdzF7ey4qfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgbm9femV4dF9hbHUzMl9oaV91bnVzZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gdzA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MiA9IHcxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogNjQtYml0IGRlZmluaXRpb24gaXMgbmV2ZXIgemVybyBleHRlbmRlZCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX25vdF9tc2coXFxcInIxID0gcjB7ey4qfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgbm9femV4dF9tb3Y2NCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiBOYXJyb3cgbG9hZCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLVxcdTAwM2UgemV4dCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwicjEgPSAqKHUzMiAqKShyMTAgLTgpe3sgK319OyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfbmFycm93X2xvYWRfaGlfdXNlZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSByMDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gKih1MzIgKikocjEwIC0gOCk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IHIxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIDMyLWJpdCBhdG9taWMgZmV0Y2ggcmVzdWx0IHJlYWQgYXMgNjQtYml0IC1cXHUwMDNlIHpleHQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcInIxID0gYXRvbWljX2ZldGNoX2FkZCgodTMyICopKHIxMCAtOCksIHIxKXt7ICt9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCB6ZXh0X2F0b21pY19mZXRjaDMyX2hpX3VzZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQuOGJ5dGUgJVtmZXRjaF9hZGQzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IHIxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW1faW5zbihmZXRjaF9hZGQzMixcXG4rXFx0XFx0ICAgICBCUEZfQVRPTUlDX09QKEJQRl9XLCBCUEZfQUREIHwgQlBGX0ZFVENILCBCUEZfUkVHXzEwLCBCUEZfUkVHXzEsIC04KSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogMzItYml0IGF0b21pYyBjbXB4Y2hnIHJlc3VsdCAocjApIHJlYWQgYXMgNjQtYml0IC1cXHUwMDNlIHpleHQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcInIwID0gYXRvbWljX2NtcHhjaGcoKHUzMiAqKShyMTAgLTgpLCByMCwgcjEpe3sgK319OyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfY21weGNoZzMyX2hpX3VzZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQuOGJ5dGUgJVtjbXB4Y2hnMzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjI7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9pbnNuKGNtcHhjaGczMixcXG4rXFx0XFx0ICAgICBCUEZfQVRPTUlDX09QKEJQRl9XLCBCUEZfQ01QWENIRywgQlBGX1JFR18xMCwgQlBGX1JFR18xLCAtOCkpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIDMyLWJpdCBkZWYgYmVmb3JlIGEgYnJhbmNoLCB1cHBlciBoYWxmIHVzZWQgb24gb25lIGJyYW5jaCAtXFx1MDAzZSB6ZXh0ICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbXNnKFxcXCJ3NiA9IDMye3sgK319OyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfY2ZnX2hpX3VzZWRfb25lX2JyYW5jaCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcXFxcXG4rXFx0dzYgPSAzMjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHIwID09IDAgZ290byBsMF8lPTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjY7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rbDBfJT06XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiByMSdzIHVwcGVyIGhhbGYgaXMgZGVhZCwgc28gJ3cxID0gMScgbXVzdCBOT1QgYmUgbWFya2VkIGZvciB6ZXJvIGV4dGVuc2lvbi4gKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19ub3RfbXNnKFxcXCJ3MSA9IDF7ey4qfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgbm9femV4dF9vdGhlcl9yZWdfaGlfdXNlZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2IFxcdTAwM2NcXHUwMDNjPSAzMjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gMTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjY7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiBMRF9BQlMgZGVmaW5lcyByMDsgd2hlbiByMCBpcyByZWFkIGFzIDY0LWJpdCBpdCBtdXN0IGJlIHplcm8gZXh0ZW5kZWQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcInIwID0gKih1OCAqKXNrYlswXXt7Lip9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCB6ZXh0X2xkX2Fic19oaV91c2VkKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAqKHU4ICopc2tiWzBdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjcgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjc7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogSGVscGVyIHBhcmFtZXRlcnMgYXJlIHJlYWQgYXMgNjQtYml0IChjYWxsX3VzZV9tYXNrKCkgZmFsbGJhY2spICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbXNnKFxcXCJ3MiA9IDF7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgaGVscGVyX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgKz0gLTg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MiA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX3RyYWNlX3ByaW50a107XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfdHJhY2VfcHJpbnRrKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitzdGF0aWMgX191c2VkIF9fbmFrZWQgaW50IHN1YnByb2dfcmVhZHNfYXJnX2FzXzY0Yml0KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IHIxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIHN1YnByb2dyYW0gcGFyYW1ldGVycyBhcmUgY29uc2VydmF0aXZlbHkgcmVhZCBhcyA2NC1iaXQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcIncxID0gdzB7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgc3VicHJvZ19wYXJhbV9yZWFkX2FzXzY0Yml0KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IHcwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCBzdWJwcm9nX3JlYWRzX2FyZ19hc182NGJpdDtcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK2V4dGVybiBsb25nIGJwZl9rZnVuY19jYWxsX3Rlc3Q0KHNpZ25lZCBjaGFyIGEsIHNob3J0IGIsIGludCBjLCBsb25nIGQpIF9fa3N5bTtcXG4rXFxuKy8qIEZvcmNlIGtmdW5jIGV4dGVybiBCVEYgZ2VuZXJhdGlvbi4gKi9cXG4raW50IF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcXG4re1xcbitcXHRyZXR1cm4gYnBmX2tmdW5jX2NhbGxfdGVzdDQoMCwgMCwgMCwgMCk7XFxuK31cXG4rXFxuKy8qIGtmdW5jIHBhcmFtZXRlcnMgYXJlIHJlYWQgYWNjb3JkaW5nIHRvIHRoZWlyIEJURiB0eXBlIHdpZHRoICovXFxuK1NFQyhcXFwidGNcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19ub3RfbXNnKFxcXCJ3MyA9IDF7ey4qfX07IHpleHRcXFwiKVxcdFxcdC8qIGludCBjICAtXFx1MDAzZSByZWFkIGFzIDMyLWJpdCAqL1xcbitfX21zZyhcXFwidzQgPSAxe3sgK319OyB6ZXh0XFxcIilcXHRcXHQvKiBsb25nIGQgLVxcdTAwM2UgcmVhZCBhcyA2NC1iaXQgKi9cXG4rX19uYWtlZCB2b2lkIGtmdW5jX3BhcmFtX3JlYWRfcGVyX2J0Zih2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzEgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzIgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzMgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzQgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCBicGZfa2Z1bmNfY2FsbF90ZXN0NDtcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6Mzk6NDYuNjgzNDI4NTc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjI3MDM5NTUwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiLFxuICAgIFwiY29tcHV0ZV9pbnNuX2xpdmVfcmVnc1wiLFxuICAgIFwiY2FsbF91c2VfbWFza1wiLFxuICAgIFwiYnBmX2luc25fZGVmMzJcIixcbiAgICBcImJwZl9pc19yZWc2NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgemVyby1leHRlbnNpb24gdHJhY2tpbmcgbG9naWMuIEl0IHJlbW92ZXMgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCBpbnN0ZWFkIGNvbXB1dGVzIHplcm8gZXh0ZW5zaW9uIHJlcXVpcmVtZW50cyBkaXJlY3RseSBkdXJpbmcgbGl2ZW5lc3MgYW5hbHlzaXMgYnkgdHJhY2tpbmcgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgdXNlcyBzZXBhcmF0ZWx5LiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgYWZmZWN0cyBob3cgcmVnaXN0ZXIgc3RhdGVzIGFyZSB0cmFja2VkIGFuZCBvcHRpbWl6ZWQsIHdoaWNoIGlzIGEgY3JpdGljYWwgYXJlYSBmb3Igc2VjdXJpdHkgYW5kIGNvcnJlY3RuZXNzIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgxOThkYjFkNzE3MTgyMzg4OWUzZWViZjc1YmFlNTBkY2FkNzQxZGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA0OjM5OjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDY4MmMyY2QzYjg0NDMuLjMyMWViZDMwOGQzOGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTYyLDExICsxNjIsNiBAQCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG4gXHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cbiBcdCAqL1xuIFx0dTMyIGZyYW1lbm87XG4tXHQvKiBUcmFja3Mgc3VicmVnIGRlZmluaXRpb24uIFRoZSBzdG9yZWQgdmFsdWUgaXMgdGhlIGluc25faWR4IG9mIHRoZVxuLVx0ICogd3JpdGluZyBpbnNuLiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBzdWJyZWdfZGVmIGlzIHVzZWQgYmVmb3JlIGFueSBpbnNuXG4tXHQgKiBwYXRjaGluZyB3aGljaCBvbmx5IGhhcHBlbnMgYWZ0ZXIgbWFpbiB2ZXJpZmljYXRpb24gZmluaXNoZWQuXG4tXHQgKi9cbi1cdHMzMiBzdWJyZWdfZGVmO1xuIFx0LyogaWYgKCFwcmVjaXNlIFx1MDAyNlx1MDAyNiBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24ndCBhZmZlY3Qgc2FmZXR5ICovXG4gXHRib29sIHByZWNpc2U7XG4gfTtcbkBAIC0xMDUwLDYgKzEwNDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudlxuIH1cbiBcbiBzdHJ1Y3QgYnBmX2NhbGxfc3VtbWFyeSB7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmICpidGY7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG87XG4gXHR1OCBudW1fcGFyYW1zO1xuIFx0Ym9vbCBpc192b2lkO1xuIFx0Ym9vbCBmYXN0Y2FsbDtcbkBAIC0xNjMxLDcgKzE2MjgsNyBAQCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiIHtcbiB9O1xuIFxuIC8qIEZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIHZlcmlmaWVyLmMsIHVzZWQgYnkgZml4dXBzLmMgKi9cbi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sIHUzMiByZWdubywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpO1xuK2Jvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG4gdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pO1xuIHZvaWQgYnBmX21hcmtfc3VicHJvZ19leGNfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpO1xuIGJvb2wgYnBmX2FsbG93X3RhaWxfY2FsbF9pbl9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbkBAIC0xNjU1LDUgKzE2NTIsNiBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG4raW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9CUEZfVkVSSUZJRVJfSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmMgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG5pbmRleCAyZTRhZTBlZjA4NjA5Li43YzQ1OTllNjVlY2ViIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuKysrIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuQEAgLTI4NSw2ICsyODUsNyBAQCBzdGF0aWMgaW50IGJhY2t0cmFja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsIGludCBzdWJzZXFfaWR4LFxuIFx0XHR2ZXJib3NlKGVudiwgXCJzdGFjaz0lcyBiZWZvcmUgXCIsIGVudi1cdTAwM2V0bXBfc3RyX2J1Zik7XG4gXHRcdHZlcmJvc2UoZW52LCBcIiVkOiBcIiwgaWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuK1x0XHR2ZXJib3NlKGVudiwgXCJcXG5cIik7XG4gXHR9XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBhIGhpc3RvcnkgcmVjb3JkIHRoYXQgc29tZSByZWdpc3RlcnMgZ2FpbmVkIHJhbmdlIGF0IHRoaXMgaW5zbixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uY1xuaW5kZXggMDM5MWIzYmMwMDczNC4uNTBiM2NhNTE0OWEwYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmNcbisrKyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcbkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2VuZF9pbnNuKGJwZl9pbnNuX3ByaW50X3QgdmVyYm9zZSxcbiBcdFx0XHQgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4ge1xuLVx0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9ICVzJWQgciVkXFxuXCIsXG4rXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gJXMlZCByJWRcIixcbiBcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfVE9fQkUgPyBcImJlXCIgOiBcImxlXCIsXG4gXHRcdGluc24tXHUwMDNlaW1tLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMgdm9pZCBwcmludF9icGZfYnN3YXBfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsXG4gXHRcdFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbi1cdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFxcblwiLFxuK1x0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGJzd2FwJWQgciVkXCIsXG4gXHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbiB9XG5AQCAtMTk3LDE5ICsxOTcsMTkgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0cHJpbnRfYnBmX2VuZF9pbnNuKHZlcmJvc2UsIGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIGluc24pO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9ORUcpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICVjJWQgPSAtJWMlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJWMlZCA9IC0lYyVkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKGlzX2FkZHJfc3BhY2VfY2FzdChpbnNuKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KVxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsICgodTMyKWluc24tXHUwMDNlaW1tKSBcdTAwM2VcdTAwM2UgMTYsICh1MTYpaW5zbi1cdTAwM2VpbW0pO1xuIFx0XHR9IGVsc2UgaWYgKGlzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAlYyVkICVzICVzJWMlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0FMVSA/ICd3JyA6ICdyJyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGlzX3NkaXZfc21vZChpbnNuKSA/IGJwZl9hbHVfc2lnbl9zdHJpbmdbQlBGX09QKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDRdXG5AQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdFx0Y2xhc3MgPT0gQlBGX0FMVSA/ICd3JyA6ICdyJyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAlYyVkICVzICVkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAlYyVkICVzICVkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfU1RYKSB7XG4gXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0pXG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gciVkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gciVkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG5AQCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0IChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQUREIHx8IGluc24tXHUwMDNlaW1tID09IEJQRl9BTkQgfHxcbiBcdFx0XHQgIGluc24tXHUwMDNlaW1tID09IEJQRl9PUiB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWE9SKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlK2QpICVzIHIlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlK2QpICVzIHIlZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZixcbkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxuIFx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fFxuIFx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX1hPUiB8IEJQRl9GRVRDSCkpKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUrZCksIHIlZClcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX2ZldGNoXyVzKCglcyAqKShyJWQgJStkKSwgciVkKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwiNjRcIiA6IFwiXCIsXG4gXHRcdFx0XHRicGZfYXRvbWljX2FsdV9zdHJpbmdbQlBGX09QKGluc24tXHUwMDNlaW1tKSBcdTAwM2VcdTAwM2UgNF0sXG5AQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0NNUFhDSEcpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUrZCksIHIwLCByJWQpXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9IGF0b21pYyVzX2NtcHhjaGcoKCVzICopKHIlZCAlK2QpLCByMCwgciVkKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0QlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcgPyBcIjY0XCIgOiBcIlwiLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuQEAgLTI2Miw0NCArMjYyLDQ0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX1hDSEcpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlK2QpLCByJWQpXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBhdG9taWMlc194Y2hnKCglcyAqKShyJWQgJStkKSwgciVkKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwiNjRcIiA6IFwiXCIsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1EpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGxvYWRfYWNxdWlyZSgoJXMgKikociVkICUrZCkpXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlK2QpKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX1NUT1JFX1JFTCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUrZCksIHIlZClcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfJTAyeFxcblwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfJTAyeFwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gJWRcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICooJXMgKikociVkICUrZCkgPSAlZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgbm9zcGVjXFxuXCIsIGluc24tXHUwMDNlY29kZSk7XG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBub3NwZWNcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiQlVHX3N0XyUwMnhcXG5cIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiQlVHX3N0XyUwMnhcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTERYKSB7XG4gXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU0gXHUwMDI2XHUwMDI2IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX01FTVNYKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZHhfJTAyeFxcblwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfbGR4XyUwMnhcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlK2QpXFxuXCIsXG4rXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVwiLFxuIFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTSA/XG4gXHRcdFx0XHQgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdIDpcbkBAIC0zMDcsMTIgKzMwNywxMiBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XG4gXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BQlMpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9JTkQpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgKyAlZF1cXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgKyAlZF1cIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VpbW0pO1xuQEAgLTMzMiwxMiArMzMyLDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGlmIChpc19wdHIgXHUwMDI2XHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXG4gXHRcdFx0XHRpbW0gPSAwO1xuIFxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gJXNcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9ICVzXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdF9fZnVuY19pbW1fbmFtZShjYnMsIGluc24sIGltbSxcbiBcdFx0XHRcdFx0XHR0bXAsIHNpemVvZih0bXApKSk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZF8lMDJ4XFxuXCIsIGluc24tXHUwMDNlY29kZSk7XG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZF8lMDJ4XCIsIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9KTVAzMiB8fCBjbGFzcyA9PSBCUEZfSk1QKSB7XG5AQCAtMzQ3LDM1ICszNDcsMzUgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0Y2hhciB0bXBbNjRdO1xuIFxuIFx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKSB7XG4tXHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGNhbGwgcGMlc1xcblwiLFxuK1x0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBjYWxsIHBjJXNcIixcbiBcdFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0XHRfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLFxuIFx0XHRcdFx0XHRcdFx0dG1wLCBzaXplb2YodG1wKSkpO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRzdHJjcHkodG1wLCBcInVua25vd25cIik7XG4tXHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGNhbGwgJXMjJWRcXG5cIiwgaW5zbi1cdTAwM2Vjb2RlLFxuK1x0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBjYWxsICVzIyVkXCIsIGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdFx0X19mdW5jX2dldF9uYW1lKGNicywgaW5zbixcbiBcdFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpLFxuIFx0XHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gXHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQSkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGdvdG8gcGMlK2RcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGdvdG8gcGMlK2RcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQSB8IEJQRl9YKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZ290b3ggciVkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBnb3RveCByJWRcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkNPTkQpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfTUFZX0dPVE8pIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIG1heV9nb3RvIHBjJStkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBtYXlfZ290byBwYyUrZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QMzIgfCBCUEZfSkEpKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBnb3RvbCBwYyUrZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZ290b2wgcGMlK2RcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VpbW0pO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9FWElUKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZXhpdFxcblwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZXhpdFwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuIFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSxcbi1cdFx0XHRcdFwiKCUwMngpIGlmICVjJWQgJXMgJWMlZCBnb3RvIHBjJStkXFxuXCIsXG4rXHRcdFx0XHRcIiglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUrZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRicGZfam1wX3N0cmluZ1tCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgNF0sXG5AQCAtMzgzLDE0ICszODMsMTQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsXG4tXHRcdFx0XHRcIiglMDJ4KSBpZiAlYyVkICVzIDB4JXggZ290byBwYyUrZFxcblwiLFxuK1x0XHRcdFx0XCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0pNUDMyID8gJ3cnIDogJ3InLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0YnBmX2ptcF9zdHJpbmdbQlBGX09QKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDRdLFxuIFx0XHRcdFx0KHUzMilpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICVzXFxuXCIsXG4rXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJXNcIixcbiBcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGJwZl9jbGFzc19zdHJpbmdbY2xhc3NdKTtcbiBcdH1cbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbmluZGV4IGEwYmRkYWRhNzk2NGUuLjczYWI5NTU3M2Y2MDkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtNDQsMTUgKzQ0LDE4IEBAIHN0YXRpYyBpbnQgaW5zbl9kZWZfcmVnbm8oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0fVxuIH1cbiBcbi0vKiBSZXR1cm4gVFJVRSBpZiBJTlNOIGhhcyBkZWZpbmVkIGFueSAzMi1iaXQgdmFsdWUgZXhwbGljaXRseS4gKi9cbi1zdGF0aWMgYm9vbCBpbnNuX2hhc19kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4rLypcbisgKiBSZXR1cm4gdGhlIDMyLWJpdCBzdWJyZWdpc3RlciBkZWZpbmVkIGJ5IElOU04sIG9yIC0xIGlmIElOU04gZG9lcyBub3RcbisgKiBleHBsaWNpdGx5IGRlZmluZSBhIDMyLWJpdCB2YWx1ZS5cbisgKi9cbitpbnQgYnBmX2luc25fZGVmMzIoc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbiBcdGludCBkc3RfcmVnID0gaW5zbl9kZWZfcmVnbm8oaW5zbik7XG4gXG4tXHRpZiAoZHN0X3JlZyA9PSAtMSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKGRzdF9yZWcgXHUwMDNjIDAgfHwgYnBmX2lzX3JlZzY0KGluc24pKVxuK1x0XHRyZXR1cm4gLTE7XG4gXG4tXHRyZXR1cm4gIWJwZl9pc19yZWc2NChpbnNuLCBkc3RfcmVnLCBOVUxMLCBEU1RfT1ApO1xuK1x0cmV0dXJuIGRzdF9yZWc7XG4gfVxuIFxuIHN0YXRpYyBpbnQga2Z1bmNfZGVzY19jbXBfYnlfaW1tX29mZihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuQEAgLTE2OSw3ICsxNzIsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0ICogKGNudCA9PSAxKSBpcyB0YWtlbiBvciBub3QuIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSBJTlNOIGF0IE9GRiBpcyB0aGVcbiBcdCAqIG9yaWdpbmFsIGluc24gYXQgb2xkIHByb2cuXG4gXHQgKi9cbi1cdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gKyBvZmYgKyBjbnQgLSAxKTtcbitcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gKyBvZmYgKyBjbnQgLSAxKSBcdTAwM2U9IDA7XG4gXG4gXHRpZiAoY250ID09IDEpXG4gXHRcdHJldHVybjtcbkBAIC0xODEsNyArMTg0LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGZvciAoaSA9IG9mZjsgaSBcdTAwM2Mgb2ZmICsgY250IC0gMTsgaSsrKSB7XG4gXHRcdC8qIEV4cGFuZCBpbnNuaVtvZmZdJ3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi9cbiBcdFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XG4tXHRcdGRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICsgaSk7XG4rXHRcdGRhdGFbaV0uemV4dF9kc3QgPSBicGZfaW5zbl9kZWYzMihpbnNuICsgaSkgXHUwMDNlPSAwO1xuIFx0fVxuIFxuIFx0LypcbkBAIC02MjAsNyArNjIzLDcgQEAgaW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAqICAgICAgIEJQRl9TVFggKyBTUkNfT1AsIHNvIGl0IGlzIHNhZmUgdG8gcGFzcyBOVUxMXG4gXHRcdFx0ICogICAgICAgaGVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAoYnBmX2lzX3JlZzY0KFx1MDAyNmluc24sIGxvYWRfcmVnLCBOVUxMLCBEU1RfT1ApKSB7XG4rXHRcdFx0aWYgKGJwZl9pc19yZWc2NChcdTAwMjZpbnNuKSkge1xuIFx0XHRcdFx0aWYgKGNsYXNzID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKVxuIFx0XHRcdFx0XHRpKys7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9saXZlbmVzcy5jIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5pbmRleCAwYWFkZmJhZTBhY2M1Li5lYTAwMjU1MDY3MWE4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9saXZlbmVzcy5jXG4rKysgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbkBAIC00OTcsNyArNDk3LDYgQEAgc3RhdGljIHZvaWQgcHJpbnRfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmlcbiBcdFx0cG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCIlM2Q6IFwiLCBpbnNuX2lkeCk7XG4gXHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpbnNuX2lkeF0pO1xuLVx0XHRicGZfdmxvZ19yZXNldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTsgLyogcmVtb3ZlIFxcbiAqL1xuIFx0XHRpbnNuX3BvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbiBcdFx0dmVyYm9zZShlbnYsIFwiJSpjO1wiLCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAnICcpO1xuIFx0XHRwb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG5AQCAtMTA0Myw3ICsxMDQyLDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGlcbiBcdFx0aWYgKCFwcmludGVkKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiJTNkOiBcIiwgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwiXFx0ciVkOiBcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2YXRfaW5baV0pO1xuQEAgLTEwNTgsNyArMTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuLVx0XHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpO1xuIFx0XHRcdHByaW50ZWQgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHZlcmJvc2UoZW52LCBcIlxcdHNhJWQ6IFwiLCBpKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9pblthaV0pO1xuQEAgLTEwNzAsNyArMTA2Nyw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuLVx0XHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpO1xuIFx0XHRcdHByaW50ZWQgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHZlcmJvc2UoZW52LCBcIlxcdGZwJStkOiBcIiwgLShpICsgMSkgKiA4KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9zdGFja19pbltpXSk7XG5AQCAtMTU0NSw2ICsxNTQxLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpZHhdKTtcbitcdFx0dmVyYm9zZShlbnYsIFwiXFxuXCIpO1xuIFxuIFx0XHQvKiBDb2xsZWN0IHdoYXQgbmVlZHMgcHJpbnRpbmcgKi9cbiBcdFx0aWYgKGlzX2xkeF9zdHhfY2FsbCBcdTAwMjZcdTAwMjZcbkBAIC0yMDUwLDI5ICsyMDQ3LDY3IEBAIGludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiAvKiBFYWNoIGZpZWxkIGlzIGEgcmVnaXN0ZXIgYml0bWFzayAqL1xuIHN0cnVjdCBpbnNuX2xpdmVfcmVncyB7XG4tXHR1MTYgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbi1cdHUxNiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuLVx0dTE2IGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4tXHR1MTYgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4rXHR1MzIgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbitcdHUzMiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuK1x0dTMyIGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4rXHR1MzIgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4gfTtcbiBcbiAvKiBCaXRtYXNrIHdpdGggMXMgZm9yIGFsbCBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBBTExfQ0FMTEVSX1NBVkVEX1JFR1MgKCgxdSBcdTAwM2NcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1MpIC0gMSlcbiBcbitzdGF0aWMgaW5saW5lIHUzMiByZWczMl9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobik7IH1cbitzdGF0aWMgaW5saW5lIHUzMiByZWc2NF9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobikgfCBCSVQobiArIDE2KTsgfVxuK3N0YXRpYyBpbmxpbmUgdTMyIG1hc2tfd2lkZW4odTMyIG0pIHsgcmV0dXJuIG0gfCAobSBcdTAwM2NcdTAwM2MgMTYpOyB9XG4rc3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9XG4rc3RhdGljIGlubGluZSB1MTYgbWFza19oaSh1MzIgbSkgeyByZXR1cm4gKHUxNikobSBcdTAwM2VcdTAwM2UgMTYpOyB9XG4rXG4rLyogSW5mZXIgdXNlIG1hc2sgYmFzZWQgb24gbnVtYmVyIGFuZCBzaXplcyBvZiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4gKi9cbitzdGF0aWMgdTMyIGNhbGxfdXNlX21hc2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuK3tcbitcdHUzMiBpLCB1c2UsIHNpemUsIHJlZ19wYXJhbXNfbnVtO1xuK1x0c3RydWN0IGJwZl9jYWxsX3N1bW1hcnkgY3M7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICpwO1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xuK1xuK1x0aWYgKCFicGZfZ2V0X2NhbGxfc3VtbWFyeShlbnYsIGluc24sIFx1MDAyNmNzKSlcbitcdFx0LyogZS5nLiBhIGJwZi10by1icGYgY2FsbCwgYXNzdW1lIHRoYXQgY2FsbHMgdXNlIGZ1bGwgNjQtYml0IGZvciBlYWNoIHBhcmFtICovXG4rXHRcdHJldHVybiBtYXNrX3dpZGVuKEFMTF9DQUxMRVJfU0FWRURfUkVHUyBcdTAwMjYgfkJJVChCUEZfUkVHXzApKTtcbitcbitcdGlmIChjcy5mdW5jX3Byb3RvKSB7XG4rXHRcdHVzZSA9IDA7XG4rXHRcdHAgPSBidGZfcGFyYW1zKGNzLmZ1bmNfcHJvdG8pO1xuK1x0XHRyZWdfcGFyYW1zX251bSA9IG1pbihidGZfdHlwZV92bGVuKGNzLmZ1bmNfcHJvdG8pLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZWdfcGFyYW1zX251bTsgaSsrKSB7XG4rXHRcdFx0dCA9IGJ0Zl90eXBlX2J5X2lkKGNzLmJ0ZiwgcFtpXS50eXBlKTtcbitcdFx0XHRpZiAoSVNfRVJSKGJ0Zl9yZXNvbHZlX3NpemUoY3MuYnRmLCB0LCBcdTAwMjZzaXplKSkpXG4rXHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuK1x0XHRcdHVzZSB8PSBzaXplIFx1MDAzYz0gc2l6ZW9mKHUzMikgPyByZWczMl9tYXNrKGkgKyAxKSA6IHJlZzY0X21hc2soaSArIDEpO1xuK1x0XHR9XG4rXHRcdHJldHVybiB1c2U7XG4rXHR9XG4rXG4rZmFsbGJhY2s6XG4rXHQvKiBieSBkZWZhdWx0IGFzc3VtZSB0aGF0IGNhbGxzIHVzZSBmdWxsIDY0LWJpdCBmb3IgZWFjaCBwYXJhbSAqL1xuK1x0cmV0dXJuIG1hc2tfd2lkZW4oR0VOTUFTSyhtaW5fdCh1OCwgY3MubnVtX3BhcmFtcywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKSwgMSkpO1xuK31cbitcbiAvKiBDb21wdXRlIGluZm8tXHUwMDNle3VzZSxkZWZ9IGZpZWxkcyBmb3IgdGhlIGluc3RydWN0aW9uICovXG4gc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgc3RydWN0IGluc25fbGl2ZV9yZWdzICppbmZvKVxuIHtcbi1cdHN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzO1xuLVx0dTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpO1xuLVx0dTE2IHNyYyA9IEJJVChpbnNuLVx1MDAzZXNyY19yZWcpO1xuLVx0dTE2IGRzdCA9IEJJVChpbnNuLVx1MDAzZWRzdF9yZWcpO1xuLVx0dTE2IHIwICA9IEJJVCgwKTtcbi1cdHUxNiBkZWYgPSAwO1xuLVx0dTE2IHVzZSA9IDB4ZmZmZjtcbitcdGNvbnN0IHU4IGNsYXNzID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSk7XG4rXHRjb25zdCB1OCBjb2RlID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4rXHRjb25zdCB1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKTtcbitcdGNvbnN0IHU4IHNpemUgPSBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpO1xuK1x0Y29uc3QgdTMyIHNyYyA9IHJlZzY0X21hc2soaW5zbi1cdTAwM2VzcmNfcmVnKTtcbitcdGNvbnN0IHUzMiBkc3QgPSByZWc2NF9tYXNrKGluc24tXHUwMDNlZHN0X3JlZyk7XG4rXHRjb25zdCB1MzIgc3JjMzIgPSBtYXNrX2xvKHNyYyk7XG4rXHRjb25zdCB1MzIgZHN0MzIgPSBtYXNrX2xvKGRzdCk7XG4rXHRjb25zdCB1MzIgcjAgID0gcmVnNjRfbWFzaygwKTtcbitcdHUzMiBkZWYgPSAwO1xuK1x0dTMyIHVzZSA9IFUzMl9NQVg7XG4gXG4gXHRzd2l0Y2ggKGNsYXNzKSB7XG4gXHRjYXNlIEJQRl9MRDpcbkBAIC0yMDgzLDggKzIxMTgsOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHR1c2UgPSAwO1xuIFx0XHRcdH1cbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfTEQgfCBCUEZfQUJTOlxuLVx0XHRjYXNlIEJQRl9MRCB8IEJQRl9JTkQ6XG4rXHRcdGNhc2UgQlBGX0FCUzpcbitcdFx0Y2FzZSBCUEZfSU5EOlxuIFx0XHRcdC8qIHN0aWNrIHdpdGggZGVmYXVsdHMgKi9cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTIwOTIsNyArMjEyNywxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRjYXNlIEJQRl9MRFg6XG4gXHRcdHN3aXRjaCAobW9kZSkge1xuIFx0XHRjYXNlIEJQRl9NRU06XG4rXHRcdFx0LyogYSBuYXJyb3cgbG9hZCBzdGlsbCByZWRlZmluZXMgdGhlIHdob2xlIHJlZ2lzdGVyICovXG4rXHRcdFx0ZGVmID0gZHN0O1xuK1x0XHRcdHVzZSA9IHNyYztcbitcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBCUEZfTUVNU1g6XG4rXHRcdFx0LypcbitcdFx0XHQgKiBzaWduIGV4dGVuc2lvbiBkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlcjtcbitcdFx0XHQgKiBzcmMgaG9sZHMgYSBwb2ludGVyLCBoZW5jZSBpcyB1c2VkIGFzIDY0LWJpdC5cbitcdFx0XHQgKi9cbiBcdFx0XHRkZWYgPSBkc3Q7XG4gXHRcdFx0dXNlID0gc3JjO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTIxMTAsMTIgKzIxNTMsMTkgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBCUEZfTUVNOlxuIFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuK1x0XHRcdHVzZSA9IGRzdCB8IChzaXplID09IEJQRl9EVyA/IHNyYyA6IHNyYzMyKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfQVRPTUlDOlxuK1x0XHRjYXNlIEJQRl9BVE9NSUM6IHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGRzdCBob2xkcyBhIHBvaW50ZXIgYW5kIGlzIGFsd2F5cyB1c2VkIGFzIDY0LWJpdDtcbitcdFx0XHQgKiB0aGUgdmFsdWUgb3BlcmFuZCBhbmQgcjAgYXJlIHJlYWQgYXMgMzItYml0IGZvciBCUEZfVyBhdG9taWNzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHUzMiBzcmN2ID0gc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMjtcbitcdFx0XHR1MzIgcjB2ICA9IHNpemUgPT0gQlBGX0RXID8gcjAgOiBtYXNrX2xvKHIwKTtcbitcbiBcdFx0XHRzd2l0Y2ggKGluc24tXHUwMDNlaW1tKSB7XG4gXHRcdFx0Y2FzZSBCUEZfQ01QWENIRzpcbi1cdFx0XHRcdHVzZSA9IHIwIHwgZHN0IHwgc3JjO1xuK1x0XHRcdFx0dXNlID0gcjB2IHwgZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGRlZiA9IHIwO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XG5AQCAtMjEyNCwxMCArMjE3NCwxMCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4gXHRcdFx0XHRkZWYgPSAwO1xuLVx0XHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuK1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGRlZmF1bHQ6XG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4rXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmN2O1xuIFx0XHRcdFx0aWYgKGluc24tXHUwMDNlaW1tIFx1MDAyNiBCUEZfRkVUQ0gpXG4gXHRcdFx0XHRcdGRlZiA9IHNyYztcbiBcdFx0XHRcdGVsc2VcbkBAIC0yMTM1LDYgKzIxODUsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4rXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9BTFU6XG4gXHRjYXNlIEJQRl9BTFU2NDpcbkBAIC0yMTQ4LDE0ICsyMTk5LDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9LKVxuIFx0XHRcdFx0dXNlID0gMDtcbiBcdFx0XHRlbHNlXG4tXHRcdFx0XHR1c2UgPSBzcmM7XG4rXHRcdFx0XHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyBzcmMgOiBzcmMzMjtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRkZWYgPSBkc3Q7XG4gXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbi1cdFx0XHRcdHVzZSA9IGRzdDtcbitcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IGRzdCA6IGRzdDMyO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdHVzZSA9IGRzdCB8IHNyYztcbitcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IChkc3QgfCBzcmMpIDogKGRzdDMyIHwgc3JjMzIpO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfSk1QOlxuQEAgLTIxNzcsMTcgKzIyMjgsMTUgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHVzZSA9IHIwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEJQRl9DQUxMOlxuLVx0XHRcdGRlZiA9IEFMTF9DQUxMRVJfU0FWRURfUkVHUztcbi1cdFx0XHR1c2UgPSBkZWYgXHUwMDI2IH5CSVQoQlBGX1JFR18wKTtcbi1cdFx0XHRpZiAoYnBmX2dldF9jYWxsX3N1bW1hcnkoZW52LCBpbnNuLCBcdTAwMjZjcykpXG4tXHRcdFx0XHR1c2UgPSBHRU5NQVNLKG1pbl90KHU4LCBjcy5udW1fcGFyYW1zLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpLCAxKTtcbitcdFx0XHRkZWYgPSBtYXNrX3dpZGVuKEFMTF9DQUxMRVJfU0FWRURfUkVHUyk7XG4rXHRcdFx0dXNlID0gY2FsbF91c2VfbWFzayhlbnYsIGluc24pO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGRlZiA9IDA7XG4gXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbiBcdFx0XHRcdHVzZSA9IGRzdDtcbiBcdFx0XHRlbHNlXG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4rXHRcdFx0XHR1c2UgPSBkc3QgfCAoY29kZSA9PSBCUEZfSk1QMzIgPyBzcmMgOiBzcmMzMik7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjIwOSw2ICsyMjU4LDcgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuIFx0c3RydWN0IGluc25fbGl2ZV9yZWdzICpzdGF0ZTtcbiBcdGludCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbitcdHU2NCBwb3MsIGluc25fcG9zO1xuIFx0aW50IGVyciA9IDAsIGksIGo7XG4gXHRib29sIGNoYW5nZWQ7XG4gXG5AQCAtMjI1Miw4ICsyMzAyLDggQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW50IGluc25faWR4ID0gZW52LVx1MDAzZWNmZy5pbnNuX3Bvc3RvcmRlcltpXTtcbiBcdFx0XHRzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKmxpdmUgPSBcdTAwMjZzdGF0ZVtpbnNuX2lkeF07XG4gXHRcdFx0c3RydWN0IGJwZl9pYXJyYXkgKnN1Y2M7XG4tXHRcdFx0dTE2IG5ld19vdXQgPSAwO1xuLVx0XHRcdHUxNiBuZXdfaW4gPSAwO1xuK1x0XHRcdHUzMiBuZXdfb3V0ID0gMDtcbitcdFx0XHR1MzIgbmV3X2luID0gMDtcbiBcbiBcdFx0XHRzdWNjID0gYnBmX2luc25fc3VjY2Vzc29ycyhlbnYsIGluc25faWR4KTtcbiBcdFx0XHRmb3IgKGludCBzID0gMDsgcyBcdTAwM2Mgc3VjYy1cdTAwM2VjbnQ7ICsrcylcbkBAIC0yMjY3LDggKzIzMTcsMjAgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyArK2kpXG4tXHRcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBzdGF0ZVtpXS5pbjtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyArK2kpIHtcbitcdFx0aW50IGRlZjMyID0gYnBmX2luc25fZGVmMzIoXHUwMDI2aW5zbnNbaV0pO1xuK1x0XHR1MzIgb3V0ID0gc3RhdGVbaV0ub3V0O1xuK1x0XHR1MzIgaW4gPSBzdGF0ZVtpXS5pbjtcbitcbitcdFx0aW5zbl9hdXhbaV0ubGl2ZV9yZWdzX2JlZm9yZSA9IG1hc2tfbG8oaW4pIHwgbWFza19oaShpbik7XG4rXHRcdC8qXG4rXHRcdCAqIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG8gbm90IHJlc2V0IHVwcGVyIGhhbHZlc1xuK1x0XHQgKiBvZiB0aGUgcmVnaXN0ZXJzLCB0aGUgdmVyaWZpZXIgbmVlZHMgdG8gemVybyBleHRlbmQgYSBkZXN0aW5hdGlvblxuK1x0XHQgKiByZWdpc3RlciBpZiBhbiBpbnN0cnVjdGlvbiBkZWZpbmVzIGEgMzItYml0IHN1YnJlZ2lzdGVyIGFuZCB0aGVcbitcdFx0ICogdXBwZXIgaGFsZiBvZiB0aGF0IHJlZ2lzdGVyIGlzIGFsaXZlIGFmdGVyIHRoZSBpbnN0cnVjdGlvbi5cbitcdFx0ICovXG4rXHRcdGluc25fYXV4W2ldLnpleHRfZHN0ID0gZGVmMzIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiAobWFza19oaShvdXQpIFx1MDAyNiBCSVQoZGVmMzIpKTtcbitcdH1cbiBcbiBcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xuIFx0XHR2ZXJib3NlKGVudiwgXCJMaXZlIHJlZ3MgYmVmb3JlIGluc246XFxuXCIpO1xuQEAgLTIyODQsNyArMjM0NiwxMiBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdGVsc2VcbiBcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiLlwiKTtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCIgXCIpO1xuK1x0XHRcdHBvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXHUwMDI2aW5zbnNbaV0pO1xuK1x0XHRcdGluc25fcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuK1x0XHRcdGlmIChpbnNuX2F1eFtpXS56ZXh0X2RzdClcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiUqYzsgemV4dFwiLCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAnICcpO1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcIlxcblwiKTtcbiBcdFx0XHRpZiAoYnBmX2lzX2xkaW1tNjQoXHUwMDI2aW5zbnNbaV0pKVxuIFx0XHRcdFx0aSsrO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlNmYzNWY0ZTcxNWI2Li5kNWI2ZmVmMWFkODk3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yMTI5LDEyICsyMTI5LDkgQEAgc3RhdGljIGludCByZWdfYm91bmRzX3Nhbml0eV9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovXG4gdm9pZCBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Uoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiB7XG4tXHRzMzIgc3VicmVnX2RlZiA9IHJlZy1cdTAwM2VzdWJyZWdfZGVmO1xuLVxuIFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcbiBcdHJlZy1cdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xuIFx0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XG4tXHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7XG4gXHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xuIH1cbiBcbkBAIC0yMjEwLDcgKzIyMDcsNiBAQCBzdGF0aWMgaW50IG1hcmtfYnRmX2xkX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0fVxuIH1cbiBcbi0jZGVmaW5lIERFRl9OT1RfU1VCUkVHXHQoMClcbiBzdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpXG4ge1xuQEAgLTIyMTksNyArMjIxNSw2IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfQlBGX1JFRzsgaSsrKSB7XG4gXHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbaV0pO1xuLVx0XHRyZWdzW2ldLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdH1cbiBcbiBcdC8qIGZyYW1lIHBvaW50ZXIgKi9cbkBAIC0zMDMzLDExICszMDI4LDEwIEBAIHN0YXRpYyB2b2lkIG1hcmtfc3RhY2tfc2xvdHNfc2NyYXRjaGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gfVxuIFxuIC8qIFRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBieSB0aGUgZm9sbG93aW5nIDMyLWJpdCBvcHRpbWl6YXRpb25cbi0gKiBjb2RlIG9ubHkuIEl0IHJldHVybnMgVFJVRSBpZiB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzXG4tICogb24gNjQtYml0LCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLlxuKyAqIGNvZGUgb25seS4gSXQgcmV0dXJucyBUUlVFIGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlcyBvbiA2NC1iaXQsXG4rICogb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cbiAgKi9cbi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tXHQgICAgICB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuK2Jvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4gXHR1OCBjb2RlLCBjbGFzcywgb3A7XG4gXG5AQCAtMzA1OCwxMSArMzA1Miw2IEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcbiBcdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHQvKiBIZWxwZXIgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBhcmcgdHlwZVxuLVx0XHRcdCAqIGNoZWNrLCBjb25zZXJ2YXRpdmVseSByZXR1cm4gVFJVRS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAodCA9PSBTUkNfT1ApXG4tXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbkBAIC0zMDc4LDIyICszMDY3LDExIEBAIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdGlmIChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9KTVAzMilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGNsYXNzID09IEJQRl9MRFgpIHtcbi1cdFx0aWYgKHQgIT0gU1JDX09QKVxuLVx0XHRcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFcgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX01FTVNYO1xuLVx0XHQvKiBMRFggc291cmNlIG11c3QgYmUgcHRyLiAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdH1cbitcdGlmIChjbGFzcyA9PSBCUEZfTERYKVxuK1x0XHRyZXR1cm4gQlBGX1NJWkUoY29kZSkgPT0gQlBGX0RXIHx8IEJQRl9NT0RFKGNvZGUpID09IEJQRl9NRU1TWDtcbiBcbi1cdGlmIChjbGFzcyA9PSBCUEZfU1RYKSB7XG4tXHRcdC8qIEJQRl9TVFggKGluY2x1ZGluZyBhdG9taWMgdmFyaWFudHMpIGhhcyBvbmUgb3IgbW9yZSBzb3VyY2Vcbi1cdFx0ICogb3BlcmFuZHMsIG9uZSBvZiB3aGljaCBpcyBhIHB0ci4gQ2hlY2sgd2hldGhlciB0aGUgY2FsbGVyIGlzXG4tXHRcdCAqIGFza2luZyBhYm91dCBpdC5cbi1cdFx0ICovXG4tXHRcdGlmICh0ID09IFNSQ19PUCBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKGNsYXNzID09IEJQRl9TVFgpXG4gXHRcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFc7XG4tXHR9XG4gXG4gXHRpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XG4gXHRcdHU4IG1vZGUgPSBCUEZfTU9ERShjb2RlKTtcbkBAIC0zMTAzLDE1ICszMDgxLDcgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0XHQvKiBCb3RoIExEX0lORCBhbmQgTERfQUJTIHJldHVybiAzMi1iaXQgZGF0YS4gKi9cbi1cdFx0aWYgKHQgIT0gU1JDX09QKVxuLVx0XHRcdHJldHVybiAgZmFsc2U7XG4tXG4tXHRcdC8qIEltcGxpY2l0IGN0eCBwdHIuICovXG4tXHRcdGlmIChyZWdubyA9PSBCUEZfUkVHXzYpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdC8qIEV4cGxpY2l0IHNvdXJjZSBjb3VsZCBiZSBhbnkgd2lkdGguICovXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRpZiAoY2xhc3MgPT0gQlBGX1NUKVxuQEAgLTMxMjIsMzAgKzMwOTIsMTQgQEAgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi17XG4tXHRzMzIgZGVmX2lkeCA9IHJlZy1cdTAwM2VzdWJyZWdfZGVmO1xuLVxuLVx0aWYgKGRlZl9pZHggPT0gREVGX05PVF9TVUJSRUcpXG4tXHRcdHJldHVybjtcbi1cbi1cdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2RlZl9pZHggLSAxXS56ZXh0X2RzdCA9IHRydWU7XG4tXHQvKiBUaGUgZHN0IHdpbGwgYmUgemVybyBleHRlbmRlZCwgc28gd29uJ3QgYmUgc3ViLXJlZ2lzdGVyIGFueW1vcmUuICovXG4tXHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuLX1cbi1cbiBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLFxuIFx0XHRcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuIHtcbi1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaSArIGVudi1cdTAwM2VpbnNuX2lkeDtcbiBcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4tXHRib29sIHJ3NjQ7XG4gXG4gXHRtYXJrX3JlZ19zY3JhdGNoZWQoZW52LCByZWdubyk7XG4gXG4gXHRyZWcgPSBcdTAwMjZyZWdzW3JlZ25vXTtcbi1cdHJ3NjQgPSBicGZfaXNfcmVnNjQoaW5zbiwgcmVnbm8sIHJlZywgdCk7XG4gXHRpZiAodCA9PSBTUkNfT1ApIHtcbiBcdFx0LyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIHNvdXJjZSBvcGVyYW5kIGNhbiBiZSByZWFkICovXG4gXHRcdGlmIChyZWctXHUwMDNldHlwZSA9PSBOT1RfSU5JVCkge1xuQEAgLTMxNTYsOSArMzExMCw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXG4gXHRcdGlmIChyZWdubyA9PSBCUEZfUkVHX0ZQKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuLVx0XHRpZiAocnc2NClcbi1cdFx0XHRtYXJrX2luc25femV4dChlbnYsIHJlZyk7XG4tXG4gXHRcdHJldHVybiAwO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIGRlc3Qgb3BlcmFuZCBjYW4gYmUgd3JpdHRlbiB0byAqL1xuQEAgLTMxNjYsNyArMzExNyw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiZnJhbWUgcG9pbnRlciBpcyByZWFkIG9ubHlcXG5cIik7XG4gXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdH1cbi1cdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBydzY0ID8gREVGX05PVF9TVUJSRUcgOiBlbnYtXHUwMDNlaW5zbl9pZHggKyAxO1xuIFx0XHRpZiAodCA9PSBEU1RfT1ApXG4gXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJlZ25vKTtcbiBcdH1cbkBAIC0zODIyLDExICszNzcyLDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFxuIFx0XHRcdGlmIChzaXplIFx1MDAzYz0gc3BpbGxfc2l6ZSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgYnBmX3N0YWNrX25hcnJvd19hY2Nlc3Nfb2sob2ZmLCBzaXplLCBzcGlsbF9zaXplKSkge1xuLVx0XHRcdFx0LyogVGhlIGVhcmxpZXIgY2hlY2tfcmVnX2FyZygpIGhhcyBkZWNpZGVkIHRoZVxuLVx0XHRcdFx0ICogc3VicmVnX2RlZiBmb3IgdGhpcyBpbnNuLiAgU2F2ZSBpdCBmaXJzdC5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0czMyIHN1YnJlZ19kZWYgPSBzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10uc3VicmVnX2RlZjtcbi1cbiBcdFx0XHRcdGlmIChlbnYtXHUwMDNlYnBmX2NhcGFibGUgXHUwMDI2XHUwMDI2IHNpemUgPT0gNCBcdTAwMjZcdTAwMjYgc3BpbGxfc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIGdldF9yZWdfd2lkdGgocmVnKSBcdTAwM2M9IDMyKVxuIFx0XHRcdFx0XHQvKiBFbnN1cmUgc3RhY2sgc2xvdCBoYXMgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvblxuQEAgLTM4MzQsNyArMzc3OSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdFx0ICovXG4gXHRcdFx0XHRcdGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHJlZyk7XG4gXHRcdFx0XHRzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10gPSAqcmVnO1xuLVx0XHRcdFx0c3RhdGUtXHUwMDNlcmVnc1tkc3RfcmVnbm9dLnN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmO1xuIFxuIFx0XHRcdFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIGZpbGwuXG4gXHRcdFx0XHQgKiBjb2VyY2VfcmVnX3RvX3NpemUgd2lsbCBhZGp1c3QgdGhlIGJvdW5kYXJpZXMuXG5AQCAtNjI3MSwxMiArNjIxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLFxuIFx0XHRcdFx0XHRcdCAgICB2YWx1ZV9yZWdubyk7XG4tXHRcdFx0XHQvKiBBIGxvYWQgb2YgY3R4IGZpZWxkIGNvdWxkIGhhdmUgZGlmZmVyZW50XG4tXHRcdFx0XHQgKiBhY3R1YWwgbG9hZCBzaXplIHdpdGggdGhlIG9uZSBlbmNvZGVkIGluIHRoZVxuLVx0XHRcdFx0ICogaW5zbi4gV2hlbiB0aGUgZHN0IGlzIFBUUiwgaXQgaXMgZm9yIHN1cmUgbm90XG4tXHRcdFx0XHQgKiBhIHN1Yi1yZWdpc3Rlci5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0aWYgKGJhc2VfdHlwZShpbmZvLnJlZ190eXBlKSA9PSBQVFJfVE9fQlRGX0lEKSB7XG4gXHRcdFx0XHRcdHJlZ3NbdmFsdWVfcmVnbm9dLmJ0ZiA9IGluZm8uYnRmO1xuIFx0XHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5idGZfaWQgPSBpbmZvLmJ0Zl9pZDtcbkBAIC03MzgwLDEwICs3MzE4LDYgQEAgc3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRcbiBcdFx0XHRpZiAoc3BpIFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHNwaTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xuLVx0XHRcdCAqIGluIGNoZWNrX2hlbHBlcl9jYWxsIGFuZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplIGluIGNoZWNrX2tmdW5jX2NhbGwuXG4tXHRcdFx0ICovXG4gXHRcdFx0bWFya19zdGFja19zbG90c19zY3JhdGNoZWQoZW52LCBzcGksIEJQRl9EWU5QVFJfTlJfU0xPVFMpO1xuIFxuIFx0XHRcdHJlZyA9IFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG5AQCAtOTQ2Myw3ICs5Mzk3LDYgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQvKiBBbGwgbm9uLXZvaWQgZ2xvYmFsIGZ1bmN0aW9ucyByZXR1cm4gYSA2NC1iaXQgU0NBTEFSX1ZBTFVFLiAqL1xuIFx0XHRpZiAoIXN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZykpIHtcbiBcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIEJQRl9SRUdfMCk7XG4tXHRcdFx0Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHtcbkBAIC0xMDQ4Miw5ICsxMDQxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXHR9XG4gXHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjdXJfZnVuYyhlbnYpKTtcbiBcbi1cdC8qIGhlbHBlciBjYWxsIHJldHVybnMgNjQtYml0IHZhbHVlLiAqL1xuLVx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbi1cbiBcdC8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovXG4gXHRyZXRfdHlwZSA9IGZuLVx1MDAzZXJldF90eXBlO1xuIFx0cmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpO1xuQEAgLTEwNzIyLDMwICsxMDY1Miw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLyogbWFya19idGZfZnVuY19yZWdfc2l6ZSgpIGlzIHVzZWQgd2hlbiB0aGUgcmVnIHNpemUgaXMgZGV0ZXJtaW5lZCBieVxuLSAqIHRoZSBCVEYgZnVuY19wcm90bydzIHJldHVybiB2YWx1ZSBzaXplIGFuZCBhcmd1bWVudC5cbi0gKi9cbi1zdGF0aWMgdm9pZCBfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXG4tXHRcdFx0XHQgICAgIHUzMiByZWdubywgc2l6ZV90IHJlZ19zaXplKVxuLXtcbi1cdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSBcdTAwMjZyZWdzW3JlZ25vXTtcbi1cbi1cdGlmIChyZWdubyA9PSBCUEZfUkVHXzApIHtcbi1cdFx0LyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlICovXG4tXHRcdHJlZy1cdTAwM2VzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgP1xuLVx0XHRcdERFRl9OT1RfU1VCUkVHIDogZW52LVx1MDAzZWluc25faWR4ICsgMTtcbi1cdH0gZWxzZSBpZiAocmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkpIHtcbi1cdFx0LyogRnVuY3Rpb24gYXJndW1lbnQgKi9cbi1cdFx0bWFya19pbnNuX3pleHQoZW52LCByZWcpO1xuLVx0fVxuLX1cbi1cbi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcbi1cdFx0XHRcdCAgIHNpemVfdCByZWdfc2l6ZSlcbi17XG4tXHRyZXR1cm4gX19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgY3VyX3JlZ3MoZW52KSwgcmVnbm8sIHJlZ19zaXplKTtcbi19XG4tXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYWNxdWlyZShzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4ge1xuIFx0cmV0dXJuIG1ldGEtXHUwMDNla2Z1bmNfZmxhZ3MgXHUwMDI2IEtGX0FDUVVJUkU7XG5AQCAtMTI5NzQsNyArMTI4ODAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0c3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhIG1ldGE7XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4O1xuIFx0aW50IGVyciwgaW5zbl9pZHggPSAqaW5zbl9pZHhfcDtcbi1cdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3M7XG4gXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xuIFx0c3RydWN0IGJ0ZiAqZGVzY19idGY7XG4gXHRpbnQgaWQ7XG5AQCAtMTMwMTgsNyArMTI5MjMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdHZlcmJvc2UoZW52LCBcImZhaWxlZCB0byBtYXJrIHMzMiByYW5nZSBmb3IgcmV0dmFsIGluIGZvcmtlZCBzdGF0ZSBmb3IgbG9ja1xcblwiKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4tXHRcdF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ3MsIEJQRl9SRUdfMCwgc2l6ZW9mKHUzMikpO1xuIFx0fSBlbHNlIGlmICghaW5zbi1cdTAwM2VvZmYgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9fX2JwZl90cmFwXSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCJ1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXG5cIik7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTEzMTY4LDcgKzEzMDcyLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0dTMyIHJlZ25vID0gY2FsbGVyX3NhdmVkW2ldO1xuIFxuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW3JlZ25vXSk7XG4tXHRcdHJlZ3NbcmVnbm9dLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdH1cbiBcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpO1xuIFxuQEAgLTEzMTkwLDcgKzEzMDkzLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFx1MDAyNlx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbiBcdFx0ICAgIG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKVxuIFx0XHRcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XG4tXHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHQtXHUwMDNlc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuIFx0XHRwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnB0cl90eXBlX2lkKTtcbiBcdFx0ZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsIFx1MDAyNm1ldGEsIHJlZ3MsIGluc25fYXV4LCBwdHJfdHlwZSwgZGVzY19idGYpO1xuQEAgLTEzMjgxLDcgKzEzMTgzLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHQvKiBGb3IgbWFya19wdHJfb3JfbnVsbF9yZWcsIHNlZSA5M2MyMzBlM2Y1YmQ2ICovXG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFx0XHR9XG4tXHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHNpemVvZih2b2lkICopKTtcbiBcdFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXHUwMDI2bWV0YSkpIHtcbiBcdFx0XHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xuIFx0XHRcdGlmIChpZCBcdTAwM2MgMClcbkBAIC0xMzMxOCwxOCArMTMyMTksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdGNhbGxlcl9pbmZvLVx1MDAzZXN0YWNrX2FyZ19jbnQgPSBzdGFja19hcmdfY250O1xuIFx0fVxuIFxuLVx0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEuZnVuY19wcm90byArIDEpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBuYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XG4tXHRcdHUzMiByZWdubyA9IGkgKyAxO1xuLVxuLVx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGFyZ3NbaV0udHlwZSwgTlVMTCk7XG4tXHRcdGlmIChidGZfdHlwZV9pc19wdHIodCkpXG4tXHRcdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCBzaXplb2Yodm9pZCAqKSk7XG4tXHRcdGVsc2Vcbi1cdFx0XHQvKiBzY2FsYXIuIGVuc3VyZWQgYnkgY2hlY2tfa2Z1bmNfYXJncygpICovXG4tXHRcdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCB0LVx1MDAzZXNpemUpO1xuLVx0fVxuLVxuIFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkpIHtcbiBcdFx0ZXJyID0gcHJvY2Vzc19pdGVyX25leHRfY2FsbChlbnYsIGluc25faWR4LCBcdTAwMjZtZXRhKTtcbiBcdFx0aWYgKGVycilcbkBAIC0xNDgyMyw4ICsxNDcxMiw2IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0aWYgKGRzdF9yZWctXHUwMDNldHlwZSAhPSBQVFJfVE9fQVJFTkEpXG4gXHRcdFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcbiBcbi1cdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICsgMTtcbi1cbiBcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NClcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LlxuQEAgLTE1MDI4LDggKzE0OTE1LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbiBcdFx0XHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IDEpIHsgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXG4gXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2V0eXBlID0gUFRSX1RPX0FSRU5BO1xuLVx0XHRcdFx0XHRcdC8qIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi9cbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggKyAxO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlb2ZmID09IDApIHtcbiBcdFx0XHRcdFx0LyogY2FzZTogUjEgPSBSMlxuQEAgLTE1MDM3LDcgKzE0OTIyLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4gXHRcdFx0XHRcdCpkc3RfcmVnID0gKnNyY19yZWc7XG4tXHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0LyogY2FzZTogUjEgPSAoczgsIHMxNiBzMzIpUjIgKi9cbiBcdFx0XHRcdFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpKSB7XG5AQCAtMTUwNTUsNyArMTQ5MzksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRcdFx0XHRcdFx0aWYgKCFub19zZXh0KVxuIFx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xuIFx0XHRcdFx0XHRcdGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiBcdTAwM2VcdTAwM2UgMyk7XG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHRcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRcdFx0XHRcdH1cbkBAIC0xNTA4MCw3ICsxNDk2Myw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0XHRpZiAoIWlzX3NyY19yZWdfdTMyKVxuIFx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xuLVx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cdTAwM2VpbnNuX2lkeCArIDE7XG4gXHRcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdFx0LyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqL1xuIFx0XHRcdFx0XHRcdGJvb2wgbm9fc2V4dCA9IHJlZ191bWF4KHNyY19yZWcpIFx1MDAzYyAoMVVMTCBcdTAwM2NcdTAwM2MgKGluc24tXHUwMDNlb2ZmIC0gMSkpO1xuQEAgLTE1MDkwLDcgKzE0OTcyLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdCpkc3RfcmVnID0gKnNyY19yZWc7XG4gXHRcdFx0XHRcdFx0aWYgKCFub19zZXh0KVxuIFx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xuLVx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cdTAwM2VpbnNuX2lkeCArIDE7XG4gXHRcdFx0XHRcdFx0Y29lcmNlX3N1YnJlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXHUwMDNlb2ZmIFx1MDAzZVx1MDAzZSAzKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fSBlbHNlIHtcbkBAIC0xNTk1OSwxMiArMTU4NDAsOCBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoKCEocmVnLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSBcdTAwMjZcdTAwMjYgIShrbm93bl9yZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxuIFx0XHQgICAgcmVnLVx1MDAzZWRlbHRhID09IGtub3duX3JlZy1cdTAwM2VkZWx0YSkge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4tXG4gXHRcdFx0KnJlZyA9ICprbm93bl9yZWc7XG4tXHRcdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4gXHRcdFx0czMyIHNhdmVkX29mZiA9IHJlZy1cdTAwM2VkZWx0YTtcbiBcdFx0XHR1MzIgc2F2ZWRfaWQgPSByZWctXHUwMDNlaWQ7XG4gXG5AQCAtMTU5NzQsMTIgKzE1ODUxLDExIEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zXG4gXHRcdFx0LyogcmVnID0ga25vd25fcmVnOyByZWcgKz0gZGVsdGEgKi9cbiBcdFx0XHQqcmVnID0gKmtub3duX3JlZztcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIE11c3QgcHJlc2VydmUgb2ZmLCBpZCBhbmQgc3VicmVnX2RlZiBmbGFnLFxuLVx0XHRcdCAqIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKSB3aWxsIGJlIGluY29ycmVjdC5cbitcdFx0XHQgKiBNdXN0IHByZXNlcnZlIG9mZiBhbmQgaWQsIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKVxuK1x0XHRcdCAqIHdpbGwgYmUgaW5jb3JyZWN0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdHJlZy1cdTAwM2VkZWx0YSA9IHNhdmVkX29mZjtcbiBcdFx0XHRyZWctXHUwMDNlaWQgPSBzYXZlZF9pZDtcbi1cdFx0XHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XG4gXG4gXHRcdFx0c2NhbGFyMzJfbWluX21heF9hZGQocmVnLCBcdTAwMjZmYWtlX3JlZyk7XG4gXHRcdFx0c2NhbGFyX21pbl9tYXhfYWRkKHJlZywgXHUwMDI2ZmFrZV9yZWcpO1xuQEAgLTE2NDE0LDggKzE2MjkwLDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0ICogQWxyZWFkeSBtYXJrZWQgYXMgd3JpdHRlbiBhYm92ZS5cbiBcdCAqL1xuIFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG4tXHQvKiBsZF9hYnMgbG9hZCB1cCB0byAzMi1iaXQgc2tiIGRhdGEuICovXG4tXHRyZWdzW0JQRl9SRUdfMF0uc3VicmVnX2RlZiA9IGVudi1cdTAwM2VpbnNuX2lkeCArIDE7XG4gXHQvKlxuIFx0ICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wXG4gXHQgKiB3aGljaCBtdXN0IGJlIGV4cGxvcmVkIGJ5IHRoZSB2ZXJpZmllciB3aGVuIGluIGEgc3VicHJvZy5cbkBAIC0xNjczMCwxMCArMTY2MDQsMTEgQEAgYm9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXG4gXHRpbnQgaTtcbiBcbiBcdGlmIChicGZfaGVscGVyX2NhbGwoY2FsbCkpIHtcbi1cbiBcdFx0aWYgKGJwZl9nZXRfaGVscGVyX3Byb3RvKGVudiwgY2FsbC1cdTAwM2VpbW0sIFx1MDAyNmZuKSBcdTAwM2MgMClcbiBcdFx0XHQvKiBlcnJvciB3b3VsZCBiZSByZXBvcnRlZCBsYXRlciAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0Y3MtXHUwMDNlYnRmID0gTlVMTDtcbitcdFx0Y3MtXHUwMDNlZnVuY19wcm90byA9IE5VTEw7XG4gXHRcdGNzLVx1MDAzZWZhc3RjYWxsID0gZm4tXHUwMDNlYWxsb3dfZmFzdGNhbGwgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIChicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGNhbGwtXHUwMDNlaW1tKSB8fFxuIFx0XHRcdFx0YnBmX2ppdF9pbmxpbmVzX2hlbHBlcl9jYWxsKGNhbGwtXHUwMDNlaW1tKSk7XG5AQCAtMTY3NTQsNiArMTY2MjksOCBAQCBib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0XHQvKiBlcnJvciB3b3VsZCBiZSByZXBvcnRlZCBsYXRlciAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0Y3MtXHUwMDNlYnRmID0gbWV0YS5idGY7XG4rXHRcdGNzLVx1MDAzZWZ1bmNfcHJvdG8gPSBtZXRhLmZ1bmNfcHJvdG87XG4gXHRcdGNzLVx1MDAzZW51bV9wYXJhbXMgPSBidGZfdHlwZV92bGVuKG1ldGEuZnVuY19wcm90byk7XG4gXHRcdGNzLVx1MDAzZWZhc3RjYWxsID0gbWV0YS5rZnVuY19mbGFncyBcdTAwMjYgS0ZfRkFTVENBTEw7XG4gXHRcdGNzLVx1MDAzZWlzX3ZvaWQgPSBidGZfdHlwZV9pc192b2lkKGJ0Zl90eXBlX2J5X2lkKG1ldGEuYnRmLCBtZXRhLmZ1bmNfcHJvdG8tXHUwMDNldHlwZSkpO1xuQEAgLTE3NDc1LDYgKzE3MzUyLDcgQEAgc3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGVudi1cdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiJWQ6IFwiLCBlbnYtXHUwMDNlaW5zbl9pZHgpO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbitcdFx0XHR2ZXJib3NlKGVudiwgXCJcXG5cIik7XG4gXHRcdFx0ZW52LVx1MDAzZXByZXZfaW5zbl9wcmludF9wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSBlbnYtXHUwMDNlcHJldl9sb2dfcG9zO1xuIFx0XHRcdGVudi1cdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbmluZGV4IDVlN2NiOGIzNmZlZjIuLjdiMzNkODQ3ZDgwMGMgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xuQEAgLTEyOSwxNiArMTI5LDEwIEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4gc3RhdGljIHZvaWQgX19wcmludGYoMiwgMylcbiBwcmludF9pbnNuX2pzb24odm9pZCAqcHJpdmF0ZV9kYXRhLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbCA9IHN0cmxlbihmbXQpO1xuLVx0Y2hhciBjaG9tcGVkX2ZtdFtsXTtcbiBcdHZhX2xpc3QgYXJncztcbiBcbiBcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHRpZiAobCBcdTAwM2UgMCkge1xuLVx0XHRzdHJuY3B5KGNob21wZWRfZm10LCBmbXQsIGwgLSAxKTtcbi1cdFx0Y2hvbXBlZF9mbXRbbCAtIDFdID0gJ1xcMCc7XG4tXHR9XG4tXHRqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGNob21wZWRfZm10LCBhcmdzKTtcbitcdGpzb253X3ZwcmludGZfZW5xdW90ZShqc29uX3d0ciwgZm10LCBhcmdzKTtcbiBcdHZhX2VuZChhcmdzKTtcbiB9XG4gXG5AQCAtMzUxLDYgKzM0NSw3IEBAIHZvaWQgZHVtcF94bGF0ZWRfcGxhaW4oc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbixcbiBcbiBcdFx0cHJpbnRmKFwiJTR1OiBcIiwgaSk7XG4gXHRcdHByaW50X2JwZl9pbnNuKFx1MDAyNmNicywgaW5zbiArIGksIHRydWUpO1xuK1x0XHRwcmludGYoXCJcXG5cIik7XG4gXG4gXHRcdGlmIChvcGNvZGVzKSB7XG4gXHRcdFx0cHJpbnRmKFwiICAgICAgIFwiKTtcbkBAIC00MTcsNiArNDEyLDcgQEAgdm9pZCBkdW1wX3hsYXRlZF9mb3JfZ3JhcGgoc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1Zl9zdGFydCwgdm9pZCAqYnVmX2VuZCxcbiBcbiBcdFx0cHJpbnRmKFwiJXU6IFwiLCBpbnNuX29mZik7XG4gXHRcdHByaW50X2JwZl9pbnNuKFx1MDAyNmNicywgY3VyLCB0cnVlKTtcbitcdFx0cHJpbnRmKFwiXFxcXGxcXFxcXFxuXCIpO1xuIFxuIFx0XHRpZiAob3Bjb2Rlcykge1xuIFx0XHRcdHByaW50ZihcIlxcXFwgXFxcXCBcXFxcIFxcXFwgXCIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcbmluZGV4IGY1MjlmMWM4YzE3MWQuLjMwMjIxMzUyNTY4ZDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcbkBAIC01NSwxMCArNTUsOSBAQCBzdHJ1Y3QgYnBmX2luc24gKmRpc2FzbV9pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxuIFx0ICogZm9yIGVhY2ggaW5zdHJ1Y3Rpb24gKEZGIHN0YW5kcyBmb3IgaW5zdHJ1Y3Rpb24gYGNvZGVgIGJ5dGUpLlxuIFx0ICogUmVtb3ZlIHRoZSBwcmVmaXggaW5wbGFjZSwgYW5kIGFsc28gc2ltcGxpZnkgY2FsbCBpbnN0cnVjdGlvbnMuXG4gXHQgKiBFLmcuOiBcIig4NSkgY2FsbCBmb28jMTBcIiAtXHUwMDNlIFwiY2FsbCBmb29cIi5cbi1cdCAqIEFsc28gcmVtb3ZlIG5ld2xpbmUgaW4gdGhlIGVuZCAodGhlICdtYXgoc3RybGVuKGJ1ZikgLSAxLCAwKScgdGhpbmcpLlxuIFx0ICovXG4gXHRwZnhfZW5kID0gYnVmICsgNTtcbi1cdHNmeF9zdGFydCA9IGJ1ZiArIG1heCgoaW50KXN0cmxlbihidWYpIC0gMSwgMCk7XG4rXHRzZnhfc3RhcnQgPSBidWYgKyAoaW50KXN0cmxlbihidWYpO1xuIFx0aWYgKHN0cm5jbXAocGZ4X2VuZCwgXCJjYWxsIFwiLCA1KSA9PSAwIFx1MDAyNlx1MDAyNiAodG1wID0gc3RycmNocihidWYsICcjJykpKVxuIFx0XHRzZnhfc3RhcnQgPSB0bXA7XG4gXHRsZW4gPSBzZnhfc3RhcnQgLSBwZnhfZW5kO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCBiZTk3ZjY4ODdmMGU3Li5mYmE1NjJjODE5NjkxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTEyNCw2ICsxMjQsNyBAQFxuICNpbmNsdWRlIFwidmVyaWZpZXJfaml0X2lubGluZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiaXJxLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJ2ZXJpZmllcl96ZXh0LnNrZWwuaFwiXG4gXG4gI2RlZmluZSBNQVhfRU5UUklFUyAxMVxuIFxuQEAgLTI3Nyw2ICsyNzgsNyBAQCB2b2lkIHRlc3RfaXJxKHZvaWQpXHRcdFx0ICAgICAgeyBSVU4oaXJxKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcdFx0ICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY3R4X3B0cl9wYXJhbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jdHhfcHRyX3BhcmFtKTsgfVxuK3ZvaWQgdGVzdF92ZXJpZmllcl96ZXh0KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyh2ZXJpZmllcl96ZXh0KTsgfVxuIFxuIHN0YXRpYyBpbnQgaW5pdF90ZXN0X3ZhbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY2hhciAqbWFwX25hbWUpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjRjODJhMzFlNjY4MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3pleHQuY1xuQEAgLTAsMCArMSwyNjAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uLy4uLy4uL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitfX2ZsYWcoQlBGX0ZfVEVTVF9STkRfSEkzMilcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitfX25ha2VkIHZvaWQgemV4dF9sb3N0X2Fjcm9zc19jaGVja3BvaW50KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2t0aW1lX2dldF9uc107XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjggPSByMDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjYgPSAweGRlYWRiZWVmY2FmZWJhYmUgbGw7XHQvKiBpbmplY3Qgc29tZSB2YWx1ZSBmb3IgcjYncyB1cHBlciBoYWxmICovXHRcXFxuK1x0aWYgcjggIT0gMCBnb3RvIDFmO1x0XHQvKiBmYWxsLXRocm91Z2ggY2FjaGVkIGZpcnN0LCBicmFuY2ggcHJ1bmVkICovXHRcXFxuK1x0cjYgPSAzMjtcdFx0XHQvKiBmdWxsIDY0LWJpdCBkZWYgKi9cdFx0XHRcdFxcXG4rXHRnb3RvIDJmO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHc2ID0gMzI7XHRcdFx0LyogMzItYml0IGRlZiwgemV4dCBtYXJrIGxvc3QgKi9cdFx0XFxcbisyOlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSByNjtcdFx0XHQvKiBidWdneSB2ZXJpZmllciBiZWxpZXZlZCB1cHBlciAzMiBiaXRzIGFyZSAwICovIFxcXG4rXHRcdFx0XHRcdC8qIGFuZCB0aHVzIGRpZCBub3QgemVybyBleHRlbmRlZCB3NiA9IDMyLiAqL1x0XFxcbitcdHIwIFx1MDAzZVx1MDAzZT0gMzI7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9rdGltZV9nZXRfbnMpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIncxID0gdzB7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9hbHUzMl9oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuK1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBvbmx5IGFzIDMyLWJpdCAtXHUwMDNlIG5vIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX25vdF9tc2coXCJ3MSA9IHcwe3suKn19OyB6ZXh0XCIpXG4rX19ub3RfbXNnKFwidzIgPSB3MXt7Lip9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCBub196ZXh0X2FsdTMyX2hpX3VudXNlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0dzEgPSB3MDtcdFx0XHRcdFx0XFxcbitcdHcyID0gdzE7XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogNjQtYml0IGRlZmluaXRpb24gaXMgbmV2ZXIgemVybyBleHRlbmRlZCAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbm90X21zZyhcInIxID0gcjB7ey4qfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgbm9femV4dF9tb3Y2NCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0cjEgPSByMDtcdFx0XHRcdFx0XFxcbitcdHIwID0gcjE7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIE5hcnJvdyBsb2FkIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcInIxID0gKih1MzIgKikocjEwIC04KXt7ICt9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19sb2FkX2hpX3VzZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjA7XHRcdFx0XHRcXFxuK1x0cjEgPSAqKHUzMiAqKShyMTAgLSA4KTtcdFx0XHRcdFxcXG4rXHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6OjogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIDMyLWJpdCBhdG9taWMgZmV0Y2ggcmVzdWx0IHJlYWQgYXMgNjQtYml0IC1cdTAwM2UgemV4dCAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwicjEgPSBhdG9taWNfZmV0Y2hfYWRkKCh1MzIgKikocjEwIC04KSwgcjEpe3sgK319OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIHpleHRfYXRvbWljX2ZldGNoMzJfaGlfdXNlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcdFx0XHRcdFxcXG4rXHR3MSA9IDE7XHRcdFx0XHRcdFx0XFxcbitcdC44Ynl0ZSAlW2ZldGNoX2FkZDMyXTtcdFx0XHRcdFxcXG4rXHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2luc24oZmV0Y2hfYWRkMzIsXG4rXHRcdCAgICAgQlBGX0FUT01JQ19PUChCUEZfVywgQlBGX0FERCB8IEJQRl9GRVRDSCwgQlBGX1JFR18xMCwgQlBGX1JFR18xLCAtOCkpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiAzMi1iaXQgYXRvbWljIGNtcHhjaGcgcmVzdWx0IChyMCkgcmVhZCBhcyA2NC1iaXQgLVx1MDAzZSB6ZXh0ICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJyMCA9IGF0b21pY19jbXB4Y2hnKCh1MzIgKikocjEwIC04KSwgcjAsIHIxKXt7ICt9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X2NtcHhjaGczMl9oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjEgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IHIxO1x0XHRcdFx0XFxcbitcdHcwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzEgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHQuOGJ5dGUgJVtjbXB4Y2hnMzJdO1x0XHRcdFx0XFxcbitcdHIyID0gcjA7XHRcdFx0XHRcdFxcXG4rXHRyMCA9IHIyO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2luc24oY21weGNoZzMyLFxuK1x0XHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9DTVBYQ0hHLCBCUEZfUkVHXzEwLCBCUEZfUkVHXzEsIC04KSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIDMyLWJpdCBkZWYgYmVmb3JlIGEgYnJhbmNoLCB1cHBlciBoYWxmIHVzZWQgb24gb25lIGJyYW5jaCAtXHUwMDNlIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcInc2ID0gMzJ7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9jZmdfaGlfdXNlZF9vbmVfYnJhbmNoKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHR3NiA9IDMyO1x0XHRcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIGwwXyU9O1x0XHRcdFx0XFxcbitcdHIwID0gcjY7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rbDBfJT06XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIHIxJ3MgdXBwZXIgaGFsZiBpcyBkZWFkLCBzbyAndzEgPSAxJyBtdXN0IE5PVCBiZSBtYXJrZWQgZm9yIHplcm8gZXh0ZW5zaW9uLiAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbm90X21zZyhcIncxID0gMXt7Lip9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCBub196ZXh0X290aGVyX3JlZ19oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0cjYgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XFxcbitcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSByNjtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogTERfQUJTIGRlZmluZXMgcjA7IHdoZW4gcjAgaXMgcmVhZCBhcyA2NC1iaXQgaXQgbXVzdCBiZSB6ZXJvIGV4dGVuZGVkICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJyMCA9ICoodTggKilza2JbMF17ey4qfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9sZF9hYnNfaGlfdXNlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHI2ID0gcjE7XHRcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTggKilza2JbMF07XHRcdFx0XHRcXFxuK1x0cjcgPSByMDtcdFx0XHRcdFx0XFxcbitcdHIwID0gcjc7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogSGVscGVyIHBhcmFtZXRlcnMgYXJlIHJlYWQgYXMgNjQtYml0IChjYWxsX3VzZV9tYXNrKCkgZmFsbGJhY2spICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJ3MiA9IDF7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgaGVscGVyX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMSA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIxICs9IC04O1x0XHRcdFx0XHRcXFxuK1x0dzIgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX3RyYWNlX3ByaW50a107XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl90cmFjZV9wcmludGspXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitzdGF0aWMgX191c2VkIF9fbmFrZWQgaW50IHN1YnByb2dfcmVhZHNfYXJnX2FzXzY0Yml0KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBzdWJwcm9ncmFtIHBhcmFtZXRlcnMgYXJlIGNvbnNlcnZhdGl2ZWx5IHJlYWQgYXMgNjQtYml0ICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJ3MSA9IHcwe3sgK319OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIHN1YnByb2dfcGFyYW1fcmVhZF9hc182NGJpdCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0dzEgPSB3MDtcdFx0XHRcdFx0XFxcbitcdGNhbGwgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQ7XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rZXh0ZXJuIGxvbmcgYnBmX2tmdW5jX2NhbGxfdGVzdDQoc2lnbmVkIGNoYXIgYSwgc2hvcnQgYiwgaW50IGMsIGxvbmcgZCkgX19rc3ltO1xuK1xuKy8qIEZvcmNlIGtmdW5jIGV4dGVybiBCVEYgZ2VuZXJhdGlvbi4gKi9cbitpbnQgX19rZnVuY19idGZfcm9vdCh2b2lkKVxuK3tcbitcdHJldHVybiBicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTtcbit9XG4rXG4rLyoga2Z1bmMgcGFyYW1ldGVycyBhcmUgcmVhZCBhY2NvcmRpbmcgdG8gdGhlaXIgQlRGIHR5cGUgd2lkdGggKi9cbitTRUMoXCJ0Y1wiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbm90X21zZyhcInczID0gMXt7Lip9fTsgemV4dFwiKVx0XHQvKiBpbnQgYyAgLVx1MDAzZSByZWFkIGFzIDMyLWJpdCAqL1xuK19fbXNnKFwidzQgPSAxe3sgK319OyB6ZXh0XCIpXHRcdC8qIGxvbmcgZCAtXHUwMDNlIHJlYWQgYXMgNjQtYml0ICovXG4rX19uYWtlZCB2b2lkIGtmdW5jX3BhcmFtX3JlYWRfcGVyX2J0Zih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0dzIgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHR3MyA9IDE7XHRcdFx0XHRcdFx0XFxcbitcdHc0ID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCBicGZfa2Z1bmNfY2FsbF90ZXN0NDtcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6Mzk6NDYuNjgzNDMzNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjk2MTU2Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIExpdmVuZXNzIGFuZCBaZXJvLUV4dGVuc2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBCUEYgdmVyaWZpZXIgYW5kIGl0J3MgYSBwcmV0dHkgc3Vic3RhbnRpYWwgb3ZlcmhhdWwgb2YgaG93IHplcm8tZXh0ZW5zaW9uIGlzIGhhbmRsZWQuIFByZXZpb3VzbHksIHRoZSBgc3VicmVnX2RlZmAgd2FzIHRyYWNrZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBgYnBmX3JlZ19zdGF0ZWAsIGJ1dCBub3csIHRoZXkndmUgcHVsbGVkIHRoYXQgb3V0IGFuZCBhcmUgY2FsY3VsYXRpbmcgdGhlIHplcm8tZXh0ZW5zaW9uIGR5bmFtaWNhbGx5LCB1c2luZyBsaXZlbmVzcyBhbmFseXNpcyB0aHJvdWdoIGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AuIEludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHRoZSBsaXZlbmVzcyBhbmFseXNpcyBpdHNlbGYgaGFzIHRvIGJlIGZhciBtb3JlIG51YW5jZWQuXG5cbk15IGZvY3VzIGlzIG9uIGhvdyB0aGV54oCZdmUgYWNoaWV2ZWQgdGhpcy4gVGhleSd2ZSBpbnRyb2R1Y2VkIGEgbmV3IHN0cnVjdHVyZSwgYGJwZl9pbnNuX2RlZjMyYCwgYW5kIHRoZXkndmUgbW9kaWZpZWQgYGNvbXB1dGVfaW5zbl9saXZlX3JlZ3NgIHRvIHRyYWNrIHRoZSB1c2UgYW5kIGRlZmluaXRpb24gb2YgMzItYml0IHZlcnN1cyA2NC1iaXQgcmVnaXN0ZXJzIGV4cGxpY2l0bHkuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIHdheSBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIG5vdyB0cmFja3MgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBsaXZlbmVzcyBzZXBhcmF0ZWx5LCB1c2luZyBhIDMyLWJpdCBtYXNrIGZvciBlYWNoIHJlZ2lzdGVyLiBFc3NlbnRpYWxseSwgdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIG1hc2sgd2lsbCByZXByZXNlbnQgMzItYml0IHVzYWdlIGFuZCB0aGUgdXBwZXIgMTYgZm9yIDY0LWJpdC4gVGhpcyBoYXMgcHJvcGFnYXRlZCBvdXR3YXJkcyB0byBtb2RpZnlpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZmllbGRzIGB1c2VgLCBgZGVmYCwgYGluYCwgYW5kIGBvdXRgIGluIHRoZSBgaW5zbl9saXZlX3JlZ3NgIHRvIGJlIGB1MzJgIGluc3RlYWQgb2YgYHUxNmAuXG5cblRoZSBhZGRpdGlvbiBvZiBgY2FsbF91c2VfbWFza2AgaXMgY2xldmVyLiBJdCBpbmZlcnMgdGhlIHVzZSBtYXNrIGJhc2VkIG9uIHRoZSBudW1iZXIgYW5kIHNpemVzIG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMuIEFuZCwgb2YgY291cnNlLCB0aGVyZSdzIGBicGZfaW5zbl9kZWYzMmAsIHdoaWNoIGV4cGxpY2l0bHkgY2hlY2tzIGlmIGFuIGluc3RydWN0aW9uIGRlZmluZXMgYSAzMi1iaXQgc3VicmVnaXN0ZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGB6ZXh0X2RzdGAgaXMgYmVpbmcgc2V0IGluIGBpbnNuX2F1eGAgZHVyaW5nIGxpdmVuZXNzIGFuYWx5c2lzIGlmIGEgMzItYml0IHN1YnJlZ2lzdGVyIGlzIGRlZmluZWQgYW5kIGl0cyB1cHBlciBoYWxmIHJlbWFpbnMgXCJhbGl2ZVwiIGFmdGVyIHRoZSBpbnN0cnVjdGlvbi5cblxuVGhpcyBpcyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIHRoZSB2ZXJpZmllcidzIGFwcHJvYWNoIHRvIGxpdmVuZXNzIGFuZCB6ZXJvLWV4dGVuc2lvbiB0cmFja2luZy4gSXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSB0aG9yb3VnaGx5IGZ1enplZC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIHdpdGggZXhpc3RpbmcgQlBGIHByb2dyYW1zIGlzIGltcGFjdGVkLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBzeW1ib2xzIHNvIEkgY2FuIGZvY3VzIG15IHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBlZmZvcnRzOiBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgLCBgY29tcHV0ZV9pbnNuX2xpdmVfcmVnc2AsIGBjYWxsX3VzZV9tYXNrYCwgYGJwZl9pbnNuX2RlZjMyYCwgYW5kIG9mIGNvdXJzZSBgYnBmX2lzX3JlZzY0YC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEJQRiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gbW9zdCBmdXp6aW5nIGNvbmZpZ3MsIGJ1dCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3JpdGljYWwgb25lLiBHaXZlbiB0aGF0IGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AgaXMgcGFydCBvZiBga2VybmVsL2JwZi9saXZlbmVzcy5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhY3RpdmUuIEnigJlsbCBxdWlja2x5IHZlcmlmeSB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6Mzk6NTQuOTc5NTkyMzE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODMxMDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjA5Nj1zdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjI1NC0gKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjI1NTppbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjI1Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5Mzg9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxMDMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTA0OlxcdHJldCA9IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTA1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDozOTo1NS4wOTc5MjY5MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYxOTU2MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgUmVnaXN0ZXIgTGl2ZW5lc3MqKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIGlzIGNhbGxlZCBieSBgYnBmX2NoZWNrYC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggcmVnaXN0ZXIgbGl2ZW5lc3MgYW5hbHlzaXMsIHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIEJQRiBieXRlY29kZSB2ZXJpZmljYXRpb24uIFRoZSBrZXJuZWwgbmVlZHMgdG8gZW5zdXJlIHJlZ2lzdGVycyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgdGhyb3VnaG91dCB0aGUgZXhlY3V0aW9uIG9mIGEgQlBGIHByb2dyYW0gdG8gZ3VhcmFudGVlIHNhZmV0eSBhbmQgcHJldmVudCBleHBsb2l0cy5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGlzIGxpdmVuZXNzIGFuYWx5c2lzLiBJIGtub3cgdGhhdCBgbGl2ZW5lc3MuY2AgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIGxvZ2ljLCBzbyBsZXQncyBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBLbm93aW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2hlcmUgdGhpcyBhbmFseXNpcyBpcyBlbmFibGVkLCBhbmQgcG90ZW50aWFsbHkgaG93IGl0J3Mgb3B0aW1pemVkLiBJcyB0aGlzIGZlYXR1cmUgZW5hYmxlZCBieSBkZWZhdWx0PyBJcyB0aGVyZSBhIGRlYnVnIGZsYWc/IEtub3dpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkZWVwbHkgSSBjYW4gZGlnLCBhbmQgd2hhdCBJIG1pZ2h0IGJlIGFibGUgdG8gaW5mbHVlbmNlIGR1cmluZyBrZXJuZWwgZGV2ZWxvcG1lbnQsIG9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDozOTo1OS4zNTk4ODU0NjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM4NDEzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGl2ZW5lc3Mub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6Mzk6NTkuNDIzNzYwNzM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMTE0OTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gQlBGIENvbmZpZ3VyYXRpb24gYW5kIEluc3RydWN0aW9uIEFuYWx5c2lzKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBCUEYsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCdzIHRoZSBrZXkgZW5hYmxpbmcgc3dpdGNoIGZvciB0aGUgd2hvbGUgQlBGIHN5c2NhbGwgaW50ZXJmYWNlLCBzbyBpdCdzIHRoZSBmaXJzdCB0aGluZyBJJ2QgY2hlY2sgd2hlbiBkZWJ1Z2dpbmcgb3IgZXhwbG9yaW5nIEJQRiBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoZXNlIGluc3RydWN0aW9ucyBhcmUgdHJlYXRlZC4gTGV0J3MgZGVsdmUgaW50byBgYnBmX2luc25fZGVmMzJgLiBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIG9mIDMyLWJpdCBCUEYgaW5zdHJ1Y3Rpb25zIHJlc2lkZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGVmaW5pdGlvbiB3b3JrcyBhbmQgd2hhdCBpdCBtZWFucyBmb3IgaW5zdHJ1Y3Rpb24gc2V0cy4gQW5kLCBvZiBjb3Vyc2UsIEknbGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhlIFwibGl2ZSByZWdpc3RlcnNcIiBhcmUgY29tcHV0ZWQuIFRoaXMgaXMgbGlrZWx5IGRvbmUgYnkgYGNvbXB1dGVfaW5zbl9saXZlX3JlZ3NgLiBVbmRlcnN0YW5kaW5nIHJlZ2lzdGVyIGxpdmVuZXNzIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3Igb3B0aW1pemF0aW9uIGFuZCB2ZXJpZnlpbmcgdGhlIGNvcnJlY3RuZXNzIG9mIEJQRiBwcm9ncmFtcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhvc2UgY2FsY3VsYXRpb25zLCBiZWNhdXNlIHJlZ2lzdGVyIG1pc3VzZSBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgQlBGIHByb2dyYW0gZmFpbHVyZXMuIFRoZSBwcm9ncmFtIHJlbGllcyBvbiB2YWxpZCByZWdpc3RlciB1c2UuIFRpbWUgdG8gZ28gb3ZlciB0aG9zZSBkZXRhaWxzIGFnYWluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk5OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjQwOjAzLjMzNDkxMzUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDQ1NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnNuX2RlZjMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmM9MjQ9c3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUwLSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NTE6aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUyLXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTYyPXN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NC1cXHQgKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NTpcXHRkYXRhW29mZl0uemV4dF9kc3QgPSBicGZfaW5zbl9kZWYzMihpbnNuICsgb2ZmICsgY250IC0gMSkgXFx1MDAzZT0gMDtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3Ni1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg2LVxcdFxcdGRhdGFbaV0uc2VlbiA9IG9sZF9zZWVuO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg3OlxcdFxcdGRhdGFbaV0uemV4dF9kc3QgPSBicGZfaW5zbl9kZWYzMihpbnNuICsgaSkgXFx1MDAzZT0gMDtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4OC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjI1NT1pbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMzIwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbnNuX2NudDsgKytpKSB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjIzMjE6XFx0XFx0aW50IGRlZjMyID0gYnBmX2luc25fZGVmMzIoXFx1MDAyNmluc25zW2ldKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjMyMi1cXHRcXHR1MzIgb3V0ID0gc3RhdGVbaV0ub3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDo0MDowMy4zOTg5NjQwMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODU4MDkxMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgQlBGIFZlcmlmaWVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBkZWVwLCByaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgQlBGIHZlcmlmaWVyJ3MgbG9naWMuIEl0J3MgdG91Y2hpbmcgdGhlIGNvcmUgb2YgaG93IGl0IGhhbmRsZXMgcmVnaXN0ZXIgbGl2ZW5lc3MgYW5kIHplcm8tZXh0ZW5zaW9uIHRyYWNraW5nLCB3aGljaCBpcyAqY3JpdGljYWwqIGZvciB0aGUgc2VjdXJpdHkgYW5kIGVmZmljaWVuY3kgb2YgQlBGIHByb2dyYW1zLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiBoZXJlLlxuXG5NeSBmb2N1cyBoYXMgdG8gYmUgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AsIGBjb21wdXRlX2luc25fbGl2ZV9yZWdzYCwgYGNhbGxfdXNlX21hc2tgLCBgYnBmX2luc25fZGVmMzJgLCBhbmQgYGJwZl9pc19yZWc2NGAuIFRoZXknbGwgaWxsdW1pbmF0ZSB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgdGhlIHJlbW92YWwgb2YgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCB0aGUgc2hpZnQgdG8gZGlyZWN0IHplcm8tZXh0ZW5zaW9uIGNvbXB1dGF0aW9uIGR1cmluZyBsaXZlbmVzcyBhbmFseXNpcyBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBzaGlmdCBpbiBob3cgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgc3RhdGVzIGFyZSBtYW5hZ2VkIGFuZCBvcHRpbWl6ZWQuIExpdmVuZXNzIGFuYWx5c2lzIGlzIHdoZXJlIHRoZSB2ZXJpZmllciBkZXRlcm1pbmVzIHdoaWNoIHJlZ2lzdGVycyBhcmUgYWN0aXZlbHkgdXNlZCBhdCBkaWZmZXJlbnQgcG9pbnRzIGluIGEgQlBGIHByb2dyYW0ncyBleGVjdXRpb24sIGFuZCB0aGlzIGNoYW5nZSBjb3VsZCBoYXZlIHNlcmlvdXMgaW1wbGljYXRpb25zIGZvciBib3RoIHRoZSBwZXJmb3JtYW5jZSBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZSAqY29ycmVjdG5lc3MqIG9mIHRoZSB2ZXJpZmljYXRpb24gcHJvY2Vzcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBJdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIGZvciB0aGlzIHNwZWNpZmljIGNoYW5nZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cbk5vdywgbGV0J3MgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3OTQsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjQwOjA5LjI1NzA1ODk3N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDMxOTIwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiLFxuICAgIFwiY29tcHV0ZV9pbnNuX2xpdmVfcmVnc1wiLFxuICAgIFwiY2FsbF91c2VfbWFza1wiLFxuICAgIFwiYnBmX2luc25fZGVmMzJcIixcbiAgICBcImJwZl9pc19yZWc2NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgemVyby1leHRlbnNpb24gdHJhY2tpbmcgbG9naWMuIEl0IHJlbW92ZXMgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCBpbnN0ZWFkIGNvbXB1dGVzIHplcm8gZXh0ZW5zaW9uIHJlcXVpcmVtZW50cyBkaXJlY3RseSBkdXJpbmcgbGl2ZW5lc3MgYW5hbHlzaXMgYnkgdHJhY2tpbmcgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgdXNlcyBzZXBhcmF0ZWx5LiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgYWZmZWN0cyBob3cgcmVnaXN0ZXIgc3RhdGVzIGFyZSB0cmFja2VkIGFuZCBvcHRpbWl6ZWQsIHdoaWNoIGlzIGEgY3JpdGljYWwgYXJlYSBmb3Igc2VjdXJpdHkgYW5kIGNvcnJlY3RuZXNzIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiLFxuICAgIFwiY29tcHV0ZV9pbnNuX2xpdmVfcmVnc1wiLFxuICAgIFwiY2FsbF91c2VfbWFza1wiLFxuICAgIFwiYnBmX2luc25fZGVmMzJcIixcbiAgICBcImJwZl9pc19yZWc2NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgemVyby1leHRlbnNpb24gdHJhY2tpbmcgbG9naWMuIEl0IHJlbW92ZXMgYHN1YnJlZ19kZWZgIGZyb20gYGJwZl9yZWdfc3RhdGVgIGFuZCBpbnN0ZWFkIGNvbXB1dGVzIHplcm8gZXh0ZW5zaW9uIHJlcXVpcmVtZW50cyBkaXJlY3RseSBkdXJpbmcgbGl2ZW5lc3MgYW5hbHlzaXMgYnkgdHJhY2tpbmcgMzItYml0IGFuZCA2NC1iaXQgcmVnaXN0ZXIgdXNlcyBzZXBhcmF0ZWx5LiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgYWZmZWN0cyBob3cgcmVnaXN0ZXIgc3RhdGVzIGFyZSB0cmFja2VkIGFuZCBvcHRpbWl6ZWQsIHdoaWNoIGlzIGEgY3JpdGljYWwgYXJlYSBmb3Igc2VjdXJpdHkgYW5kIGNvcnJlY3RuZXNzIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxxl5[1] Phase: Succeeded StartedAt: 2026-08-02 04:40:34 +0000 UTC FinishedAt: 2026-08-02 04:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 04:40:34 +0000 UTC FinishedAt: 2026-08-02 04:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2] Phase: Succeeded StartedAt: 2026-08-02 04:40:34 +0000 UTC FinishedAt: 2026-08-02 08:27:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 04:40:34 +0000 UTC FinishedAt: 2026-08-02 08:27:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 04:40:34 +0000 UTC FinishedAt: 2026-08-02 04:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 04:40:34 +0000 UTC FinishedAt: 2026-08-02 04:40:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowqxxl5/series-workflowqxxl5-convert-artifact-2606757228/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 04:41:00 +0000 UTC FinishedAt: 2026-08-02 05:04:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 04:41:00 +0000 UTC FinishedAt: 2026-08-02 05:04:52 +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:*2c593f50-c86d-4124-a73e-1b59725aac2f,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-workflowqxxl5/series-workflowqxxl5-convert-artifact-2606757228/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": "56fa98a0-55f5-4da5-9788-21d3ae664091", "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-workflowqxxl5/series-workflowqxxl5-build-action-1803378586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 04:41:00 +0000 UTC FinishedAt: 2026-08-02 05:04:42 +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:*2c593f50-c86d-4124-a73e-1b59725aac2f,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-workflowqxxl5/series-workflowqxxl5-convert-artifact-2606757228/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": "56fa98a0-55f5-4da5-9788-21d3ae664091", "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-workflowqxxl5/series-workflowqxxl5-build-action-1803378586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 05:04:52 +0000 UTC FinishedAt: 2026-08-02 05:04:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 05:04:52 +0000 UTC FinishedAt: 2026-08-02 05:04:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 05:04:52 +0000 UTC FinishedAt: 2026-08-02 05:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 05:04:52 +0000 UTC FinishedAt: 2026-08-02 05:05:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowqxxl5/series-workflowqxxl5-convert-artifact-32495147/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 05:05:12 +0000 UTC FinishedAt: 2026-08-02 05:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 05:05:12 +0000 UTC FinishedAt: 2026-08-02 05:07:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*56fa98a0-55f5-4da5-9788-21d3ae664091,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-workflowqxxl5/series-workflowqxxl5-build-action-1803378586/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-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 05:07:14 +0000 UTC FinishedAt: 2026-08-02 05:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 05:07:14 +0000 UTC FinishedAt: 2026-08-02 05:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 05:07:14 +0000 UTC FinishedAt: 2026-08-02 05:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 05:07:14 +0000 UTC FinishedAt: 2026-08-02 05:23:04 +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:*2c593f50-c86d-4124-a73e-1b59725aac2f,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-workflowqxxl5/series-workflowqxxl5-convert-artifact-32495147/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": "747309ca-5996-445c-b2c2-b92a0321dc75", "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-workflowqxxl5/series-workflowqxxl5-build-action-584681039/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 05:07:14 +0000 UTC FinishedAt: 2026-08-02 05:22:54 +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:*2c593f50-c86d-4124-a73e-1b59725aac2f,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-workflowqxxl5/series-workflowqxxl5-convert-artifact-32495147/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": "747309ca-5996-445c-b2c2-b92a0321dc75", "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-workflowqxxl5/series-workflowqxxl5-build-action-584681039/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 05:23:04 +0000 UTC FinishedAt: 2026-08-02 05:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 05:23:04 +0000 UTC FinishedAt: 2026-08-02 05:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 05:23:04 +0000 UTC FinishedAt: 2026-08-02 05:25:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 05:23:04 +0000 UTC FinishedAt: 2026-08-02 05:24:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*747309ca-5996-445c-b2c2-b92a0321dc75,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-workflowqxxl5/series-workflowqxxl5-build-action-584681039/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-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 05:25:04 +0000 UTC FinishedAt: 2026-08-02 08:27:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 05:25:04 +0000 UTC FinishedAt: 2026-08-02 08:27:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},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:*56fa98a0-55f5-4da5-9788-21d3ae664091,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*747309ca-5996-445c-b2c2-b92a0321dc75,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-workflowqxxl5/series-workflowqxxl5-build-action-1803378586/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-workflowqxxl5/series-workflowqxxl5-build-action-584681039/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 05:25:04 +0000 UTC FinishedAt: 2026-08-02 05:25:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 05:25:04 +0000 UTC FinishedAt: 2026-08-02 05:25:08 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},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-workflowqxxl5/series-workflowqxxl5-convert-artifact-646533700/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 05:25:04 +0000 UTC FinishedAt: 2026-08-02 05:25:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 05:25:04 +0000 UTC FinishedAt: 2026-08-02 05:25:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 05:25:04 +0000 UTC FinishedAt: 2026-08-02 05:25:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 05:25:14 +0000 UTC FinishedAt: 2026-08-02 08:27:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxxl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","compute_insn_live_regs","call_use_mask","bpf_insn_def32","bpf_is_reg64"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"fa901743-3083-420d-91a6-087a9ca7fd9b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 05:25:14 +0000 UTC FinishedAt: 2026-08-02 08:27:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*56fa98a0-55f5-4da5-9788-21d3ae664091,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*747309ca-5996-445c-b2c2-b92a0321dc75,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-workflowqxxl5/series-workflowqxxl5-build-action-1803378586/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-workflowqxxl5/series-workflowqxxl5-build-action-584681039/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-workflowqxxl5/series-workflowqxxl5-convert-artifact-646533700/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,}