Name: series-workflowq7swf Phase: Succeeded StartedAt: 2026-07-31 14:05:41 +0000 UTC FinishedAt: 2026-07-31 18:03:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[0] Phase: Succeeded StartedAt: 2026-07-31 14:05:41 +0000 UTC FinishedAt: 2026-07-31 14:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 14:05:41 +0000 UTC FinishedAt: 2026-07-31 14:25:55 +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": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS" ], "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": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS" ], "series_id": "2fadc6e5-e826-40c7-b066-b0287e2a10f6" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_find_vma", "bpf_get_stackid", "bpf_get_stackid_pe", "bpf_get_stack", "bpf_get_stack_sleepable", "bpf_get_task_stack", "bpf_get_task_stack_sleepable", "bpf_get_stack_pe" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpbmRfdm1hJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tpZCYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNraWRfcGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFjayYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3BlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgYnBmX21tYXBfcmVhZF90cnlsb2NrYCBsb2dpYyB1c2VkIGJ5IEJQRiBoZWxwZXJzIHRvIHNhZmVseSBhY3F1aXJlIHRoZSBtbWFwIGxvY2sgZnJvbSBjb250ZXh0cyB3aGVyZSBJUlFzIG1heSBiZSBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgYXRvbWljX3QgYWN0aXZlYCBmbGFnIHRvIHJlc2VydmUgdGhlIGlycV93b3JrIHNsb3QuIFRoaXMgaXMgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbXMgY2FsbGluZyBoZWxwZXJzIGxpa2UgYGJwZl9maW5kX3ZtYWAsIGBicGZfZ2V0X3N0YWNraWRgLCBhbmQgYGJwZl9nZXRfc3RhY2tgLiBUaGUgY29kZSBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2FiNmEzYzE3MjYwMzA2NzdiNDVmZTk4YzU2N2NhMDVjZTY1YzI2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDE0OjIzOjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oIGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhcbmluZGV4IDVkMThkN2Q4NWJlZjkuLmQ2ZTJiNjVmNmQwNTIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhcbkBAIC00LDEyICYjNDM7NCwxNCBAQFxuIFxuICNpZm5kZWYgX19NTUFQX1VOTE9DS19XT1JLX0hfX1xuICNkZWZpbmUgX19NTUFQX1VOTE9DS19XT1JLX0hfX1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiBcbiAvKiBpcnFfd29yayB0byBydW4gbW1hcF9yZWFkX3VubG9jaygpIGluIGlycV93b3JrICovXG4gc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrIHtcbiBcdHN0cnVjdCBpcnFfd29yayBpcnFfd29yaztcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdGF0b21pY190IGFjdGl2ZTtcbiB9O1xuIFxuIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIG1tYXBfdW5sb2NrX3dvcmspO1xuQEAgLTE4LDggJiM0MzsyMCw4IEBAIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIG1tYXBfdW5sb2NrX3dvcmspO1xuICAqIFdlIGNhbm5vdCBkbyBtbWFwX3JlYWRfdW5sb2NrKCkgd2hlbiB0aGUgaXJxIGlzIGRpc2FibGVkLCBiZWNhdXNlIG9mXG4gICogcmlzayB0byBkZWFkbG9jayB3aXRoIHJxX2xvY2suIFRvIGxvb2sgdXAgdm1hIHdoZW4gdGhlIGlycXMgYXJlXG4gICogZGlzYWJsZWQsIHdlIG5lZWQgdG8gcnVuIG1tYXBfcmVhZF91bmxvY2soKSBpbiBpcnFfd29yay4gV2UgdXNlIGFcbi0gKiBwZXJjcHUgdmFyaWFibGUgdG8gZG8gdGhlIGlycV93b3JrLiBJZiB0aGUgaXJxX3dvcmsgaXMgYWxyZWFkeSB1c2VkXG4tICogYnkgYW5vdGhlciBsb29rdXAsIHdlIGZhbGwgb3Zlci5cbiYjNDM7ICogcGVyY3B1IHZhcmlhYmxlIHRvIGRvIHRoZSBpcnFfd29yay4gVGhlIGFjdGl2ZSBmbGFnIHJlc2VydmVzIHRoZSBzbG90XG4mIzQzOyAqIGJlZm9yZSBtbWFwX3JlYWRfdHJ5bG9jaygpIGFuZCB1bnRpbCB0aGUgaXJxX3dvcmsgY2FsbGJhY2sgY29uc3VtZXMgbW0uXG4gICovXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29ya19wdHIpXG4ge1xuQEAgLTI5LDkgJiM0MzszMSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqKndvXG4gXHRpZiAoaXJxc19kaXNhYmxlZCgpKSB7XG4gXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcbiBcdFx0XHR3b3JrID0gdGhpc19jcHVfcHRyKFx1MDAyNm1tYXBfdW5sb2NrX3dvcmspO1xuLVx0XHRcdGlmIChpcnFfd29ya19pc19idXN5KFx1MDAyNndvcmstXHUwMDNlaXJxX3dvcmspKSB7XG4tXHRcdFx0XHQvKiBjYW5ub3QgcXVldWUgbW9yZSB1cF9yZWFkLCBmYWxsYmFjayAqL1xuJiM0MztcdFx0XHRpZiAoYXRvbWljX2NtcHhjaGdfYWNxdWlyZShcdTAwMjZ3b3JrLVx1MDAzZWFjdGl2ZSwgMCwgMSkpIHtcbiBcdFx0XHRcdGlycV93b3JrX2J1c3kgPSB0cnVlO1xuJiM0MztcdFx0XHRcdHdvcmsgPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuQEAgLTQ2LDYgJiM0Mzs0OCwzMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b1xuIFx0cmV0dXJuIGlycV93b3JrX2J1c3k7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWRcbiYjNDM7YnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRpZiAod29yaylcbiYjNDM7XHRcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZ3b3JrLVx1MDAzZWFjdGl2ZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRyeSB0byB0YWtlIG1tLVx1MDAzZW1tYXBfbG9jayBmb3IgcmVhZGluZyBvbiBiZWhhbGYgb2YgYSBCUEYgaGVscGVyIHRoYXQgbWF5XG4mIzQzOyAqIHJ1biB3aXRoIElSUXMgZGlzYWJsZWQuIE9uIHN1Y2Nlc3MsICp3b3JrIGlzIHRoZSBzbG90IHRvIGhhbmQgdG9cbiYjNDM7ICogYnBmX21tYXBfdW5sb2NrX21tKCkgKE5VTEwgd2hlbiB0aGUgdW5sb2NrIGNhbiBiZSBkb25lIGlubGluZSk7IG9uIGZhaWx1cmVcbiYjNDM7ICogbm8gc2xvdCBzdGF5cyByZXNlcnZlZCBhbmQgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF9yZWFkX3RyeWxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29yaylcbiYjNDM7e1xuJiM0MztcdGlmIChicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHdvcmspKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkge1xuJiM0MztcdFx0YnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yaygqd29yayk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX21tYXBfdW5sb2NrX21tKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqd29yaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIFx0aWYgKCF3b3JrKSB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCA0MWZlODdkNzMwMmYyLi4xNjZmYzhlZmFiOGIyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbkBAIC00MTUsNyAmIzQzOzQxNSw2IEBAIHN0YXRpYyB2b2lkIHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnMsXG4gXHRcdFx0XHRcdCAgdTMyIHRyYWNlX25yLCBib29sIHVzZXIsIGJvb2wgbWF5X2ZhdWx0KVxuIHtcbiBcdHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqd29yayA9IE5VTEw7XG4tXHRib29sIGlycV93b3JrX2J1c3kgPSBicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKFx1MDAyNndvcmspO1xuIFx0Ym9vbCBoYXNfdXNlcl9jdHggPSB1c2VyIFx1MDAyNlx1MDAyNiBjdXJyZW50IFx1MDAyNlx1MDAyNiBjdXJyZW50LVx1MDAzZW1tO1xuIFx0c3RydWN0IHN0YWNrX21hcF9idWlsZF9pZF9jYWNoZSBjYWNoZSA9IHt9O1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5AQCAtNDMwLDcgJiM0Mzs0MjksNyBAQCBzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLFxuIFx0ICogZmFsbGJhY2sgaXMgdXNlZCBmb3Iga2VybmVsIHN0YWNrICghdXNlcikgb24gYSBzdGFja21hcCB3aXRoXG4gXHQgKiBidWlsZF9pZC5cbiBcdCAqL1xuLVx0aWYgKCFoYXNfdXNlcl9jdHggfHwgaXJxX3dvcmtfYnVzeSB8fCAhbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cdTAwM2VtbSkpIHtcbiYjNDM7XHRpZiAoIWhhc191c2VyX2N0eCB8fCAhYnBmX21tYXBfcmVhZF90cnlsb2NrKGN1cnJlbnQtXHUwMDNlbW0sIFx1MDAyNndvcmspKSB7XG4gXHRcdC8qIGNhbm5vdCBhY2Nlc3MgY3VycmVudC1cdTAwM2VtbSwgZmFsbCBiYWNrIHRvIGlwcyAqL1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cmFjZV9ucjsgaSYjNDM7JiM0MzspXG4gXHRcdFx0c3RhY2tfbWFwX2J1aWxkX2lkX3NldF9pcChcdTAwMjZpZF9vZmZzW2ldKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jIGIva2VybmVsL2JwZi90YXNrX2l0ZXIuY1xuaW5kZXggYjI1NmZiOWMxMjE0ZS4uZTY2ZTM0ODRmOTIzZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbkBAIC03NTUsNyAmIzQzOzc1NSw2IEBAIEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdTY0LCBzdGFydCxcbiB7XG4gXHRzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmsgPSBOVUxMO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHRib29sIGlycV93b3JrX2J1c3kgPSBmYWxzZTtcbiBcdGJvb2wgX19tYXliZV91bnVzZWQgbW1wdXRfbmVlZGVkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdGludCByZXQgPSAtRU5PRU5UO1xuQEAgLTc5Miw5ICYjNDM7NzkxLDcgQEAgQlBGX0NBTExfNShicGZfZmluZF92bWEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB1NjQsIHN0YXJ0LFxuIFx0aWYgKCFtbSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4tXHRpcnFfd29ya19idXN5ID0gYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhcdTAwMjZ3b3JrKTtcbi1cbi1cdGlmIChpcnFfd29ya19idXN5IHx8ICFtbWFwX3JlYWRfdHJ5bG9jayhtbSkpIHtcbiYjNDM7XHRpZiAoIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhtbSwgXHUwMDI2d29yaykpIHtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xMTkxLDYgJiM0MzsxMTg4LDggQEAgc3RhdGljIHZvaWQgZG9fbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgaXJxX3dvcmsgKmVudHJ5KVxuIFxuIFx0d29yayA9IGNvbnRhaW5lcl9vZihlbnRyeSwgc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrLCBpcnFfd29yayk7XG4gXHRtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcih3b3JrLVx1MDAzZW1tKTtcbiYjNDM7XHR3b3JrLVx1MDAzZW1tID0gTlVMTDtcbiYjNDM7XHRicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKHdvcmspO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCB0YXNrX2l0ZXJfaW5pdCh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9maW5kX3ZtYSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNraWQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja2lkX3BlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19wZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGJwZl9tbWFwX3JlYWRfdHJ5bG9ja2AgbG9naWMgdXNlZCBieSBCUEYgaGVscGVycyB0byBzYWZlbHkgYWNxdWlyZSB0aGUgbW1hcCBsb2NrIGZyb20gY29udGV4dHMgd2hlcmUgSVJRcyBtYXkgYmUgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSBuZXcgYGF0b21pY190IGFjdGl2ZWAgZmxhZyB0byByZXNlcnZlIHRoZSBpcnFfd29yayBzbG90LiBUaGlzIGlzIGNvcmUgQlBGIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgaGVscGVycyBsaWtlIGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYW5kIGBicGZfZ2V0X3N0YWNrYC4gVGhlIGNvZGUgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdhYjZhM2MxNzI2MDMwNjc3YjQ1ZmU5OGM1NjdjYTA1Y2U2NWMyNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAxNDoyMzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oIGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmgKaW5kZXggNWQxOGQ3ZDg1YmVmOS4uZDZlMmI2NWY2ZDA1MiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmgKQEAgLTQsMTIgJiM0Mzs0LDE0IEBACiAKICNpZm5kZWYgX19NTUFQX1VOTE9DS19XT1JLX0hfXwogI2RlZmluZSBfX01NQVBfVU5MT0NLX1dPUktfSF9fCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiAKIC8qIGlycV93b3JrIHRvIHJ1biBtbWFwX3JlYWRfdW5sb2NrKCkgaW4gaXJxX3dvcmsgKi8KIHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayB7CiAJc3RydWN0IGlycV93b3JrIGlycV93b3JrOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlhdG9taWNfdCBhY3RpdmU7CiB9OwogCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrLCBtbWFwX3VubG9ja193b3JrKTsKQEAgLTE4LDggJiM0MzsyMCw4IEBAIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIG1tYXBfdW5sb2NrX3dvcmspOwogICogV2UgY2Fubm90IGRvIG1tYXBfcmVhZF91bmxvY2soKSB3aGVuIHRoZSBpcnEgaXMgZGlzYWJsZWQsIGJlY2F1c2Ugb2YKICAqIHJpc2sgdG8gZGVhZGxvY2sgd2l0aCBycV9sb2NrLiBUbyBsb29rIHVwIHZtYSB3aGVuIHRoZSBpcnFzIGFyZQogICogZGlzYWJsZWQsIHdlIG5lZWQgdG8gcnVuIG1tYXBfcmVhZF91bmxvY2soKSBpbiBpcnFfd29yay4gV2UgdXNlIGEKLSAqIHBlcmNwdSB2YXJpYWJsZSB0byBkbyB0aGUgaXJxX3dvcmsuIElmIHRoZSBpcnFfd29yayBpcyBhbHJlYWR5IHVzZWQKLSAqIGJ5IGFub3RoZXIgbG9va3VwLCB3ZSBmYWxsIG92ZXIuCiYjNDM7ICogcGVyY3B1IHZhcmlhYmxlIHRvIGRvIHRoZSBpcnFfd29yay4gVGhlIGFjdGl2ZSBmbGFnIHJlc2VydmVzIHRoZSBzbG90CiYjNDM7ICogYmVmb3JlIG1tYXBfcmVhZF90cnlsb2NrKCkgYW5kIHVudGlsIHRoZSBpcnFfd29yayBjYWxsYmFjayBjb25zdW1lcyBtbS4KICAqLwogc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29ya19wdHIpCiB7CkBAIC0yOSw5ICYjNDM7MzEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3bwogCWlmIChpcnFzX2Rpc2FibGVkKCkpIHsKIAkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkgewogCQkJd29yayA9IHRoaXNfY3B1X3B0cigmYW1wO21tYXBfdW5sb2NrX3dvcmspOwotCQkJaWYgKGlycV93b3JrX2lzX2J1c3koJmFtcDt3b3JrLSZndDtpcnFfd29yaykpIHsKLQkJCQkvKiBjYW5ub3QgcXVldWUgbW9yZSB1cF9yZWFkLCBmYWxsYmFjayAqLwomIzQzOwkJCWlmIChhdG9taWNfY21weGNoZ19hY3F1aXJlKCZhbXA7d29yay0mZ3Q7YWN0aXZlLCAwLCAxKSkgewogCQkJCWlycV93b3JrX2J1c3kgPSB0cnVlOwomIzQzOwkJCQl3b3JrID0gTlVMTDsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC00Niw2ICYjNDM7NDgsMzMgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd28KIAlyZXR1cm4gaXJxX3dvcmtfYnVzeTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZAomIzQzO2JwZl9tbWFwX3VubG9ja19wdXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICp3b3JrKQomIzQzO3sKJiM0MzsJaWYgKHdvcmspCiYjNDM7CQlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDt3b3JrLSZndDthY3RpdmUsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRyeSB0byB0YWtlIG1tLSZndDttbWFwX2xvY2sgZm9yIHJlYWRpbmcgb24gYmVoYWxmIG9mIGEgQlBGIGhlbHBlciB0aGF0IG1heQomIzQzOyAqIHJ1biB3aXRoIElSUXMgZGlzYWJsZWQuIE9uIHN1Y2Nlc3MsICp3b3JrIGlzIHRoZSBzbG90IHRvIGhhbmQgdG8KJiM0MzsgKiBicGZfbW1hcF91bmxvY2tfbW0oKSAoTlVMTCB3aGVuIHRoZSB1bmxvY2sgY2FuIGJlIGRvbmUgaW5saW5lKTsgb24gZmFpbHVyZQomIzQzOyAqIG5vIHNsb3Qgc3RheXMgcmVzZXJ2ZWQgYW5kIHRoZSBjYWxsZXIgbXVzdCBmYWxsIGJhY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3JlYWRfdHJ5bG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCQkJCSBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b3JrKQomIzQzO3sKJiM0MzsJaWYgKGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsod29yaykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7CiYjNDM7CQlicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKCp3b3JrKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX21tYXBfdW5sb2NrX21tKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqd29yaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJaWYgKCF3b3JrKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKaW5kZXggNDFmZTg3ZDczMDJmMi4uMTY2ZmM4ZWZhYjhiMiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuYwpAQCAtNDE1LDcgJiM0Mzs0MTUsNiBAQCBzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLAogCQkJCQkgIHUzMiB0cmFjZV9uciwgYm9vbCB1c2VyLCBib29sIG1heV9mYXVsdCkKIHsKIAlzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmsgPSBOVUxMOwotCWJvb2wgaXJxX3dvcmtfYnVzeSA9IGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoJmFtcDt3b3JrKTsKIAlib29sIGhhc191c2VyX2N0eCA9IHVzZXIgJmFtcDsmYW1wOyBjdXJyZW50ICZhbXA7JmFtcDsgY3VycmVudC0mZ3Q7bW07CiAJc3RydWN0IHN0YWNrX21hcF9idWlsZF9pZF9jYWNoZSBjYWNoZSA9IHt9OwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwpAQCAtNDMwLDcgJiM0Mzs0MjksNyBAQCBzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLAogCSAqIGZhbGxiYWNrIGlzIHVzZWQgZm9yIGtlcm5lbCBzdGFjayAoIXVzZXIpIG9uIGEgc3RhY2ttYXAgd2l0aAogCSAqIGJ1aWxkX2lkLgogCSAqLwotCWlmICghaGFzX3VzZXJfY3R4IHx8IGlycV93b3JrX2J1c3kgfHwgIW1tYXBfcmVhZF90cnlsb2NrKGN1cnJlbnQtJmd0O21tKSkgewomIzQzOwlpZiAoIWhhc191c2VyX2N0eCB8fCAhYnBmX21tYXBfcmVhZF90cnlsb2NrKGN1cnJlbnQtJmd0O21tLCAmYW1wO3dvcmspKSB7CiAJCS8qIGNhbm5vdCBhY2Nlc3MgY3VycmVudC0mZ3Q7bW0sIGZhbGwgYmFjayB0byBpcHMgKi8KIAkJZm9yIChpID0gMDsgaSAmbHQ7IHRyYWNlX25yOyBpJiM0MzsmIzQzOykKIAkJCXN0YWNrX21hcF9idWlsZF9pZF9zZXRfaXAoJmFtcDtpZF9vZmZzW2ldKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdGFza19pdGVyLmMgYi9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jCmluZGV4IGIyNTZmYjljMTIxNGUuLmU2NmUzNDg0ZjkyM2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90YXNrX2l0ZXIuYwpAQCAtNzU1LDcgJiM0Mzs3NTUsNiBAQCBCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsCiB7CiAJc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICp3b3JrID0gTlVMTDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlib29sIGlycV93b3JrX2J1c3kgPSBmYWxzZTsKIAlib29sIF9fbWF5YmVfdW51c2VkIG1tcHV0X25lZWRlZCA9IGZhbHNlOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWludCByZXQgPSAtRU5PRU5UOwpAQCAtNzkyLDkgJiM0Mzs3OTEsNyBAQCBCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsCiAJaWYgKCFtbSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlpcnFfd29ya19idXN5ID0gYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yaygmYW1wO3dvcmspOwotCi0JaWYgKGlycV93b3JrX2J1c3kgfHwgIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkgewomIzQzOwlpZiAoIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhtbSwgJmFtcDt3b3JrKSkgewogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTExOTEsNiAmIzQzOzExODgsOCBAQCBzdGF0aWMgdm9pZCBkb19tbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBpcnFfd29yayAqZW50cnkpCiAKIAl3b3JrID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIGlycV93b3JrKTsKIAltbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcih3b3JrLSZndDttbSk7CiYjNDM7CXdvcmstJmd0O21tID0gTlVMTDsKJiM0MzsJYnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayh3b3JrKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgdGFza19pdGVyX2luaXQodm9pZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgUGF0Y2ggZm9yIFJlYWNoYWJpbGl0eSBhbmQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjb3JlIEJQRiBhcmVhczogYG1tYXBfdW5sb2NrX3dvcmsuaGAsIGBzdGFja21hcC5jYCwgYW5kIGB0YXNrX2l0ZXIuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGFuIGBhdG9taWNfdCBhY3RpdmVgIHRvIGBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmtgLiBUaGUgaW50ZW50IHNlZW1zIHRvIGJlIHJlc2VydmluZyB0aGUgSVJRIHdvcmsgc2xvdCB3aXRoIHRoaXMgbmV3IGF0b21pYyBiZWZvcmUgdGhlIGBtbWFwX3JlYWRfdHJ5bG9jaygpYCBjYWxsLCBob2xkaW5nIGl0IHVudGlsIHRoZSBjYWxsYmFjayBjb25zdW1lcyB0aGUgbWVtb3J5IG1hcC4gVGhleSYjMzk7dmUgYWxzbyBhZGRlZCBvciBtb2RpZmllZCBhIGZldyBmdW5jdGlvbnM6IGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgLCBgYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29ya2AsIGFuZCBgYnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29ya2AuIEl0JiMzOTtzIGFsc28gbWFraW5nIGNoYW5nZXMgdG8gYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBhbmQgYGJwZl9maW5kX3ZtYWAsIHdoaWNoIGlzIGEgQlBGIGhlbHBlci4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIGlmIHRoZSBjaGFuZ2VzIG1ha2Ugc2Vuc2UuIFl1cCwgQlBGIHN0YWNrbWFwcyBhbmQgdGhlIHRhc2sgaXRlcmF0b3JzIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgQlBGIGZlYXR1cmVzLiBHb29kLiBUaGlzIGlzIHNvbWV0aGluZyB3b3J0aCBkaWdnaW5nIGludG8uIFRoZSBwYXRjaCBzZWVtcyBmdW5jdGlvbmFsLCBzbyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzLiBBbHJpZ2h0LCBpdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGludGVyZXN0aW5nIGJpdHMgYXJlOgotICAgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCAodGhhdCYjMzk7cyBgc3RhdGljYCBpbiBgc3RhY2ttYXAuY2ApCi0gICBgYnBmX2ZpbmRfdm1hYCAoYSBCUEYgaGVscGVyIGluIGB0YXNrX2l0ZXIuY2ApLgotICAgYGRvX21tYXBfcmVhZF91bmxvY2tgIChzdGF0aWMsIGluIGB0YXNrX2l0ZXIuY2ApCgpIb2xkIG9uLCBJIHNlZSBgYnBmX2ZpbmRfdm1hYCBkZWZpbmVkIHdpdGggYEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCAuLi4pYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoZSBhY3R1YWwgc3ltYm9sIG5hbWUgaXMsIGJlY2F1c2UgaXQmIzM5O3MgdXN1YWxseSBqdXN0IGBicGZfZmluZF92bWFgLiBHb3R0YSBncmVwIGZvciBgYnBmX2ZpbmRfdm1hYCBhbmQgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCB0byBjb25maXJtIHRoYXQuIFRoYXQgc2hvdWxkIGdldCBtZSBzdGFydGVkIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZpbmRfdm1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMzktXHRjYXNlIEJQRl9GVU5DX2ZpbmRfdm1hOlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjI0MDpcdFx0cmV0dXJuIFx1MDAyNmJwZl9maW5kX3ZtYV9wcm90bztcbmtlcm5lbC9icGYvaGVscGVycy5jLTIyNDEtXHRkZWZhdWx0OlxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM9NzM3PXN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHRhc2tfdm1hX3JlZ19pbmZvID0ge1xuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzUyLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo3NTM6QlBGX0NBTExfNShicGZfZmluZF92bWEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB1NjQsIHN0YXJ0LFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03NTQtXHQgICBicGZfY2FsbGJhY2tfdCwgY2FsbGJhY2tfZm4sIHZvaWQgKiwgY2FsbGJhY2tfY3R4LCB1NjQsIGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtODE0LVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo4MTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9maW5kX3ZtYV9wcm90byA9IHtcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6ODE2Olx0LmZ1bmNcdFx0PSBicGZfZmluZF92bWEsXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTgxNy1cdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTYzNT1zdGF0aWMgaW50IHNldF9maW5kX3ZtYV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjM5LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NjQwOlx0LyogYnBmX2ZpbmRfdm1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGFkZHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTY0MS1cdCAqICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfZm4sIHZvaWQgKmNhbGxiYWNrX2N0eCwgdTY0IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEJQRiBGdW5jdGlvbiBEZWZpbml0aW9uKioKCkFscmlnaHQsIEkgc2VlIHRoaXMgYGJwZl9maW5kX3ZtYWAgZnVuY3Rpb24gZGVmaW5lZCB3aXRoIHRoYXQgYEJQRl9DQUxMXzVgIG1hY3JvLiBIbW0sIHRoYXQmIzM5O3Mgbm90IHRoZSB1c3VhbCB3YXkgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGl0LCBhbmQgaXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgYEJQRl9DQUxMXzVgIGlzIGV4cGFuZGluZyB0byBoZXJlLiBUaGF0IG1hY3JvIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20uIElzIHRoaXMgYSBjdXN0b20gQlBGIGhlbHBlciBjYWxsPyBJcyBpdCByZWxhdGVkIHRvIHNvbWUgc3BlY2lmaWMgQlBGIGluZnJhc3RydWN0dXJlPyBJcyBpdCB1c2luZyBhIGRpZmZlcmVudCBhcmd1bWVudCBwYXNzaW5nIGNvbnZlbnRpb24/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgbWFjcm8gZGVmaW5pdGlvbiBpdHNlbGYuIEtub3dpbmcgd2hhdCBpdCBleHBhbmRzIHRvIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgQlBGIHN5c3RlbSBhbmQgd2hhdCBraW5kIG9mIGNvbnRyb2wgaXQgaGFzIG92ZXIgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWFzIChWTUFzKS4gVGhpcyBpbml0aWFsIGxvb2sgaXMgc3VnZ2VzdGluZyB0byBtZSB0aGF0IEkgbmVlZCB0byBzdGVwIGJhY2sgYW5kIHVuZGVyc3RhbmQgdGhlIGJ1aWxkaW5nIGJsb2NrcyBiZWZvcmUgYW5hbHl6aW5nIHRoZSBmdW5jdGlvbiBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEJQRl9DQUxMXzUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTcwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgQlBGIEZ1bmN0aW9uIENhbGxzKioKCkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQlBGX0NBTExfNWAgZGVmaW5pdGlvbiBsaXZlcy4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEJQRiwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCBoZWFkZXJzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2Qgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAsIHdoaWNoIGlzIGEgY29tbW9uIHBsYWNlIGZvciBCUEYtcmVsYXRlZCBkZWZpbml0aW9ucy4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCB0aGUgbG9naWNhbCBuZXh0IHBsYWNlIHdvdWxkIGJlIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRpZ2dpbmcgaW50byBCUEYgaW5mcmFzdHJ1Y3R1cmUgYW5kIHN5c2NhbGwgaW1wbGVtZW50YXRpb25zLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGJlZ2luIG15IHNlYXJjaC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGZpbHRlci5oYCBmaXJzdCwgYW5kIGlmIHRoYXQgZG9lc24mIzM5O3QgeWllbGQgcmVzdWx0cywgSSYjMzk7bGwgbW92ZSBvbiB0byBgYnBmLmhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgQlBGX0NBTExfNSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9MjYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjgtI2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjk6I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBDYWxsIE1hY3JvKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBCUEZfQ0FMTF94YCBtYWNyby4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0IGV4cGFuZHMgdG8sIGVzcGVjaWFsbHkgd2l0aGluIHRoaXMgQlBGIGNvbnRleHQuIEtub3dpbmcgdGhlIGV4YWN0IGV4cGFuc2lvbiBpcyBjcnVjaWFsIOKAkyBpdCByZXZlYWxzIHRoZSBtZWNoYW5pc20sIHdoZXRoZXIgaXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uIGNhbGwsIGEgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UsIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSBtb3JlIGNvbXBsZXggcHJlcHJvY2Vzc29yIHRyaWNrZXJ5LiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGUgYnl0ZWNvZGUgbGV2ZWwuIEl0IGluZmx1ZW5jZXMgaG93IEkgd291bGQgYXBwcm9hY2ggZGVidWdnaW5nLCBvcHRpbWl6YXRpb24sIG9yIGV2ZW4gc2VjdXJpdHkgYW5hbHlzaXMgaWYgbmVlZGVkLiBUaW1lIHRvIGNoZWNrIHRoZSBpbmNsdWRlcywgdHJhY2UgdGhlIG1hY3JvIGRlZmluaXRpb24gYW5kIHNlZSB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEJQRl9DQUxMX3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9MjYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTAtXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYxMTojZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVx0XHRcdFx0XHQgICAgICAgXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEyLVx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjk4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAg4oCTIHRoYXQmIzM5O3MgdGhlIG5hdHVyYWwgcGxhY2UgdG8gYmVnaW4sIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDYxMS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYXJlIHN0cnVjdHVyZWQsIGFuZCBzcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gZGVmaW5pbmcgYW5kIGhhbmRsaW5nIGZpbHRlciBwcm9ncmFtcyB0aGVyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2NrczogdGhlIGluc3RydWN0aW9uIHNldCBkZWZpbml0aW9ucywgYW55IGltbWVkaWF0ZSBvciByZWdpc3RlciB2YWx1ZSByZXByZXNlbnRhdGlvbnMsIGFuZCB0aGUgbWVjaGFuaXNtcyBmb3IgcmVwcmVzZW50aW5nIHByb2dyYW0gYnJhbmNoZXMuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIHN0cnVjdHVyZXMgdGhhdCBtYWtlIHVwIHRoZSBCUEYgYnl0ZWNvZGUgYW5kIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIHRvIHRoZSBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhhY3QgbWVtb3J5IGxheW91dHMgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIGxvdy1sZXZlbCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFx0XHRcdFx0ICAgICAgKHVuc2lnbmVkIGxvbmcpMCwgKHQpMCkpKSBhXG4gNjAxOlx0I2RlZmluZSBfX0JQRl9WIHZvaWRcbiA2MDI6XHQjZGVmaW5lIF9fQlBGX05cbiA2MDM6XHRcbiA2MDQ6XHQjZGVmaW5lIF9fQlBGX0RFQ0xfQVJHUyh0LCBhKSB0ICAgYVxuIDYwNTpcdCNkZWZpbmUgX19CUEZfREVDTF9SRUdTKHQsIGEpIHU2NCBhXG4gNjA2Olx0XG4gNjA3Olx0I2RlZmluZSBfX0JQRl9QQUQobilcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYwODpcdFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxuIDYwOTpcdFx0XHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXG4gNjEwOlx0XG4gNjExOlx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEyOlx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEzOlx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXG4gNjE0Olx0XHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXG4gNjE1Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXG4gNjE2Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXG4gNjE3Olx0XHR7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYxODpcdFx0XHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXG4gNjE5Olx0XHR9XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMDpcdFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMTpcdFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxuIDYyMjpcdFxuIDYyMzpcdCNkZWZpbmUgX19OT0FUVFJcbiA2MjQ6XHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI1Olx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyNjpcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2Mjc6XHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI4Olx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyOTpcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEZ1bmN0aW9uIENhbGxzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgLi4uKWAgbWFjcm8gZGVmaW5pdGlvbi4gUmlnaHQsIGl0JiMzOTtzIGRlZmluaW5nIGJvdGggYHU2NCBicGZfZmluZF92bWEoLi4uKWAgYW5kIGEgc3RhdGljLCBpbmxpbmUgdmVyc2lvbiwgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IF9fX19icGZfZmluZF92bWEoLi4uKWAuIFRoaXMgdGVsbHMgbWUgdGhlIG5vbi1pbmxpbmVkIGZ1bmN0aW9uIGlzICpzcGVjaWZpY2FsbHkqIGBicGZfZmluZF92bWFgLiBJdCYjMzk7cyBnb29kIHRvIGtlZXAgdHJhY2sgb2YgdGhpcyBkaXN0aW5jdGlvbiBpbiBCUEYgZnVuY3Rpb25zLCBvZiB3aGljaCB0aGlzIGlzIG9uZS4KCk5vdywgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgaW4gYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHN0YXRpYyBuYXR1cmUuIFRoaXMgY291bGQgaW1wYWN0IGhvdyBpdCYjMzk7cyBoYW5kbGVkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgdmlzaWJpbGl0eS4gU28sIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiB0aGF0JiMzOTtzIGEgYHN0YXRpY2AgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVGhpcyBjb3VsZCBiZSByZWxldmFudCBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIEJQRiBjb21wb25lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhY2ttYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmM9MTgzPXN0cnVjdCBzdGFja19tYXBfY2FjaGVkX3ZtYSB7XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTE5MS0vKlxua2VybmVsL2JwZi9zdGFja21hcC5jOjE5MjogKiBQZXIgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoKSBjYWxsIGNhY2hlIG9mIHRoZSBsYXN0IFZNQSB3aXRoIGEgYnVpbGQgSURcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xOTMtICogcmVzb2x2ZWQgYW5kIHRoZSBsYXN0IFZNQSB3aXRoIG5vIHVzYWJsZSBidWlsZCBJRC4gQWRqYWNlbnQgc3RhY2sgZnJhbWVzIHRlbmRcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9MzIzPXN0YXRpYyB2b2lkIHN0YWNrX21hcF91bmxvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2spXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTMzMi1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzozMzM6c3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXRfc2xlZXBhYmxlKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnMsXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzM0LVx0XHRcdFx0XHRcdCAgICB1MzIgdHJhY2VfbnIpXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTQxMy0gKi9cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo0MTQ6c3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2Zmcyxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy00MTUtXHRcdFx0XHRcdCAgdTMyIHRyYWNlX25yLCBib29sIHVzZXIsIGJvb2wgbWF5X2ZhdWx0KVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy00MjMtXHRpZiAobWF5X2ZhdWx0IFx1MDAyNlx1MDAyNiBoYXNfdXNlcl9jdHgpIHtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo0MjQ6XHRcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0X3NsZWVwYWJsZShpZF9vZmZzLCB0cmFjZV9ucik7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDI1LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTUwNj1zdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2tpZChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy01NDUtXHRcdFx0aWRfb2Zmc1tpXS5pcCA9IGlwc1tpXTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo1NDY6XHRcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGlkX29mZnMsIHRyYWNlX25yLCB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy01NDctXHRcdHRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpO1xuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz02ODI9c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTc1Ny1cdGlmICh1c2VyX2J1aWxkX2lkKVxua2VybmVsL2JwZi9zdGFja21hcC5jOjc1ODpcdFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoYnVmLCB0cmFjZV9uciwgdXNlciwgbWF5X2ZhdWx0KTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKgoKT2theSwgc28gYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCwgd2hpY2ggaXMgZ29vZC4gSXQmIzM5O3MgbGlrZWx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZS4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIGtub3dpbmcgd2hlcmUgaXQgKmlzKiB1c2VkLCBzbyBJIGNhbiB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBSaWdodCBub3cgSSBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgYnkgYF9fYnBmX2dldF9zdGFja2lkYCBhbmQgYF9fYnBmX2dldF9zdGFja2AuIEhtbSwgYW5kIGl0IGxvb2tzIGxpa2UgYm90aCBgX19icGZfZ2V0X3N0YWNraWRgIGFuZCBgX19icGZfZ2V0X3N0YWNrYCBhcmUgYWxzbyBzdGF0aWMgZnVuY3Rpb25zLiBUaGlzIGxpbWl0cyB0aGluZ3MgYSBsaXR0bGUgYml0LiBOb3cgSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVydGhlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGNhbGwgdGhlc2UgdHdvLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIEkgbmVlZCB0byBmb2xsb3cgdGhpcyBjYWxsIGNoYWluIHVwIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIGhvdyB0aGlzIG9mZnNldCBpcyBiZWluZyB1dGlsaXplZCBpbiB0aGUgQlBGIHJ1bnRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX2dldF9zdGFja2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGFja21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhY2ttYXAuYz00NzA9Z2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTUwNS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo1MDY6c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNraWQoc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy01MDctXHRcdFx0ICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz01ODA9QlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAwLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjYwMTpcdHJldHVybiBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAyLX1cbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NjI1PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjU0LVx0XHR0cmFjZS1cdTAwM2VuciA9IG5yX2tlcm5lbDtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NTU6XHRcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NTYtXHR9IGVsc2UgeyAvKiB1c2VyICovXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2My1cdFx0ZmxhZ3MgPSAoZmxhZ3MgXHUwMDI2IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NjQ6XHRcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NjUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBCUEYgc3RhY2sgSUQgZnVuY3Rpb25zLCBiYXNlZCBvbiB0aG9zZSBub3RlczoKCioqQlBGIFN0YWNrIFRyYWNpbmcgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UgZ3JhYiBzdGFjayBJRHMgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgYnBmX2dldF9zdGFja2lkYCBhbmQgYGJwZl9nZXRfc3RhY2tpZF9wZWAgYXJlIHRoZSBjb3JlIEJQRiBoZWxwZXJzIHdlJiMzOTtyZSB1c2luZyBmb3IgZ2V0dGluZyB0aG9zZSBzdGFjayB0cmFjZXMuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCB0aGVuIEkgbm90aWNlZCBhIGJpdCBvZiBhbiBhYnN0cmFjdGlvbiBsYXllci4gSXQgbG9va3MgbGlrZSBgX19icGZfZ2V0X3N0YWNrYCBpcyB0aGUgcmVhbCB3b3JraG9yc2UsIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIHRoYXQgYm90aCBgYnBmX2dldF9zdGFja2AgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYCBjYWxsIGludG8uIFNvLCBgYnBmX2dldF9zdGFja2AgYW5kIGl0cyBQRSB2YXJpYW50IGFyZSBsaWtlbHkgd3JhcHBlcnMgb3IgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHNvbWUgaGlnaGVyLWxldmVsIGRldGFpbHMsIGJ1dCB1bHRpbWF0ZWx5IHRoZXkgcmVseSBvbiBgX19icGZfZ2V0X3N0YWNrYCB0byBhY3R1YWxseSBkbyB0aGUgaGFyZCBwYXJ0IG9mIGNhcHR1cmluZyB0aGUgc3RhY2sgZGF0YS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGNhbGxzIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2Ygc3RhY2sgdHJhY2luZyB3aXRoaW4gdGhlIEJQRiBlbnZpcm9ubWVudC4gS25vd2luZyB0aGUgaW50ZXJuYWxzIGFuZCB0aGUgaGVscGVycyBpcyBpbXBvcnRhbnQgd2hlbiB5b3UmIzM5O3JlIHdvcmtpbmcgd2l0aCB0aGlzIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19icGZfZ2V0X3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGFja21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhY2ttYXAuYz00NzA9Z2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTUwNS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo1MDY6c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNraWQoc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy01MDctXHRcdFx0ICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz01ODA9QlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAwLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjYwMTpcdHJldHVybiBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAyLX1cbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NjI1PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjU0LVx0XHR0cmFjZS1cdTAwM2VuciA9IG5yX2tlcm5lbDtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NTU6XHRcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NTYtXHR9IGVsc2UgeyAvKiB1c2VyICovXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2My1cdFx0ZmxhZ3MgPSAoZmxhZ3MgXHUwMDI2IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NjQ6XHRcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NjUtXHR9XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTY3Mz1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3BlID0ge1xuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02ODEtXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NjgyOnN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY4My1cdFx0XHQgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZV9pbixcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NzcxPUJQRl9DQUxMXzQoYnBmX2dldF9zdGFjaywgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzczLXtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo3NzQ6XHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xua2VybmVsL2JwZi9zdGFja21hcC5jLTc3NS19XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTc4Nz1CUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03ODkte1xua2VybmVsL2JwZi9zdGFja21hcC5jOjc5MDpcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgdHJ1ZSAvKiBtYXlfZmF1bHQgKi8pO1xua2VybmVsL2JwZi9zdGFja21hcC5jLTc5MS19XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTgwMz1zdGF0aWMgbG9uZyBfX2JwZl9nZXRfdGFza19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmJ1ZiwgdTMyIHNpemUsXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTgxMy1cdGlmIChyZWdzKVxua2VybmVsL2JwZi9zdGFja21hcC5jOjgxNDpcdFx0cmVzID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIHRhc2ssIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIG1heV9mYXVsdCk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODE1LVx0cHV0X3Rhc2tfc3RhY2sodGFzayk7XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTg1ND1CUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04NjQtXHRpZiAoIShldmVudC1cdTAwM2VhdHRyLnNhbXBsZV90eXBlIFx1MDAyNiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pKVxua2VybmVsL2JwZi9zdGFja21hcC5jOjg2NTpcdFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04NjYtXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTg4NC1cdFx0dHJhY2UtXHUwMDNlbnIgPSBucl9rZXJuZWw7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODg1Olx0XHRlcnIgPSBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgdHJhY2UsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xua2VybmVsL2JwZi9zdGFja21hcC5jLTg4Ni1cbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODk2LVx0XHRmbGFncyA9IChmbGFncyBcdTAwMjYgfkJQRl9GX1NLSVBfRklFTERfTUFTSykgfCBza2lwO1xua2VybmVsL2JwZi9zdGFja21hcC5jOjg5NzpcdFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIHRyYWNlLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04OTgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQlBGIFN0YWNrIGFuZCBWTUEgSGVscGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgQlBGIHN0YWNrIGFuZCBWTUEgaGVscGVycy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRhcmdldCB0aGVzZSBmdW5jdGlvbnMgZm9yIGZ1enppbmc6IGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfcGVgLCBhbmQgYGJwZl9maW5kX3ZtYWAuIFRob3NlIGFyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzLgoKSG9sZCBvbiBhIHNlY29uZCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZy4uLiBgYnBmX2dldF90YXNrX3N0YWNrYCBkb2VzbiYjMzk7dCAqZGlyZWN0bHkqIGNhbGwgYF9fYnBmX2dldF9zdGFja2AsIGl0IGdvZXMgdGhyb3VnaCBgX19icGZfZ2V0X3Rhc2tfc3RhY2tgLCB3aGljaCB0aGVuIGNhbGxzIGBfX2JwZl9nZXRfc3RhY2tgLiBHb29kIHRvIGtub3csIGJ1dCBkb2VzbiYjMzk7dCBjaGFuZ2UgbXkgYXBwcm9hY2guCgpSaWdodCwgYmFjayB0byB0aGUgbWFpbiBwb2ludC4gVGhlc2UgYXJlICpCUEYgaGVscGVycyosIG5vdCBleHBvcnRlZCBrZXJuZWwgZnVuY3Rpb25zLCBtZWFuaW5nIHRoZXkmIzM5O3JlIG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIEJQRiBwcm9ncmFtcy4gU3l6a2FsbGVyJiMzOTtzIHNldHVwIGlzIHBlcmZlY3QgZm9yIHRoaXM7IGl0IGNhbiBmdXp6IEJQRiBwcm9ncmFtcywgd2hpY2gsIGluIHR1cm4sIGNhbiBjYWxsIHRoZXNlIGhlbHBlcnMuIEVhc3kuIFRoZSByZWFsIEMgZnVuY3Rpb24gbmFtZXMgYXJlIGV4YWN0bHkgd2hhdCB5b3UmIzM5O2QgZXhwZWN0OiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tgLCBhbmQgc28gb24uCgpXYWl0IGEgc2VjLi4uIGxvb2tpbmcgY2xvc2VyLCBgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrLCAuLi4pYCAqZGVmaW5lcyogYGJwZl9nZXRfc3RhY2tgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9sczoKCiogICBgYnBmX2ZpbmRfdm1hYAoqICAgYGJwZl9nZXRfc3RhY2tpZGAKKiAgIGBicGZfZ2V0X3N0YWNraWRfcGVgCiogICBgYnBmX2dldF9zdGFja2AKKiAgIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAKKiAgIGBicGZfZ2V0X3Rhc2tfc3RhY2tgCiogICBgYnBmX2dldF9zdGFja19wZWAKCk9uZSBsYXN0IHRoaW5nIHRvIGNoZWNrLi4uIGNvbmZpcm0gYGJwZl9nZXRfdGFza19zdGFja2AgdXNlcyBgQlBGX0NBTExgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQ0FMTC4qYnBmX2dldF90YXNrX3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGFja21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhY2ttYXAuYz04MDM9c3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MTktXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODIwOkJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWYsXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODIxLVx0ICAgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz04MjY9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19wcm90byA9IHtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODM2LVxua2VybmVsL2JwZi9zdGFja21hcC5jOjgzNzpCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1Zixcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MzgtXHQgICB1MzIsIHNpemUsIHU2NCwgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU3RhY2sgVHJhY2UgUmV0cmlldmFsKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgQlBGIGFuZCByZXRyaWV2aW5nIHRhc2sgc3RhY2tzIOKAkyBzcGVjaWZpY2FsbHksIGBicGZfZ2V0X3Rhc2tfc3RhY2tgIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZm9jdXMuIE5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB3b3JrLiBgZG9fbW1hcF9yZWFkX3VubG9ja2AgaW1tZWRpYXRlbHkgY29tZXMgdG8gbWluZC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGxvY2F0ZWQgd2l0aGluIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYCwgYW5kIGl0JiMzOTtzIHVzZWQgYXMgYW4gYGlycV93b3JrYCBjYWxsYmFjay4gV2hpbGUgaXQmIzM5O3MgaW52b2x2ZWQgaW4gdGhpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzLCBhbmQgcGFydCBvZiB0aGUgbW9kaWZpZWQgbG9naWMsIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCwgZXh0ZXJuYWwgQVBJIGVudHJ5cG9pbnQuIEFuZCBzaW5jZSB0aGUgcHJvbXB0JiMzOTtzIHByZWZlcmVuY2UgaXMgY2xlYXIg4oCTIGZhdm9yaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHRoZXNlIGludGVybmFsIGhlbHBlcnMg4oCTIHRoZSBwcmltYXJ5IGFwcHJvYWNoIHNob3VsZCBwcm9iYWJseSByZXZvbHZlIGFyb3VuZCB0aGUgQlBGIGhlbHBlcnMgdGhlbXNlbHZlcy4gU28gbGV0JiMzOTtzIGZvY3VzIG9uIHRob3NlLgoKTm93LCBhbiBlc3NlbnRpYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hldGhlciBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gVGhlIGNvZGUgaXMgc3ByZWFkIGFjcm9zcyBga2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhgLCBga2VybmVsL2JwZi9zdGFja21hcC5jYCwgYW5kIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYC4gSXQmIzM5O3MgY29tcGlsZWQsIGl0IHNlZW1zLCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3MuIFRoYXQgc2hvdWxkIG5haWwgZG93biB0aGUgYnVpbGQtdGltZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhY2ttYXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0zMD1pZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIE9iamVjdCBGaWxlcyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgc3RhY2ttYXAub2AgZ2V0cyBidWlsdC4gSW50ZXJlc3RpbmcuIEl0JiMzOTtzIGNvbXBpbGVkIHNwZWNpZmljYWxseSB3aGVuIHdlJiMzOTt2ZSBnb3QgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19QRVJGX0VWRU5UU2AgZW5hYmxlZC4gVGhpcyBjb25uZWN0aW9uIGlzIGtleS4gSSBpbW1lZGlhdGVseSBrbm93IHRoaXMgaW5kaWNhdGVzIGEgZGVwZW5kZW5jeS4gVGhlIHN0YWNrbWFwIGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGFuZC9vciBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIOKAkyBvdGhlcndpc2UgaXQgd291bGRuJiMzOTt0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgbGlrZSB0aGlzLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHdoeSBpdCBuZWVkcyAqYm90aCogc3lzY2FsbCBhY2Nlc3MgYW5kIHBlcmYgZXZlbnQgaW50ZWdyYXRpb24sIGFuZCBob3cgc3RhY2ttYXBzIGZhY2lsaXRhdGVzIHRoYXQgaW50ZWdyYXRpb24uIElzIGl0IHJlbGF0ZWQgdG8gdHJhY2luZywgcGVyaGFwcz8gT3IgbWF5YmUgdXNpbmcgcGVyZiBldmVudHMgZGF0YSB3aXRoaW4gQlBGIHByb2dyYW1zIGZvciBtb3JlIG51YW5jZWQgYW5hbHlzaXM/IFRoaXMgaXMgYSBicmVhZGNydW1iIHRoYXQgcmVxdWlyZXMgc29tZSBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbiBpbnRvIGhvdyBpdCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXNrX2l0ZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT05PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNjYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgQlBGIEZ1bmN0aW9uYWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIHJlcXVpcmVtZW50cyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSBrbm93IEkmIzM5O2xsIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUEVSRl9FVkVOVFNgIHRvIGdldCB0aGlzIEJQRiBzdHVmZiB1cCBhbmQgcnVubmluZy4gR29vZCBzdGFydGluZyBwb2ludC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXNuJiMzOTt0IGNvbmRpdGlvbmFsbHkgZW5hYmxlZCBieSBzb21lIG90aGVyIG9ic2N1cmUgY29uZmlnIG9wdGlvbi4gTm9wZSwgbG9va3MgbGlrZSBhIHN0YW5kYXJkLCBzZWxmLWNvbnRhaW5lZCBjb25maWcuIEZpbmUuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBpbXBvcnRpbmcgdGhhdCBga2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhgIGhlYWRlci4gQWgsIGludGVyZXN0aW5nLCBpdCYjMzk7cyB1c2VkIHdpdGhpbiBga2VybmVsL2JwZi9zdGFja21hcC5jYCBhbmQgYGtlcm5lbC9icGYvdGFza19pdGVyLmNgLiBUaGF0IGdpdmVzIG1lIGEgY2x1ZSBhYm91dCB3aGVyZSB0aGlzIHVubG9jayB3b3JrIGlzIGJlaW5nIHRyaWdnZXJlZCBhbmQgaGFuZGxlZCBpbiB0aGUgQlBGIGNvbnRleHQuIEdvb2QgdG8ga25vdy4KCk5leHQsIEkgbmVlZCB0byBrbm93IGFib3V0IGBicGZfZmluZF92bWFgLiBBcmUgdGhlcmUgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBtYWNyb3MgYXQgcGxheSB0aGVyZT8gSSBzaG91bGQgY2hlY2sgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIHNvbWUgc3BlY2lmaWMgY29uZmlncyB0byB3b3JrLCBvciBpcyBpdCBhbHdheXMgYXZhaWxhYmxlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZmluZF92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0yMDY3PWJwZl9iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIzOS1cdGNhc2UgQlBGX0ZVTkNfZmluZF92bWE6XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMjQwOlx0XHRyZXR1cm4gXHUwMDI2YnBmX2ZpbmRfdm1hX3Byb3RvO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjI0MS1cdGRlZmF1bHQ6XG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03Mzc9c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdGFza192bWFfcmVnX2luZm8gPSB7XG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03NTItXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjc1MzpCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTc1NC1cdCAgIGJwZl9jYWxsYmFja190LCBjYWxsYmFja19mbiwgdm9pZCAqLCBjYWxsYmFja19jdHgsIHU2NCwgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy04MTQtXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjgxNTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2ZpbmRfdm1hX3Byb3RvID0ge1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo4MTY6XHQuZnVuY1x0XHQ9IGJwZl9maW5kX3ZtYSxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtODE3LVx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NjM1PXN0YXRpYyBpbnQgc2V0X2ZpbmRfdm1hX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk2Mzkte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk2NDA6XHQvKiBicGZfZmluZF92bWEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgYWRkcixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjQxLVx0ICogICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19mbiwgdm9pZCAqY2FsbGJhY2tfY3R4LCB1NjQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYnBmX21tYXBfcmVhZF90cnlsb2NrIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBicGZfZmluZF92bWFgIGlzIHJlbGlhYmx5IHByZXNlbnQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBNeSBmb2N1cyBub3cgaXMgb24gaG93IHRoaXMgcmVjZW50IHBhdGNoIGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBgbW1hcF91bmxvY2tfd29ya2AgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oYC4KCkluaXRpYWxseSwgSSBzZWUgdGhhdCB0aGUgY29kZSBoYXMgY29uZGl0aW9uYWwgYmVoYXZpb3IgYmFzZWQgb24gYENPTkZJR19QUkVFTVBUX1JUYC4gVGhlIG9yaWdpbmFsIGNvZGUgcHJlc2VudHMgc2VwYXJhdGUgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgcmVhbC10aW1lIGNvbmZpZ3VyYXRpb24uIEJ1dCBoYW5nIG9uLCB0aGUgcGF0Y2ggKm1vZGlmaWVzKiB0aGUgYnJhbmNoIHdoZXJlIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgKm5vdCogZW5hYmxlZCwgdGhlIG9uZSB3aXRoIGBhdG9taWNfY21weGNoZ19hY3F1aXJlYC4gVGhlcmVmb3JlLCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLCBpdCYjMzk7cyBhY3R1YWxseSBpcnJlbGV2YW50IGlmIHdlIGVuYWJsZSBgQ09ORklHX1BSRUVNUFRfUlRgIG9yIG5vdC4gVGhpcyBpcyBrZXksIGFzIGl0IHNpbXBsaWZpZXMgbXkgdGVzdGluZyBzdHJhdGVneS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpYCBwYXRoLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjazsgdGhlIHBhdGNoIG1ha2VzIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGxvZ2ljLiBJbnN0ZWFkIG9mIHRoZSBgaXJxX3dvcmtfaXNfYnVzeWAgY2hlY2ssIGl0IG5vdyByZWxpZXMgb24gYGF0b21pY19jbXB4Y2hnX2FjcXVpcmVgLiBTbyBpdCBub3cgZGlyZWN0bHkgdHJpZ2dlcnMgdGhlIGBpcnFfd29ya19idXN5ID0gdHJ1ZWAgcGF0aCB3aGVuIHRoZSBhdG9taWMgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwuIFRoaXMgY29uZmlybXMgbXkgZWFybGllciBhc3Nlc3NtZW50IC0gd2UgKmRvbiYjMzk7dCogbmVlZCBgQ09ORklHX1BSRUVNUFRfUlRgIGVuYWJsZWQgdG8gb2JzZXJ2ZSB0aGUgcGF0Y2gmIzM5O3MgZWZmZWN0cy4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBjb3JlIGhlbHBlcnMgYW5kIGVuc3VyZSBJJiMzOTttIGFjY291bnRpbmcgZm9yIHRoZW0uIFNwZWNpZmljYWxseSB0aGUgZm9sbG93aW5nIGFyZSBCUEYgaGVscGVycyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG1vZGlmaWVkIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGJlaGF2aW9yOiBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAsIGBicGZfZ2V0X3N0YWNraWRfcGVgLCBgYnBmX2dldF9zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF9zdGFja19wZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVzZSBhcmUgYWxsIGNvbnNpZGVyZWQgaW4gbXkgdGVzdCBzdWl0ZSwgb3IgYXQgbGVhc3QgY29uZmlybWVkLgoKRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgc2NhbiBmb3IgKmFueSogb3RoZXIgY2FsbGVycyBvZiBgYnBmX21tYXBfcmVhZF90cnlsb2NrYCBvdXRzaWRlIG9mIHRoZXNlIGtub3duIEJQRiBoZWxwZXJzLiBUaGlzIGlzIGEgc3RhbmRhcmQgY29kZSByZXZpZXcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21tYXBfcmVhZF90cnlsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmg9NTI9YnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmspXG4tLVxua2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmgtNjMtICovXG5rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaDo2NDpzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21tYXBfcmVhZF90cnlsb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxua2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmgtNjUtXHRcdFx0XHRcdCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b3JrKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz00MTQ9c3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2Zmcyxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDMxLVx0ICovXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NDMyOlx0aWYgKCFoYXNfdXNlcl9jdHggfHwgIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhjdXJyZW50LVx1MDAzZW1tLCBcdTAwMjZ3b3JrKSkge1xua2VybmVsL2JwZi9zdGFja21hcC5jLTQzMy1cdFx0LyogY2Fubm90IGFjY2VzcyBjdXJyZW50LVx1MDAzZW1tLCBmYWxsIGJhY2sgdG8gaXBzICovXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03NTM9QlBGX0NBTExfNShicGZfZmluZF92bWEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB1NjQsIHN0YXJ0LFxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzkzLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo3OTQ6XHRpZiAoIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhtbSwgXHUwMDI2d29yaykpIHtcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzk1LVx0XHRyZXQgPSAtRUJVU1k7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBCUEYgU3RhY2sgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGxpa2UgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGV4YW1pbmUgYXJlIHJlYWxseSBjZW50ZXJlZCBhcm91bmQgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBhbmQgYGJwZl9maW5kX3ZtYWAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgaXMgb25seSBjYWxsZWQgYnkgdGhlIHN0YWNrbWFwIGhlbHBlcnMsIHdoaWNoIG5hcnJvd3MgZG93biBvdXIgYXJlYSBvZiBpbnRlcmVzdCBzaWduaWZpY2FudGx5LgoKVGhhdCBtZWFucyB0aGUgY29yZSBzeW1ib2xzIHRvIHplcm8gaW4gb24gYXJlOiBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAsIGBicGZfZ2V0X3N0YWNraWRfcGVgLCBgYnBmX2dldF9zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF9zdGFja19wZWAuIEJ1dCwgd2FpdCBhIG1vbWVudCwgaXQgbG9va3MgbGlrZSBgYnBmX2dldF90YXNrX3N0YWNrYCBtaWdodCBub3QgYWN0dWFsbHkgdXNlIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBfX2JwZl9nZXRfdGFza19zdGFja2AgZGlyZWN0bHkgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19icGZfZ2V0X3Rhc2tfc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGFja21hcC5jPTc5Mz1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTgwMi1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo4MDM6c3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgwNC1cdFx0XHRcdCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz04MjA9QlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1Zixcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODIyLXtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo4MjM6XHRyZXR1cm4gX19icGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODI0LX1cbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9ODM3PUJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04Mzkte1xua2VybmVsL2JwZi9zdGFja21hcC5jOjg0MDpcdHJldHVybiBfX2JwZl9nZXRfdGFza19zdGFjayh0YXNrLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qICFtYXlfZmF1bHQgKi8pO1xua2VybmVsL2JwZi9zdGFja21hcC5jLTg0MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDc1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFN0YWNrIFRyYWNlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgZ2V0dGluZyB0YXNrIHN0YWNrIGluZm9ybWF0aW9uLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYF9fYnBmX2dldF90YXNrX3N0YWNrYCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgY29kZS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBhY3F1aXJlcyB0aGUgc3RhY2sgZGF0YS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSB0YXJnZXQgdGFzayYjMzk7cyBtZW1vcnkgbGF5b3V0LCBwYXJ0aWN1bGFybHkgdGhlIGZyYW1lIHBvaW50ZXIgb3Igc3RhY2sgcG9pbnRlciBtYW5pcHVsYXRpb24gaXQgbWlnaHQgYmUgZW1wbG95aW5nLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgc3RhY2sgdW53aW5kaW5nIGluIHRoZSBjb250ZXh0IG9mIEJQRiBzZWVtIGxpa2VseSBjYW5kaWRhdGVzIGZvciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiDigJMgaG93IGl0IGRlYWxzIHdpdGggc2l0dWF0aW9ucyB3aGVyZSBpdCBjYW4mIzM5O3QgcmVsaWFibHkgcmVhZCB0aGUgc3RhY2ssIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBiZWVuIGRlbGliZXJhdGVseSByZXN0cmljdGVkLiBMZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIHVzaW5nIHRoZSBzYW1lIHN0YWNrIHVud2luZGluZyB0ZWNobmlxdWVzIHRoYXQgb3RoZXIga2VybmVsIHRyYWNpbmcgdG9vbHMgdXNlIG9yIGlmIGl0IGhhcyBhbnkgcHJvcHJpZXRhcnkgYXBwcm9hY2hlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMzpcdHN0YXRpYyBsb25nIF9fYnBmX2dldF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcbiA4MDQ6XHRcdFx0XHRcdCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxuIDgwNTpcdHtcbiA4MDY6XHRcdHN0cnVjdCBwdF9yZWdzICpyZWdzO1xuIDgwNzpcdFx0bG9uZyByZXMgPSAtRUlOVkFMO1xuIDgwODpcdFxuIDgwOTpcdFx0aWYgKCF0cnlfZ2V0X3Rhc2tfc3RhY2sodGFzaykpXG4gODEwOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDgxMTpcdFxuIDgxMjpcdFx0cmVncyA9IHRhc2tfcHRfcmVncyh0YXNrKTtcbiA4MTM6XHRcdGlmIChyZWdzKVxuIDgxNDpcdFx0XHRyZXMgPSBfX2JwZl9nZXRfc3RhY2socmVncywgdGFzaywgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgbWF5X2ZhdWx0KTtcbiA4MTU6XHRcdHB1dF90YXNrX3N0YWNrKHRhc2spO1xuIDgxNjpcdFxuIDgxNzpcdFx0cmV0dXJuIHJlcztcbiA4MTg6XHR9XG4gODE5Olx0XG4gODIwOlx0QlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1ZixcbiA4MjE6XHRcdCAgIHUzMiwgc2l6ZSwgdTY0LCBmbGFncylcbiA4MjI6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDQ1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTdGFjayBUcmFjZSBBUEkqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGlzIHN0YWNrIHRyYWNlIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGUga2V5IGVudHJ5IHBvaW50IGhlcmUgaXMgYF9fYnBmX2dldF9zdGFja2AuIEkga25ldyBpdCB3YXMgY2FsbGluZyBzb21ldGhpbmcgc2lnbmlmaWNhbnQsIGFuZCBub3cgSSByZW1lbWJlcjogYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YC4gTGV0JiMzOTtzIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYF9fYnBmX2dldF9zdGFja2AgZnVuY3Rpb24gY2FsbCBmbG93LCB0byBiZSBjZXJ0YWluIHdlJiMzOTtyZSBjbGVhciBvbiBob3cgaXQmIzM5O3Mgb2J0YWluaW5nIHRoZSBpbmZvcm1hdGlvbiBpdCBuZWVkcy4gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhlIGludGVybmFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MjpcdHN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIDY4MzpcdFx0XHRcdCAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlX2luLFxuIDY4NDpcdFx0XHRcdCAgICB2b2lkICpidWYsIHUzMiBzaXplLCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxuIDY4NTpcdHtcbiA2ODY6XHRcdHUzMiB0cmFjZV9uciwgY29weV9sZW4sIGVsZW1fc2l6ZSwgbWF4X2RlcHRoO1xuIDY4NzpcdFx0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XG4gNjg4Olx0XHRib29sIGNyb3NzdGFzayA9IHRhc2sgXHUwMDI2XHUwMDI2IHRhc2sgIT0gY3VycmVudDtcbiA2ODk6XHRcdHUzMiBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbiA2OTA6XHRcdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuIDY5MTpcdFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcbiA2OTI6XHRcdGJvb2wga2VybmVsID0gIXVzZXI7XG4gNjkzOlx0XHRpbnQgZXJyID0gLUVJTlZBTDtcbiA2OTQ6XHRcdHU2NCAqaXBzO1xuIDY5NTpcdFxuIDY5NjpcdFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+KEJQRl9GX1NLSVBfRklFTERfTUFTSyB8IEJQRl9GX1VTRVJfU1RBQ0sgfFxuIDY5NzpcdFx0XHRcdCAgICAgICBCUEZfRl9VU0VSX0JVSUxEX0lEKSkpXG4gNjk4Olx0XHRcdGdvdG8gY2xlYXI7XG4gNjk5Olx0XHRpZiAoa2VybmVsIFx1MDAyNlx1MDAyNiB1c2VyX2J1aWxkX2lkKVxuIDcwMDpcdFx0XHRnb3RvIGNsZWFyO1xuIDcwMTpcdFxuIDcwMjpcdFx0ZWxlbV9zaXplID0gdXNlcl9idWlsZF9pZCA/IHNpemVvZihzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkKSA6IHNpemVvZih1NjQpO1xuIDcwMzpcdFx0aWYgKHVubGlrZWx5KHNpemUgJSBlbGVtX3NpemUpKVxuIDcwNDpcdFx0XHRnb3RvIGNsZWFyO1xuIDcwNTpcdFxuIDcwNjpcdFx0LyogY2Fubm90IGdldCB2YWxpZCB1c2VyIHN0YWNrIGZvciB0YXNrIHdpdGhvdXQgdXNlcl9tb2RlIHJlZ3MgKi9cbiA3MDc6XHRcdGlmICh0YXNrIFx1MDAyNlx1MDAyNiB1c2VyIFx1MDAyNlx1MDAyNiAhdXNlcl9tb2RlKHJlZ3MpKVxuIDcwODpcdFx0XHRnb3RvIGVycl9mYXVsdDtcbiA3MDk6XHRcbiA3MTA6XHRcdC8qIGdldF9wZXJmX2NhbGxjaGFpbiBkb2VzIG5vdCBzdXBwb3J0IGNyb3NzdGFzayB1c2VyIHN0YWNrIHdhbGtpbmdcbiA3MTE6XHRcdCAqIGJ1dCByZXR1cm5zIGFuIGVtcHR5IHN0YWNrIGluc3RlYWQgb2YgTlVMTC5cbiA3MTI6XHRcdCAqL1xuIDcxMzpcdFx0aWYgKGNyb3NzdGFzayBcdTAwMjZcdTAwMjYgdXNlcikge1xuIDcxNDpcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiA3MTU6XHRcdFx0Z290byBjbGVhcjtcbiA3MTY6XHRcdH1cbiA3MTc6XHRcbiA3MTg6XHRcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xuIDcxOTpcdFxuIDcyMDpcdFx0aWYgKG1heV9mYXVsdClcbiA3MjE6XHRcdFx0cmN1X3JlYWRfbG9jaygpOyAvKiBuZWVkIFJDVSBmb3IgcGVyZiYjMzk7cyBjYWxsY2hhaW4gYmVsb3cgKi9cbiA3MjI6XHRcbiA3MjM6XHRcdGlmICh0cmFjZV9pbikge1xuIDcyNDpcdFx0XHR0cmFjZSA9IHRyYWNlX2luO1xuIDcyNTpcdFx0XHR0cmFjZS1cdTAwM2VuciA9IG1pbl90KHUzMiwgdHJhY2UtXHUwMDNlbnIsIG1heF9kZXB0aCk7XG4gNzI2Olx0XHR9IGVsc2UgaWYgKGtlcm5lbCBcdTAwMjZcdTAwMjYgdGFzaykge1xuIDcyNzpcdFx0XHR0cmFjZSA9IGdldF9jYWxsY2hhaW5fZW50cnlfZm9yX3Rhc2sodGFzaywgbWF4X2RlcHRoKTtcbiA3Mjg6XHRcdH0gZWxzZSB7XG4gNzI5Olx0XHRcdHRyYWNlID0gZ2V0X3BlcmZfY2FsbGNoYWluKHJlZ3MsIGtlcm5lbCwgdXNlciwgbWF4X2RlcHRoLFxuIDczMDpcdFx0XHRcdFx0XHQgICBjcm9zc3Rhc2ssIGZhbHNlLCAwKTtcbiA3MzE6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgYW5kIGRpdmluZyBpbnRvIHNvbWUga2VybmVsIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBfX2JwZl9nZXRfc3RhY2tgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSByZXN0IG9mIHRoZSBgX19icGZfZ2V0X3N0YWNrYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uLCBub3QganVzdCB0aGUgc25pcHBldHMgSSBtaWdodCBoYXZlIGJlZW4gZ2xhbmNpbmcgYXQuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3MgbW9yZSBoZXJlIHRoYW4gbWVldHMgdGhlIGV5ZSwgcHJvYmFibHkgc29tZSBjcml0aWNhbCBsb2dpYyByZWxhdGVkIHRvIGhvdyBpdCBhY3R1YWxseSByZXRyaWV2ZXMgYW5kIG9yZ2FuaXplcyB0aGUgc3RhY2sgZGF0YSBmb3IgQlBGIHByb2dyYW1zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgb24gbWVtb3J5IGFjY2VzcywgcmVnaXN0ZXIgaGFuZGxpbmcsIHBlcmhhcHMgZXZlbiBzb21lIGNsZXZlciB0cmlja3MgdG8gZWZmaWNpZW50bHkgY29weSB0aGUgc3RhY2sgY29udGVudCB0byB1c2Vyc3BhY2UsIG9yIGV2ZW4gdG8gYSBCUEYgbWFwIGZvciBpbnRyb3NwZWN0aW9uLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IHRoaXMgZnVuY3Rpb24gbWlnaHQgaGF2ZSwgZ2l2ZW4gaXRzIHJvbGUgaW4gdGhlIGNyaXRpY2FsIHBhdGggb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBib3VuZGFyeSBjaGVja3MsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYWxsb3cgYW4gYXR0YWNrZXIgdG8gcmVhZC93cml0ZSBtZW1vcnkgdGhleSBzaG91bGRuJiMzOTt0LiBUaGlzIHBhcnQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzZWN1cml0eSBhbmQgc3RhYmlsaXR5IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gcGFyc2UgdGhpcyB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhY2ttYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMyOlx0XG4gNzMzOlx0XHRpZiAodW5saWtlbHkoIXRyYWNlKSB8fCB0cmFjZS1cdTAwM2VuciBcdTAwM2Mgc2tpcCkge1xuIDczNDpcdFx0XHRpZiAobWF5X2ZhdWx0KVxuIDczNTpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDczNjpcdFx0XHRnb3RvIGVycl9mYXVsdDtcbiA3Mzc6XHRcdH1cbiA3Mzg6XHRcbiA3Mzk6XHRcdHRyYWNlX25yID0gdHJhY2UtXHUwMDNlbnIgLSBza2lwO1xuIDc0MDpcdFx0Y29weV9sZW4gPSB0cmFjZV9uciAqIGVsZW1fc2l6ZTtcbiA3NDE6XHRcbiA3NDI6XHRcdGlwcyA9IHRyYWNlLVx1MDAzZWlwICYjNDM7IHNraXA7XG4gNzQzOlx0XHRpZiAodXNlcl9idWlsZF9pZCkge1xuIDc0NDpcdFx0XHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzID0gYnVmO1xuIDc0NTpcdFx0XHR1MzIgaTtcbiA3NDY6XHRcbiA3NDc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHJhY2VfbnI7IGkmIzQzOyYjNDM7KVxuIDc0ODpcdFx0XHRcdGlkX29mZnNbaV0uaXAgPSBpcHNbaV07XG4gNzQ5Olx0XHR9IGVsc2Uge1xuIDc1MDpcdFx0XHRtZW1jcHkoYnVmLCBpcHMsIGNvcHlfbGVuKTtcbiA3NTE6XHRcdH1cbiA3NTI6XHRcbiA3NTM6XHRcdC8qIHRyYWNlL2lwcyBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBhZnRlciB0aGlzIHBvaW50ICovXG4gNzU0Olx0XHRpZiAobWF5X2ZhdWx0KVxuIDc1NTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA3NTY6XHRcbiA3NTc6XHRcdGlmICh1c2VyX2J1aWxkX2lkKVxuIDc1ODpcdFx0XHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChidWYsIHRyYWNlX25yLCB1c2VyLCBtYXlfZmF1bHQpO1xuIDc1OTpcdFxuIDc2MDpcdFx0aWYgKHNpemUgXHUwMDNlIGNvcHlfbGVuKVxuIDc2MTpcdFx0XHRtZW1zZXQoYnVmICYjNDM7IGNvcHlfbGVuLCAwLCBzaXplIC0gY29weV9sZW4pO1xuIDc2MjpcdFx0cmV0dXJuIGNvcHlfbGVuO1xuIDc2MzpcdFxuIDc2NDpcdGVycl9mYXVsdDpcbiA3NjU6XHRcdGVyciA9IC1FRkFVTFQ7XG4gNzY2Olx0Y2xlYXI6XG4gNzY3Olx0XHRtZW1zZXQoYnVmLCAwLCBzaXplKTtcbiA3Njg6XHRcdHJldHVybiBlcnI7XG4gNzY5Olx0fVxuIDc3MDpcdFxuIDc3MTpcdEJQRl9DQUxMXzQoYnBmX2dldF9zdGFjaywgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcbiA3NzI6XHRcdCAgIHU2NCwgZmxhZ3MpXG4gNzczOlx0e1xuIDc3NDpcdFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbiA3NzU6XHR9XG4gNzc2Olx0XG4gNzc3Olx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG8gPSB7XG4gNzc4Olx0XHQuZnVuY1x0XHQ9IGJwZl9nZXRfc3RhY2ssXG4gNzc5Olx0XHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiA3ODA6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiA3ODE6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTYxCgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDk1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFN0YWNrIFRyYWNlIGFuZCBWTUEgTG9va3VwIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZGVwZW5kZW5jaWVzLiBGaXJzdCwgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYm90aCBgX19icGZfZ2V0X3N0YWNrYCBhbmQgYF9fYnBmX2dldF9zdGFja2lkYCBjYWxsIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgd2hlbiBgdXNlcl9idWlsZF9pZGAgaXMgdHJ1ZS4gVGhhdCBpbW1lZGlhdGVseSBmb2N1c2VzIG15IGF0dGVudGlvbiBvbiBjZXJ0YWluIEJQRiBzeW1ib2xzLiBJJiMzOTt2ZSBjb21waWxlZCBhIGxpc3Q6IGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBoZXJlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYGJwZl9maW5kX3ZtYWAuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCYjMzk7cyB0aGUgb25seSBvbmUgZGlyZWN0bHkgcmVsYXRlZC4gR29vZCwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gQXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX1BFUkZfRVZFTlRTYCBzdWZmaWNpZW50PyBMb29rcyBsaWtlIGl0LiBgc3RhY2ttYXAub2AgaXMgY29tcGlsZWQgd2hlbiAqYm90aCogYXJlIGVuYWJsZWQsIGFuZCBgdGFza19pdGVyLm9gIHJlcXVpcmVzIG9ubHkgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFNvLCBgQlBGX1NZU0NBTExgIGFuZCBgUEVSRl9FVkVOVFNgIGFyZSBpbmRlZWQgdGhlIGNvcmUgY29uZmlncyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgZGVmaW5pdGlvbnMgb2YgbXkgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgZm91bmQgdGhhdCBgYnBmX2ZpbmRfdm1hYCByZXNpZGVzIGluIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYCwgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlIGxpc3QgYXJlIGFsbCBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuCgpBIHF1aWNrIGNoZWNrIGZvciBvdGhlciBoZWxwZXJzIHVzaW5nIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGNvbmZpcm1zIHRoYXQgdGhlIG9ubHkgY2FsbGVycyBhcmUgaW5kZWVkIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgYW5kIGBicGZfZmluZF92bWFgLgoKV2FpdCBhIG1pbnV0ZSwgYGJwZl9nZXRfc3RhY2tpZF9wZWAgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYCBhcmUgb25seSBhdmFpbGFibGUgd2l0aCBgQ09ORklHX1BFUkZfRVZFTlRTYCwgYnV0IGBzdGFja21hcC5jYCBpdHNlbGYgaXMgb25seSBjb21waWxlZCB3aXRoIHRoaXMgb3B0aW9uISBUaGF0JiMzOTtzIGEgc29saWQgY29uZmlybWF0aW9uIG9mIGBDT05GSUdfUEVSRl9FVkVOVFNgIGFzIGEgaGFyZCBkZXBlbmRlbmN5LgoKSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgdGhhdCBgYnBmX2ZpbmRfdm1hYCBpcyBhY3R1YWxseSBhIEJQRiBoZWxwZXIuIFllcCwgYEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCAuLi4pYCBjb25maXJtcyBpdCwgYW5kIHRoZSBhY3R1YWwgc3ltYm9sIG5hbWUgaW4gdGhlIGtlcm5lbCBpcyBgYnBmX2ZpbmRfdm1hYC4gU2ltaWxhcmx5LCBgYnBmX2dldF9zdGFja2lkYCBpcyBkZWZpbmVkIGFzIGBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgLi4uKWAuIE9rYXksIHRoZSBuYW1lcyBtYXRjaCB0aGUgZGVmaW5pdGlvbnMuCgpTbywgdG8gc3VtbWFyaXplIG15IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zOgoqICAgYEJQRl9TWVNDQUxMYAoqICAgYFBFUkZfRVZFTlRTYAoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGFuZ2UgdG8gaG93IGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGlzIG1hbmFnZWQgYnkgQlBGIGhlbHBlcnMsIG1haW5seSBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAgYW5kIGBicGZfZ2V0X3N0YWNrYCB0byBzYWZlbHkgYWNxdWlyZSB0aGUgbW1hcCBsb2NrLiBJdCBpbnRyb2R1Y2VzIGFuIGBhdG9taWNfdCBhY3RpdmVgIGZsYWcuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjb3JlIEJQRiwgZXhwb3NlZCB0byB1c2Vyc3BhY2UgQlBGIHByb2dyYW1zLiBUaGUgY29kZSBzZWVtcyBmdW5jdGlvbmFsLCBhbmQgSSYjMzk7ZCByZWNvbW1lbmQgZnV6emluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpbmRfdm1hJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tpZCYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNraWRfcGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFjayYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3BlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgYnBmX21tYXBfcmVhZF90cnlsb2NrYCBsb2dpYyB1c2VkIGJ5IEJQRiBoZWxwZXJzIHRvIHNhZmVseSBhY3F1aXJlIHRoZSBtbWFwIGxvY2sgZnJvbSBjb250ZXh0cyB3aGVyZSBJUlFzIG1heSBiZSBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgYXRvbWljX3QgYWN0aXZlYCBmbGFnIHRvIHJlc2VydmUgdGhlIGlycV93b3JrIHNsb3QuIFRoaXMgaXMgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbXMgY2FsbGluZyBoZWxwZXJzIGxpa2UgYGJwZl9maW5kX3ZtYWAsIGBicGZfZ2V0X3N0YWNraWRgLCBhbmQgYGJwZl9nZXRfc3RhY2tgLiBUaGUgY29kZSBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9maW5kX3ZtYSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNraWQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja2lkX3BlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19wZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGJwZl9tbWFwX3JlYWRfdHJ5bG9ja2AgbG9naWMgdXNlZCBieSBCUEYgaGVscGVycyB0byBzYWZlbHkgYWNxdWlyZSB0aGUgbW1hcCBsb2NrIGZyb20gY29udGV4dHMgd2hlcmUgSVJRcyBtYXkgYmUgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSBuZXcgYGF0b21pY190IGFjdGl2ZWAgZmxhZyB0byByZXNlcnZlIHRoZSBpcnFfd29yayBzbG90LiBUaGlzIGlzIGNvcmUgQlBGIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgaGVscGVycyBsaWtlIGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYW5kIGBicGZfZ2V0X3N0YWNrYC4gVGhlIGNvZGUgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjIzOjQ1LjYwNTE1MjQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyNDE4ODg0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ZpbmRfdm1hXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNraWRcIixcbiAgICBcImJwZl9nZXRfc3RhY2tpZF9wZVwiLFxuICAgIFwiYnBmX2dldF9zdGFja1wiLFxuICAgIFwiYnBmX2dldF9zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja1wiLFxuICAgIFwiYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2dldF9zdGFja19wZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgYnBmX21tYXBfcmVhZF90cnlsb2NrYCBsb2dpYyB1c2VkIGJ5IEJQRiBoZWxwZXJzIHRvIHNhZmVseSBhY3F1aXJlIHRoZSBtbWFwIGxvY2sgZnJvbSBjb250ZXh0cyB3aGVyZSBJUlFzIG1heSBiZSBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgYXRvbWljX3QgYWN0aXZlYCBmbGFnIHRvIHJlc2VydmUgdGhlIGlycV93b3JrIHNsb3QuIFRoaXMgaXMgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbXMgY2FsbGluZyBoZWxwZXJzIGxpa2UgYGJwZl9maW5kX3ZtYWAsIGBicGZfZ2V0X3N0YWNraWRgLCBhbmQgYGJwZl9nZXRfc3RhY2tgLiBUaGUgY29kZSBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyMzo0NS42MDUxNjA3M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyODE2OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2FiNmEzYzE3MjYwMzA2NzdiNDVmZTk4YzU2N2NhMDVjZTY1YzI2ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAxNDoyMzo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaCBiL2tlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oXFxuaW5kZXggNWQxOGQ3ZDg1YmVmOS4uZDZlMmI2NWY2ZDA1MiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaFxcbisrKyBiL2tlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oXFxuQEAgLTQsMTIgKzQsMTQgQEBcXG4gXFxuICNpZm5kZWYgX19NTUFQX1VOTE9DS19XT1JLX0hfX1xcbiAjZGVmaW5lIF9fTU1BUF9VTkxPQ0tfV09SS19IX19cXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxX3dvcmsuaFxcdTAwM2VcXG4gXFxuIC8qIGlycV93b3JrIHRvIHJ1biBtbWFwX3JlYWRfdW5sb2NrKCkgaW4gaXJxX3dvcmsgKi9cXG4gc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrIHtcXG4gXFx0c3RydWN0IGlycV93b3JrIGlycV93b3JrO1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4rXFx0YXRvbWljX3QgYWN0aXZlO1xcbiB9O1xcbiBcXG4gREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yaywgbW1hcF91bmxvY2tfd29yayk7XFxuQEAgLTE4LDggKzIwLDggQEAgREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yaywgbW1hcF91bmxvY2tfd29yayk7XFxuICAqIFdlIGNhbm5vdCBkbyBtbWFwX3JlYWRfdW5sb2NrKCkgd2hlbiB0aGUgaXJxIGlzIGRpc2FibGVkLCBiZWNhdXNlIG9mXFxuICAqIHJpc2sgdG8gZGVhZGxvY2sgd2l0aCBycV9sb2NrLiBUbyBsb29rIHVwIHZtYSB3aGVuIHRoZSBpcnFzIGFyZVxcbiAgKiBkaXNhYmxlZCwgd2UgbmVlZCB0byBydW4gbW1hcF9yZWFkX3VubG9jaygpIGluIGlycV93b3JrLiBXZSB1c2UgYVxcbi0gKiBwZXJjcHUgdmFyaWFibGUgdG8gZG8gdGhlIGlycV93b3JrLiBJZiB0aGUgaXJxX3dvcmsgaXMgYWxyZWFkeSB1c2VkXFxuLSAqIGJ5IGFub3RoZXIgbG9va3VwLCB3ZSBmYWxsIG92ZXIuXFxuKyAqIHBlcmNwdSB2YXJpYWJsZSB0byBkbyB0aGUgaXJxX3dvcmsuIFRoZSBhY3RpdmUgZmxhZyByZXNlcnZlcyB0aGUgc2xvdFxcbisgKiBiZWZvcmUgbW1hcF9yZWFkX3RyeWxvY2soKSBhbmQgdW50aWwgdGhlIGlycV93b3JrIGNhbGxiYWNrIGNvbnN1bWVzIG1tLlxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29ya19wdHIpXFxuIHtcXG5AQCAtMjksOSArMzEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b1xcbiBcXHRpZiAoaXJxc19kaXNhYmxlZCgpKSB7XFxuIFxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcXG4gXFx0XFx0XFx0d29yayA9IHRoaXNfY3B1X3B0cihcXHUwMDI2bW1hcF91bmxvY2tfd29yayk7XFxuLVxcdFxcdFxcdGlmIChpcnFfd29ya19pc19idXN5KFxcdTAwMjZ3b3JrLVxcdTAwM2VpcnFfd29yaykpIHtcXG4tXFx0XFx0XFx0XFx0LyogY2Fubm90IHF1ZXVlIG1vcmUgdXBfcmVhZCwgZmFsbGJhY2sgKi9cXG4rXFx0XFx0XFx0aWYgKGF0b21pY19jbXB4Y2hnX2FjcXVpcmUoXFx1MDAyNndvcmstXFx1MDAzZWFjdGl2ZSwgMCwgMSkpIHtcXG4gXFx0XFx0XFx0XFx0aXJxX3dvcmtfYnVzeSA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdHdvcmsgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qXFxuQEAgLTQ2LDYgKzQ4LDMzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqKndvXFxuIFxcdHJldHVybiBpcnFfd29ya19idXN5O1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWRcXG4rYnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmspXFxuK3tcXG4rXFx0aWYgKHdvcmspXFxuK1xcdFxcdGF0b21pY19zZXRfcmVsZWFzZShcXHUwMDI2d29yay1cXHUwMDNlYWN0aXZlLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogVHJ5IHRvIHRha2UgbW0tXFx1MDAzZW1tYXBfbG9jayBmb3IgcmVhZGluZyBvbiBiZWhhbGYgb2YgYSBCUEYgaGVscGVyIHRoYXQgbWF5XFxuKyAqIHJ1biB3aXRoIElSUXMgZGlzYWJsZWQuIE9uIHN1Y2Nlc3MsICp3b3JrIGlzIHRoZSBzbG90IHRvIGhhbmQgdG9cXG4rICogYnBmX21tYXBfdW5sb2NrX21tKCkgKE5VTEwgd2hlbiB0aGUgdW5sb2NrIGNhbiBiZSBkb25lIGlubGluZSk7IG9uIGZhaWx1cmVcXG4rICogbm8gc2xvdCBzdGF5cyByZXNlcnZlZCBhbmQgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjay5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF9yZWFkX3RyeWxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b3JrKVxcbit7XFxuK1xcdGlmIChicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHdvcmspKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkge1xcbitcXHRcXHRicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKCp3b3JrKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGJwZl9tbWFwX3VubG9ja19tbShzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuIFxcdGlmICghd29yaykge1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcXG5pbmRleCA0MWZlODdkNzMwMmYyLi4xNjZmYzhlZmFiOGIyIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbkBAIC00MTUsNyArNDE1LDYgQEAgc3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICB1MzIgdHJhY2VfbnIsIGJvb2wgdXNlciwgYm9vbCBtYXlfZmF1bHQpXFxuIHtcXG4gXFx0c3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICp3b3JrID0gTlVMTDtcXG4tXFx0Ym9vbCBpcnFfd29ya19idXN5ID0gYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhcXHUwMDI2d29yayk7XFxuIFxcdGJvb2wgaGFzX3VzZXJfY3R4ID0gdXNlciBcXHUwMDI2XFx1MDAyNiBjdXJyZW50IFxcdTAwMjZcXHUwMDI2IGN1cnJlbnQtXFx1MDAzZW1tO1xcbiBcXHRzdHJ1Y3Qgc3RhY2tfbWFwX2J1aWxkX2lkX2NhY2hlIGNhY2hlID0ge307XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbkBAIC00MzAsNyArNDI5LDcgQEAgc3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyxcXG4gXFx0ICogZmFsbGJhY2sgaXMgdXNlZCBmb3Iga2VybmVsIHN0YWNrICghdXNlcikgb24gYSBzdGFja21hcCB3aXRoXFxuIFxcdCAqIGJ1aWxkX2lkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFoYXNfdXNlcl9jdHggfHwgaXJxX3dvcmtfYnVzeSB8fCAhbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cXHUwMDNlbW0pKSB7XFxuK1xcdGlmICghaGFzX3VzZXJfY3R4IHx8ICFicGZfbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cXHUwMDNlbW0sIFxcdTAwMjZ3b3JrKSkge1xcbiBcXHRcXHQvKiBjYW5ub3QgYWNjZXNzIGN1cnJlbnQtXFx1MDAzZW1tLCBmYWxsIGJhY2sgdG8gaXBzICovXFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxcbiBcXHRcXHRcXHRzdGFja19tYXBfYnVpbGRfaWRfc2V0X2lwKFxcdTAwMjZpZF9vZmZzW2ldKTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90YXNrX2l0ZXIuYyBiL2tlcm5lbC9icGYvdGFza19pdGVyLmNcXG5pbmRleCBiMjU2ZmI5YzEyMTRlLi5lNjZlMzQ4NGY5MjNkIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jXFxuQEAgLTc1NSw3ICs3NTUsNiBAQCBCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsXFxuIHtcXG4gXFx0c3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICp3b3JrID0gTlVMTDtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcdGJvb2wgaXJxX3dvcmtfYnVzeSA9IGZhbHNlO1xcbiBcXHRib29sIF9fbWF5YmVfdW51c2VkIG1tcHV0X25lZWRlZCA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4gXFx0aW50IHJldCA9IC1FTk9FTlQ7XFxuQEAgLTc5Miw5ICs3OTEsNyBAQCBCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsXFxuIFxcdGlmICghbW0pXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4tXFx0aXJxX3dvcmtfYnVzeSA9IGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoXFx1MDAyNndvcmspO1xcbi1cXG4tXFx0aWYgKGlycV93b3JrX2J1c3kgfHwgIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkge1xcbitcXHRpZiAoIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhtbSwgXFx1MDAyNndvcmspKSB7XFxuIFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5AQCAtMTE5MSw2ICsxMTg4LDggQEAgc3RhdGljIHZvaWQgZG9fbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgaXJxX3dvcmsgKmVudHJ5KVxcbiBcXG4gXFx0d29yayA9IGNvbnRhaW5lcl9vZihlbnRyeSwgc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrLCBpcnFfd29yayk7XFxuIFxcdG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHdvcmstXFx1MDAzZW1tKTtcXG4rXFx0d29yay1cXHUwMDNlbW0gPSBOVUxMO1xcbitcXHRicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKHdvcmspO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCB0YXNrX2l0ZXJfaW5pdCh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyMzo0Ni4wMzg3NzU0MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzgwODI1NzI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZmluZF92bWFcIixcbiAgICBcImJwZl9nZXRfc3RhY2tpZFwiLFxuICAgIFwiYnBmX2dldF9zdGFja2lkX3BlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2dldF90YXNrX3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3BlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGxvZ2ljIHVzZWQgYnkgQlBGIGhlbHBlcnMgdG8gc2FmZWx5IGFjcXVpcmUgdGhlIG1tYXAgbG9jayBmcm9tIGNvbnRleHRzIHdoZXJlIElSUXMgbWF5IGJlIGRpc2FibGVkLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBhdG9taWNfdCBhY3RpdmVgIGZsYWcgdG8gcmVzZXJ2ZSB0aGUgaXJxX3dvcmsgc2xvdC4gVGhpcyBpcyBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcyBjYWxsaW5nIGhlbHBlcnMgbGlrZSBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAsIGFuZCBgYnBmX2dldF9zdGFja2AuIFRoZSBjb2RlIGlzIGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdhYjZhM2MxNzI2MDMwNjc3YjQ1ZmU5OGM1NjdjYTA1Y2U2NWMyNmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAxNDoyMzo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oIGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhcbmluZGV4IDVkMThkN2Q4NWJlZjkuLmQ2ZTJiNjVmNmQwNTIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaFxuKysrIGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhcbkBAIC00LDEyICs0LDE0IEBAXG4gXG4gI2lmbmRlZiBfX01NQVBfVU5MT0NLX1dPUktfSF9fXG4gI2RlZmluZSBfX01NQVBfVU5MT0NLX1dPUktfSF9fXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4gXG4gLyogaXJxX3dvcmsgdG8gcnVuIG1tYXBfcmVhZF91bmxvY2soKSBpbiBpcnFfd29yayAqL1xuIHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayB7XG4gXHRzdHJ1Y3QgaXJxX3dvcmsgaXJxX3dvcms7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdGF0b21pY190IGFjdGl2ZTtcbiB9O1xuIFxuIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIG1tYXBfdW5sb2NrX3dvcmspO1xuQEAgLTE4LDggKzIwLDggQEAgREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yaywgbW1hcF91bmxvY2tfd29yayk7XG4gICogV2UgY2Fubm90IGRvIG1tYXBfcmVhZF91bmxvY2soKSB3aGVuIHRoZSBpcnEgaXMgZGlzYWJsZWQsIGJlY2F1c2Ugb2ZcbiAgKiByaXNrIHRvIGRlYWRsb2NrIHdpdGggcnFfbG9jay4gVG8gbG9vayB1cCB2bWEgd2hlbiB0aGUgaXJxcyBhcmVcbiAgKiBkaXNhYmxlZCwgd2UgbmVlZCB0byBydW4gbW1hcF9yZWFkX3VubG9jaygpIGluIGlycV93b3JrLiBXZSB1c2UgYVxuLSAqIHBlcmNwdSB2YXJpYWJsZSB0byBkbyB0aGUgaXJxX3dvcmsuIElmIHRoZSBpcnFfd29yayBpcyBhbHJlYWR5IHVzZWRcbi0gKiBieSBhbm90aGVyIGxvb2t1cCwgd2UgZmFsbCBvdmVyLlxuKyAqIHBlcmNwdSB2YXJpYWJsZSB0byBkbyB0aGUgaXJxX3dvcmsuIFRoZSBhY3RpdmUgZmxhZyByZXNlcnZlcyB0aGUgc2xvdFxuKyAqIGJlZm9yZSBtbWFwX3JlYWRfdHJ5bG9jaygpIGFuZCB1bnRpbCB0aGUgaXJxX3dvcmsgY2FsbGJhY2sgY29uc3VtZXMgbW0uXG4gICovXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29ya19wdHIpXG4ge1xuQEAgLTI5LDkgKzMxLDkgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29cbiBcdGlmIChpcnFzX2Rpc2FibGVkKCkpIHtcbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkge1xuIFx0XHRcdHdvcmsgPSB0aGlzX2NwdV9wdHIoXHUwMDI2bW1hcF91bmxvY2tfd29yayk7XG4tXHRcdFx0aWYgKGlycV93b3JrX2lzX2J1c3koXHUwMDI2d29yay1cdTAwM2VpcnFfd29yaykpIHtcbi1cdFx0XHRcdC8qIGNhbm5vdCBxdWV1ZSBtb3JlIHVwX3JlYWQsIGZhbGxiYWNrICovXG4rXHRcdFx0aWYgKGF0b21pY19jbXB4Y2hnX2FjcXVpcmUoXHUwMDI2d29yay1cdTAwM2VhY3RpdmUsIDAsIDEpKSB7XG4gXHRcdFx0XHRpcnFfd29ya19idXN5ID0gdHJ1ZTtcbitcdFx0XHRcdHdvcmsgPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuQEAgLTQ2LDYgKzQ4LDMzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqKndvXG4gXHRyZXR1cm4gaXJxX3dvcmtfYnVzeTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkXG4rYnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmspXG4re1xuK1x0aWYgKHdvcmspXG4rXHRcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZ3b3JrLVx1MDAzZWFjdGl2ZSwgMCk7XG4rfVxuK1xuKy8qXG4rICogVHJ5IHRvIHRha2UgbW0tXHUwMDNlbW1hcF9sb2NrIGZvciByZWFkaW5nIG9uIGJlaGFsZiBvZiBhIEJQRiBoZWxwZXIgdGhhdCBtYXlcbisgKiBydW4gd2l0aCBJUlFzIGRpc2FibGVkLiBPbiBzdWNjZXNzLCAqd29yayBpcyB0aGUgc2xvdCB0byBoYW5kIHRvXG4rICogYnBmX21tYXBfdW5sb2NrX21tKCkgKE5VTEwgd2hlbiB0aGUgdW5sb2NrIGNhbiBiZSBkb25lIGlubGluZSk7IG9uIGZhaWx1cmVcbisgKiBubyBzbG90IHN0YXlzIHJlc2VydmVkIGFuZCB0aGUgY2FsbGVyIG11c3QgZmFsbCBiYWNrLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF9yZWFkX3RyeWxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b3JrKVxuK3tcbitcdGlmIChicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHdvcmspKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkge1xuK1x0XHRicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKCp3b3JrKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbW1hcF91bmxvY2tfbW0oc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICp3b3JrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gXHRpZiAoIXdvcmspIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbmluZGV4IDQxZmU4N2Q3MzAyZjIuLjE2NmZjOGVmYWI4YjIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuQEAgLTQxNSw3ICs0MTUsNiBAQCBzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLFxuIFx0XHRcdFx0XHQgIHUzMiB0cmFjZV9uciwgYm9vbCB1c2VyLCBib29sIG1heV9mYXVsdClcbiB7XG4gXHRzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmsgPSBOVUxMO1xuLVx0Ym9vbCBpcnFfd29ya19idXN5ID0gYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhcdTAwMjZ3b3JrKTtcbiBcdGJvb2wgaGFzX3VzZXJfY3R4ID0gdXNlciBcdTAwMjZcdTAwMjYgY3VycmVudCBcdTAwMjZcdTAwMjYgY3VycmVudC1cdTAwM2VtbTtcbiBcdHN0cnVjdCBzdGFja19tYXBfYnVpbGRfaWRfY2FjaGUgY2FjaGUgPSB7fTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuQEAgLTQzMCw3ICs0MjksNyBAQCBzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLFxuIFx0ICogZmFsbGJhY2sgaXMgdXNlZCBmb3Iga2VybmVsIHN0YWNrICghdXNlcikgb24gYSBzdGFja21hcCB3aXRoXG4gXHQgKiBidWlsZF9pZC5cbiBcdCAqL1xuLVx0aWYgKCFoYXNfdXNlcl9jdHggfHwgaXJxX3dvcmtfYnVzeSB8fCAhbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cdTAwM2VtbSkpIHtcbitcdGlmICghaGFzX3VzZXJfY3R4IHx8ICFicGZfbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cdTAwM2VtbSwgXHUwMDI2d29yaykpIHtcbiBcdFx0LyogY2Fubm90IGFjY2VzcyBjdXJyZW50LVx1MDAzZW1tLCBmYWxsIGJhY2sgdG8gaXBzICovXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRyYWNlX25yOyBpKyspXG4gXHRcdFx0c3RhY2tfbWFwX2J1aWxkX2lkX3NldF9pcChcdTAwMjZpZF9vZmZzW2ldKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jIGIva2VybmVsL2JwZi90YXNrX2l0ZXIuY1xuaW5kZXggYjI1NmZiOWMxMjE0ZS4uZTY2ZTM0ODRmOTIzZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbisrKyBiL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbkBAIC03NTUsNyArNzU1LDYgQEAgQlBGX0NBTExfNShicGZfZmluZF92bWEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB1NjQsIHN0YXJ0LFxuIHtcbiBcdHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqd29yayA9IE5VTEw7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdGJvb2wgaXJxX3dvcmtfYnVzeSA9IGZhbHNlO1xuIFx0Ym9vbCBfX21heWJlX3VudXNlZCBtbXB1dF9uZWVkZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0aW50IHJldCA9IC1FTk9FTlQ7XG5AQCAtNzkyLDkgKzc5MSw3IEBAIEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdTY0LCBzdGFydCxcbiBcdGlmICghbW0pXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuLVx0aXJxX3dvcmtfYnVzeSA9IGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoXHUwMDI2d29yayk7XG4tXG4tXHRpZiAoaXJxX3dvcmtfYnVzeSB8fCAhbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XG4rXHRpZiAoIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhtbSwgXHUwMDI2d29yaykpIHtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xMTkxLDYgKzExODgsOCBAQCBzdGF0aWMgdm9pZCBkb19tbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBpcnFfd29yayAqZW50cnkpXG4gXG4gXHR3b3JrID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIGlycV93b3JrKTtcbiBcdG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHdvcmstXHUwMDNlbW0pO1xuK1x0d29yay1cdTAwM2VtbSA9IE5VTEw7XG4rXHRicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKHdvcmspO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCB0YXNrX2l0ZXJfaW5pdCh2b2lkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjM6NDYuMDM4Nzc2OTE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQzODY0NDA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgUGF0Y2ggZm9yIFJlYWNoYWJpbGl0eSBhbmQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgdG91Y2hpbmcgc29tZSBjb3JlIEJQRiBhcmVhczogYG1tYXBfdW5sb2NrX3dvcmsuaGAsIGBzdGFja21hcC5jYCwgYW5kIGB0YXNrX2l0ZXIuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYW4gYGF0b21pY190IGFjdGl2ZWAgdG8gYHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29ya2AuIFRoZSBpbnRlbnQgc2VlbXMgdG8gYmUgcmVzZXJ2aW5nIHRoZSBJUlEgd29yayBzbG90IHdpdGggdGhpcyBuZXcgYXRvbWljIGJlZm9yZSB0aGUgYG1tYXBfcmVhZF90cnlsb2NrKClgIGNhbGwsIGhvbGRpbmcgaXQgdW50aWwgdGhlIGNhbGxiYWNrIGNvbnN1bWVzIHRoZSBtZW1vcnkgbWFwLiBUaGV5J3ZlIGFsc28gYWRkZWQgb3IgbW9kaWZpZWQgYSBmZXcgZnVuY3Rpb25zOiBgYnBmX21tYXBfcmVhZF90cnlsb2NrYCwgYGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmtgLCBhbmQgYGJwZl9tbWFwX3VubG9ja19wdXRfaXJxX3dvcmtgLiBJdCdzIGFsc28gbWFraW5nIGNoYW5nZXMgdG8gYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBhbmQgYGJwZl9maW5kX3ZtYWAsIHdoaWNoIGlzIGEgQlBGIGhlbHBlci5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBhbmQgaWYgdGhlIGNoYW5nZXMgbWFrZSBzZW5zZS4gWXVwLCBCUEYgc3RhY2ttYXBzIGFuZCB0aGUgdGFzayBpdGVyYXRvcnMgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBCUEYgZmVhdHVyZXMuIEdvb2QuIFRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGRpZ2dpbmcgaW50by4gVGhlIHBhdGNoIHNlZW1zIGZ1bmN0aW9uYWwsIHNvIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMuIEFscmlnaHQsIGl0IHNlZW1zIGxpa2UgdGhlIG1vc3QgaW50ZXJlc3RpbmcgYml0cyBhcmU6XG4tICAgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCAodGhhdCdzIGBzdGF0aWNgIGluIGBzdGFja21hcC5jYClcbi0gICBgYnBmX2ZpbmRfdm1hYCAoYSBCUEYgaGVscGVyIGluIGB0YXNrX2l0ZXIuY2ApLlxuLSAgIGBkb19tbWFwX3JlYWRfdW5sb2NrYCAoc3RhdGljLCBpbiBgdGFza19pdGVyLmNgKVxuXG5Ib2xkIG9uLCBJIHNlZSBgYnBmX2ZpbmRfdm1hYCBkZWZpbmVkIHdpdGggYEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCAuLi4pYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoZSBhY3R1YWwgc3ltYm9sIG5hbWUgaXMsIGJlY2F1c2UgaXQncyB1c3VhbGx5IGp1c3QgYGJwZl9maW5kX3ZtYWAuIEdvdHRhIGdyZXAgZm9yIGBicGZfZmluZF92bWFgIGFuZCBgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXRgIHRvIGNvbmZpcm0gdGhhdC4gVGhhdCBzaG91bGQgZ2V0IG1lIHN0YXJ0ZWQgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjIzOjUzLjQ3NzQyMzU0N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjc2NzMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZmluZF92bWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIzOS1cXHRjYXNlIEJQRl9GVU5DX2ZpbmRfdm1hOlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjIyNDA6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZmluZF92bWFfcHJvdG87XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjI0MS1cXHRkZWZhdWx0Olxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03Mzc9c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdGFza192bWFfcmVnX2luZm8gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTc1Mi1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjc1MzpCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03NTQtXFx0ICAgYnBmX2NhbGxiYWNrX3QsIGNhbGxiYWNrX2ZuLCB2b2lkICosIGNhbGxiYWNrX2N0eCwgdTY0LCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtODE0LVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6ODE1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZmluZF92bWFfcHJvdG8gPSB7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo4MTY6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9maW5kX3ZtYSxcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTgxNy1cXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk2MzU9c3RhdGljIGludCBzZXRfZmluZF92bWFfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjM5LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTY0MDpcXHQvKiBicGZfZmluZF92bWEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgYWRkcixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTY0MS1cXHQgKiAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2ZuLCB2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjM6NTMuNTMwMTk1NDk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwODU3MDc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBCUEYgRnVuY3Rpb24gRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIEkgc2VlIHRoaXMgYGJwZl9maW5kX3ZtYWAgZnVuY3Rpb24gZGVmaW5lZCB3aXRoIHRoYXQgYEJQRl9DQUxMXzVgIG1hY3JvLiBIbW0sIHRoYXQncyBub3QgdGhlIHVzdWFsIHdheSBJJ2QgZXhwZWN0IHRvIHNlZSBpdCwgYW5kIGl0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBCUEZfQ0FMTF81YCBpcyBleHBhbmRpbmcgdG8gaGVyZS4gVGhhdCBtYWNybyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtLiBJcyB0aGlzIGEgY3VzdG9tIEJQRiBoZWxwZXIgY2FsbD8gSXMgaXQgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIEJQRiBpbmZyYXN0cnVjdHVyZT8gSXMgaXQgdXNpbmcgYSBkaWZmZXJlbnQgYXJndW1lbnQgcGFzc2luZyBjb252ZW50aW9uPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24gaXRzZWxmLiBLbm93aW5nIHdoYXQgaXQgZXhwYW5kcyB0byB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIEJQRiBzeXN0ZW0gYW5kIHdoYXQga2luZCBvZiBjb250cm9sIGl0IGhhcyBvdmVyIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhcyAoVk1BcykuIFRoaXMgaW5pdGlhbCBsb29rIGlzIHN1Z2dlc3RpbmcgdG8gbWUgdGhhdCBJIG5lZWQgdG8gc3RlcCBiYWNrIGFuZCB1bmRlcnN0YW5kIHRoZSBidWlsZGluZyBibG9ja3MgYmVmb3JlIGFuYWx5emluZyB0aGUgZnVuY3Rpb24gaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjM6NTcuMjM4NzY4MDIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTA0MzE3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEJQRl9DQUxMXzVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjM6NTcuMjg0NjgwMzc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MTY2MDMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIEZ1bmN0aW9uIENhbGxzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBCUEZfQ0FMTF81YCBkZWZpbml0aW9uIGxpdmVzLiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwgaGVhZGVycy4gU3BlY2lmaWNhbGx5LCBJJ2Qgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAsIHdoaWNoIGlzIGEgY29tbW9uIHBsYWNlIGZvciBCUEYtcmVsYXRlZCBkZWZpbml0aW9ucy4gSWYgaXQncyBub3QgdGhlcmUsIHRoZSBsb2dpY2FsIG5leHQgcGxhY2Ugd291bGQgYmUgYGluY2x1ZGUvbGludXgvYnBmLmhgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gZGlnZ2luZyBpbnRvIEJQRiBpbmZyYXN0cnVjdHVyZSBhbmQgc3lzY2FsbCBpbXBsZW1lbnRhdGlvbnMsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luIG15IHNlYXJjaC4gTGV0J3Mgc3RhcnQgd2l0aCBgZmlsdGVyLmhgIGZpcnN0LCBhbmQgaWYgdGhhdCBkb2Vzbid0IHlpZWxkIHJlc3VsdHMsIEknbGwgbW92ZSBvbiB0byBgYnBmLmhgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTcwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MDAuODU2MzQzMDUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDg4NTcyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEJQRl9DQUxMXzVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI4LSNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjk6I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYzMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MDAuOTkxMjM3NDY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNzY2NzA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENhbGwgTWFjcm8qKlxuXG5Pa2F5LCBzbyBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBCUEZfQ0FMTF94YCBtYWNyby4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0IGV4cGFuZHMgdG8sIGVzcGVjaWFsbHkgd2l0aGluIHRoaXMgQlBGIGNvbnRleHQuIEtub3dpbmcgdGhlIGV4YWN0IGV4cGFuc2lvbiBpcyBjcnVjaWFsIOKAkyBpdCByZXZlYWxzIHRoZSBtZWNoYW5pc20sIHdoZXRoZXIgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24gY2FsbCwgYSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIG1vcmUgY29tcGxleCBwcmVwcm9jZXNzb3IgdHJpY2tlcnkuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgYXQgdGhlIGJ5dGVjb2RlIGxldmVsLiBJdCBpbmZsdWVuY2VzIGhvdyBJIHdvdWxkIGFwcHJvYWNoIGRlYnVnZ2luZywgb3B0aW1pemF0aW9uLCBvciBldmVuIHNlY3VyaXR5IGFuYWx5c2lzIGlmIG5lZWRlZC4gVGltZSB0byBjaGVjayB0aGUgaW5jbHVkZXMsIHRyYWNlIHRoZSBtYWNybyBkZWZpbml0aW9uIGFuZCBzZWUgdGhlIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjA0LjYyODkwNzU4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5NzkyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBCUEZfQ0FMTF94XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEwLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjExOiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMi1cXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MDQuNjczODkzNjc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDUyNzA3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgY29kZS4gTGV0J3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAg4oCTIHRoYXQncyB0aGUgbmF0dXJhbCBwbGFjZSB0byBiZWdpbiwgZm9jdXNpbmcgYXJvdW5kIGxpbmUgNjExLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29yZSBkZWZpbml0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIHNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIGRlZmluaW5nIGFuZCBoYW5kbGluZyBmaWx0ZXIgcHJvZ3JhbXMgdGhlcmUuIEknbSBsb29raW5nIGZvciB0aGUgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2NrczogdGhlIGluc3RydWN0aW9uIHNldCBkZWZpbml0aW9ucywgYW55IGltbWVkaWF0ZSBvciByZWdpc3RlciB2YWx1ZSByZXByZXNlbnRhdGlvbnMsIGFuZCB0aGUgbWVjaGFuaXNtcyBmb3IgcmVwcmVzZW50aW5nIHByb2dyYW0gYnJhbmNoZXMuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIHN0cnVjdHVyZXMgdGhhdCBtYWtlIHVwIHRoZSBCUEYgYnl0ZWNvZGUgYW5kIGhvdyB0aGV5J3JlIGV4cG9zZWQgdG8gdGhlIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4gSSdtIGhvcGluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4YWN0IG1lbW9yeSBsYXlvdXRzIGFuZCBob3cgdGhleSdyZSB1c2VkLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIGxvdy1sZXZlbCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MDguNjc5MTY4MzEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXHRcXHRcXHRcXHQgICAgICAodW5zaWduZWQgbG9uZykwLCAodCkwKSkpIGFcXG4gNjAxOlxcdCNkZWZpbmUgX19CUEZfViB2b2lkXFxuIDYwMjpcXHQjZGVmaW5lIF9fQlBGX05cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0I2RlZmluZSBfX0JQRl9ERUNMX0FSR1ModCwgYSkgdCAgIGFcXG4gNjA1OlxcdCNkZWZpbmUgX19CUEZfREVDTF9SRUdTKHQsIGEpIHU2NCBhXFxuIDYwNjpcXHRcXG4gNjA3OlxcdCNkZWZpbmUgX19CUEZfUEFEKG4pXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjA4OlxcdFxcdF9fQlBGX01BUChuLCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX04sIHU2NCwgX191cl8xLCB1NjQsIF9fdXJfMiwgICAgICAgXFxcXFxcbiA2MDk6XFx0XFx0XFx0ICB1NjQsIF9fdXJfMywgdTY0LCBfX3VyXzQsIHU2NCwgX191cl81KVxcbiA2MTA6XFx0XFxuIDYxMTpcXHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxMjpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjEzOlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcXFxcbiA2MTQ6XFx0XFx0dHlwZWRlZiB1NjQgKCpidGZfIyNuYW1lKShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyBcXFxcXFxuIDYxNTpcXHRcXHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXFxcXG4gNjE2OlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcXFxcbiA2MTc6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxODpcXHRcXHRcXHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXFxcXG4gNjE5OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MjA6XFx0XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYyMTpcXHRcXHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXFxuIDYyMjpcXHRcXG4gNjIzOlxcdCNkZWZpbmUgX19OT0FUVFJcXG4gNjI0OlxcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyNTpcXHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2MjY6XFx0I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI3OlxcdCNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyODpcXHQjZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2Mjk6XFx0I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MDguNjc5Mjg2NTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDI3ODYxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCAuLi4pYCBtYWNybyBkZWZpbml0aW9uLiBSaWdodCwgaXQncyBkZWZpbmluZyBib3RoIGB1NjQgYnBmX2ZpbmRfdm1hKC4uLilgIGFuZCBhIHN0YXRpYywgaW5saW5lIHZlcnNpb24sIGBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBfX19fYnBmX2ZpbmRfdm1hKC4uLilgLiBUaGlzIHRlbGxzIG1lIHRoZSBub24taW5saW5lZCBmdW5jdGlvbiBpcyAqc3BlY2lmaWNhbGx5KiBgYnBmX2ZpbmRfdm1hYC4gSXQncyBnb29kIHRvIGtlZXAgdHJhY2sgb2YgdGhpcyBkaXN0aW5jdGlvbiBpbiBCUEYgZnVuY3Rpb25zLCBvZiB3aGljaCB0aGlzIGlzIG9uZS5cblxuTm93LCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBpbiBga2VybmVsL2JwZi9zdGFja21hcC5jYC4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgc3RhdGljIG5hdHVyZS4gVGhpcyBjb3VsZCBpbXBhY3QgaG93IGl0J3MgaGFuZGxlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgQlBGIGNvbnRleHQgYW5kIHZpc2liaWxpdHkuIFNvLCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgdGhhdCdzIGEgYHN0YXRpY2AgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVGhpcyBjb3VsZCBiZSByZWxldmFudCBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIEJQRiBjb21wb25lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MTIuNjIyMDc1OTg2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg4Nzc1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuYz0xODM9c3RydWN0IHN0YWNrX21hcF9jYWNoZWRfdm1hIHtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xOTEtLypcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6MTkyOiAqIFBlciBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldCgpIGNhbGwgY2FjaGUgb2YgdGhlIGxhc3QgVk1BIHdpdGggYSBidWlsZCBJRFxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xOTMtICogcmVzb2x2ZWQgYW5kIHRoZSBsYXN0IFZNQSB3aXRoIG5vIHVzYWJsZSBidWlsZCBJRC4gQWRqYWNlbnQgc3RhY2sgZnJhbWVzIHRlbmRcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz0zMjM9c3RhdGljIHZvaWQgc3RhY2tfbWFwX3VubG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaylcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0zMzItXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjMzMzpzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldF9zbGVlcGFibGUoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyxcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MzIgdHJhY2VfbnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDEzLSAqL1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo0MTQ6c3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyxcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDE1LVxcdFxcdFxcdFxcdFxcdCAgdTMyIHRyYWNlX25yLCBib29sIHVzZXIsIGJvb2wgbWF5X2ZhdWx0KVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTQyMy1cXHRpZiAobWF5X2ZhdWx0IFxcdTAwMjZcXHUwMDI2IGhhc191c2VyX2N0eCkge1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo0MjQ6XFx0XFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXRfc2xlZXBhYmxlKGlkX29mZnMsIHRyYWNlX25yKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDI1LVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz01MDY9c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNraWQoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy01NDUtXFx0XFx0XFx0aWRfb2Zmc1tpXS5pcCA9IGlwc1tpXTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NTQ2OlxcdFxcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGlkX29mZnMsIHRyYWNlX25yLCB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNTQ3LVxcdFxcdHRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpO1xcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTY4Mj1zdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NTctXFx0aWYgKHVzZXJfYnVpbGRfaWQpXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjc1ODpcXHRcXHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChidWYsIHRyYWNlX25yLCB1c2VyLCBtYXlfZmF1bHQpO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjEyLjg1MDk1ODExMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc2ODkyNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ2FsbCBDaGFpbioqXG5cbk9rYXksIHNvIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQsIHdoaWNoIGlzIGdvb2QuIEl0J3MgbGlrZWx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZS4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIGtub3dpbmcgd2hlcmUgaXQgKmlzKiB1c2VkLCBzbyBJIGNhbiB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBSaWdodCBub3cgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBieSBgX19icGZfZ2V0X3N0YWNraWRgIGFuZCBgX19icGZfZ2V0X3N0YWNrYC4gSG1tLCBhbmQgaXQgbG9va3MgbGlrZSBib3RoIGBfX2JwZl9nZXRfc3RhY2tpZGAgYW5kIGBfX2JwZl9nZXRfc3RhY2tgIGFyZSBhbHNvIHN0YXRpYyBmdW5jdGlvbnMuIFRoaXMgbGltaXRzIHRoaW5ncyBhIGxpdHRsZSBiaXQuIE5vdyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdXJ0aGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgY2FsbCB0aGVzZSB0d28uIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIEkgbmVlZCB0byBmb2xsb3cgdGhpcyBjYWxsIGNoYWluIHVwIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIGhvdyB0aGlzIG9mZnNldCBpcyBiZWluZyB1dGlsaXplZCBpbiB0aGUgQlBGIHJ1bnRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNDoxNi41Mjc4NTMxOTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTIyNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnBmX2dldF9zdGFja2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YWNrbWFwLmM9NDcwPWdldF9jYWxsY2hhaW5fZW50cnlfZm9yX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1MzIgbWF4X2RlcHRoKVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTUwNS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NTA2OnN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFja2lkKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTUwNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NTgwPUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAwLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2MDE6XFx0cmV0dXJuIF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAyLX1cXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz02MjU9QlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY1NC1cXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBucl9rZXJuZWw7XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjY1NTpcXHRcXHRyZXQgPSBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY1Ni1cXHR9IGVsc2UgeyAvKiB1c2VyICovXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjYzLVxcdFxcdGZsYWdzID0gKGZsYWdzIFxcdTAwMjYgfkJQRl9GX1NLSVBfRklFTERfTUFTSykgfCBza2lwO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NjQ6XFx0XFx0cmV0ID0gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NjUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNDoxNi41NzI3ODA4NDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMjgyMDkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIEJQRiBzdGFjayBJRCBmdW5jdGlvbnMsIGJhc2VkIG9uIHRob3NlIG5vdGVzOlxuXG4qKkJQRiBTdGFjayBUcmFjaW5nIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBncmFiIHN0YWNrIElEcyB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBicGZfZ2V0X3N0YWNraWRgIGFuZCBgYnBmX2dldF9zdGFja2lkX3BlYCBhcmUgdGhlIGNvcmUgQlBGIGhlbHBlcnMgd2UncmUgdXNpbmcgZm9yIGdldHRpbmcgdGhvc2Ugc3RhY2sgdHJhY2VzLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgdGhlbiBJIG5vdGljZWQgYSBiaXQgb2YgYW4gYWJzdHJhY3Rpb24gbGF5ZXIuIEl0IGxvb2tzIGxpa2UgYF9fYnBmX2dldF9zdGFja2AgaXMgdGhlIHJlYWwgd29ya2hvcnNlLCB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiB0aGF0IGJvdGggYGJwZl9nZXRfc3RhY2tgIGFuZCBgYnBmX2dldF9zdGFja19wZWAgY2FsbCBpbnRvLiBTbywgYGJwZl9nZXRfc3RhY2tgIGFuZCBpdHMgUEUgdmFyaWFudCBhcmUgbGlrZWx5IHdyYXBwZXJzIG9yIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBzb21lIGhpZ2hlci1sZXZlbCBkZXRhaWxzLCBidXQgdWx0aW1hdGVseSB0aGV5IHJlbHkgb24gYF9fYnBmX2dldF9zdGFja2AgdG8gYWN0dWFsbHkgZG8gdGhlIGhhcmQgcGFydCBvZiBjYXB0dXJpbmcgdGhlIHN0YWNrIGRhdGEuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGNhbGxzIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2Ygc3RhY2sgdHJhY2luZyB3aXRoaW4gdGhlIEJQRiBlbnZpcm9ubWVudC4gS25vd2luZyB0aGUgaW50ZXJuYWxzIGFuZCB0aGUgaGVscGVycyBpcyBpbXBvcnRhbnQgd2hlbiB5b3UncmUgd29ya2luZyB3aXRoIHRoaXMgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjUyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MjAuNDg1NjA0MzYzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ2MTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2JwZl9nZXRfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuYz00NzA9Z2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNTA1LVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo1MDY6c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNraWQoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNTA3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz01ODA9QlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02MDAtXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjYwMTpcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02MDItfVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTYyNT1CUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF9wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjU0LVxcdFxcdHRyYWNlLVxcdTAwM2VuciA9IG5yX2tlcm5lbDtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NjU1OlxcdFxcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjU2LVxcdH0gZWxzZSB7IC8qIHVzZXIgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NjMtXFx0XFx0ZmxhZ3MgPSAoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZfU0tJUF9GSUVMRF9NQVNLKSB8IHNraXA7XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjY2NDpcXHRcXHRyZXQgPSBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2NS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NjczPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNraWRfcHJvdG9fcGUgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjgxLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2ODI6c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY4My1cXHRcXHRcXHQgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZV9pbixcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz03NzE9QlBGX0NBTExfNChicGZfZ2V0X3N0YWNrLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTc3My17XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjc3NDpcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NzUtfVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTc4Nz1CUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTc4OS17XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjc5MDpcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIHRydWUgLyogbWF5X2ZhdWx0ICovKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzkxLX1cXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz04MDM9c3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgxMy1cXHRpZiAocmVncylcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODE0OlxcdFxcdHJlcyA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCB0YXNrLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBtYXlfZmF1bHQpO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MTUtXFx0cHV0X3Rhc2tfc3RhY2sodGFzayk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9ODU0PUJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODY0LVxcdGlmICghKGV2ZW50LVxcdTAwM2VhdHRyLnNhbXBsZV90eXBlIFxcdTAwMjYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSlcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODY1OlxcdFxcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTg2Ni1cXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04ODQtXFx0XFx0dHJhY2UtXFx1MDAzZW5yID0gbnJfa2VybmVsO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo4ODU6XFx0XFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIHRyYWNlLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODg2LVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTg5Ni1cXHRcXHRmbGFncyA9IChmbGFncyBcXHUwMDI2IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODk3OlxcdFxcdGVyciA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCB0cmFjZSwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTg5OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjIwLjUzMDA3NTY3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDUwMjE4Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQlBGIFN0YWNrIGFuZCBWTUEgSGVscGVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IEJQRiBzdGFjayBhbmQgVk1BIGhlbHBlcnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0YXJnZXQgdGhlc2UgZnVuY3Rpb25zIGZvciBmdXp6aW5nOiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGBicGZfZmluZF92bWFgLiBUaG9zZSBhcmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcy5cblxuSG9sZCBvbiBhIHNlY29uZCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZy4uLiBgYnBmX2dldF90YXNrX3N0YWNrYCBkb2Vzbid0ICpkaXJlY3RseSogY2FsbCBgX19icGZfZ2V0X3N0YWNrYCwgaXQgZ29lcyB0aHJvdWdoIGBfX2JwZl9nZXRfdGFza19zdGFja2AsIHdoaWNoIHRoZW4gY2FsbHMgYF9fYnBmX2dldF9zdGFja2AuIEdvb2QgdG8ga25vdywgYnV0IGRvZXNuJ3QgY2hhbmdlIG15IGFwcHJvYWNoLlxuXG5SaWdodCwgYmFjayB0byB0aGUgbWFpbiBwb2ludC4gVGhlc2UgYXJlICpCUEYgaGVscGVycyosIG5vdCBleHBvcnRlZCBrZXJuZWwgZnVuY3Rpb25zLCBtZWFuaW5nIHRoZXkncmUgbWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gQlBGIHByb2dyYW1zLiBTeXprYWxsZXIncyBzZXR1cCBpcyBwZXJmZWN0IGZvciB0aGlzOyBpdCBjYW4gZnV6eiBCUEYgcHJvZ3JhbXMsIHdoaWNoLCBpbiB0dXJuLCBjYW4gY2FsbCB0aGVzZSBoZWxwZXJzLiBFYXN5LiBUaGUgcmVhbCBDIGZ1bmN0aW9uIG5hbWVzIGFyZSBleGFjdGx5IHdoYXQgeW91J2QgZXhwZWN0OiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tgLCBhbmQgc28gb24uXG5cbldhaXQgYSBzZWMuLi4gbG9va2luZyBjbG9zZXIsIGBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2ssIC4uLilgICpkZWZpbmVzKiBgYnBmX2dldF9zdGFja2AuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9sczpcblxuKiAgIGBicGZfZmluZF92bWFgXG4qICAgYGJwZl9nZXRfc3RhY2tpZGBcbiogICBgYnBmX2dldF9zdGFja2lkX3BlYFxuKiAgIGBicGZfZ2V0X3N0YWNrYFxuKiAgIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWBcbiogICBgYnBmX2dldF90YXNrX3N0YWNrYFxuKiAgIGBicGZfZ2V0X3N0YWNrX3BlYFxuXG5PbmUgbGFzdCB0aGluZyB0byBjaGVjay4uLiBjb25maXJtIGBicGZfZ2V0X3Rhc2tfc3RhY2tgIHVzZXMgYEJQRl9DQUxMYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MDcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MjcuNTgwMjk2NTA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA5NzUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfQ0FMTC4qYnBmX2dldF90YXNrX3N0YWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YWNrbWFwLmM9ODAzPXN0YXRpYyBsb25nIF9fYnBmX2dldF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MTktXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjgyMDpCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFjaywgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MjEtXFx0ICAgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTgyNj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3Byb3RvID0ge1xcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgzNi1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODM3OkJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MzgtXFx0ICAgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNDoyNy42Mjg0MDAyMzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ2MTI0MDc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFN0YWNrIFRyYWNlIFJldHJpZXZhbCoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgQlBGIGFuZCByZXRyaWV2aW5nIHRhc2sgc3RhY2tzIOKAkyBzcGVjaWZpY2FsbHksIGBicGZfZ2V0X3Rhc2tfc3RhY2tgIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAuIFRoYXQncyB0aGUgY29yZSBmb2N1cy4gTm93LCBsZXQncyBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB3b3JrLiBgZG9fbW1hcF9yZWFkX3VubG9ja2AgaW1tZWRpYXRlbHkgY29tZXMgdG8gbWluZC4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgbG9jYXRlZCB3aXRoaW4gYGtlcm5lbC9icGYvdGFza19pdGVyLmNgLCBhbmQgaXQncyB1c2VkIGFzIGFuIGBpcnFfd29ya2AgY2FsbGJhY2suIFdoaWxlIGl0J3MgaW52b2x2ZWQgaW4gdGhpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzLCBhbmQgcGFydCBvZiB0aGUgbW9kaWZpZWQgbG9naWMsIGl0J3Mgbm90IGEgZGlyZWN0LCBleHRlcm5hbCBBUEkgZW50cnlwb2ludC4gQW5kIHNpbmNlIHRoZSBwcm9tcHQncyBwcmVmZXJlbmNlIGlzIGNsZWFyIOKAkyBmYXZvcmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciB0aGVzZSBpbnRlcm5hbCBoZWxwZXJzIOKAkyB0aGUgcHJpbWFyeSBhcHByb2FjaCBzaG91bGQgcHJvYmFibHkgcmV2b2x2ZSBhcm91bmQgdGhlIEJQRiBoZWxwZXJzIHRoZW1zZWx2ZXMuIFNvIGxldCdzIGZvY3VzIG9uIHRob3NlLlxuXG5Ob3csIGFuIGVzc2VudGlhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGV0aGVyIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLiBUaGUgY29kZSBpcyBzcHJlYWQgYWNyb3NzIGBrZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaGAsIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLCBhbmQgYGtlcm5lbC9icGYvdGFza19pdGVyLmNgLiBJdCdzIGNvbXBpbGVkLCBpdCBzZWVtcywgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBwcm9jZXNzLiBUaGF0IHNob3VsZCBuYWlsIGRvd24gdGhlIGJ1aWxkLXRpbWUgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDc2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjM1LjA4OTY0NTQwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyMDM0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhY2ttYXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjM1LjE0Njg1NTUyMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI0MTU3NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDpcblxuKipVbmRlcnN0YW5kaW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBPYmplY3QgRmlsZXMqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGF0IGBzdGFja21hcC5vYCBnZXRzIGJ1aWx0LiBJbnRlcmVzdGluZy4gSXQncyBjb21waWxlZCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSd2ZSBnb3QgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19QRVJGX0VWRU5UU2AgZW5hYmxlZC4gVGhpcyBjb25uZWN0aW9uIGlzIGtleS4gSSBpbW1lZGlhdGVseSBrbm93IHRoaXMgaW5kaWNhdGVzIGEgZGVwZW5kZW5jeS4gVGhlIHN0YWNrbWFwIGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGFuZC9vciBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIOKAkyBvdGhlcndpc2UgaXQgd291bGRuJ3QgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBsaWtlIHRoaXMuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgd2h5IGl0IG5lZWRzICpib3RoKiBzeXNjYWxsIGFjY2VzcyBhbmQgcGVyZiBldmVudCBpbnRlZ3JhdGlvbiwgYW5kIGhvdyBzdGFja21hcHMgZmFjaWxpdGF0ZXMgdGhhdCBpbnRlZ3JhdGlvbi4gSXMgaXQgcmVsYXRlZCB0byB0cmFjaW5nLCBwZXJoYXBzPyBPciBtYXliZSB1c2luZyBwZXJmIGV2ZW50cyBkYXRhIHdpdGhpbiBCUEYgcHJvZ3JhbXMgZm9yIG1vcmUgbnVhbmNlZCBhbmFseXNpcz8gVGhpcyBpcyBhIGJyZWFkY3J1bWIgdGhhdCByZXF1aXJlcyBzb21lIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uIGludG8gaG93IGl0IGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzIxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MzguNTcxMDE1Njk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc2MTgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXNrX2l0ZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MzguNjE1NzgyMzczWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTE4NjI2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIEJQRiBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgcmVxdWlyZW1lbnRzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJIGtub3cgSSdsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX1BFUkZfRVZFTlRTYCB0byBnZXQgdGhpcyBCUEYgc3R1ZmYgdXAgYW5kIHJ1bm5pbmcuIEdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpc24ndCBjb25kaXRpb25hbGx5IGVuYWJsZWQgYnkgc29tZSBvdGhlciBvYnNjdXJlIGNvbmZpZyBvcHRpb24uIE5vcGUsIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCwgc2VsZi1jb250YWluZWQgY29uZmlnLiBGaW5lLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucyBhbmQgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaW1wb3J0aW5nIHRoYXQgYGtlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oYCBoZWFkZXIuIEFoLCBpbnRlcmVzdGluZywgaXQncyB1c2VkIHdpdGhpbiBga2VybmVsL2JwZi9zdGFja21hcC5jYCBhbmQgYGtlcm5lbC9icGYvdGFza19pdGVyLmNgLiBUaGF0IGdpdmVzIG1lIGEgY2x1ZSBhYm91dCB3aGVyZSB0aGlzIHVubG9jayB3b3JrIGlzIGJlaW5nIHRyaWdnZXJlZCBhbmQgaGFuZGxlZCBpbiB0aGUgQlBGIGNvbnRleHQuIEdvb2QgdG8ga25vdy5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgYWJvdXQgYGJwZl9maW5kX3ZtYWAuIEFyZSB0aGVyZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG1hY3JvcyBhdCBwbGF5IHRoZXJlPyBJIHNob3VsZCBjaGVjayBpZiBpdCdzIGRlcGVuZGVudCBvbiBzb21lIHNwZWNpZmljIGNvbmZpZ3MgdG8gd29yaywgb3IgaXMgaXQgYWx3YXlzIGF2YWlsYWJsZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6NDIuOTI3NjQ4MzY0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3MjA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZmluZF92bWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIzOS1cXHRjYXNlIEJQRl9GVU5DX2ZpbmRfdm1hOlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjIyNDA6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZmluZF92bWFfcHJvdG87XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjI0MS1cXHRkZWZhdWx0Olxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03Mzc9c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdGFza192bWFfcmVnX2luZm8gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTc1Mi1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjc1MzpCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03NTQtXFx0ICAgYnBmX2NhbGxiYWNrX3QsIGNhbGxiYWNrX2ZuLCB2b2lkICosIGNhbGxiYWNrX2N0eCwgdTY0LCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtODE0LVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6ODE1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZmluZF92bWFfcHJvdG8gPSB7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo4MTY6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9maW5kX3ZtYSxcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTgxNy1cXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk2MzU9c3RhdGljIGludCBzZXRfZmluZF92bWFfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjM5LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTY0MDpcXHQvKiBicGZfZmluZF92bWEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgYWRkcixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTY0MS1cXHQgKiAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2ZuLCB2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6NDIuOTczMzI3NzQxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMDM2NTEwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBicGZfbW1hcF9yZWFkX3RyeWxvY2sgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgYnBmX2ZpbmRfdm1hYCBpcyByZWxpYWJseSBwcmVzZW50IHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gTXkgZm9jdXMgbm93IGlzIG9uIGhvdyB0aGlzIHJlY2VudCBwYXRjaCBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgYG1tYXBfdW5sb2NrX3dvcmtgIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaGAuXG5cbkluaXRpYWxseSwgSSBzZWUgdGhhdCB0aGUgY29kZSBoYXMgY29uZGl0aW9uYWwgYmVoYXZpb3IgYmFzZWQgb24gYENPTkZJR19QUkVFTVBUX1JUYC4gVGhlIG9yaWdpbmFsIGNvZGUgcHJlc2VudHMgc2VwYXJhdGUgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgcmVhbC10aW1lIGNvbmZpZ3VyYXRpb24uIEJ1dCBoYW5nIG9uLCB0aGUgcGF0Y2ggKm1vZGlmaWVzKiB0aGUgYnJhbmNoIHdoZXJlIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgKm5vdCogZW5hYmxlZCwgdGhlIG9uZSB3aXRoIGBhdG9taWNfY21weGNoZ19hY3F1aXJlYC4gVGhlcmVmb3JlLCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLCBpdCdzIGFjdHVhbGx5IGlycmVsZXZhbnQgaWYgd2UgZW5hYmxlIGBDT05GSUdfUFJFRU1QVF9SVGAgb3Igbm90LiBUaGlzIGlzIGtleSwgYXMgaXQgc2ltcGxpZmllcyBteSB0ZXN0aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVClgIHBhdGguXG5cbkxldCdzIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrOyB0aGUgcGF0Y2ggbWFrZXMgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgbG9naWMuIEluc3RlYWQgb2YgdGhlIGBpcnFfd29ya19pc19idXN5YCBjaGVjaywgaXQgbm93IHJlbGllcyBvbiBgYXRvbWljX2NtcHhjaGdfYWNxdWlyZWAuIFNvIGl0IG5vdyBkaXJlY3RseSB0cmlnZ2VycyB0aGUgYGlycV93b3JrX2J1c3kgPSB0cnVlYCBwYXRoIHdoZW4gdGhlIGF0b21pYyBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bC4gVGhpcyBjb25maXJtcyBteSBlYXJsaWVyIGFzc2Vzc21lbnQgLSB3ZSAqZG9uJ3QqIG5lZWQgYENPTkZJR19QUkVFTVBUX1JUYCBlbmFibGVkIHRvIG9ic2VydmUgdGhlIHBhdGNoJ3MgZWZmZWN0cy5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgY29yZSBoZWxwZXJzIGFuZCBlbnN1cmUgSSdtIGFjY291bnRpbmcgZm9yIHRoZW0uIFNwZWNpZmljYWxseSB0aGUgZm9sbG93aW5nIGFyZSBCUEYgaGVscGVycyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG1vZGlmaWVkIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGJlaGF2aW9yOiBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAsIGBicGZfZ2V0X3N0YWNraWRfcGVgLCBgYnBmX2dldF9zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF9zdGFja19wZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVzZSBhcmUgYWxsIGNvbnNpZGVyZWQgaW4gbXkgdGVzdCBzdWl0ZSwgb3IgYXQgbGVhc3QgY29uZmlybWVkLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIGZvciAqYW55KiBvdGhlciBjYWxsZXJzIG9mIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIG91dHNpZGUgb2YgdGhlc2Uga25vd24gQlBGIGhlbHBlcnMuIFRoaXMgaXMgYSBzdGFuZGFyZCBjb2RlIHJldmlldyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEwMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNDo1MS4yNzY5ODE5NzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjIyMTM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbW1hcF9yZWFkX3RyeWxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmg9NTI9YnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaC02My0gKi9cXG5rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaDo2NDpzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21tYXBfcmVhZF90cnlsb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmtlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oLTY1LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTQxND1zdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTQzMS1cXHQgKi9cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NDMyOlxcdGlmICghaGFzX3VzZXJfY3R4IHx8ICFicGZfbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cXHUwMDNlbW0sIFxcdTAwMjZ3b3JrKSkge1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy00MzMtXFx0XFx0LyogY2Fubm90IGFjY2VzcyBjdXJyZW50LVxcdTAwM2VtbSwgZmFsbCBiYWNrIHRvIGlwcyAqL1xcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03NTM9QlBGX0NBTExfNShicGZfZmluZF92bWEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB1NjQsIHN0YXJ0LFxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03OTMtXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo3OTQ6XFx0aWYgKCFicGZfbW1hcF9yZWFkX3RyeWxvY2sobW0sIFxcdTAwMjZ3b3JrKSkge1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzk1LVxcdFxcdHJldCA9IC1FQlVTWTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6NTEuNDg5MjA5OTA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTUwMjE1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IEJQRiBTdGFjayBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCBzZWVtcyBsaWtlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgd2UgbmVlZCB0byBleGFtaW5lIGFyZSByZWFsbHkgY2VudGVyZWQgYXJvdW5kIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgYW5kIGBicGZfZmluZF92bWFgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgaXMgb25seSBjYWxsZWQgYnkgdGhlIHN0YWNrbWFwIGhlbHBlcnMsIHdoaWNoIG5hcnJvd3MgZG93biBvdXIgYXJlYSBvZiBpbnRlcmVzdCBzaWduaWZpY2FudGx5LlxuXG5UaGF0IG1lYW5zIHRoZSBjb3JlIHN5bWJvbHMgdG8gemVybyBpbiBvbiBhcmU6IGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4gQnV0LCB3YWl0IGEgbW9tZW50LCBpdCBsb29rcyBsaWtlIGBicGZfZ2V0X3Rhc2tfc3RhY2tgIG1pZ2h0IG5vdCBhY3R1YWxseSB1c2UgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBkaWcgaW50byBgX19icGZfZ2V0X3Rhc2tfc3RhY2tgIGRpcmVjdGx5IHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjExLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjU1LjkwNDIzNTE0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MzM1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfZ2V0X3Rhc2tfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuYz03OTM9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgwMi1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODAzOnN0YXRpYyBsb25nIF9fYnBmX2dldF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODA0LVxcdFxcdFxcdFxcdCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTgyMD1CUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFjaywgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgyMi17XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjgyMzpcXHRyZXR1cm4gX19icGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgyNC19XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9ODM3PUJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgzOS17XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjg0MDpcXHRyZXR1cm4gX19icGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgYnVmLCBzaXplLCBmbGFncywgdHJ1ZSAvKiAhbWF5X2ZhdWx0ICovKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODQxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6NTUuOTU1MDc0MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNDEyNDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFN0YWNrIFRyYWNlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIGdldHRpbmcgdGFzayBzdGFjayBpbmZvcm1hdGlvbi4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBfX2JwZl9nZXRfdGFza19zdGFja2AgaW1wbGVtZW50YXRpb24uIExldCdzIGRpZyBpbnRvIHRoYXQgY29kZS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBhY3F1aXJlcyB0aGUgc3RhY2sgZGF0YS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSB0YXJnZXQgdGFzaydzIG1lbW9yeSBsYXlvdXQsIHBhcnRpY3VsYXJseSB0aGUgZnJhbWUgcG9pbnRlciBvciBzdGFjayBwb2ludGVyIG1hbmlwdWxhdGlvbiBpdCBtaWdodCBiZSBlbXBsb3lpbmcuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBzdGFjayB1bndpbmRpbmcgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHNlZW0gbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGludmVzdGlnYXRpb24uIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYg4oCTIGhvdyBpdCBkZWFscyB3aXRoIHNpdHVhdGlvbnMgd2hlcmUgaXQgY2FuJ3QgcmVsaWFibHkgcmVhZCB0aGUgc3RhY2ssIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBiZWVuIGRlbGliZXJhdGVseSByZXN0cmljdGVkLiBMZXQncyBzZWUgaWYgaXQncyB1c2luZyB0aGUgc2FtZSBzdGFjayB1bndpbmRpbmcgdGVjaG5pcXVlcyB0aGF0IG90aGVyIGtlcm5lbCB0cmFjaW5nIHRvb2xzIHVzZSBvciBpZiBpdCBoYXMgYW55IHByb3ByaWV0YXJ5IGFwcHJvYWNoZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDc1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjU6MDAuMjg5MjAxMDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDM6XFx0c3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxcbiA4MDQ6XFx0XFx0XFx0XFx0XFx0IHU2NCBmbGFncywgYm9vbCBtYXlfZmF1bHQpXFxuIDgwNTpcXHR7XFxuIDgwNjpcXHRcXHRzdHJ1Y3QgcHRfcmVncyAqcmVncztcXG4gODA3OlxcdFxcdGxvbmcgcmVzID0gLUVJTlZBTDtcXG4gODA4OlxcdFxcbiA4MDk6XFx0XFx0aWYgKCF0cnlfZ2V0X3Rhc2tfc3RhY2sodGFzaykpXFxuIDgxMDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODExOlxcdFxcbiA4MTI6XFx0XFx0cmVncyA9IHRhc2tfcHRfcmVncyh0YXNrKTtcXG4gODEzOlxcdFxcdGlmIChyZWdzKVxcbiA4MTQ6XFx0XFx0XFx0cmVzID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIHRhc2ssIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIG1heV9mYXVsdCk7XFxuIDgxNTpcXHRcXHRwdXRfdGFza19zdGFjayh0YXNrKTtcXG4gODE2OlxcdFxcbiA4MTc6XFx0XFx0cmV0dXJuIHJlcztcXG4gODE4OlxcdH1cXG4gODE5OlxcdFxcbiA4MjA6XFx0QlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1ZixcXG4gODIxOlxcdFxcdCAgIHUzMiwgc2l6ZSwgdTY0LCBmbGFncylcXG4gODIyOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjU6MDAuMjg5MzI2NDlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2MDYyOTUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTdGFjayBUcmFjZSBBUEkqKlxuXG5SaWdodCwgc28gd2UncmUgZGl2aW5nIGludG8gdGhpcyBzdGFjayB0cmFjZSBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIGtleSBlbnRyeSBwb2ludCBoZXJlIGlzIGBfX2JwZl9nZXRfc3RhY2tgLiBJIGtuZXcgaXQgd2FzIGNhbGxpbmcgc29tZXRoaW5nIHNpZ25pZmljYW50LCBhbmQgbm93IEkgcmVtZW1iZXI6IGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAuIExldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYF9fYnBmX2dldF9zdGFja2AgZnVuY3Rpb24gY2FsbCBmbG93LCB0byBiZSBjZXJ0YWluIHdlJ3JlIGNsZWFyIG9uIGhvdyBpdCdzIG9idGFpbmluZyB0aGUgaW5mb3JtYXRpb24gaXQgbmVlZHMuIFRpbWUgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbnRlcm5hbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNTowMy41NDk5NTk0NjRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4MjpcXHRzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gNjgzOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlX2luLFxcbiA2ODQ6XFx0XFx0XFx0XFx0ICAgIHZvaWQgKmJ1ZiwgdTMyIHNpemUsIHU2NCBmbGFncywgYm9vbCBtYXlfZmF1bHQpXFxuIDY4NTpcXHR7XFxuIDY4NjpcXHRcXHR1MzIgdHJhY2VfbnIsIGNvcHlfbGVuLCBlbGVtX3NpemUsIG1heF9kZXB0aDtcXG4gNjg3OlxcdFxcdGJvb2wgdXNlcl9idWlsZF9pZCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfVVNFUl9CVUlMRF9JRDtcXG4gNjg4OlxcdFxcdGJvb2wgY3Jvc3N0YXNrID0gdGFzayBcXHUwMDI2XFx1MDAyNiB0YXNrICE9IGN1cnJlbnQ7XFxuIDY4OTpcXHRcXHR1MzIgc2tpcCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLO1xcbiA2OTA6XFx0XFx0Ym9vbCB1c2VyID0gZmxhZ3MgXFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xcbiA2OTE6XFx0XFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcXG4gNjkyOlxcdFxcdGJvb2wga2VybmVsID0gIXVzZXI7XFxuIDY5MzpcXHRcXHRpbnQgZXJyID0gLUVJTlZBTDtcXG4gNjk0OlxcdFxcdHU2NCAqaXBzO1xcbiA2OTU6XFx0XFxuIDY5NjpcXHRcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+KEJQRl9GX1NLSVBfRklFTERfTUFTSyB8IEJQRl9GX1VTRVJfU1RBQ0sgfFxcbiA2OTc6XFx0XFx0XFx0XFx0ICAgICAgIEJQRl9GX1VTRVJfQlVJTERfSUQpKSlcXG4gNjk4OlxcdFxcdFxcdGdvdG8gY2xlYXI7XFxuIDY5OTpcXHRcXHRpZiAoa2VybmVsIFxcdTAwMjZcXHUwMDI2IHVzZXJfYnVpbGRfaWQpXFxuIDcwMDpcXHRcXHRcXHRnb3RvIGNsZWFyO1xcbiA3MDE6XFx0XFxuIDcwMjpcXHRcXHRlbGVtX3NpemUgPSB1c2VyX2J1aWxkX2lkID8gc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpIDogc2l6ZW9mKHU2NCk7XFxuIDcwMzpcXHRcXHRpZiAodW5saWtlbHkoc2l6ZSAlIGVsZW1fc2l6ZSkpXFxuIDcwNDpcXHRcXHRcXHRnb3RvIGNsZWFyO1xcbiA3MDU6XFx0XFxuIDcwNjpcXHRcXHQvKiBjYW5ub3QgZ2V0IHZhbGlkIHVzZXIgc3RhY2sgZm9yIHRhc2sgd2l0aG91dCB1c2VyX21vZGUgcmVncyAqL1xcbiA3MDc6XFx0XFx0aWYgKHRhc2sgXFx1MDAyNlxcdTAwMjYgdXNlciBcXHUwMDI2XFx1MDAyNiAhdXNlcl9tb2RlKHJlZ3MpKVxcbiA3MDg6XFx0XFx0XFx0Z290byBlcnJfZmF1bHQ7XFxuIDcwOTpcXHRcXG4gNzEwOlxcdFxcdC8qIGdldF9wZXJmX2NhbGxjaGFpbiBkb2VzIG5vdCBzdXBwb3J0IGNyb3NzdGFzayB1c2VyIHN0YWNrIHdhbGtpbmdcXG4gNzExOlxcdFxcdCAqIGJ1dCByZXR1cm5zIGFuIGVtcHR5IHN0YWNrIGluc3RlYWQgb2YgTlVMTC5cXG4gNzEyOlxcdFxcdCAqL1xcbiA3MTM6XFx0XFx0aWYgKGNyb3NzdGFzayBcXHUwMDI2XFx1MDAyNiB1c2VyKSB7XFxuIDcxNDpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4gNzE1OlxcdFxcdFxcdGdvdG8gY2xlYXI7XFxuIDcxNjpcXHRcXHR9XFxuIDcxNzpcXHRcXG4gNzE4OlxcdFxcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xcbiA3MTk6XFx0XFxuIDcyMDpcXHRcXHRpZiAobWF5X2ZhdWx0KVxcbiA3MjE6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpOyAvKiBuZWVkIFJDVSBmb3IgcGVyZidzIGNhbGxjaGFpbiBiZWxvdyAqL1xcbiA3MjI6XFx0XFxuIDcyMzpcXHRcXHRpZiAodHJhY2VfaW4pIHtcXG4gNzI0OlxcdFxcdFxcdHRyYWNlID0gdHJhY2VfaW47XFxuIDcyNTpcXHRcXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBtaW5fdCh1MzIsIHRyYWNlLVxcdTAwM2VuciwgbWF4X2RlcHRoKTtcXG4gNzI2OlxcdFxcdH0gZWxzZSBpZiAoa2VybmVsIFxcdTAwMjZcXHUwMDI2IHRhc2spIHtcXG4gNzI3OlxcdFxcdFxcdHRyYWNlID0gZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayh0YXNrLCBtYXhfZGVwdGgpO1xcbiA3Mjg6XFx0XFx0fSBlbHNlIHtcXG4gNzI5OlxcdFxcdFxcdHRyYWNlID0gZ2V0X3BlcmZfY2FsbGNoYWluKHJlZ3MsIGtlcm5lbCwgdXNlciwgbWF4X2RlcHRoLFxcbiA3MzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgY3Jvc3N0YXNrLCBmYWxzZSwgMCk7XFxuIDczMTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI1OjAzLjU1MDA1ODMyNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzcxNzA4MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgYW5kIGRpdmluZyBpbnRvIHNvbWUga2VybmVsIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYF9fYnBmX2dldF9zdGFja2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgcmVzdCBvZiB0aGUgYF9fYnBmX2dldF9zdGFja2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiwgbm90IGp1c3QgdGhlIHNuaXBwZXRzIEkgbWlnaHQgaGF2ZSBiZWVuIGdsYW5jaW5nIGF0LiBJJ20gYXNzdW1pbmcgdGhlcmUncyBtb3JlIGhlcmUgdGhhbiBtZWV0cyB0aGUgZXllLCBwcm9iYWJseSBzb21lIGNyaXRpY2FsIGxvZ2ljIHJlbGF0ZWQgdG8gaG93IGl0IGFjdHVhbGx5IHJldHJpZXZlcyBhbmQgb3JnYW5pemVzIHRoZSBzdGFjayBkYXRhIGZvciBCUEYgcHJvZ3JhbXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIG9uIG1lbW9yeSBhY2Nlc3MsIHJlZ2lzdGVyIGhhbmRsaW5nLCBwZXJoYXBzIGV2ZW4gc29tZSBjbGV2ZXIgdHJpY2tzIHRvIGVmZmljaWVudGx5IGNvcHkgdGhlIHN0YWNrIGNvbnRlbnQgdG8gdXNlcnNwYWNlLCBvciBldmVuIHRvIGEgQlBGIG1hcCBmb3IgaW50cm9zcGVjdGlvbi4gSSdtIGtlZW4gdG8gc3BvdCBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IHRoaXMgZnVuY3Rpb24gbWlnaHQgaGF2ZSwgZ2l2ZW4gaXRzIHJvbGUgaW4gdGhlIGNyaXRpY2FsIHBhdGggb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJvdW5kYXJ5IGNoZWNrcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBhbGxvdyBhbiBhdHRhY2tlciB0byByZWFkL3dyaXRlIG1lbW9yeSB0aGV5IHNob3VsZG4ndC4gVGhpcyBwYXJ0IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSBvZiB0aGUgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gcGFyc2UgdGhpcyB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODExMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjU6MDkuMzIxNzY5MzI3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MzI6XFx0XFxuIDczMzpcXHRcXHRpZiAodW5saWtlbHkoIXRyYWNlKSB8fCB0cmFjZS1cXHUwMDNlbnIgXFx1MDAzYyBza2lwKSB7XFxuIDczNDpcXHRcXHRcXHRpZiAobWF5X2ZhdWx0KVxcbiA3MzU6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDczNjpcXHRcXHRcXHRnb3RvIGVycl9mYXVsdDtcXG4gNzM3OlxcdFxcdH1cXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0dHJhY2VfbnIgPSB0cmFjZS1cXHUwMDNlbnIgLSBza2lwO1xcbiA3NDA6XFx0XFx0Y29weV9sZW4gPSB0cmFjZV9uciAqIGVsZW1fc2l6ZTtcXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aXBzID0gdHJhY2UtXFx1MDAzZWlwICsgc2tpcDtcXG4gNzQzOlxcdFxcdGlmICh1c2VyX2J1aWxkX2lkKSB7XFxuIDc0NDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzID0gYnVmO1xcbiA3NDU6XFx0XFx0XFx0dTMyIGk7XFxuIDc0NjpcXHRcXG4gNzQ3OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxcbiA3NDg6XFx0XFx0XFx0XFx0aWRfb2Zmc1tpXS5pcCA9IGlwc1tpXTtcXG4gNzQ5OlxcdFxcdH0gZWxzZSB7XFxuIDc1MDpcXHRcXHRcXHRtZW1jcHkoYnVmLCBpcHMsIGNvcHlfbGVuKTtcXG4gNzUxOlxcdFxcdH1cXG4gNzUyOlxcdFxcbiA3NTM6XFx0XFx0LyogdHJhY2UvaXBzIHNob3VsZCBub3QgYmUgZGVyZWZlcmVuY2VkIGFmdGVyIHRoaXMgcG9pbnQgKi9cXG4gNzU0OlxcdFxcdGlmIChtYXlfZmF1bHQpXFxuIDc1NTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNzU2OlxcdFxcbiA3NTc6XFx0XFx0aWYgKHVzZXJfYnVpbGRfaWQpXFxuIDc1ODpcXHRcXHRcXHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChidWYsIHRyYWNlX25yLCB1c2VyLCBtYXlfZmF1bHQpO1xcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGNvcHlfbGVuKVxcbiA3NjE6XFx0XFx0XFx0bWVtc2V0KGJ1ZiArIGNvcHlfbGVuLCAwLCBzaXplIC0gY29weV9sZW4pO1xcbiA3NjI6XFx0XFx0cmV0dXJuIGNvcHlfbGVuO1xcbiA3NjM6XFx0XFxuIDc2NDpcXHRlcnJfZmF1bHQ6XFxuIDc2NTpcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiA3NjY6XFx0Y2xlYXI6XFxuIDc2NzpcXHRcXHRtZW1zZXQoYnVmLCAwLCBzaXplKTtcXG4gNzY4OlxcdFxcdHJldHVybiBlcnI7XFxuIDc2OTpcXHR9XFxuIDc3MDpcXHRcXG4gNzcxOlxcdEJQRl9DQUxMXzQoYnBmX2dldF9zdGFjaywgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcXG4gNzcyOlxcdFxcdCAgIHU2NCwgZmxhZ3MpXFxuIDc3MzpcXHR7XFxuIDc3NDpcXHRcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xcbiA3NzU6XFx0fVxcbiA3NzY6XFx0XFxuIDc3NzpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90byA9IHtcXG4gNzc4OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3N0YWNrLFxcbiA3Nzk6XFx0XFx0LmdwbF9vbmx5XFx0PSB0cnVlLFxcbiA3ODA6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gNzgxOlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNTowOS4zMjE4Njc2NjdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ0Mjc2MzExOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTdGFjayBUcmFjZSBhbmQgVk1BIExvb2t1cCBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMuIEZpcnN0LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGJvdGggYF9fYnBmX2dldF9zdGFja2AgYW5kIGBfX2JwZl9nZXRfc3RhY2tpZGAgY2FsbCBgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXRgIHdoZW4gYHVzZXJfYnVpbGRfaWRgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgZm9jdXNlcyBteSBhdHRlbnRpb24gb24gY2VydGFpbiBCUEYgc3ltYm9scy4gSSd2ZSBjb21waWxlZCBhIGxpc3Q6IGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBoZXJlLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGBicGZfZmluZF92bWFgLiBBIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgaXQncyB0aGUgb25seSBvbmUgZGlyZWN0bHkgcmVsYXRlZC4gR29vZCwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBBcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUEVSRl9FVkVOVFNgIHN1ZmZpY2llbnQ/IExvb2tzIGxpa2UgaXQuIGBzdGFja21hcC5vYCBpcyBjb21waWxlZCB3aGVuICpib3RoKiBhcmUgZW5hYmxlZCwgYW5kIGB0YXNrX2l0ZXIub2AgcmVxdWlyZXMgb25seSBgQ09ORklHX0JQRl9TWVNDQUxMYC4gU28sIGBCUEZfU1lTQ0FMTGAgYW5kIGBQRVJGX0VWRU5UU2AgYXJlIGluZGVlZCB0aGUgY29yZSBjb25maWdzIHdlIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGRlZmluaXRpb25zIG9mIG15IGZvY3VzIHN5bWJvbHMuIEkndmUgZm91bmQgdGhhdCBgYnBmX2ZpbmRfdm1hYCByZXNpZGVzIGluIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYCwgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlIGxpc3QgYXJlIGFsbCBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuXG5cbkEgcXVpY2sgY2hlY2sgZm9yIG90aGVyIGhlbHBlcnMgdXNpbmcgYGJwZl9tbWFwX3JlYWRfdHJ5bG9ja2AgY29uZmlybXMgdGhhdCB0aGUgb25seSBjYWxsZXJzIGFyZSBpbmRlZWQgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBhbmQgYGJwZl9maW5kX3ZtYWAuXG5cbldhaXQgYSBtaW51dGUsIGBicGZfZ2V0X3N0YWNraWRfcGVgIGFuZCBgYnBmX2dldF9zdGFja19wZWAgYXJlIG9ubHkgYXZhaWxhYmxlIHdpdGggYENPTkZJR19QRVJGX0VWRU5UU2AsIGJ1dCBgc3RhY2ttYXAuY2AgaXRzZWxmIGlzIG9ubHkgY29tcGlsZWQgd2l0aCB0aGlzIG9wdGlvbiEgVGhhdCdzIGEgc29saWQgY29uZmlybWF0aW9uIG9mIGBDT05GSUdfUEVSRl9FVkVOVFNgIGFzIGEgaGFyZCBkZXBlbmRlbmN5LlxuXG5JIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayB0aGF0IGBicGZfZmluZF92bWFgIGlzIGFjdHVhbGx5IGEgQlBGIGhlbHBlci4gWWVwLCBgQlBGX0NBTExfNShicGZfZmluZF92bWEsIC4uLilgIGNvbmZpcm1zIGl0LCBhbmQgdGhlIGFjdHVhbCBzeW1ib2wgbmFtZSBpbiB0aGUga2VybmVsIGlzIGBicGZfZmluZF92bWFgLiBTaW1pbGFybHksIGBicGZfZ2V0X3N0YWNraWRgIGlzIGRlZmluZWQgYXMgYEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCAuLi4pYC4gT2theSwgdGhlIG5hbWVzIG1hdGNoIHRoZSBkZWZpbml0aW9ucy5cblxuU28sIHRvIHN1bW1hcml6ZSBteSBjcml0aWNhbCBjb25maWd1cmF0aW9uczpcbiogICBgQlBGX1NZU0NBTExgXG4qICAgYFBFUkZfRVZFTlRTYFxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoYW5nZSB0byBob3cgYGJwZl9tbWFwX3JlYWRfdHJ5bG9ja2AgaXMgbWFuYWdlZCBieSBCUEYgaGVscGVycywgbWFpbmx5IGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCBhbmQgYGJwZl9nZXRfc3RhY2tgIHRvIHNhZmVseSBhY3F1aXJlIHRoZSBtbWFwIGxvY2suIEl0IGludHJvZHVjZXMgYW4gYGF0b21pY190IGFjdGl2ZWAgZmxhZy4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNvcmUgQlBGLCBleHBvc2VkIHRvIHVzZXJzcGFjZSBCUEYgcHJvZ3JhbXMuIFRoZSBjb2RlIHNlZW1zIGZ1bmN0aW9uYWwsIGFuZCBJJ2QgcmVjb21tZW5kIGZ1enppbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTYxLCJPdXRwdXRUb2tlbnMiOjI0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI1OjIzLjc0OTUwMDkxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc1MjgxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maW5kX3ZtYVwiLFxuICAgIFwiYnBmX2dldF9zdGFja2lkXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNraWRfcGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfcGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGJwZl9tbWFwX3JlYWRfdHJ5bG9ja2AgbG9naWMgdXNlZCBieSBCUEYgaGVscGVycyB0byBzYWZlbHkgYWNxdWlyZSB0aGUgbW1hcCBsb2NrIGZyb20gY29udGV4dHMgd2hlcmUgSVJRcyBtYXkgYmUgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSBuZXcgYGF0b21pY190IGFjdGl2ZWAgZmxhZyB0byByZXNlcnZlIHRoZSBpcnFfd29yayBzbG90LiBUaGlzIGlzIGNvcmUgQlBGIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgaGVscGVycyBsaWtlIGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYW5kIGBicGZfZ2V0X3N0YWNrYC4gVGhlIGNvZGUgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZmluZF92bWFcIixcbiAgICBcImJwZl9nZXRfc3RhY2tpZFwiLFxuICAgIFwiYnBmX2dldF9zdGFja2lkX3BlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2dldF90YXNrX3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3BlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGxvZ2ljIHVzZWQgYnkgQlBGIGhlbHBlcnMgdG8gc2FmZWx5IGFjcXVpcmUgdGhlIG1tYXAgbG9jayBmcm9tIGNvbnRleHRzIHdoZXJlIElSUXMgbWF5IGJlIGRpc2FibGVkLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBhdG9taWNfdCBhY3RpdmVgIGZsYWcgdG8gcmVzZXJ2ZSB0aGUgaXJxX3dvcmsgc2xvdC4gVGhpcyBpcyBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcyBjYWxsaW5nIGhlbHBlcnMgbGlrZSBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAsIGFuZCBgYnBmX2dldF9zdGFja2AuIFRoZSBjb2RlIGlzIGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowq7swf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 14:05:41 +0000 UTC FinishedAt: 2026-07-31 14:25:25 +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": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS" ], "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": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS" ], "series_id": "2fadc6e5-e826-40c7-b066-b0287e2a10f6" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_find_vma", "bpf_get_stackid", "bpf_get_stackid_pe", "bpf_get_stack", "bpf_get_stack_sleepable", "bpf_get_task_stack", "bpf_get_task_stack_sleepable", "bpf_get_stack_pe" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpbmRfdm1hJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tpZCYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNraWRfcGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFjayYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3BlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgYnBmX21tYXBfcmVhZF90cnlsb2NrYCBsb2dpYyB1c2VkIGJ5IEJQRiBoZWxwZXJzIHRvIHNhZmVseSBhY3F1aXJlIHRoZSBtbWFwIGxvY2sgZnJvbSBjb250ZXh0cyB3aGVyZSBJUlFzIG1heSBiZSBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgYXRvbWljX3QgYWN0aXZlYCBmbGFnIHRvIHJlc2VydmUgdGhlIGlycV93b3JrIHNsb3QuIFRoaXMgaXMgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbXMgY2FsbGluZyBoZWxwZXJzIGxpa2UgYGJwZl9maW5kX3ZtYWAsIGBicGZfZ2V0X3N0YWNraWRgLCBhbmQgYGJwZl9nZXRfc3RhY2tgLiBUaGUgY29kZSBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2FiNmEzYzE3MjYwMzA2NzdiNDVmZTk4YzU2N2NhMDVjZTY1YzI2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDE0OjIzOjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oIGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhcbmluZGV4IDVkMThkN2Q4NWJlZjkuLmQ2ZTJiNjVmNmQwNTIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhcbkBAIC00LDEyICYjNDM7NCwxNCBAQFxuIFxuICNpZm5kZWYgX19NTUFQX1VOTE9DS19XT1JLX0hfX1xuICNkZWZpbmUgX19NTUFQX1VOTE9DS19XT1JLX0hfX1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiBcbiAvKiBpcnFfd29yayB0byBydW4gbW1hcF9yZWFkX3VubG9jaygpIGluIGlycV93b3JrICovXG4gc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrIHtcbiBcdHN0cnVjdCBpcnFfd29yayBpcnFfd29yaztcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdGF0b21pY190IGFjdGl2ZTtcbiB9O1xuIFxuIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIG1tYXBfdW5sb2NrX3dvcmspO1xuQEAgLTE4LDggJiM0MzsyMCw4IEBAIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIG1tYXBfdW5sb2NrX3dvcmspO1xuICAqIFdlIGNhbm5vdCBkbyBtbWFwX3JlYWRfdW5sb2NrKCkgd2hlbiB0aGUgaXJxIGlzIGRpc2FibGVkLCBiZWNhdXNlIG9mXG4gICogcmlzayB0byBkZWFkbG9jayB3aXRoIHJxX2xvY2suIFRvIGxvb2sgdXAgdm1hIHdoZW4gdGhlIGlycXMgYXJlXG4gICogZGlzYWJsZWQsIHdlIG5lZWQgdG8gcnVuIG1tYXBfcmVhZF91bmxvY2soKSBpbiBpcnFfd29yay4gV2UgdXNlIGFcbi0gKiBwZXJjcHUgdmFyaWFibGUgdG8gZG8gdGhlIGlycV93b3JrLiBJZiB0aGUgaXJxX3dvcmsgaXMgYWxyZWFkeSB1c2VkXG4tICogYnkgYW5vdGhlciBsb29rdXAsIHdlIGZhbGwgb3Zlci5cbiYjNDM7ICogcGVyY3B1IHZhcmlhYmxlIHRvIGRvIHRoZSBpcnFfd29yay4gVGhlIGFjdGl2ZSBmbGFnIHJlc2VydmVzIHRoZSBzbG90XG4mIzQzOyAqIGJlZm9yZSBtbWFwX3JlYWRfdHJ5bG9jaygpIGFuZCB1bnRpbCB0aGUgaXJxX3dvcmsgY2FsbGJhY2sgY29uc3VtZXMgbW0uXG4gICovXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29ya19wdHIpXG4ge1xuQEAgLTI5LDkgJiM0MzszMSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqKndvXG4gXHRpZiAoaXJxc19kaXNhYmxlZCgpKSB7XG4gXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcbiBcdFx0XHR3b3JrID0gdGhpc19jcHVfcHRyKFx1MDAyNm1tYXBfdW5sb2NrX3dvcmspO1xuLVx0XHRcdGlmIChpcnFfd29ya19pc19idXN5KFx1MDAyNndvcmstXHUwMDNlaXJxX3dvcmspKSB7XG4tXHRcdFx0XHQvKiBjYW5ub3QgcXVldWUgbW9yZSB1cF9yZWFkLCBmYWxsYmFjayAqL1xuJiM0MztcdFx0XHRpZiAoYXRvbWljX2NtcHhjaGdfYWNxdWlyZShcdTAwMjZ3b3JrLVx1MDAzZWFjdGl2ZSwgMCwgMSkpIHtcbiBcdFx0XHRcdGlycV93b3JrX2J1c3kgPSB0cnVlO1xuJiM0MztcdFx0XHRcdHdvcmsgPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuQEAgLTQ2LDYgJiM0Mzs0OCwzMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b1xuIFx0cmV0dXJuIGlycV93b3JrX2J1c3k7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWRcbiYjNDM7YnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRpZiAod29yaylcbiYjNDM7XHRcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZ3b3JrLVx1MDAzZWFjdGl2ZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRyeSB0byB0YWtlIG1tLVx1MDAzZW1tYXBfbG9jayBmb3IgcmVhZGluZyBvbiBiZWhhbGYgb2YgYSBCUEYgaGVscGVyIHRoYXQgbWF5XG4mIzQzOyAqIHJ1biB3aXRoIElSUXMgZGlzYWJsZWQuIE9uIHN1Y2Nlc3MsICp3b3JrIGlzIHRoZSBzbG90IHRvIGhhbmQgdG9cbiYjNDM7ICogYnBmX21tYXBfdW5sb2NrX21tKCkgKE5VTEwgd2hlbiB0aGUgdW5sb2NrIGNhbiBiZSBkb25lIGlubGluZSk7IG9uIGZhaWx1cmVcbiYjNDM7ICogbm8gc2xvdCBzdGF5cyByZXNlcnZlZCBhbmQgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF9yZWFkX3RyeWxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29yaylcbiYjNDM7e1xuJiM0MztcdGlmIChicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHdvcmspKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkge1xuJiM0MztcdFx0YnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yaygqd29yayk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX21tYXBfdW5sb2NrX21tKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqd29yaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIFx0aWYgKCF3b3JrKSB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCA0MWZlODdkNzMwMmYyLi4xNjZmYzhlZmFiOGIyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbkBAIC00MTUsNyAmIzQzOzQxNSw2IEBAIHN0YXRpYyB2b2lkIHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnMsXG4gXHRcdFx0XHRcdCAgdTMyIHRyYWNlX25yLCBib29sIHVzZXIsIGJvb2wgbWF5X2ZhdWx0KVxuIHtcbiBcdHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqd29yayA9IE5VTEw7XG4tXHRib29sIGlycV93b3JrX2J1c3kgPSBicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKFx1MDAyNndvcmspO1xuIFx0Ym9vbCBoYXNfdXNlcl9jdHggPSB1c2VyIFx1MDAyNlx1MDAyNiBjdXJyZW50IFx1MDAyNlx1MDAyNiBjdXJyZW50LVx1MDAzZW1tO1xuIFx0c3RydWN0IHN0YWNrX21hcF9idWlsZF9pZF9jYWNoZSBjYWNoZSA9IHt9O1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5AQCAtNDMwLDcgJiM0Mzs0MjksNyBAQCBzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLFxuIFx0ICogZmFsbGJhY2sgaXMgdXNlZCBmb3Iga2VybmVsIHN0YWNrICghdXNlcikgb24gYSBzdGFja21hcCB3aXRoXG4gXHQgKiBidWlsZF9pZC5cbiBcdCAqL1xuLVx0aWYgKCFoYXNfdXNlcl9jdHggfHwgaXJxX3dvcmtfYnVzeSB8fCAhbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cdTAwM2VtbSkpIHtcbiYjNDM7XHRpZiAoIWhhc191c2VyX2N0eCB8fCAhYnBmX21tYXBfcmVhZF90cnlsb2NrKGN1cnJlbnQtXHUwMDNlbW0sIFx1MDAyNndvcmspKSB7XG4gXHRcdC8qIGNhbm5vdCBhY2Nlc3MgY3VycmVudC1cdTAwM2VtbSwgZmFsbCBiYWNrIHRvIGlwcyAqL1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cmFjZV9ucjsgaSYjNDM7JiM0MzspXG4gXHRcdFx0c3RhY2tfbWFwX2J1aWxkX2lkX3NldF9pcChcdTAwMjZpZF9vZmZzW2ldKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jIGIva2VybmVsL2JwZi90YXNrX2l0ZXIuY1xuaW5kZXggYjI1NmZiOWMxMjE0ZS4uZTY2ZTM0ODRmOTIzZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbkBAIC03NTUsNyAmIzQzOzc1NSw2IEBAIEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdTY0LCBzdGFydCxcbiB7XG4gXHRzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmsgPSBOVUxMO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHRib29sIGlycV93b3JrX2J1c3kgPSBmYWxzZTtcbiBcdGJvb2wgX19tYXliZV91bnVzZWQgbW1wdXRfbmVlZGVkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdGludCByZXQgPSAtRU5PRU5UO1xuQEAgLTc5Miw5ICYjNDM7NzkxLDcgQEAgQlBGX0NBTExfNShicGZfZmluZF92bWEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB1NjQsIHN0YXJ0LFxuIFx0aWYgKCFtbSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4tXHRpcnFfd29ya19idXN5ID0gYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhcdTAwMjZ3b3JrKTtcbi1cbi1cdGlmIChpcnFfd29ya19idXN5IHx8ICFtbWFwX3JlYWRfdHJ5bG9jayhtbSkpIHtcbiYjNDM7XHRpZiAoIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhtbSwgXHUwMDI2d29yaykpIHtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xMTkxLDYgJiM0MzsxMTg4LDggQEAgc3RhdGljIHZvaWQgZG9fbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgaXJxX3dvcmsgKmVudHJ5KVxuIFxuIFx0d29yayA9IGNvbnRhaW5lcl9vZihlbnRyeSwgc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrLCBpcnFfd29yayk7XG4gXHRtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcih3b3JrLVx1MDAzZW1tKTtcbiYjNDM7XHR3b3JrLVx1MDAzZW1tID0gTlVMTDtcbiYjNDM7XHRicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKHdvcmspO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCB0YXNrX2l0ZXJfaW5pdCh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9maW5kX3ZtYSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNraWQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja2lkX3BlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19wZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGJwZl9tbWFwX3JlYWRfdHJ5bG9ja2AgbG9naWMgdXNlZCBieSBCUEYgaGVscGVycyB0byBzYWZlbHkgYWNxdWlyZSB0aGUgbW1hcCBsb2NrIGZyb20gY29udGV4dHMgd2hlcmUgSVJRcyBtYXkgYmUgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSBuZXcgYGF0b21pY190IGFjdGl2ZWAgZmxhZyB0byByZXNlcnZlIHRoZSBpcnFfd29yayBzbG90LiBUaGlzIGlzIGNvcmUgQlBGIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgaGVscGVycyBsaWtlIGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYW5kIGBicGZfZ2V0X3N0YWNrYC4gVGhlIGNvZGUgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdhYjZhM2MxNzI2MDMwNjc3YjQ1ZmU5OGM1NjdjYTA1Y2U2NWMyNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAxNDoyMzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oIGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmgKaW5kZXggNWQxOGQ3ZDg1YmVmOS4uZDZlMmI2NWY2ZDA1MiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmgKQEAgLTQsMTIgJiM0Mzs0LDE0IEBACiAKICNpZm5kZWYgX19NTUFQX1VOTE9DS19XT1JLX0hfXwogI2RlZmluZSBfX01NQVBfVU5MT0NLX1dPUktfSF9fCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiAKIC8qIGlycV93b3JrIHRvIHJ1biBtbWFwX3JlYWRfdW5sb2NrKCkgaW4gaXJxX3dvcmsgKi8KIHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayB7CiAJc3RydWN0IGlycV93b3JrIGlycV93b3JrOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlhdG9taWNfdCBhY3RpdmU7CiB9OwogCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrLCBtbWFwX3VubG9ja193b3JrKTsKQEAgLTE4LDggJiM0MzsyMCw4IEBAIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIG1tYXBfdW5sb2NrX3dvcmspOwogICogV2UgY2Fubm90IGRvIG1tYXBfcmVhZF91bmxvY2soKSB3aGVuIHRoZSBpcnEgaXMgZGlzYWJsZWQsIGJlY2F1c2Ugb2YKICAqIHJpc2sgdG8gZGVhZGxvY2sgd2l0aCBycV9sb2NrLiBUbyBsb29rIHVwIHZtYSB3aGVuIHRoZSBpcnFzIGFyZQogICogZGlzYWJsZWQsIHdlIG5lZWQgdG8gcnVuIG1tYXBfcmVhZF91bmxvY2soKSBpbiBpcnFfd29yay4gV2UgdXNlIGEKLSAqIHBlcmNwdSB2YXJpYWJsZSB0byBkbyB0aGUgaXJxX3dvcmsuIElmIHRoZSBpcnFfd29yayBpcyBhbHJlYWR5IHVzZWQKLSAqIGJ5IGFub3RoZXIgbG9va3VwLCB3ZSBmYWxsIG92ZXIuCiYjNDM7ICogcGVyY3B1IHZhcmlhYmxlIHRvIGRvIHRoZSBpcnFfd29yay4gVGhlIGFjdGl2ZSBmbGFnIHJlc2VydmVzIHRoZSBzbG90CiYjNDM7ICogYmVmb3JlIG1tYXBfcmVhZF90cnlsb2NrKCkgYW5kIHVudGlsIHRoZSBpcnFfd29yayBjYWxsYmFjayBjb25zdW1lcyBtbS4KICAqLwogc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29ya19wdHIpCiB7CkBAIC0yOSw5ICYjNDM7MzEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3bwogCWlmIChpcnFzX2Rpc2FibGVkKCkpIHsKIAkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkgewogCQkJd29yayA9IHRoaXNfY3B1X3B0cigmYW1wO21tYXBfdW5sb2NrX3dvcmspOwotCQkJaWYgKGlycV93b3JrX2lzX2J1c3koJmFtcDt3b3JrLSZndDtpcnFfd29yaykpIHsKLQkJCQkvKiBjYW5ub3QgcXVldWUgbW9yZSB1cF9yZWFkLCBmYWxsYmFjayAqLwomIzQzOwkJCWlmIChhdG9taWNfY21weGNoZ19hY3F1aXJlKCZhbXA7d29yay0mZ3Q7YWN0aXZlLCAwLCAxKSkgewogCQkJCWlycV93b3JrX2J1c3kgPSB0cnVlOwomIzQzOwkJCQl3b3JrID0gTlVMTDsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC00Niw2ICYjNDM7NDgsMzMgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd28KIAlyZXR1cm4gaXJxX3dvcmtfYnVzeTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZAomIzQzO2JwZl9tbWFwX3VubG9ja19wdXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICp3b3JrKQomIzQzO3sKJiM0MzsJaWYgKHdvcmspCiYjNDM7CQlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDt3b3JrLSZndDthY3RpdmUsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRyeSB0byB0YWtlIG1tLSZndDttbWFwX2xvY2sgZm9yIHJlYWRpbmcgb24gYmVoYWxmIG9mIGEgQlBGIGhlbHBlciB0aGF0IG1heQomIzQzOyAqIHJ1biB3aXRoIElSUXMgZGlzYWJsZWQuIE9uIHN1Y2Nlc3MsICp3b3JrIGlzIHRoZSBzbG90IHRvIGhhbmQgdG8KJiM0MzsgKiBicGZfbW1hcF91bmxvY2tfbW0oKSAoTlVMTCB3aGVuIHRoZSB1bmxvY2sgY2FuIGJlIGRvbmUgaW5saW5lKTsgb24gZmFpbHVyZQomIzQzOyAqIG5vIHNsb3Qgc3RheXMgcmVzZXJ2ZWQgYW5kIHRoZSBjYWxsZXIgbXVzdCBmYWxsIGJhY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3JlYWRfdHJ5bG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCQkJCSBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b3JrKQomIzQzO3sKJiM0MzsJaWYgKGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsod29yaykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7CiYjNDM7CQlicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKCp3b3JrKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX21tYXBfdW5sb2NrX21tKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqd29yaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJaWYgKCF3b3JrKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKaW5kZXggNDFmZTg3ZDczMDJmMi4uMTY2ZmM4ZWZhYjhiMiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuYwpAQCAtNDE1LDcgJiM0Mzs0MTUsNiBAQCBzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLAogCQkJCQkgIHUzMiB0cmFjZV9uciwgYm9vbCB1c2VyLCBib29sIG1heV9mYXVsdCkKIHsKIAlzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmsgPSBOVUxMOwotCWJvb2wgaXJxX3dvcmtfYnVzeSA9IGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoJmFtcDt3b3JrKTsKIAlib29sIGhhc191c2VyX2N0eCA9IHVzZXIgJmFtcDsmYW1wOyBjdXJyZW50ICZhbXA7JmFtcDsgY3VycmVudC0mZ3Q7bW07CiAJc3RydWN0IHN0YWNrX21hcF9idWlsZF9pZF9jYWNoZSBjYWNoZSA9IHt9OwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwpAQCAtNDMwLDcgJiM0Mzs0MjksNyBAQCBzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLAogCSAqIGZhbGxiYWNrIGlzIHVzZWQgZm9yIGtlcm5lbCBzdGFjayAoIXVzZXIpIG9uIGEgc3RhY2ttYXAgd2l0aAogCSAqIGJ1aWxkX2lkLgogCSAqLwotCWlmICghaGFzX3VzZXJfY3R4IHx8IGlycV93b3JrX2J1c3kgfHwgIW1tYXBfcmVhZF90cnlsb2NrKGN1cnJlbnQtJmd0O21tKSkgewomIzQzOwlpZiAoIWhhc191c2VyX2N0eCB8fCAhYnBmX21tYXBfcmVhZF90cnlsb2NrKGN1cnJlbnQtJmd0O21tLCAmYW1wO3dvcmspKSB7CiAJCS8qIGNhbm5vdCBhY2Nlc3MgY3VycmVudC0mZ3Q7bW0sIGZhbGwgYmFjayB0byBpcHMgKi8KIAkJZm9yIChpID0gMDsgaSAmbHQ7IHRyYWNlX25yOyBpJiM0MzsmIzQzOykKIAkJCXN0YWNrX21hcF9idWlsZF9pZF9zZXRfaXAoJmFtcDtpZF9vZmZzW2ldKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdGFza19pdGVyLmMgYi9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jCmluZGV4IGIyNTZmYjljMTIxNGUuLmU2NmUzNDg0ZjkyM2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90YXNrX2l0ZXIuYwpAQCAtNzU1LDcgJiM0Mzs3NTUsNiBAQCBCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsCiB7CiAJc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICp3b3JrID0gTlVMTDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlib29sIGlycV93b3JrX2J1c3kgPSBmYWxzZTsKIAlib29sIF9fbWF5YmVfdW51c2VkIG1tcHV0X25lZWRlZCA9IGZhbHNlOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWludCByZXQgPSAtRU5PRU5UOwpAQCAtNzkyLDkgJiM0Mzs3OTEsNyBAQCBCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsCiAJaWYgKCFtbSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlpcnFfd29ya19idXN5ID0gYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yaygmYW1wO3dvcmspOwotCi0JaWYgKGlycV93b3JrX2J1c3kgfHwgIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkgewomIzQzOwlpZiAoIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhtbSwgJmFtcDt3b3JrKSkgewogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTExOTEsNiAmIzQzOzExODgsOCBAQCBzdGF0aWMgdm9pZCBkb19tbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBpcnFfd29yayAqZW50cnkpCiAKIAl3b3JrID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIGlycV93b3JrKTsKIAltbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcih3b3JrLSZndDttbSk7CiYjNDM7CXdvcmstJmd0O21tID0gTlVMTDsKJiM0MzsJYnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayh3b3JrKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgdGFza19pdGVyX2luaXQodm9pZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgUGF0Y2ggZm9yIFJlYWNoYWJpbGl0eSBhbmQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjb3JlIEJQRiBhcmVhczogYG1tYXBfdW5sb2NrX3dvcmsuaGAsIGBzdGFja21hcC5jYCwgYW5kIGB0YXNrX2l0ZXIuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGFuIGBhdG9taWNfdCBhY3RpdmVgIHRvIGBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmtgLiBUaGUgaW50ZW50IHNlZW1zIHRvIGJlIHJlc2VydmluZyB0aGUgSVJRIHdvcmsgc2xvdCB3aXRoIHRoaXMgbmV3IGF0b21pYyBiZWZvcmUgdGhlIGBtbWFwX3JlYWRfdHJ5bG9jaygpYCBjYWxsLCBob2xkaW5nIGl0IHVudGlsIHRoZSBjYWxsYmFjayBjb25zdW1lcyB0aGUgbWVtb3J5IG1hcC4gVGhleSYjMzk7dmUgYWxzbyBhZGRlZCBvciBtb2RpZmllZCBhIGZldyBmdW5jdGlvbnM6IGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgLCBgYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29ya2AsIGFuZCBgYnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29ya2AuIEl0JiMzOTtzIGFsc28gbWFraW5nIGNoYW5nZXMgdG8gYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBhbmQgYGJwZl9maW5kX3ZtYWAsIHdoaWNoIGlzIGEgQlBGIGhlbHBlci4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIGlmIHRoZSBjaGFuZ2VzIG1ha2Ugc2Vuc2UuIFl1cCwgQlBGIHN0YWNrbWFwcyBhbmQgdGhlIHRhc2sgaXRlcmF0b3JzIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgQlBGIGZlYXR1cmVzLiBHb29kLiBUaGlzIGlzIHNvbWV0aGluZyB3b3J0aCBkaWdnaW5nIGludG8uIFRoZSBwYXRjaCBzZWVtcyBmdW5jdGlvbmFsLCBzbyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzLiBBbHJpZ2h0LCBpdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGludGVyZXN0aW5nIGJpdHMgYXJlOgotICAgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCAodGhhdCYjMzk7cyBgc3RhdGljYCBpbiBgc3RhY2ttYXAuY2ApCi0gICBgYnBmX2ZpbmRfdm1hYCAoYSBCUEYgaGVscGVyIGluIGB0YXNrX2l0ZXIuY2ApLgotICAgYGRvX21tYXBfcmVhZF91bmxvY2tgIChzdGF0aWMsIGluIGB0YXNrX2l0ZXIuY2ApCgpIb2xkIG9uLCBJIHNlZSBgYnBmX2ZpbmRfdm1hYCBkZWZpbmVkIHdpdGggYEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCAuLi4pYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoZSBhY3R1YWwgc3ltYm9sIG5hbWUgaXMsIGJlY2F1c2UgaXQmIzM5O3MgdXN1YWxseSBqdXN0IGBicGZfZmluZF92bWFgLiBHb3R0YSBncmVwIGZvciBgYnBmX2ZpbmRfdm1hYCBhbmQgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCB0byBjb25maXJtIHRoYXQuIFRoYXQgc2hvdWxkIGdldCBtZSBzdGFydGVkIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZpbmRfdm1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMzktXHRjYXNlIEJQRl9GVU5DX2ZpbmRfdm1hOlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjI0MDpcdFx0cmV0dXJuIFx1MDAyNmJwZl9maW5kX3ZtYV9wcm90bztcbmtlcm5lbC9icGYvaGVscGVycy5jLTIyNDEtXHRkZWZhdWx0OlxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM9NzM3PXN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHRhc2tfdm1hX3JlZ19pbmZvID0ge1xuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzUyLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo3NTM6QlBGX0NBTExfNShicGZfZmluZF92bWEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB1NjQsIHN0YXJ0LFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03NTQtXHQgICBicGZfY2FsbGJhY2tfdCwgY2FsbGJhY2tfZm4sIHZvaWQgKiwgY2FsbGJhY2tfY3R4LCB1NjQsIGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtODE0LVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo4MTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9maW5kX3ZtYV9wcm90byA9IHtcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6ODE2Olx0LmZ1bmNcdFx0PSBicGZfZmluZF92bWEsXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTgxNy1cdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTYzNT1zdGF0aWMgaW50IHNldF9maW5kX3ZtYV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjM5LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NjQwOlx0LyogYnBmX2ZpbmRfdm1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGFkZHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTY0MS1cdCAqICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfZm4sIHZvaWQgKmNhbGxiYWNrX2N0eCwgdTY0IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEJQRiBGdW5jdGlvbiBEZWZpbml0aW9uKioKCkFscmlnaHQsIEkgc2VlIHRoaXMgYGJwZl9maW5kX3ZtYWAgZnVuY3Rpb24gZGVmaW5lZCB3aXRoIHRoYXQgYEJQRl9DQUxMXzVgIG1hY3JvLiBIbW0sIHRoYXQmIzM5O3Mgbm90IHRoZSB1c3VhbCB3YXkgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGl0LCBhbmQgaXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgYEJQRl9DQUxMXzVgIGlzIGV4cGFuZGluZyB0byBoZXJlLiBUaGF0IG1hY3JvIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20uIElzIHRoaXMgYSBjdXN0b20gQlBGIGhlbHBlciBjYWxsPyBJcyBpdCByZWxhdGVkIHRvIHNvbWUgc3BlY2lmaWMgQlBGIGluZnJhc3RydWN0dXJlPyBJcyBpdCB1c2luZyBhIGRpZmZlcmVudCBhcmd1bWVudCBwYXNzaW5nIGNvbnZlbnRpb24/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgbWFjcm8gZGVmaW5pdGlvbiBpdHNlbGYuIEtub3dpbmcgd2hhdCBpdCBleHBhbmRzIHRvIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgQlBGIHN5c3RlbSBhbmQgd2hhdCBraW5kIG9mIGNvbnRyb2wgaXQgaGFzIG92ZXIgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWFzIChWTUFzKS4gVGhpcyBpbml0aWFsIGxvb2sgaXMgc3VnZ2VzdGluZyB0byBtZSB0aGF0IEkgbmVlZCB0byBzdGVwIGJhY2sgYW5kIHVuZGVyc3RhbmQgdGhlIGJ1aWxkaW5nIGJsb2NrcyBiZWZvcmUgYW5hbHl6aW5nIHRoZSBmdW5jdGlvbiBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEJQRl9DQUxMXzUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTcwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgQlBGIEZ1bmN0aW9uIENhbGxzKioKCkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQlBGX0NBTExfNWAgZGVmaW5pdGlvbiBsaXZlcy4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEJQRiwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCBoZWFkZXJzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2Qgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAsIHdoaWNoIGlzIGEgY29tbW9uIHBsYWNlIGZvciBCUEYtcmVsYXRlZCBkZWZpbml0aW9ucy4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCB0aGUgbG9naWNhbCBuZXh0IHBsYWNlIHdvdWxkIGJlIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRpZ2dpbmcgaW50byBCUEYgaW5mcmFzdHJ1Y3R1cmUgYW5kIHN5c2NhbGwgaW1wbGVtZW50YXRpb25zLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGJlZ2luIG15IHNlYXJjaC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGZpbHRlci5oYCBmaXJzdCwgYW5kIGlmIHRoYXQgZG9lc24mIzM5O3QgeWllbGQgcmVzdWx0cywgSSYjMzk7bGwgbW92ZSBvbiB0byBgYnBmLmhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgQlBGX0NBTExfNSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9MjYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjgtI2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjk6I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBDYWxsIE1hY3JvKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBCUEZfQ0FMTF94YCBtYWNyby4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0IGV4cGFuZHMgdG8sIGVzcGVjaWFsbHkgd2l0aGluIHRoaXMgQlBGIGNvbnRleHQuIEtub3dpbmcgdGhlIGV4YWN0IGV4cGFuc2lvbiBpcyBjcnVjaWFsIOKAkyBpdCByZXZlYWxzIHRoZSBtZWNoYW5pc20sIHdoZXRoZXIgaXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uIGNhbGwsIGEgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UsIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSBtb3JlIGNvbXBsZXggcHJlcHJvY2Vzc29yIHRyaWNrZXJ5LiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGUgYnl0ZWNvZGUgbGV2ZWwuIEl0IGluZmx1ZW5jZXMgaG93IEkgd291bGQgYXBwcm9hY2ggZGVidWdnaW5nLCBvcHRpbWl6YXRpb24sIG9yIGV2ZW4gc2VjdXJpdHkgYW5hbHlzaXMgaWYgbmVlZGVkLiBUaW1lIHRvIGNoZWNrIHRoZSBpbmNsdWRlcywgdHJhY2UgdGhlIG1hY3JvIGRlZmluaXRpb24gYW5kIHNlZSB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEJQRl9DQUxMX3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9MjYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTAtXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYxMTojZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVx0XHRcdFx0XHQgICAgICAgXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEyLVx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjk4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAg4oCTIHRoYXQmIzM5O3MgdGhlIG5hdHVyYWwgcGxhY2UgdG8gYmVnaW4sIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDYxMS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYXJlIHN0cnVjdHVyZWQsIGFuZCBzcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gZGVmaW5pbmcgYW5kIGhhbmRsaW5nIGZpbHRlciBwcm9ncmFtcyB0aGVyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2NrczogdGhlIGluc3RydWN0aW9uIHNldCBkZWZpbml0aW9ucywgYW55IGltbWVkaWF0ZSBvciByZWdpc3RlciB2YWx1ZSByZXByZXNlbnRhdGlvbnMsIGFuZCB0aGUgbWVjaGFuaXNtcyBmb3IgcmVwcmVzZW50aW5nIHByb2dyYW0gYnJhbmNoZXMuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIHN0cnVjdHVyZXMgdGhhdCBtYWtlIHVwIHRoZSBCUEYgYnl0ZWNvZGUgYW5kIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIHRvIHRoZSBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhhY3QgbWVtb3J5IGxheW91dHMgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIGxvdy1sZXZlbCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFx0XHRcdFx0ICAgICAgKHVuc2lnbmVkIGxvbmcpMCwgKHQpMCkpKSBhXG4gNjAxOlx0I2RlZmluZSBfX0JQRl9WIHZvaWRcbiA2MDI6XHQjZGVmaW5lIF9fQlBGX05cbiA2MDM6XHRcbiA2MDQ6XHQjZGVmaW5lIF9fQlBGX0RFQ0xfQVJHUyh0LCBhKSB0ICAgYVxuIDYwNTpcdCNkZWZpbmUgX19CUEZfREVDTF9SRUdTKHQsIGEpIHU2NCBhXG4gNjA2Olx0XG4gNjA3Olx0I2RlZmluZSBfX0JQRl9QQUQobilcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYwODpcdFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxuIDYwOTpcdFx0XHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXG4gNjEwOlx0XG4gNjExOlx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEyOlx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEzOlx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXG4gNjE0Olx0XHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXG4gNjE1Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXG4gNjE2Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXG4gNjE3Olx0XHR7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYxODpcdFx0XHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXG4gNjE5Olx0XHR9XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMDpcdFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMTpcdFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxuIDYyMjpcdFxuIDYyMzpcdCNkZWZpbmUgX19OT0FUVFJcbiA2MjQ6XHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI1Olx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyNjpcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2Mjc6XHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI4Olx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyOTpcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEZ1bmN0aW9uIENhbGxzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgLi4uKWAgbWFjcm8gZGVmaW5pdGlvbi4gUmlnaHQsIGl0JiMzOTtzIGRlZmluaW5nIGJvdGggYHU2NCBicGZfZmluZF92bWEoLi4uKWAgYW5kIGEgc3RhdGljLCBpbmxpbmUgdmVyc2lvbiwgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IF9fX19icGZfZmluZF92bWEoLi4uKWAuIFRoaXMgdGVsbHMgbWUgdGhlIG5vbi1pbmxpbmVkIGZ1bmN0aW9uIGlzICpzcGVjaWZpY2FsbHkqIGBicGZfZmluZF92bWFgLiBJdCYjMzk7cyBnb29kIHRvIGtlZXAgdHJhY2sgb2YgdGhpcyBkaXN0aW5jdGlvbiBpbiBCUEYgZnVuY3Rpb25zLCBvZiB3aGljaCB0aGlzIGlzIG9uZS4KCk5vdywgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgaW4gYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHN0YXRpYyBuYXR1cmUuIFRoaXMgY291bGQgaW1wYWN0IGhvdyBpdCYjMzk7cyBoYW5kbGVkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgdmlzaWJpbGl0eS4gU28sIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiB0aGF0JiMzOTtzIGEgYHN0YXRpY2AgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVGhpcyBjb3VsZCBiZSByZWxldmFudCBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIEJQRiBjb21wb25lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhY2ttYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmM9MTgzPXN0cnVjdCBzdGFja19tYXBfY2FjaGVkX3ZtYSB7XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTE5MS0vKlxua2VybmVsL2JwZi9zdGFja21hcC5jOjE5MjogKiBQZXIgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoKSBjYWxsIGNhY2hlIG9mIHRoZSBsYXN0IFZNQSB3aXRoIGEgYnVpbGQgSURcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xOTMtICogcmVzb2x2ZWQgYW5kIHRoZSBsYXN0IFZNQSB3aXRoIG5vIHVzYWJsZSBidWlsZCBJRC4gQWRqYWNlbnQgc3RhY2sgZnJhbWVzIHRlbmRcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9MzIzPXN0YXRpYyB2b2lkIHN0YWNrX21hcF91bmxvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2spXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTMzMi1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzozMzM6c3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXRfc2xlZXBhYmxlKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnMsXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzM0LVx0XHRcdFx0XHRcdCAgICB1MzIgdHJhY2VfbnIpXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTQxMy0gKi9cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo0MTQ6c3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2Zmcyxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy00MTUtXHRcdFx0XHRcdCAgdTMyIHRyYWNlX25yLCBib29sIHVzZXIsIGJvb2wgbWF5X2ZhdWx0KVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy00MjMtXHRpZiAobWF5X2ZhdWx0IFx1MDAyNlx1MDAyNiBoYXNfdXNlcl9jdHgpIHtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo0MjQ6XHRcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0X3NsZWVwYWJsZShpZF9vZmZzLCB0cmFjZV9ucik7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDI1LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTUwNj1zdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2tpZChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy01NDUtXHRcdFx0aWRfb2Zmc1tpXS5pcCA9IGlwc1tpXTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo1NDY6XHRcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGlkX29mZnMsIHRyYWNlX25yLCB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy01NDctXHRcdHRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpO1xuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz02ODI9c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTc1Ny1cdGlmICh1c2VyX2J1aWxkX2lkKVxua2VybmVsL2JwZi9zdGFja21hcC5jOjc1ODpcdFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoYnVmLCB0cmFjZV9uciwgdXNlciwgbWF5X2ZhdWx0KTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKgoKT2theSwgc28gYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCwgd2hpY2ggaXMgZ29vZC4gSXQmIzM5O3MgbGlrZWx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZS4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIGtub3dpbmcgd2hlcmUgaXQgKmlzKiB1c2VkLCBzbyBJIGNhbiB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBSaWdodCBub3cgSSBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgYnkgYF9fYnBmX2dldF9zdGFja2lkYCBhbmQgYF9fYnBmX2dldF9zdGFja2AuIEhtbSwgYW5kIGl0IGxvb2tzIGxpa2UgYm90aCBgX19icGZfZ2V0X3N0YWNraWRgIGFuZCBgX19icGZfZ2V0X3N0YWNrYCBhcmUgYWxzbyBzdGF0aWMgZnVuY3Rpb25zLiBUaGlzIGxpbWl0cyB0aGluZ3MgYSBsaXR0bGUgYml0LiBOb3cgSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVydGhlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGNhbGwgdGhlc2UgdHdvLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIEkgbmVlZCB0byBmb2xsb3cgdGhpcyBjYWxsIGNoYWluIHVwIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIGhvdyB0aGlzIG9mZnNldCBpcyBiZWluZyB1dGlsaXplZCBpbiB0aGUgQlBGIHJ1bnRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX2dldF9zdGFja2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGFja21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhY2ttYXAuYz00NzA9Z2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTUwNS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo1MDY6c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNraWQoc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy01MDctXHRcdFx0ICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz01ODA9QlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAwLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjYwMTpcdHJldHVybiBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAyLX1cbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NjI1PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjU0LVx0XHR0cmFjZS1cdTAwM2VuciA9IG5yX2tlcm5lbDtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NTU6XHRcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NTYtXHR9IGVsc2UgeyAvKiB1c2VyICovXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2My1cdFx0ZmxhZ3MgPSAoZmxhZ3MgXHUwMDI2IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NjQ6XHRcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NjUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBCUEYgc3RhY2sgSUQgZnVuY3Rpb25zLCBiYXNlZCBvbiB0aG9zZSBub3RlczoKCioqQlBGIFN0YWNrIFRyYWNpbmcgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UgZ3JhYiBzdGFjayBJRHMgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgYnBmX2dldF9zdGFja2lkYCBhbmQgYGJwZl9nZXRfc3RhY2tpZF9wZWAgYXJlIHRoZSBjb3JlIEJQRiBoZWxwZXJzIHdlJiMzOTtyZSB1c2luZyBmb3IgZ2V0dGluZyB0aG9zZSBzdGFjayB0cmFjZXMuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCB0aGVuIEkgbm90aWNlZCBhIGJpdCBvZiBhbiBhYnN0cmFjdGlvbiBsYXllci4gSXQgbG9va3MgbGlrZSBgX19icGZfZ2V0X3N0YWNrYCBpcyB0aGUgcmVhbCB3b3JraG9yc2UsIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIHRoYXQgYm90aCBgYnBmX2dldF9zdGFja2AgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYCBjYWxsIGludG8uIFNvLCBgYnBmX2dldF9zdGFja2AgYW5kIGl0cyBQRSB2YXJpYW50IGFyZSBsaWtlbHkgd3JhcHBlcnMgb3IgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHNvbWUgaGlnaGVyLWxldmVsIGRldGFpbHMsIGJ1dCB1bHRpbWF0ZWx5IHRoZXkgcmVseSBvbiBgX19icGZfZ2V0X3N0YWNrYCB0byBhY3R1YWxseSBkbyB0aGUgaGFyZCBwYXJ0IG9mIGNhcHR1cmluZyB0aGUgc3RhY2sgZGF0YS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGNhbGxzIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2Ygc3RhY2sgdHJhY2luZyB3aXRoaW4gdGhlIEJQRiBlbnZpcm9ubWVudC4gS25vd2luZyB0aGUgaW50ZXJuYWxzIGFuZCB0aGUgaGVscGVycyBpcyBpbXBvcnRhbnQgd2hlbiB5b3UmIzM5O3JlIHdvcmtpbmcgd2l0aCB0aGlzIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19icGZfZ2V0X3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGFja21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhY2ttYXAuYz00NzA9Z2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTUwNS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo1MDY6c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNraWQoc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy01MDctXHRcdFx0ICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz01ODA9QlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAwLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjYwMTpcdHJldHVybiBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAyLX1cbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NjI1PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjU0LVx0XHR0cmFjZS1cdTAwM2VuciA9IG5yX2tlcm5lbDtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NTU6XHRcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NTYtXHR9IGVsc2UgeyAvKiB1c2VyICovXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2My1cdFx0ZmxhZ3MgPSAoZmxhZ3MgXHUwMDI2IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NjQ6XHRcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NjUtXHR9XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTY3Mz1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3BlID0ge1xuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02ODEtXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NjgyOnN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY4My1cdFx0XHQgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZV9pbixcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NzcxPUJQRl9DQUxMXzQoYnBmX2dldF9zdGFjaywgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzczLXtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo3NzQ6XHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xua2VybmVsL2JwZi9zdGFja21hcC5jLTc3NS19XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTc4Nz1CUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03ODkte1xua2VybmVsL2JwZi9zdGFja21hcC5jOjc5MDpcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgdHJ1ZSAvKiBtYXlfZmF1bHQgKi8pO1xua2VybmVsL2JwZi9zdGFja21hcC5jLTc5MS19XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTgwMz1zdGF0aWMgbG9uZyBfX2JwZl9nZXRfdGFza19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmJ1ZiwgdTMyIHNpemUsXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTgxMy1cdGlmIChyZWdzKVxua2VybmVsL2JwZi9zdGFja21hcC5jOjgxNDpcdFx0cmVzID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIHRhc2ssIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIG1heV9mYXVsdCk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODE1LVx0cHV0X3Rhc2tfc3RhY2sodGFzayk7XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTg1ND1CUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04NjQtXHRpZiAoIShldmVudC1cdTAwM2VhdHRyLnNhbXBsZV90eXBlIFx1MDAyNiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pKVxua2VybmVsL2JwZi9zdGFja21hcC5jOjg2NTpcdFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04NjYtXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTg4NC1cdFx0dHJhY2UtXHUwMDNlbnIgPSBucl9rZXJuZWw7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODg1Olx0XHRlcnIgPSBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgdHJhY2UsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xua2VybmVsL2JwZi9zdGFja21hcC5jLTg4Ni1cbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODk2LVx0XHRmbGFncyA9IChmbGFncyBcdTAwMjYgfkJQRl9GX1NLSVBfRklFTERfTUFTSykgfCBza2lwO1xua2VybmVsL2JwZi9zdGFja21hcC5jOjg5NzpcdFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIHRyYWNlLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04OTgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQlBGIFN0YWNrIGFuZCBWTUEgSGVscGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgQlBGIHN0YWNrIGFuZCBWTUEgaGVscGVycy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRhcmdldCB0aGVzZSBmdW5jdGlvbnMgZm9yIGZ1enppbmc6IGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfcGVgLCBhbmQgYGJwZl9maW5kX3ZtYWAuIFRob3NlIGFyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzLgoKSG9sZCBvbiBhIHNlY29uZCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZy4uLiBgYnBmX2dldF90YXNrX3N0YWNrYCBkb2VzbiYjMzk7dCAqZGlyZWN0bHkqIGNhbGwgYF9fYnBmX2dldF9zdGFja2AsIGl0IGdvZXMgdGhyb3VnaCBgX19icGZfZ2V0X3Rhc2tfc3RhY2tgLCB3aGljaCB0aGVuIGNhbGxzIGBfX2JwZl9nZXRfc3RhY2tgLiBHb29kIHRvIGtub3csIGJ1dCBkb2VzbiYjMzk7dCBjaGFuZ2UgbXkgYXBwcm9hY2guCgpSaWdodCwgYmFjayB0byB0aGUgbWFpbiBwb2ludC4gVGhlc2UgYXJlICpCUEYgaGVscGVycyosIG5vdCBleHBvcnRlZCBrZXJuZWwgZnVuY3Rpb25zLCBtZWFuaW5nIHRoZXkmIzM5O3JlIG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIEJQRiBwcm9ncmFtcy4gU3l6a2FsbGVyJiMzOTtzIHNldHVwIGlzIHBlcmZlY3QgZm9yIHRoaXM7IGl0IGNhbiBmdXp6IEJQRiBwcm9ncmFtcywgd2hpY2gsIGluIHR1cm4sIGNhbiBjYWxsIHRoZXNlIGhlbHBlcnMuIEVhc3kuIFRoZSByZWFsIEMgZnVuY3Rpb24gbmFtZXMgYXJlIGV4YWN0bHkgd2hhdCB5b3UmIzM5O2QgZXhwZWN0OiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tgLCBhbmQgc28gb24uCgpXYWl0IGEgc2VjLi4uIGxvb2tpbmcgY2xvc2VyLCBgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrLCAuLi4pYCAqZGVmaW5lcyogYGJwZl9nZXRfc3RhY2tgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9sczoKCiogICBgYnBmX2ZpbmRfdm1hYAoqICAgYGJwZl9nZXRfc3RhY2tpZGAKKiAgIGBicGZfZ2V0X3N0YWNraWRfcGVgCiogICBgYnBmX2dldF9zdGFja2AKKiAgIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAKKiAgIGBicGZfZ2V0X3Rhc2tfc3RhY2tgCiogICBgYnBmX2dldF9zdGFja19wZWAKCk9uZSBsYXN0IHRoaW5nIHRvIGNoZWNrLi4uIGNvbmZpcm0gYGJwZl9nZXRfdGFza19zdGFja2AgdXNlcyBgQlBGX0NBTExgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQ0FMTC4qYnBmX2dldF90YXNrX3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGFja21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhY2ttYXAuYz04MDM9c3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MTktXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODIwOkJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWYsXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODIxLVx0ICAgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz04MjY9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19wcm90byA9IHtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODM2LVxua2VybmVsL2JwZi9zdGFja21hcC5jOjgzNzpCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1Zixcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MzgtXHQgICB1MzIsIHNpemUsIHU2NCwgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU3RhY2sgVHJhY2UgUmV0cmlldmFsKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgQlBGIGFuZCByZXRyaWV2aW5nIHRhc2sgc3RhY2tzIOKAkyBzcGVjaWZpY2FsbHksIGBicGZfZ2V0X3Rhc2tfc3RhY2tgIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZm9jdXMuIE5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB3b3JrLiBgZG9fbW1hcF9yZWFkX3VubG9ja2AgaW1tZWRpYXRlbHkgY29tZXMgdG8gbWluZC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGxvY2F0ZWQgd2l0aGluIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYCwgYW5kIGl0JiMzOTtzIHVzZWQgYXMgYW4gYGlycV93b3JrYCBjYWxsYmFjay4gV2hpbGUgaXQmIzM5O3MgaW52b2x2ZWQgaW4gdGhpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzLCBhbmQgcGFydCBvZiB0aGUgbW9kaWZpZWQgbG9naWMsIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCwgZXh0ZXJuYWwgQVBJIGVudHJ5cG9pbnQuIEFuZCBzaW5jZSB0aGUgcHJvbXB0JiMzOTtzIHByZWZlcmVuY2UgaXMgY2xlYXIg4oCTIGZhdm9yaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHRoZXNlIGludGVybmFsIGhlbHBlcnMg4oCTIHRoZSBwcmltYXJ5IGFwcHJvYWNoIHNob3VsZCBwcm9iYWJseSByZXZvbHZlIGFyb3VuZCB0aGUgQlBGIGhlbHBlcnMgdGhlbXNlbHZlcy4gU28gbGV0JiMzOTtzIGZvY3VzIG9uIHRob3NlLgoKTm93LCBhbiBlc3NlbnRpYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hldGhlciBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gVGhlIGNvZGUgaXMgc3ByZWFkIGFjcm9zcyBga2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhgLCBga2VybmVsL2JwZi9zdGFja21hcC5jYCwgYW5kIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYC4gSXQmIzM5O3MgY29tcGlsZWQsIGl0IHNlZW1zLCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3MuIFRoYXQgc2hvdWxkIG5haWwgZG93biB0aGUgYnVpbGQtdGltZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhY2ttYXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0zMD1pZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIE9iamVjdCBGaWxlcyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgc3RhY2ttYXAub2AgZ2V0cyBidWlsdC4gSW50ZXJlc3RpbmcuIEl0JiMzOTtzIGNvbXBpbGVkIHNwZWNpZmljYWxseSB3aGVuIHdlJiMzOTt2ZSBnb3QgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19QRVJGX0VWRU5UU2AgZW5hYmxlZC4gVGhpcyBjb25uZWN0aW9uIGlzIGtleS4gSSBpbW1lZGlhdGVseSBrbm93IHRoaXMgaW5kaWNhdGVzIGEgZGVwZW5kZW5jeS4gVGhlIHN0YWNrbWFwIGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGFuZC9vciBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIOKAkyBvdGhlcndpc2UgaXQgd291bGRuJiMzOTt0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgbGlrZSB0aGlzLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHdoeSBpdCBuZWVkcyAqYm90aCogc3lzY2FsbCBhY2Nlc3MgYW5kIHBlcmYgZXZlbnQgaW50ZWdyYXRpb24sIGFuZCBob3cgc3RhY2ttYXBzIGZhY2lsaXRhdGVzIHRoYXQgaW50ZWdyYXRpb24uIElzIGl0IHJlbGF0ZWQgdG8gdHJhY2luZywgcGVyaGFwcz8gT3IgbWF5YmUgdXNpbmcgcGVyZiBldmVudHMgZGF0YSB3aXRoaW4gQlBGIHByb2dyYW1zIGZvciBtb3JlIG51YW5jZWQgYW5hbHlzaXM/IFRoaXMgaXMgYSBicmVhZGNydW1iIHRoYXQgcmVxdWlyZXMgc29tZSBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbiBpbnRvIGhvdyBpdCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXNrX2l0ZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT05PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNjYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgQlBGIEZ1bmN0aW9uYWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIHJlcXVpcmVtZW50cyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSBrbm93IEkmIzM5O2xsIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUEVSRl9FVkVOVFNgIHRvIGdldCB0aGlzIEJQRiBzdHVmZiB1cCBhbmQgcnVubmluZy4gR29vZCBzdGFydGluZyBwb2ludC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXNuJiMzOTt0IGNvbmRpdGlvbmFsbHkgZW5hYmxlZCBieSBzb21lIG90aGVyIG9ic2N1cmUgY29uZmlnIG9wdGlvbi4gTm9wZSwgbG9va3MgbGlrZSBhIHN0YW5kYXJkLCBzZWxmLWNvbnRhaW5lZCBjb25maWcuIEZpbmUuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBpbXBvcnRpbmcgdGhhdCBga2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhgIGhlYWRlci4gQWgsIGludGVyZXN0aW5nLCBpdCYjMzk7cyB1c2VkIHdpdGhpbiBga2VybmVsL2JwZi9zdGFja21hcC5jYCBhbmQgYGtlcm5lbC9icGYvdGFza19pdGVyLmNgLiBUaGF0IGdpdmVzIG1lIGEgY2x1ZSBhYm91dCB3aGVyZSB0aGlzIHVubG9jayB3b3JrIGlzIGJlaW5nIHRyaWdnZXJlZCBhbmQgaGFuZGxlZCBpbiB0aGUgQlBGIGNvbnRleHQuIEdvb2QgdG8ga25vdy4KCk5leHQsIEkgbmVlZCB0byBrbm93IGFib3V0IGBicGZfZmluZF92bWFgLiBBcmUgdGhlcmUgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBtYWNyb3MgYXQgcGxheSB0aGVyZT8gSSBzaG91bGQgY2hlY2sgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIHNvbWUgc3BlY2lmaWMgY29uZmlncyB0byB3b3JrLCBvciBpcyBpdCBhbHdheXMgYXZhaWxhYmxlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZmluZF92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0yMDY3PWJwZl9iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIzOS1cdGNhc2UgQlBGX0ZVTkNfZmluZF92bWE6XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMjQwOlx0XHRyZXR1cm4gXHUwMDI2YnBmX2ZpbmRfdm1hX3Byb3RvO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjI0MS1cdGRlZmF1bHQ6XG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03Mzc9c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdGFza192bWFfcmVnX2luZm8gPSB7XG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03NTItXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjc1MzpCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTc1NC1cdCAgIGJwZl9jYWxsYmFja190LCBjYWxsYmFja19mbiwgdm9pZCAqLCBjYWxsYmFja19jdHgsIHU2NCwgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy04MTQtXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjgxNTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2ZpbmRfdm1hX3Byb3RvID0ge1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo4MTY6XHQuZnVuY1x0XHQ9IGJwZl9maW5kX3ZtYSxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtODE3LVx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NjM1PXN0YXRpYyBpbnQgc2V0X2ZpbmRfdm1hX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk2Mzkte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk2NDA6XHQvKiBicGZfZmluZF92bWEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgYWRkcixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjQxLVx0ICogICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19mbiwgdm9pZCAqY2FsbGJhY2tfY3R4LCB1NjQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYnBmX21tYXBfcmVhZF90cnlsb2NrIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBicGZfZmluZF92bWFgIGlzIHJlbGlhYmx5IHByZXNlbnQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBNeSBmb2N1cyBub3cgaXMgb24gaG93IHRoaXMgcmVjZW50IHBhdGNoIGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBgbW1hcF91bmxvY2tfd29ya2AgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oYC4KCkluaXRpYWxseSwgSSBzZWUgdGhhdCB0aGUgY29kZSBoYXMgY29uZGl0aW9uYWwgYmVoYXZpb3IgYmFzZWQgb24gYENPTkZJR19QUkVFTVBUX1JUYC4gVGhlIG9yaWdpbmFsIGNvZGUgcHJlc2VudHMgc2VwYXJhdGUgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgcmVhbC10aW1lIGNvbmZpZ3VyYXRpb24uIEJ1dCBoYW5nIG9uLCB0aGUgcGF0Y2ggKm1vZGlmaWVzKiB0aGUgYnJhbmNoIHdoZXJlIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgKm5vdCogZW5hYmxlZCwgdGhlIG9uZSB3aXRoIGBhdG9taWNfY21weGNoZ19hY3F1aXJlYC4gVGhlcmVmb3JlLCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLCBpdCYjMzk7cyBhY3R1YWxseSBpcnJlbGV2YW50IGlmIHdlIGVuYWJsZSBgQ09ORklHX1BSRUVNUFRfUlRgIG9yIG5vdC4gVGhpcyBpcyBrZXksIGFzIGl0IHNpbXBsaWZpZXMgbXkgdGVzdGluZyBzdHJhdGVneS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpYCBwYXRoLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjazsgdGhlIHBhdGNoIG1ha2VzIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGxvZ2ljLiBJbnN0ZWFkIG9mIHRoZSBgaXJxX3dvcmtfaXNfYnVzeWAgY2hlY2ssIGl0IG5vdyByZWxpZXMgb24gYGF0b21pY19jbXB4Y2hnX2FjcXVpcmVgLiBTbyBpdCBub3cgZGlyZWN0bHkgdHJpZ2dlcnMgdGhlIGBpcnFfd29ya19idXN5ID0gdHJ1ZWAgcGF0aCB3aGVuIHRoZSBhdG9taWMgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwuIFRoaXMgY29uZmlybXMgbXkgZWFybGllciBhc3Nlc3NtZW50IC0gd2UgKmRvbiYjMzk7dCogbmVlZCBgQ09ORklHX1BSRUVNUFRfUlRgIGVuYWJsZWQgdG8gb2JzZXJ2ZSB0aGUgcGF0Y2gmIzM5O3MgZWZmZWN0cy4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBjb3JlIGhlbHBlcnMgYW5kIGVuc3VyZSBJJiMzOTttIGFjY291bnRpbmcgZm9yIHRoZW0uIFNwZWNpZmljYWxseSB0aGUgZm9sbG93aW5nIGFyZSBCUEYgaGVscGVycyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG1vZGlmaWVkIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGJlaGF2aW9yOiBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAsIGBicGZfZ2V0X3N0YWNraWRfcGVgLCBgYnBmX2dldF9zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF9zdGFja19wZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVzZSBhcmUgYWxsIGNvbnNpZGVyZWQgaW4gbXkgdGVzdCBzdWl0ZSwgb3IgYXQgbGVhc3QgY29uZmlybWVkLgoKRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgc2NhbiBmb3IgKmFueSogb3RoZXIgY2FsbGVycyBvZiBgYnBmX21tYXBfcmVhZF90cnlsb2NrYCBvdXRzaWRlIG9mIHRoZXNlIGtub3duIEJQRiBoZWxwZXJzLiBUaGlzIGlzIGEgc3RhbmRhcmQgY29kZSByZXZpZXcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21tYXBfcmVhZF90cnlsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmg9NTI9YnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmspXG4tLVxua2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmgtNjMtICovXG5rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaDo2NDpzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21tYXBfcmVhZF90cnlsb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxua2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmgtNjUtXHRcdFx0XHRcdCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b3JrKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz00MTQ9c3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2Zmcyxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDMxLVx0ICovXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NDMyOlx0aWYgKCFoYXNfdXNlcl9jdHggfHwgIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhjdXJyZW50LVx1MDAzZW1tLCBcdTAwMjZ3b3JrKSkge1xua2VybmVsL2JwZi9zdGFja21hcC5jLTQzMy1cdFx0LyogY2Fubm90IGFjY2VzcyBjdXJyZW50LVx1MDAzZW1tLCBmYWxsIGJhY2sgdG8gaXBzICovXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03NTM9QlBGX0NBTExfNShicGZfZmluZF92bWEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB1NjQsIHN0YXJ0LFxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzkzLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo3OTQ6XHRpZiAoIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhtbSwgXHUwMDI2d29yaykpIHtcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzk1LVx0XHRyZXQgPSAtRUJVU1k7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBCUEYgU3RhY2sgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGxpa2UgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGV4YW1pbmUgYXJlIHJlYWxseSBjZW50ZXJlZCBhcm91bmQgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBhbmQgYGJwZl9maW5kX3ZtYWAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgaXMgb25seSBjYWxsZWQgYnkgdGhlIHN0YWNrbWFwIGhlbHBlcnMsIHdoaWNoIG5hcnJvd3MgZG93biBvdXIgYXJlYSBvZiBpbnRlcmVzdCBzaWduaWZpY2FudGx5LgoKVGhhdCBtZWFucyB0aGUgY29yZSBzeW1ib2xzIHRvIHplcm8gaW4gb24gYXJlOiBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAsIGBicGZfZ2V0X3N0YWNraWRfcGVgLCBgYnBmX2dldF9zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF9zdGFja19wZWAuIEJ1dCwgd2FpdCBhIG1vbWVudCwgaXQgbG9va3MgbGlrZSBgYnBmX2dldF90YXNrX3N0YWNrYCBtaWdodCBub3QgYWN0dWFsbHkgdXNlIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBfX2JwZl9nZXRfdGFza19zdGFja2AgZGlyZWN0bHkgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19icGZfZ2V0X3Rhc2tfc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGFja21hcC5jPTc5Mz1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTgwMi1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo4MDM6c3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgwNC1cdFx0XHRcdCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz04MjA9QlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1Zixcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODIyLXtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo4MjM6XHRyZXR1cm4gX19icGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODI0LX1cbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9ODM3PUJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04Mzkte1xua2VybmVsL2JwZi9zdGFja21hcC5jOjg0MDpcdHJldHVybiBfX2JwZl9nZXRfdGFza19zdGFjayh0YXNrLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qICFtYXlfZmF1bHQgKi8pO1xua2VybmVsL2JwZi9zdGFja21hcC5jLTg0MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDc1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFN0YWNrIFRyYWNlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgZ2V0dGluZyB0YXNrIHN0YWNrIGluZm9ybWF0aW9uLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYF9fYnBmX2dldF90YXNrX3N0YWNrYCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgY29kZS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBhY3F1aXJlcyB0aGUgc3RhY2sgZGF0YS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSB0YXJnZXQgdGFzayYjMzk7cyBtZW1vcnkgbGF5b3V0LCBwYXJ0aWN1bGFybHkgdGhlIGZyYW1lIHBvaW50ZXIgb3Igc3RhY2sgcG9pbnRlciBtYW5pcHVsYXRpb24gaXQgbWlnaHQgYmUgZW1wbG95aW5nLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgc3RhY2sgdW53aW5kaW5nIGluIHRoZSBjb250ZXh0IG9mIEJQRiBzZWVtIGxpa2VseSBjYW5kaWRhdGVzIGZvciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiDigJMgaG93IGl0IGRlYWxzIHdpdGggc2l0dWF0aW9ucyB3aGVyZSBpdCBjYW4mIzM5O3QgcmVsaWFibHkgcmVhZCB0aGUgc3RhY2ssIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBiZWVuIGRlbGliZXJhdGVseSByZXN0cmljdGVkLiBMZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIHVzaW5nIHRoZSBzYW1lIHN0YWNrIHVud2luZGluZyB0ZWNobmlxdWVzIHRoYXQgb3RoZXIga2VybmVsIHRyYWNpbmcgdG9vbHMgdXNlIG9yIGlmIGl0IGhhcyBhbnkgcHJvcHJpZXRhcnkgYXBwcm9hY2hlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMzpcdHN0YXRpYyBsb25nIF9fYnBmX2dldF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcbiA4MDQ6XHRcdFx0XHRcdCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxuIDgwNTpcdHtcbiA4MDY6XHRcdHN0cnVjdCBwdF9yZWdzICpyZWdzO1xuIDgwNzpcdFx0bG9uZyByZXMgPSAtRUlOVkFMO1xuIDgwODpcdFxuIDgwOTpcdFx0aWYgKCF0cnlfZ2V0X3Rhc2tfc3RhY2sodGFzaykpXG4gODEwOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDgxMTpcdFxuIDgxMjpcdFx0cmVncyA9IHRhc2tfcHRfcmVncyh0YXNrKTtcbiA4MTM6XHRcdGlmIChyZWdzKVxuIDgxNDpcdFx0XHRyZXMgPSBfX2JwZl9nZXRfc3RhY2socmVncywgdGFzaywgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgbWF5X2ZhdWx0KTtcbiA4MTU6XHRcdHB1dF90YXNrX3N0YWNrKHRhc2spO1xuIDgxNjpcdFxuIDgxNzpcdFx0cmV0dXJuIHJlcztcbiA4MTg6XHR9XG4gODE5Olx0XG4gODIwOlx0QlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1ZixcbiA4MjE6XHRcdCAgIHUzMiwgc2l6ZSwgdTY0LCBmbGFncylcbiA4MjI6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDQ1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTdGFjayBUcmFjZSBBUEkqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGlzIHN0YWNrIHRyYWNlIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGUga2V5IGVudHJ5IHBvaW50IGhlcmUgaXMgYF9fYnBmX2dldF9zdGFja2AuIEkga25ldyBpdCB3YXMgY2FsbGluZyBzb21ldGhpbmcgc2lnbmlmaWNhbnQsIGFuZCBub3cgSSByZW1lbWJlcjogYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YC4gTGV0JiMzOTtzIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYF9fYnBmX2dldF9zdGFja2AgZnVuY3Rpb24gY2FsbCBmbG93LCB0byBiZSBjZXJ0YWluIHdlJiMzOTtyZSBjbGVhciBvbiBob3cgaXQmIzM5O3Mgb2J0YWluaW5nIHRoZSBpbmZvcm1hdGlvbiBpdCBuZWVkcy4gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhlIGludGVybmFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MjpcdHN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIDY4MzpcdFx0XHRcdCAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlX2luLFxuIDY4NDpcdFx0XHRcdCAgICB2b2lkICpidWYsIHUzMiBzaXplLCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxuIDY4NTpcdHtcbiA2ODY6XHRcdHUzMiB0cmFjZV9uciwgY29weV9sZW4sIGVsZW1fc2l6ZSwgbWF4X2RlcHRoO1xuIDY4NzpcdFx0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XG4gNjg4Olx0XHRib29sIGNyb3NzdGFzayA9IHRhc2sgXHUwMDI2XHUwMDI2IHRhc2sgIT0gY3VycmVudDtcbiA2ODk6XHRcdHUzMiBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbiA2OTA6XHRcdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuIDY5MTpcdFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcbiA2OTI6XHRcdGJvb2wga2VybmVsID0gIXVzZXI7XG4gNjkzOlx0XHRpbnQgZXJyID0gLUVJTlZBTDtcbiA2OTQ6XHRcdHU2NCAqaXBzO1xuIDY5NTpcdFxuIDY5NjpcdFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+KEJQRl9GX1NLSVBfRklFTERfTUFTSyB8IEJQRl9GX1VTRVJfU1RBQ0sgfFxuIDY5NzpcdFx0XHRcdCAgICAgICBCUEZfRl9VU0VSX0JVSUxEX0lEKSkpXG4gNjk4Olx0XHRcdGdvdG8gY2xlYXI7XG4gNjk5Olx0XHRpZiAoa2VybmVsIFx1MDAyNlx1MDAyNiB1c2VyX2J1aWxkX2lkKVxuIDcwMDpcdFx0XHRnb3RvIGNsZWFyO1xuIDcwMTpcdFxuIDcwMjpcdFx0ZWxlbV9zaXplID0gdXNlcl9idWlsZF9pZCA/IHNpemVvZihzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkKSA6IHNpemVvZih1NjQpO1xuIDcwMzpcdFx0aWYgKHVubGlrZWx5KHNpemUgJSBlbGVtX3NpemUpKVxuIDcwNDpcdFx0XHRnb3RvIGNsZWFyO1xuIDcwNTpcdFxuIDcwNjpcdFx0LyogY2Fubm90IGdldCB2YWxpZCB1c2VyIHN0YWNrIGZvciB0YXNrIHdpdGhvdXQgdXNlcl9tb2RlIHJlZ3MgKi9cbiA3MDc6XHRcdGlmICh0YXNrIFx1MDAyNlx1MDAyNiB1c2VyIFx1MDAyNlx1MDAyNiAhdXNlcl9tb2RlKHJlZ3MpKVxuIDcwODpcdFx0XHRnb3RvIGVycl9mYXVsdDtcbiA3MDk6XHRcbiA3MTA6XHRcdC8qIGdldF9wZXJmX2NhbGxjaGFpbiBkb2VzIG5vdCBzdXBwb3J0IGNyb3NzdGFzayB1c2VyIHN0YWNrIHdhbGtpbmdcbiA3MTE6XHRcdCAqIGJ1dCByZXR1cm5zIGFuIGVtcHR5IHN0YWNrIGluc3RlYWQgb2YgTlVMTC5cbiA3MTI6XHRcdCAqL1xuIDcxMzpcdFx0aWYgKGNyb3NzdGFzayBcdTAwMjZcdTAwMjYgdXNlcikge1xuIDcxNDpcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiA3MTU6XHRcdFx0Z290byBjbGVhcjtcbiA3MTY6XHRcdH1cbiA3MTc6XHRcbiA3MTg6XHRcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xuIDcxOTpcdFxuIDcyMDpcdFx0aWYgKG1heV9mYXVsdClcbiA3MjE6XHRcdFx0cmN1X3JlYWRfbG9jaygpOyAvKiBuZWVkIFJDVSBmb3IgcGVyZiYjMzk7cyBjYWxsY2hhaW4gYmVsb3cgKi9cbiA3MjI6XHRcbiA3MjM6XHRcdGlmICh0cmFjZV9pbikge1xuIDcyNDpcdFx0XHR0cmFjZSA9IHRyYWNlX2luO1xuIDcyNTpcdFx0XHR0cmFjZS1cdTAwM2VuciA9IG1pbl90KHUzMiwgdHJhY2UtXHUwMDNlbnIsIG1heF9kZXB0aCk7XG4gNzI2Olx0XHR9IGVsc2UgaWYgKGtlcm5lbCBcdTAwMjZcdTAwMjYgdGFzaykge1xuIDcyNzpcdFx0XHR0cmFjZSA9IGdldF9jYWxsY2hhaW5fZW50cnlfZm9yX3Rhc2sodGFzaywgbWF4X2RlcHRoKTtcbiA3Mjg6XHRcdH0gZWxzZSB7XG4gNzI5Olx0XHRcdHRyYWNlID0gZ2V0X3BlcmZfY2FsbGNoYWluKHJlZ3MsIGtlcm5lbCwgdXNlciwgbWF4X2RlcHRoLFxuIDczMDpcdFx0XHRcdFx0XHQgICBjcm9zc3Rhc2ssIGZhbHNlLCAwKTtcbiA3MzE6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgYW5kIGRpdmluZyBpbnRvIHNvbWUga2VybmVsIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBfX2JwZl9nZXRfc3RhY2tgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSByZXN0IG9mIHRoZSBgX19icGZfZ2V0X3N0YWNrYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uLCBub3QganVzdCB0aGUgc25pcHBldHMgSSBtaWdodCBoYXZlIGJlZW4gZ2xhbmNpbmcgYXQuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3MgbW9yZSBoZXJlIHRoYW4gbWVldHMgdGhlIGV5ZSwgcHJvYmFibHkgc29tZSBjcml0aWNhbCBsb2dpYyByZWxhdGVkIHRvIGhvdyBpdCBhY3R1YWxseSByZXRyaWV2ZXMgYW5kIG9yZ2FuaXplcyB0aGUgc3RhY2sgZGF0YSBmb3IgQlBGIHByb2dyYW1zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgb24gbWVtb3J5IGFjY2VzcywgcmVnaXN0ZXIgaGFuZGxpbmcsIHBlcmhhcHMgZXZlbiBzb21lIGNsZXZlciB0cmlja3MgdG8gZWZmaWNpZW50bHkgY29weSB0aGUgc3RhY2sgY29udGVudCB0byB1c2Vyc3BhY2UsIG9yIGV2ZW4gdG8gYSBCUEYgbWFwIGZvciBpbnRyb3NwZWN0aW9uLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IHRoaXMgZnVuY3Rpb24gbWlnaHQgaGF2ZSwgZ2l2ZW4gaXRzIHJvbGUgaW4gdGhlIGNyaXRpY2FsIHBhdGggb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBib3VuZGFyeSBjaGVja3MsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYWxsb3cgYW4gYXR0YWNrZXIgdG8gcmVhZC93cml0ZSBtZW1vcnkgdGhleSBzaG91bGRuJiMzOTt0LiBUaGlzIHBhcnQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzZWN1cml0eSBhbmQgc3RhYmlsaXR5IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gcGFyc2UgdGhpcyB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhY2ttYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMyOlx0XG4gNzMzOlx0XHRpZiAodW5saWtlbHkoIXRyYWNlKSB8fCB0cmFjZS1cdTAwM2VuciBcdTAwM2Mgc2tpcCkge1xuIDczNDpcdFx0XHRpZiAobWF5X2ZhdWx0KVxuIDczNTpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDczNjpcdFx0XHRnb3RvIGVycl9mYXVsdDtcbiA3Mzc6XHRcdH1cbiA3Mzg6XHRcbiA3Mzk6XHRcdHRyYWNlX25yID0gdHJhY2UtXHUwMDNlbnIgLSBza2lwO1xuIDc0MDpcdFx0Y29weV9sZW4gPSB0cmFjZV9uciAqIGVsZW1fc2l6ZTtcbiA3NDE6XHRcbiA3NDI6XHRcdGlwcyA9IHRyYWNlLVx1MDAzZWlwICYjNDM7IHNraXA7XG4gNzQzOlx0XHRpZiAodXNlcl9idWlsZF9pZCkge1xuIDc0NDpcdFx0XHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzID0gYnVmO1xuIDc0NTpcdFx0XHR1MzIgaTtcbiA3NDY6XHRcbiA3NDc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHJhY2VfbnI7IGkmIzQzOyYjNDM7KVxuIDc0ODpcdFx0XHRcdGlkX29mZnNbaV0uaXAgPSBpcHNbaV07XG4gNzQ5Olx0XHR9IGVsc2Uge1xuIDc1MDpcdFx0XHRtZW1jcHkoYnVmLCBpcHMsIGNvcHlfbGVuKTtcbiA3NTE6XHRcdH1cbiA3NTI6XHRcbiA3NTM6XHRcdC8qIHRyYWNlL2lwcyBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBhZnRlciB0aGlzIHBvaW50ICovXG4gNzU0Olx0XHRpZiAobWF5X2ZhdWx0KVxuIDc1NTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA3NTY6XHRcbiA3NTc6XHRcdGlmICh1c2VyX2J1aWxkX2lkKVxuIDc1ODpcdFx0XHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChidWYsIHRyYWNlX25yLCB1c2VyLCBtYXlfZmF1bHQpO1xuIDc1OTpcdFxuIDc2MDpcdFx0aWYgKHNpemUgXHUwMDNlIGNvcHlfbGVuKVxuIDc2MTpcdFx0XHRtZW1zZXQoYnVmICYjNDM7IGNvcHlfbGVuLCAwLCBzaXplIC0gY29weV9sZW4pO1xuIDc2MjpcdFx0cmV0dXJuIGNvcHlfbGVuO1xuIDc2MzpcdFxuIDc2NDpcdGVycl9mYXVsdDpcbiA3NjU6XHRcdGVyciA9IC1FRkFVTFQ7XG4gNzY2Olx0Y2xlYXI6XG4gNzY3Olx0XHRtZW1zZXQoYnVmLCAwLCBzaXplKTtcbiA3Njg6XHRcdHJldHVybiBlcnI7XG4gNzY5Olx0fVxuIDc3MDpcdFxuIDc3MTpcdEJQRl9DQUxMXzQoYnBmX2dldF9zdGFjaywgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcbiA3NzI6XHRcdCAgIHU2NCwgZmxhZ3MpXG4gNzczOlx0e1xuIDc3NDpcdFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbiA3NzU6XHR9XG4gNzc2Olx0XG4gNzc3Olx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG8gPSB7XG4gNzc4Olx0XHQuZnVuY1x0XHQ9IGJwZl9nZXRfc3RhY2ssXG4gNzc5Olx0XHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiA3ODA6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiA3ODE6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTYxCgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDk1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFN0YWNrIFRyYWNlIGFuZCBWTUEgTG9va3VwIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZGVwZW5kZW5jaWVzLiBGaXJzdCwgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYm90aCBgX19icGZfZ2V0X3N0YWNrYCBhbmQgYF9fYnBmX2dldF9zdGFja2lkYCBjYWxsIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgd2hlbiBgdXNlcl9idWlsZF9pZGAgaXMgdHJ1ZS4gVGhhdCBpbW1lZGlhdGVseSBmb2N1c2VzIG15IGF0dGVudGlvbiBvbiBjZXJ0YWluIEJQRiBzeW1ib2xzLiBJJiMzOTt2ZSBjb21waWxlZCBhIGxpc3Q6IGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBoZXJlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYGJwZl9maW5kX3ZtYWAuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCYjMzk7cyB0aGUgb25seSBvbmUgZGlyZWN0bHkgcmVsYXRlZC4gR29vZCwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gQXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX1BFUkZfRVZFTlRTYCBzdWZmaWNpZW50PyBMb29rcyBsaWtlIGl0LiBgc3RhY2ttYXAub2AgaXMgY29tcGlsZWQgd2hlbiAqYm90aCogYXJlIGVuYWJsZWQsIGFuZCBgdGFza19pdGVyLm9gIHJlcXVpcmVzIG9ubHkgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFNvLCBgQlBGX1NZU0NBTExgIGFuZCBgUEVSRl9FVkVOVFNgIGFyZSBpbmRlZWQgdGhlIGNvcmUgY29uZmlncyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgZGVmaW5pdGlvbnMgb2YgbXkgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgZm91bmQgdGhhdCBgYnBmX2ZpbmRfdm1hYCByZXNpZGVzIGluIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYCwgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlIGxpc3QgYXJlIGFsbCBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuCgpBIHF1aWNrIGNoZWNrIGZvciBvdGhlciBoZWxwZXJzIHVzaW5nIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGNvbmZpcm1zIHRoYXQgdGhlIG9ubHkgY2FsbGVycyBhcmUgaW5kZWVkIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgYW5kIGBicGZfZmluZF92bWFgLgoKV2FpdCBhIG1pbnV0ZSwgYGJwZl9nZXRfc3RhY2tpZF9wZWAgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYCBhcmUgb25seSBhdmFpbGFibGUgd2l0aCBgQ09ORklHX1BFUkZfRVZFTlRTYCwgYnV0IGBzdGFja21hcC5jYCBpdHNlbGYgaXMgb25seSBjb21waWxlZCB3aXRoIHRoaXMgb3B0aW9uISBUaGF0JiMzOTtzIGEgc29saWQgY29uZmlybWF0aW9uIG9mIGBDT05GSUdfUEVSRl9FVkVOVFNgIGFzIGEgaGFyZCBkZXBlbmRlbmN5LgoKSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgdGhhdCBgYnBmX2ZpbmRfdm1hYCBpcyBhY3R1YWxseSBhIEJQRiBoZWxwZXIuIFllcCwgYEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCAuLi4pYCBjb25maXJtcyBpdCwgYW5kIHRoZSBhY3R1YWwgc3ltYm9sIG5hbWUgaW4gdGhlIGtlcm5lbCBpcyBgYnBmX2ZpbmRfdm1hYC4gU2ltaWxhcmx5LCBgYnBmX2dldF9zdGFja2lkYCBpcyBkZWZpbmVkIGFzIGBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgLi4uKWAuIE9rYXksIHRoZSBuYW1lcyBtYXRjaCB0aGUgZGVmaW5pdGlvbnMuCgpTbywgdG8gc3VtbWFyaXplIG15IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zOgoqICAgYEJQRl9TWVNDQUxMYAoqICAgYFBFUkZfRVZFTlRTYAoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGFuZ2UgdG8gaG93IGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGlzIG1hbmFnZWQgYnkgQlBGIGhlbHBlcnMsIG1haW5seSBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAgYW5kIGBicGZfZ2V0X3N0YWNrYCB0byBzYWZlbHkgYWNxdWlyZSB0aGUgbW1hcCBsb2NrLiBJdCBpbnRyb2R1Y2VzIGFuIGBhdG9taWNfdCBhY3RpdmVgIGZsYWcuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjb3JlIEJQRiwgZXhwb3NlZCB0byB1c2Vyc3BhY2UgQlBGIHByb2dyYW1zLiBUaGUgY29kZSBzZWVtcyBmdW5jdGlvbmFsLCBhbmQgSSYjMzk7ZCByZWNvbW1lbmQgZnV6emluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpbmRfdm1hJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tpZCYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNraWRfcGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFjayYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3BlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgYnBmX21tYXBfcmVhZF90cnlsb2NrYCBsb2dpYyB1c2VkIGJ5IEJQRiBoZWxwZXJzIHRvIHNhZmVseSBhY3F1aXJlIHRoZSBtbWFwIGxvY2sgZnJvbSBjb250ZXh0cyB3aGVyZSBJUlFzIG1heSBiZSBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgYXRvbWljX3QgYWN0aXZlYCBmbGFnIHRvIHJlc2VydmUgdGhlIGlycV93b3JrIHNsb3QuIFRoaXMgaXMgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbXMgY2FsbGluZyBoZWxwZXJzIGxpa2UgYGJwZl9maW5kX3ZtYWAsIGBicGZfZ2V0X3N0YWNraWRgLCBhbmQgYGJwZl9nZXRfc3RhY2tgLiBUaGUgY29kZSBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9maW5kX3ZtYSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNraWQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja2lkX3BlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19wZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGJwZl9tbWFwX3JlYWRfdHJ5bG9ja2AgbG9naWMgdXNlZCBieSBCUEYgaGVscGVycyB0byBzYWZlbHkgYWNxdWlyZSB0aGUgbW1hcCBsb2NrIGZyb20gY29udGV4dHMgd2hlcmUgSVJRcyBtYXkgYmUgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSBuZXcgYGF0b21pY190IGFjdGl2ZWAgZmxhZyB0byByZXNlcnZlIHRoZSBpcnFfd29yayBzbG90LiBUaGlzIGlzIGNvcmUgQlBGIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgaGVscGVycyBsaWtlIGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYW5kIGBicGZfZ2V0X3N0YWNrYC4gVGhlIGNvZGUgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjIzOjQ1LjYwNTE1MjQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyNDE4ODg0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ZpbmRfdm1hXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNraWRcIixcbiAgICBcImJwZl9nZXRfc3RhY2tpZF9wZVwiLFxuICAgIFwiYnBmX2dldF9zdGFja1wiLFxuICAgIFwiYnBmX2dldF9zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja1wiLFxuICAgIFwiYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2dldF9zdGFja19wZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgYnBmX21tYXBfcmVhZF90cnlsb2NrYCBsb2dpYyB1c2VkIGJ5IEJQRiBoZWxwZXJzIHRvIHNhZmVseSBhY3F1aXJlIHRoZSBtbWFwIGxvY2sgZnJvbSBjb250ZXh0cyB3aGVyZSBJUlFzIG1heSBiZSBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgYXRvbWljX3QgYWN0aXZlYCBmbGFnIHRvIHJlc2VydmUgdGhlIGlycV93b3JrIHNsb3QuIFRoaXMgaXMgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbXMgY2FsbGluZyBoZWxwZXJzIGxpa2UgYGJwZl9maW5kX3ZtYWAsIGBicGZfZ2V0X3N0YWNraWRgLCBhbmQgYGJwZl9nZXRfc3RhY2tgLiBUaGUgY29kZSBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyMzo0NS42MDUxNjA3M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyODE2OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2FiNmEzYzE3MjYwMzA2NzdiNDVmZTk4YzU2N2NhMDVjZTY1YzI2ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAxNDoyMzo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaCBiL2tlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oXFxuaW5kZXggNWQxOGQ3ZDg1YmVmOS4uZDZlMmI2NWY2ZDA1MiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaFxcbisrKyBiL2tlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oXFxuQEAgLTQsMTIgKzQsMTQgQEBcXG4gXFxuICNpZm5kZWYgX19NTUFQX1VOTE9DS19XT1JLX0hfX1xcbiAjZGVmaW5lIF9fTU1BUF9VTkxPQ0tfV09SS19IX19cXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxX3dvcmsuaFxcdTAwM2VcXG4gXFxuIC8qIGlycV93b3JrIHRvIHJ1biBtbWFwX3JlYWRfdW5sb2NrKCkgaW4gaXJxX3dvcmsgKi9cXG4gc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrIHtcXG4gXFx0c3RydWN0IGlycV93b3JrIGlycV93b3JrO1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4rXFx0YXRvbWljX3QgYWN0aXZlO1xcbiB9O1xcbiBcXG4gREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yaywgbW1hcF91bmxvY2tfd29yayk7XFxuQEAgLTE4LDggKzIwLDggQEAgREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yaywgbW1hcF91bmxvY2tfd29yayk7XFxuICAqIFdlIGNhbm5vdCBkbyBtbWFwX3JlYWRfdW5sb2NrKCkgd2hlbiB0aGUgaXJxIGlzIGRpc2FibGVkLCBiZWNhdXNlIG9mXFxuICAqIHJpc2sgdG8gZGVhZGxvY2sgd2l0aCBycV9sb2NrLiBUbyBsb29rIHVwIHZtYSB3aGVuIHRoZSBpcnFzIGFyZVxcbiAgKiBkaXNhYmxlZCwgd2UgbmVlZCB0byBydW4gbW1hcF9yZWFkX3VubG9jaygpIGluIGlycV93b3JrLiBXZSB1c2UgYVxcbi0gKiBwZXJjcHUgdmFyaWFibGUgdG8gZG8gdGhlIGlycV93b3JrLiBJZiB0aGUgaXJxX3dvcmsgaXMgYWxyZWFkeSB1c2VkXFxuLSAqIGJ5IGFub3RoZXIgbG9va3VwLCB3ZSBmYWxsIG92ZXIuXFxuKyAqIHBlcmNwdSB2YXJpYWJsZSB0byBkbyB0aGUgaXJxX3dvcmsuIFRoZSBhY3RpdmUgZmxhZyByZXNlcnZlcyB0aGUgc2xvdFxcbisgKiBiZWZvcmUgbW1hcF9yZWFkX3RyeWxvY2soKSBhbmQgdW50aWwgdGhlIGlycV93b3JrIGNhbGxiYWNrIGNvbnN1bWVzIG1tLlxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29ya19wdHIpXFxuIHtcXG5AQCAtMjksOSArMzEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b1xcbiBcXHRpZiAoaXJxc19kaXNhYmxlZCgpKSB7XFxuIFxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcXG4gXFx0XFx0XFx0d29yayA9IHRoaXNfY3B1X3B0cihcXHUwMDI2bW1hcF91bmxvY2tfd29yayk7XFxuLVxcdFxcdFxcdGlmIChpcnFfd29ya19pc19idXN5KFxcdTAwMjZ3b3JrLVxcdTAwM2VpcnFfd29yaykpIHtcXG4tXFx0XFx0XFx0XFx0LyogY2Fubm90IHF1ZXVlIG1vcmUgdXBfcmVhZCwgZmFsbGJhY2sgKi9cXG4rXFx0XFx0XFx0aWYgKGF0b21pY19jbXB4Y2hnX2FjcXVpcmUoXFx1MDAyNndvcmstXFx1MDAzZWFjdGl2ZSwgMCwgMSkpIHtcXG4gXFx0XFx0XFx0XFx0aXJxX3dvcmtfYnVzeSA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdHdvcmsgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qXFxuQEAgLTQ2LDYgKzQ4LDMzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqKndvXFxuIFxcdHJldHVybiBpcnFfd29ya19idXN5O1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWRcXG4rYnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmspXFxuK3tcXG4rXFx0aWYgKHdvcmspXFxuK1xcdFxcdGF0b21pY19zZXRfcmVsZWFzZShcXHUwMDI2d29yay1cXHUwMDNlYWN0aXZlLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogVHJ5IHRvIHRha2UgbW0tXFx1MDAzZW1tYXBfbG9jayBmb3IgcmVhZGluZyBvbiBiZWhhbGYgb2YgYSBCUEYgaGVscGVyIHRoYXQgbWF5XFxuKyAqIHJ1biB3aXRoIElSUXMgZGlzYWJsZWQuIE9uIHN1Y2Nlc3MsICp3b3JrIGlzIHRoZSBzbG90IHRvIGhhbmQgdG9cXG4rICogYnBmX21tYXBfdW5sb2NrX21tKCkgKE5VTEwgd2hlbiB0aGUgdW5sb2NrIGNhbiBiZSBkb25lIGlubGluZSk7IG9uIGZhaWx1cmVcXG4rICogbm8gc2xvdCBzdGF5cyByZXNlcnZlZCBhbmQgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjay5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF9yZWFkX3RyeWxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b3JrKVxcbit7XFxuK1xcdGlmIChicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHdvcmspKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkge1xcbitcXHRcXHRicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKCp3b3JrKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGJwZl9tbWFwX3VubG9ja19tbShzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuIFxcdGlmICghd29yaykge1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcXG5pbmRleCA0MWZlODdkNzMwMmYyLi4xNjZmYzhlZmFiOGIyIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbkBAIC00MTUsNyArNDE1LDYgQEAgc3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICB1MzIgdHJhY2VfbnIsIGJvb2wgdXNlciwgYm9vbCBtYXlfZmF1bHQpXFxuIHtcXG4gXFx0c3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICp3b3JrID0gTlVMTDtcXG4tXFx0Ym9vbCBpcnFfd29ya19idXN5ID0gYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhcXHUwMDI2d29yayk7XFxuIFxcdGJvb2wgaGFzX3VzZXJfY3R4ID0gdXNlciBcXHUwMDI2XFx1MDAyNiBjdXJyZW50IFxcdTAwMjZcXHUwMDI2IGN1cnJlbnQtXFx1MDAzZW1tO1xcbiBcXHRzdHJ1Y3Qgc3RhY2tfbWFwX2J1aWxkX2lkX2NhY2hlIGNhY2hlID0ge307XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbkBAIC00MzAsNyArNDI5LDcgQEAgc3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyxcXG4gXFx0ICogZmFsbGJhY2sgaXMgdXNlZCBmb3Iga2VybmVsIHN0YWNrICghdXNlcikgb24gYSBzdGFja21hcCB3aXRoXFxuIFxcdCAqIGJ1aWxkX2lkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFoYXNfdXNlcl9jdHggfHwgaXJxX3dvcmtfYnVzeSB8fCAhbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cXHUwMDNlbW0pKSB7XFxuK1xcdGlmICghaGFzX3VzZXJfY3R4IHx8ICFicGZfbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cXHUwMDNlbW0sIFxcdTAwMjZ3b3JrKSkge1xcbiBcXHRcXHQvKiBjYW5ub3QgYWNjZXNzIGN1cnJlbnQtXFx1MDAzZW1tLCBmYWxsIGJhY2sgdG8gaXBzICovXFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxcbiBcXHRcXHRcXHRzdGFja19tYXBfYnVpbGRfaWRfc2V0X2lwKFxcdTAwMjZpZF9vZmZzW2ldKTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90YXNrX2l0ZXIuYyBiL2tlcm5lbC9icGYvdGFza19pdGVyLmNcXG5pbmRleCBiMjU2ZmI5YzEyMTRlLi5lNjZlMzQ4NGY5MjNkIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jXFxuQEAgLTc1NSw3ICs3NTUsNiBAQCBCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsXFxuIHtcXG4gXFx0c3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICp3b3JrID0gTlVMTDtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcdGJvb2wgaXJxX3dvcmtfYnVzeSA9IGZhbHNlO1xcbiBcXHRib29sIF9fbWF5YmVfdW51c2VkIG1tcHV0X25lZWRlZCA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4gXFx0aW50IHJldCA9IC1FTk9FTlQ7XFxuQEAgLTc5Miw5ICs3OTEsNyBAQCBCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsXFxuIFxcdGlmICghbW0pXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4tXFx0aXJxX3dvcmtfYnVzeSA9IGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoXFx1MDAyNndvcmspO1xcbi1cXG4tXFx0aWYgKGlycV93b3JrX2J1c3kgfHwgIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkge1xcbitcXHRpZiAoIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhtbSwgXFx1MDAyNndvcmspKSB7XFxuIFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5AQCAtMTE5MSw2ICsxMTg4LDggQEAgc3RhdGljIHZvaWQgZG9fbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgaXJxX3dvcmsgKmVudHJ5KVxcbiBcXG4gXFx0d29yayA9IGNvbnRhaW5lcl9vZihlbnRyeSwgc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrLCBpcnFfd29yayk7XFxuIFxcdG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHdvcmstXFx1MDAzZW1tKTtcXG4rXFx0d29yay1cXHUwMDNlbW0gPSBOVUxMO1xcbitcXHRicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKHdvcmspO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCB0YXNrX2l0ZXJfaW5pdCh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyMzo0Ni4wMzg3NzU0MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzgwODI1NzI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZmluZF92bWFcIixcbiAgICBcImJwZl9nZXRfc3RhY2tpZFwiLFxuICAgIFwiYnBmX2dldF9zdGFja2lkX3BlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2dldF90YXNrX3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3BlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGxvZ2ljIHVzZWQgYnkgQlBGIGhlbHBlcnMgdG8gc2FmZWx5IGFjcXVpcmUgdGhlIG1tYXAgbG9jayBmcm9tIGNvbnRleHRzIHdoZXJlIElSUXMgbWF5IGJlIGRpc2FibGVkLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBhdG9taWNfdCBhY3RpdmVgIGZsYWcgdG8gcmVzZXJ2ZSB0aGUgaXJxX3dvcmsgc2xvdC4gVGhpcyBpcyBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcyBjYWxsaW5nIGhlbHBlcnMgbGlrZSBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAsIGFuZCBgYnBmX2dldF9zdGFja2AuIFRoZSBjb2RlIGlzIGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdhYjZhM2MxNzI2MDMwNjc3YjQ1ZmU5OGM1NjdjYTA1Y2U2NWMyNmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAxNDoyMzo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oIGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhcbmluZGV4IDVkMThkN2Q4NWJlZjkuLmQ2ZTJiNjVmNmQwNTIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaFxuKysrIGIva2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmhcbkBAIC00LDEyICs0LDE0IEBAXG4gXG4gI2lmbmRlZiBfX01NQVBfVU5MT0NLX1dPUktfSF9fXG4gI2RlZmluZSBfX01NQVBfVU5MT0NLX1dPUktfSF9fXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4gXG4gLyogaXJxX3dvcmsgdG8gcnVuIG1tYXBfcmVhZF91bmxvY2soKSBpbiBpcnFfd29yayAqL1xuIHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayB7XG4gXHRzdHJ1Y3QgaXJxX3dvcmsgaXJxX3dvcms7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdGF0b21pY190IGFjdGl2ZTtcbiB9O1xuIFxuIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIG1tYXBfdW5sb2NrX3dvcmspO1xuQEAgLTE4LDggKzIwLDggQEAgREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yaywgbW1hcF91bmxvY2tfd29yayk7XG4gICogV2UgY2Fubm90IGRvIG1tYXBfcmVhZF91bmxvY2soKSB3aGVuIHRoZSBpcnEgaXMgZGlzYWJsZWQsIGJlY2F1c2Ugb2ZcbiAgKiByaXNrIHRvIGRlYWRsb2NrIHdpdGggcnFfbG9jay4gVG8gbG9vayB1cCB2bWEgd2hlbiB0aGUgaXJxcyBhcmVcbiAgKiBkaXNhYmxlZCwgd2UgbmVlZCB0byBydW4gbW1hcF9yZWFkX3VubG9jaygpIGluIGlycV93b3JrLiBXZSB1c2UgYVxuLSAqIHBlcmNwdSB2YXJpYWJsZSB0byBkbyB0aGUgaXJxX3dvcmsuIElmIHRoZSBpcnFfd29yayBpcyBhbHJlYWR5IHVzZWRcbi0gKiBieSBhbm90aGVyIGxvb2t1cCwgd2UgZmFsbCBvdmVyLlxuKyAqIHBlcmNwdSB2YXJpYWJsZSB0byBkbyB0aGUgaXJxX3dvcmsuIFRoZSBhY3RpdmUgZmxhZyByZXNlcnZlcyB0aGUgc2xvdFxuKyAqIGJlZm9yZSBtbWFwX3JlYWRfdHJ5bG9jaygpIGFuZCB1bnRpbCB0aGUgaXJxX3dvcmsgY2FsbGJhY2sgY29uc3VtZXMgbW0uXG4gICovXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29ya19wdHIpXG4ge1xuQEAgLTI5LDkgKzMxLDkgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICoqd29cbiBcdGlmIChpcnFzX2Rpc2FibGVkKCkpIHtcbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkge1xuIFx0XHRcdHdvcmsgPSB0aGlzX2NwdV9wdHIoXHUwMDI2bW1hcF91bmxvY2tfd29yayk7XG4tXHRcdFx0aWYgKGlycV93b3JrX2lzX2J1c3koXHUwMDI2d29yay1cdTAwM2VpcnFfd29yaykpIHtcbi1cdFx0XHRcdC8qIGNhbm5vdCBxdWV1ZSBtb3JlIHVwX3JlYWQsIGZhbGxiYWNrICovXG4rXHRcdFx0aWYgKGF0b21pY19jbXB4Y2hnX2FjcXVpcmUoXHUwMDI2d29yay1cdTAwM2VhY3RpdmUsIDAsIDEpKSB7XG4gXHRcdFx0XHRpcnFfd29ya19idXN5ID0gdHJ1ZTtcbitcdFx0XHRcdHdvcmsgPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuQEAgLTQ2LDYgKzQ4LDMzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqKndvXG4gXHRyZXR1cm4gaXJxX3dvcmtfYnVzeTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkXG4rYnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmspXG4re1xuK1x0aWYgKHdvcmspXG4rXHRcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZ3b3JrLVx1MDAzZWFjdGl2ZSwgMCk7XG4rfVxuK1xuKy8qXG4rICogVHJ5IHRvIHRha2UgbW0tXHUwMDNlbW1hcF9sb2NrIGZvciByZWFkaW5nIG9uIGJlaGFsZiBvZiBhIEJQRiBoZWxwZXIgdGhhdCBtYXlcbisgKiBydW4gd2l0aCBJUlFzIGRpc2FibGVkLiBPbiBzdWNjZXNzLCAqd29yayBpcyB0aGUgc2xvdCB0byBoYW5kIHRvXG4rICogYnBmX21tYXBfdW5sb2NrX21tKCkgKE5VTEwgd2hlbiB0aGUgdW5sb2NrIGNhbiBiZSBkb25lIGlubGluZSk7IG9uIGZhaWx1cmVcbisgKiBubyBzbG90IHN0YXlzIHJlc2VydmVkIGFuZCB0aGUgY2FsbGVyIG11c3QgZmFsbCBiYWNrLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfbW1hcF9yZWFkX3RyeWxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b3JrKVxuK3tcbitcdGlmIChicGZfbW1hcF91bmxvY2tfZ2V0X2lycV93b3JrKHdvcmspKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkge1xuK1x0XHRicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKCp3b3JrKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbW1hcF91bmxvY2tfbW0oc3RydWN0IG1tYXBfdW5sb2NrX2lycV93b3JrICp3b3JrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gXHRpZiAoIXdvcmspIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbmluZGV4IDQxZmU4N2Q3MzAyZjIuLjE2NmZjOGVmYWI4YjIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuQEAgLTQxNSw3ICs0MTUsNiBAQCBzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLFxuIFx0XHRcdFx0XHQgIHUzMiB0cmFjZV9uciwgYm9vbCB1c2VyLCBib29sIG1heV9mYXVsdClcbiB7XG4gXHRzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmsgPSBOVUxMO1xuLVx0Ym9vbCBpcnFfd29ya19idXN5ID0gYnBmX21tYXBfdW5sb2NrX2dldF9pcnFfd29yayhcdTAwMjZ3b3JrKTtcbiBcdGJvb2wgaGFzX3VzZXJfY3R4ID0gdXNlciBcdTAwMjZcdTAwMjYgY3VycmVudCBcdTAwMjZcdTAwMjYgY3VycmVudC1cdTAwM2VtbTtcbiBcdHN0cnVjdCBzdGFja19tYXBfYnVpbGRfaWRfY2FjaGUgY2FjaGUgPSB7fTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuQEAgLTQzMCw3ICs0MjksNyBAQCBzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLFxuIFx0ICogZmFsbGJhY2sgaXMgdXNlZCBmb3Iga2VybmVsIHN0YWNrICghdXNlcikgb24gYSBzdGFja21hcCB3aXRoXG4gXHQgKiBidWlsZF9pZC5cbiBcdCAqL1xuLVx0aWYgKCFoYXNfdXNlcl9jdHggfHwgaXJxX3dvcmtfYnVzeSB8fCAhbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cdTAwM2VtbSkpIHtcbitcdGlmICghaGFzX3VzZXJfY3R4IHx8ICFicGZfbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cdTAwM2VtbSwgXHUwMDI2d29yaykpIHtcbiBcdFx0LyogY2Fubm90IGFjY2VzcyBjdXJyZW50LVx1MDAzZW1tLCBmYWxsIGJhY2sgdG8gaXBzICovXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRyYWNlX25yOyBpKyspXG4gXHRcdFx0c3RhY2tfbWFwX2J1aWxkX2lkX3NldF9pcChcdTAwMjZpZF9vZmZzW2ldKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jIGIva2VybmVsL2JwZi90YXNrX2l0ZXIuY1xuaW5kZXggYjI1NmZiOWMxMjE0ZS4uZTY2ZTM0ODRmOTIzZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbisrKyBiL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbkBAIC03NTUsNyArNzU1LDYgQEAgQlBGX0NBTExfNShicGZfZmluZF92bWEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB1NjQsIHN0YXJ0LFxuIHtcbiBcdHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29yayAqd29yayA9IE5VTEw7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdGJvb2wgaXJxX3dvcmtfYnVzeSA9IGZhbHNlO1xuIFx0Ym9vbCBfX21heWJlX3VudXNlZCBtbXB1dF9uZWVkZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0aW50IHJldCA9IC1FTk9FTlQ7XG5AQCAtNzkyLDkgKzc5MSw3IEBAIEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdTY0LCBzdGFydCxcbiBcdGlmICghbW0pXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuLVx0aXJxX3dvcmtfYnVzeSA9IGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmsoXHUwMDI2d29yayk7XG4tXG4tXHRpZiAoaXJxX3dvcmtfYnVzeSB8fCAhbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XG4rXHRpZiAoIWJwZl9tbWFwX3JlYWRfdHJ5bG9jayhtbSwgXHUwMDI2d29yaykpIHtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xMTkxLDYgKzExODgsOCBAQCBzdGF0aWMgdm9pZCBkb19tbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBpcnFfd29yayAqZW50cnkpXG4gXG4gXHR3b3JrID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmssIGlycV93b3JrKTtcbiBcdG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHdvcmstXHUwMDNlbW0pO1xuK1x0d29yay1cdTAwM2VtbSA9IE5VTEw7XG4rXHRicGZfbW1hcF91bmxvY2tfcHV0X2lycV93b3JrKHdvcmspO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCB0YXNrX2l0ZXJfaW5pdCh2b2lkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjM6NDYuMDM4Nzc2OTE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQzODY0NDA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgUGF0Y2ggZm9yIFJlYWNoYWJpbGl0eSBhbmQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgdG91Y2hpbmcgc29tZSBjb3JlIEJQRiBhcmVhczogYG1tYXBfdW5sb2NrX3dvcmsuaGAsIGBzdGFja21hcC5jYCwgYW5kIGB0YXNrX2l0ZXIuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYW4gYGF0b21pY190IGFjdGl2ZWAgdG8gYHN0cnVjdCBtbWFwX3VubG9ja19pcnFfd29ya2AuIFRoZSBpbnRlbnQgc2VlbXMgdG8gYmUgcmVzZXJ2aW5nIHRoZSBJUlEgd29yayBzbG90IHdpdGggdGhpcyBuZXcgYXRvbWljIGJlZm9yZSB0aGUgYG1tYXBfcmVhZF90cnlsb2NrKClgIGNhbGwsIGhvbGRpbmcgaXQgdW50aWwgdGhlIGNhbGxiYWNrIGNvbnN1bWVzIHRoZSBtZW1vcnkgbWFwLiBUaGV5J3ZlIGFsc28gYWRkZWQgb3IgbW9kaWZpZWQgYSBmZXcgZnVuY3Rpb25zOiBgYnBmX21tYXBfcmVhZF90cnlsb2NrYCwgYGJwZl9tbWFwX3VubG9ja19nZXRfaXJxX3dvcmtgLCBhbmQgYGJwZl9tbWFwX3VubG9ja19wdXRfaXJxX3dvcmtgLiBJdCdzIGFsc28gbWFraW5nIGNoYW5nZXMgdG8gYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBhbmQgYGJwZl9maW5kX3ZtYWAsIHdoaWNoIGlzIGEgQlBGIGhlbHBlci5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBhbmQgaWYgdGhlIGNoYW5nZXMgbWFrZSBzZW5zZS4gWXVwLCBCUEYgc3RhY2ttYXBzIGFuZCB0aGUgdGFzayBpdGVyYXRvcnMgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBCUEYgZmVhdHVyZXMuIEdvb2QuIFRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGRpZ2dpbmcgaW50by4gVGhlIHBhdGNoIHNlZW1zIGZ1bmN0aW9uYWwsIHNvIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMuIEFscmlnaHQsIGl0IHNlZW1zIGxpa2UgdGhlIG1vc3QgaW50ZXJlc3RpbmcgYml0cyBhcmU6XG4tICAgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCAodGhhdCdzIGBzdGF0aWNgIGluIGBzdGFja21hcC5jYClcbi0gICBgYnBmX2ZpbmRfdm1hYCAoYSBCUEYgaGVscGVyIGluIGB0YXNrX2l0ZXIuY2ApLlxuLSAgIGBkb19tbWFwX3JlYWRfdW5sb2NrYCAoc3RhdGljLCBpbiBgdGFza19pdGVyLmNgKVxuXG5Ib2xkIG9uLCBJIHNlZSBgYnBmX2ZpbmRfdm1hYCBkZWZpbmVkIHdpdGggYEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCAuLi4pYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoZSBhY3R1YWwgc3ltYm9sIG5hbWUgaXMsIGJlY2F1c2UgaXQncyB1c3VhbGx5IGp1c3QgYGJwZl9maW5kX3ZtYWAuIEdvdHRhIGdyZXAgZm9yIGBicGZfZmluZF92bWFgIGFuZCBgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXRgIHRvIGNvbmZpcm0gdGhhdC4gVGhhdCBzaG91bGQgZ2V0IG1lIHN0YXJ0ZWQgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjIzOjUzLjQ3NzQyMzU0N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjc2NzMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZmluZF92bWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIzOS1cXHRjYXNlIEJQRl9GVU5DX2ZpbmRfdm1hOlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjIyNDA6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZmluZF92bWFfcHJvdG87XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjI0MS1cXHRkZWZhdWx0Olxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03Mzc9c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdGFza192bWFfcmVnX2luZm8gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTc1Mi1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjc1MzpCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03NTQtXFx0ICAgYnBmX2NhbGxiYWNrX3QsIGNhbGxiYWNrX2ZuLCB2b2lkICosIGNhbGxiYWNrX2N0eCwgdTY0LCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtODE0LVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6ODE1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZmluZF92bWFfcHJvdG8gPSB7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo4MTY6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9maW5kX3ZtYSxcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTgxNy1cXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk2MzU9c3RhdGljIGludCBzZXRfZmluZF92bWFfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjM5LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTY0MDpcXHQvKiBicGZfZmluZF92bWEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgYWRkcixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTY0MS1cXHQgKiAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2ZuLCB2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjM6NTMuNTMwMTk1NDk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwODU3MDc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBCUEYgRnVuY3Rpb24gRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIEkgc2VlIHRoaXMgYGJwZl9maW5kX3ZtYWAgZnVuY3Rpb24gZGVmaW5lZCB3aXRoIHRoYXQgYEJQRl9DQUxMXzVgIG1hY3JvLiBIbW0sIHRoYXQncyBub3QgdGhlIHVzdWFsIHdheSBJJ2QgZXhwZWN0IHRvIHNlZSBpdCwgYW5kIGl0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBCUEZfQ0FMTF81YCBpcyBleHBhbmRpbmcgdG8gaGVyZS4gVGhhdCBtYWNybyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtLiBJcyB0aGlzIGEgY3VzdG9tIEJQRiBoZWxwZXIgY2FsbD8gSXMgaXQgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIEJQRiBpbmZyYXN0cnVjdHVyZT8gSXMgaXQgdXNpbmcgYSBkaWZmZXJlbnQgYXJndW1lbnQgcGFzc2luZyBjb252ZW50aW9uPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24gaXRzZWxmLiBLbm93aW5nIHdoYXQgaXQgZXhwYW5kcyB0byB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIEJQRiBzeXN0ZW0gYW5kIHdoYXQga2luZCBvZiBjb250cm9sIGl0IGhhcyBvdmVyIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhcyAoVk1BcykuIFRoaXMgaW5pdGlhbCBsb29rIGlzIHN1Z2dlc3RpbmcgdG8gbWUgdGhhdCBJIG5lZWQgdG8gc3RlcCBiYWNrIGFuZCB1bmRlcnN0YW5kIHRoZSBidWlsZGluZyBibG9ja3MgYmVmb3JlIGFuYWx5emluZyB0aGUgZnVuY3Rpb24gaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjM6NTcuMjM4NzY4MDIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTA0MzE3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEJQRl9DQUxMXzVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjM6NTcuMjg0NjgwMzc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MTY2MDMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIEZ1bmN0aW9uIENhbGxzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBCUEZfQ0FMTF81YCBkZWZpbml0aW9uIGxpdmVzLiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwgaGVhZGVycy4gU3BlY2lmaWNhbGx5LCBJJ2Qgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAsIHdoaWNoIGlzIGEgY29tbW9uIHBsYWNlIGZvciBCUEYtcmVsYXRlZCBkZWZpbml0aW9ucy4gSWYgaXQncyBub3QgdGhlcmUsIHRoZSBsb2dpY2FsIG5leHQgcGxhY2Ugd291bGQgYmUgYGluY2x1ZGUvbGludXgvYnBmLmhgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gZGlnZ2luZyBpbnRvIEJQRiBpbmZyYXN0cnVjdHVyZSBhbmQgc3lzY2FsbCBpbXBsZW1lbnRhdGlvbnMsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luIG15IHNlYXJjaC4gTGV0J3Mgc3RhcnQgd2l0aCBgZmlsdGVyLmhgIGZpcnN0LCBhbmQgaWYgdGhhdCBkb2Vzbid0IHlpZWxkIHJlc3VsdHMsIEknbGwgbW92ZSBvbiB0byBgYnBmLmhgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTcwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MDAuODU2MzQzMDUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDg4NTcyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEJQRl9DQUxMXzVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI4LSNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjk6I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYzMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MDAuOTkxMjM3NDY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNzY2NzA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENhbGwgTWFjcm8qKlxuXG5Pa2F5LCBzbyBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBCUEZfQ0FMTF94YCBtYWNyby4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0IGV4cGFuZHMgdG8sIGVzcGVjaWFsbHkgd2l0aGluIHRoaXMgQlBGIGNvbnRleHQuIEtub3dpbmcgdGhlIGV4YWN0IGV4cGFuc2lvbiBpcyBjcnVjaWFsIOKAkyBpdCByZXZlYWxzIHRoZSBtZWNoYW5pc20sIHdoZXRoZXIgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24gY2FsbCwgYSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIG1vcmUgY29tcGxleCBwcmVwcm9jZXNzb3IgdHJpY2tlcnkuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgYXQgdGhlIGJ5dGVjb2RlIGxldmVsLiBJdCBpbmZsdWVuY2VzIGhvdyBJIHdvdWxkIGFwcHJvYWNoIGRlYnVnZ2luZywgb3B0aW1pemF0aW9uLCBvciBldmVuIHNlY3VyaXR5IGFuYWx5c2lzIGlmIG5lZWRlZC4gVGltZSB0byBjaGVjayB0aGUgaW5jbHVkZXMsIHRyYWNlIHRoZSBtYWNybyBkZWZpbml0aW9uIGFuZCBzZWUgdGhlIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjA0LjYyODkwNzU4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5NzkyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBCUEZfQ0FMTF94XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEwLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjExOiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMi1cXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MDQuNjczODkzNjc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDUyNzA3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgY29kZS4gTGV0J3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAg4oCTIHRoYXQncyB0aGUgbmF0dXJhbCBwbGFjZSB0byBiZWdpbiwgZm9jdXNpbmcgYXJvdW5kIGxpbmUgNjExLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29yZSBkZWZpbml0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIHNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIGRlZmluaW5nIGFuZCBoYW5kbGluZyBmaWx0ZXIgcHJvZ3JhbXMgdGhlcmUuIEknbSBsb29raW5nIGZvciB0aGUgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2NrczogdGhlIGluc3RydWN0aW9uIHNldCBkZWZpbml0aW9ucywgYW55IGltbWVkaWF0ZSBvciByZWdpc3RlciB2YWx1ZSByZXByZXNlbnRhdGlvbnMsIGFuZCB0aGUgbWVjaGFuaXNtcyBmb3IgcmVwcmVzZW50aW5nIHByb2dyYW0gYnJhbmNoZXMuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIHN0cnVjdHVyZXMgdGhhdCBtYWtlIHVwIHRoZSBCUEYgYnl0ZWNvZGUgYW5kIGhvdyB0aGV5J3JlIGV4cG9zZWQgdG8gdGhlIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4gSSdtIGhvcGluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4YWN0IG1lbW9yeSBsYXlvdXRzIGFuZCBob3cgdGhleSdyZSB1c2VkLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIGxvdy1sZXZlbCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MDguNjc5MTY4MzEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXHRcXHRcXHRcXHQgICAgICAodW5zaWduZWQgbG9uZykwLCAodCkwKSkpIGFcXG4gNjAxOlxcdCNkZWZpbmUgX19CUEZfViB2b2lkXFxuIDYwMjpcXHQjZGVmaW5lIF9fQlBGX05cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0I2RlZmluZSBfX0JQRl9ERUNMX0FSR1ModCwgYSkgdCAgIGFcXG4gNjA1OlxcdCNkZWZpbmUgX19CUEZfREVDTF9SRUdTKHQsIGEpIHU2NCBhXFxuIDYwNjpcXHRcXG4gNjA3OlxcdCNkZWZpbmUgX19CUEZfUEFEKG4pXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjA4OlxcdFxcdF9fQlBGX01BUChuLCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX04sIHU2NCwgX191cl8xLCB1NjQsIF9fdXJfMiwgICAgICAgXFxcXFxcbiA2MDk6XFx0XFx0XFx0ICB1NjQsIF9fdXJfMywgdTY0LCBfX3VyXzQsIHU2NCwgX191cl81KVxcbiA2MTA6XFx0XFxuIDYxMTpcXHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxMjpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjEzOlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcXFxcbiA2MTQ6XFx0XFx0dHlwZWRlZiB1NjQgKCpidGZfIyNuYW1lKShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyBcXFxcXFxuIDYxNTpcXHRcXHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXFxcXG4gNjE2OlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcXFxcbiA2MTc6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxODpcXHRcXHRcXHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXFxcXG4gNjE5OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MjA6XFx0XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYyMTpcXHRcXHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXFxuIDYyMjpcXHRcXG4gNjIzOlxcdCNkZWZpbmUgX19OT0FUVFJcXG4gNjI0OlxcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyNTpcXHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2MjY6XFx0I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI3OlxcdCNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyODpcXHQjZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2Mjk6XFx0I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MDguNjc5Mjg2NTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDI3ODYxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEJQRl9DQUxMXzUoYnBmX2ZpbmRfdm1hLCAuLi4pYCBtYWNybyBkZWZpbml0aW9uLiBSaWdodCwgaXQncyBkZWZpbmluZyBib3RoIGB1NjQgYnBmX2ZpbmRfdm1hKC4uLilgIGFuZCBhIHN0YXRpYywgaW5saW5lIHZlcnNpb24sIGBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBfX19fYnBmX2ZpbmRfdm1hKC4uLilgLiBUaGlzIHRlbGxzIG1lIHRoZSBub24taW5saW5lZCBmdW5jdGlvbiBpcyAqc3BlY2lmaWNhbGx5KiBgYnBmX2ZpbmRfdm1hYC4gSXQncyBnb29kIHRvIGtlZXAgdHJhY2sgb2YgdGhpcyBkaXN0aW5jdGlvbiBpbiBCUEYgZnVuY3Rpb25zLCBvZiB3aGljaCB0aGlzIGlzIG9uZS5cblxuTm93LCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBpbiBga2VybmVsL2JwZi9zdGFja21hcC5jYC4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgc3RhdGljIG5hdHVyZS4gVGhpcyBjb3VsZCBpbXBhY3QgaG93IGl0J3MgaGFuZGxlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgQlBGIGNvbnRleHQgYW5kIHZpc2liaWxpdHkuIFNvLCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgdGhhdCdzIGEgYHN0YXRpY2AgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVGhpcyBjb3VsZCBiZSByZWxldmFudCBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIEJQRiBjb21wb25lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MTIuNjIyMDc1OTg2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg4Nzc1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuYz0xODM9c3RydWN0IHN0YWNrX21hcF9jYWNoZWRfdm1hIHtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xOTEtLypcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6MTkyOiAqIFBlciBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldCgpIGNhbGwgY2FjaGUgb2YgdGhlIGxhc3QgVk1BIHdpdGggYSBidWlsZCBJRFxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xOTMtICogcmVzb2x2ZWQgYW5kIHRoZSBsYXN0IFZNQSB3aXRoIG5vIHVzYWJsZSBidWlsZCBJRC4gQWRqYWNlbnQgc3RhY2sgZnJhbWVzIHRlbmRcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz0zMjM9c3RhdGljIHZvaWQgc3RhY2tfbWFwX3VubG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaylcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0zMzItXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjMzMzpzdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldF9zbGVlcGFibGUoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyxcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MzIgdHJhY2VfbnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDEzLSAqL1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo0MTQ6c3RhdGljIHZvaWQgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyxcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDE1LVxcdFxcdFxcdFxcdFxcdCAgdTMyIHRyYWNlX25yLCBib29sIHVzZXIsIGJvb2wgbWF5X2ZhdWx0KVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTQyMy1cXHRpZiAobWF5X2ZhdWx0IFxcdTAwMjZcXHUwMDI2IGhhc191c2VyX2N0eCkge1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo0MjQ6XFx0XFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXRfc2xlZXBhYmxlKGlkX29mZnMsIHRyYWNlX25yKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDI1LVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz01MDY9c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNraWQoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy01NDUtXFx0XFx0XFx0aWRfb2Zmc1tpXS5pcCA9IGlwc1tpXTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NTQ2OlxcdFxcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGlkX29mZnMsIHRyYWNlX25yLCB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNTQ3LVxcdFxcdHRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpO1xcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTY4Mj1zdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NTctXFx0aWYgKHVzZXJfYnVpbGRfaWQpXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjc1ODpcXHRcXHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChidWYsIHRyYWNlX25yLCB1c2VyLCBtYXlfZmF1bHQpO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjEyLjg1MDk1ODExMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc2ODkyNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ2FsbCBDaGFpbioqXG5cbk9rYXksIHNvIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQsIHdoaWNoIGlzIGdvb2QuIEl0J3MgbGlrZWx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZS4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIGtub3dpbmcgd2hlcmUgaXQgKmlzKiB1c2VkLCBzbyBJIGNhbiB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBSaWdodCBub3cgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBieSBgX19icGZfZ2V0X3N0YWNraWRgIGFuZCBgX19icGZfZ2V0X3N0YWNrYC4gSG1tLCBhbmQgaXQgbG9va3MgbGlrZSBib3RoIGBfX2JwZl9nZXRfc3RhY2tpZGAgYW5kIGBfX2JwZl9nZXRfc3RhY2tgIGFyZSBhbHNvIHN0YXRpYyBmdW5jdGlvbnMuIFRoaXMgbGltaXRzIHRoaW5ncyBhIGxpdHRsZSBiaXQuIE5vdyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdXJ0aGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgY2FsbCB0aGVzZSB0d28uIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIEkgbmVlZCB0byBmb2xsb3cgdGhpcyBjYWxsIGNoYWluIHVwIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIGhvdyB0aGlzIG9mZnNldCBpcyBiZWluZyB1dGlsaXplZCBpbiB0aGUgQlBGIHJ1bnRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNDoxNi41Mjc4NTMxOTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTIyNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnBmX2dldF9zdGFja2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YWNrbWFwLmM9NDcwPWdldF9jYWxsY2hhaW5fZW50cnlfZm9yX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1MzIgbWF4X2RlcHRoKVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTUwNS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NTA2OnN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFja2lkKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTUwNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NTgwPUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAwLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2MDE6XFx0cmV0dXJuIF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjAyLX1cXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz02MjU9QlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY1NC1cXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBucl9rZXJuZWw7XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjY1NTpcXHRcXHRyZXQgPSBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY1Ni1cXHR9IGVsc2UgeyAvKiB1c2VyICovXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjYzLVxcdFxcdGZsYWdzID0gKGZsYWdzIFxcdTAwMjYgfkJQRl9GX1NLSVBfRklFTERfTUFTSykgfCBza2lwO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NjQ6XFx0XFx0cmV0ID0gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NjUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNDoxNi41NzI3ODA4NDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMjgyMDkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIEJQRiBzdGFjayBJRCBmdW5jdGlvbnMsIGJhc2VkIG9uIHRob3NlIG5vdGVzOlxuXG4qKkJQRiBTdGFjayBUcmFjaW5nIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBncmFiIHN0YWNrIElEcyB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBicGZfZ2V0X3N0YWNraWRgIGFuZCBgYnBmX2dldF9zdGFja2lkX3BlYCBhcmUgdGhlIGNvcmUgQlBGIGhlbHBlcnMgd2UncmUgdXNpbmcgZm9yIGdldHRpbmcgdGhvc2Ugc3RhY2sgdHJhY2VzLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgdGhlbiBJIG5vdGljZWQgYSBiaXQgb2YgYW4gYWJzdHJhY3Rpb24gbGF5ZXIuIEl0IGxvb2tzIGxpa2UgYF9fYnBmX2dldF9zdGFja2AgaXMgdGhlIHJlYWwgd29ya2hvcnNlLCB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiB0aGF0IGJvdGggYGJwZl9nZXRfc3RhY2tgIGFuZCBgYnBmX2dldF9zdGFja19wZWAgY2FsbCBpbnRvLiBTbywgYGJwZl9nZXRfc3RhY2tgIGFuZCBpdHMgUEUgdmFyaWFudCBhcmUgbGlrZWx5IHdyYXBwZXJzIG9yIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBzb21lIGhpZ2hlci1sZXZlbCBkZXRhaWxzLCBidXQgdWx0aW1hdGVseSB0aGV5IHJlbHkgb24gYF9fYnBmX2dldF9zdGFja2AgdG8gYWN0dWFsbHkgZG8gdGhlIGhhcmQgcGFydCBvZiBjYXB0dXJpbmcgdGhlIHN0YWNrIGRhdGEuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGNhbGxzIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2Ygc3RhY2sgdHJhY2luZyB3aXRoaW4gdGhlIEJQRiBlbnZpcm9ubWVudC4gS25vd2luZyB0aGUgaW50ZXJuYWxzIGFuZCB0aGUgaGVscGVycyBpcyBpbXBvcnRhbnQgd2hlbiB5b3UncmUgd29ya2luZyB3aXRoIHRoaXMgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjUyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MjAuNDg1NjA0MzYzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ2MTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2JwZl9nZXRfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuYz00NzA9Z2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNTA1LVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo1MDY6c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNraWQoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNTA3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz01ODA9QlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02MDAtXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjYwMTpcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02MDItfVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTYyNT1CUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF9wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjU0LVxcdFxcdHRyYWNlLVxcdTAwM2VuciA9IG5yX2tlcm5lbDtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NjU1OlxcdFxcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjU2LVxcdH0gZWxzZSB7IC8qIHVzZXIgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NjMtXFx0XFx0ZmxhZ3MgPSAoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZfU0tJUF9GSUVMRF9NQVNLKSB8IHNraXA7XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjY2NDpcXHRcXHRyZXQgPSBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2NS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NjczPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNraWRfcHJvdG9fcGUgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNjgxLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2ODI6c3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY4My1cXHRcXHRcXHQgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZV9pbixcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz03NzE9QlBGX0NBTExfNChicGZfZ2V0X3N0YWNrLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTc3My17XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjc3NDpcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NzUtfVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTc4Nz1CUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTc4OS17XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjc5MDpcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIHRydWUgLyogbWF5X2ZhdWx0ICovKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzkxLX1cXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz04MDM9c3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgxMy1cXHRpZiAocmVncylcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODE0OlxcdFxcdHJlcyA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCB0YXNrLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBtYXlfZmF1bHQpO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MTUtXFx0cHV0X3Rhc2tfc3RhY2sodGFzayk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9ODU0PUJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODY0LVxcdGlmICghKGV2ZW50LVxcdTAwM2VhdHRyLnNhbXBsZV90eXBlIFxcdTAwMjYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSlcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODY1OlxcdFxcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTg2Ni1cXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04ODQtXFx0XFx0dHJhY2UtXFx1MDAzZW5yID0gbnJfa2VybmVsO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo4ODU6XFx0XFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIHRyYWNlLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODg2LVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTg5Ni1cXHRcXHRmbGFncyA9IChmbGFncyBcXHUwMDI2IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODk3OlxcdFxcdGVyciA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCB0cmFjZSwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTg5OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjIwLjUzMDA3NTY3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDUwMjE4Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQlBGIFN0YWNrIGFuZCBWTUEgSGVscGVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IEJQRiBzdGFjayBhbmQgVk1BIGhlbHBlcnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0YXJnZXQgdGhlc2UgZnVuY3Rpb25zIGZvciBmdXp6aW5nOiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGBicGZfZmluZF92bWFgLiBUaG9zZSBhcmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcy5cblxuSG9sZCBvbiBhIHNlY29uZCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZy4uLiBgYnBmX2dldF90YXNrX3N0YWNrYCBkb2Vzbid0ICpkaXJlY3RseSogY2FsbCBgX19icGZfZ2V0X3N0YWNrYCwgaXQgZ29lcyB0aHJvdWdoIGBfX2JwZl9nZXRfdGFza19zdGFja2AsIHdoaWNoIHRoZW4gY2FsbHMgYF9fYnBmX2dldF9zdGFja2AuIEdvb2QgdG8ga25vdywgYnV0IGRvZXNuJ3QgY2hhbmdlIG15IGFwcHJvYWNoLlxuXG5SaWdodCwgYmFjayB0byB0aGUgbWFpbiBwb2ludC4gVGhlc2UgYXJlICpCUEYgaGVscGVycyosIG5vdCBleHBvcnRlZCBrZXJuZWwgZnVuY3Rpb25zLCBtZWFuaW5nIHRoZXkncmUgbWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gQlBGIHByb2dyYW1zLiBTeXprYWxsZXIncyBzZXR1cCBpcyBwZXJmZWN0IGZvciB0aGlzOyBpdCBjYW4gZnV6eiBCUEYgcHJvZ3JhbXMsIHdoaWNoLCBpbiB0dXJuLCBjYW4gY2FsbCB0aGVzZSBoZWxwZXJzLiBFYXN5LiBUaGUgcmVhbCBDIGZ1bmN0aW9uIG5hbWVzIGFyZSBleGFjdGx5IHdoYXQgeW91J2QgZXhwZWN0OiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tgLCBhbmQgc28gb24uXG5cbldhaXQgYSBzZWMuLi4gbG9va2luZyBjbG9zZXIsIGBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2ssIC4uLilgICpkZWZpbmVzKiBgYnBmX2dldF9zdGFja2AuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9sczpcblxuKiAgIGBicGZfZmluZF92bWFgXG4qICAgYGJwZl9nZXRfc3RhY2tpZGBcbiogICBgYnBmX2dldF9zdGFja2lkX3BlYFxuKiAgIGBicGZfZ2V0X3N0YWNrYFxuKiAgIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWBcbiogICBgYnBmX2dldF90YXNrX3N0YWNrYFxuKiAgIGBicGZfZ2V0X3N0YWNrX3BlYFxuXG5PbmUgbGFzdCB0aGluZyB0byBjaGVjay4uLiBjb25maXJtIGBicGZfZ2V0X3Rhc2tfc3RhY2tgIHVzZXMgYEJQRl9DQUxMYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MDcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MjcuNTgwMjk2NTA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA5NzUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfQ0FMTC4qYnBmX2dldF90YXNrX3N0YWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YWNrbWFwLmM9ODAzPXN0YXRpYyBsb25nIF9fYnBmX2dldF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MTktXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjgyMDpCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFjaywgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MjEtXFx0ICAgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTgyNj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3Byb3RvID0ge1xcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgzNi1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODM3OkJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy04MzgtXFx0ICAgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNDoyNy42Mjg0MDAyMzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ2MTI0MDc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFN0YWNrIFRyYWNlIFJldHJpZXZhbCoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgQlBGIGFuZCByZXRyaWV2aW5nIHRhc2sgc3RhY2tzIOKAkyBzcGVjaWZpY2FsbHksIGBicGZfZ2V0X3Rhc2tfc3RhY2tgIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAuIFRoYXQncyB0aGUgY29yZSBmb2N1cy4gTm93LCBsZXQncyBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB3b3JrLiBgZG9fbW1hcF9yZWFkX3VubG9ja2AgaW1tZWRpYXRlbHkgY29tZXMgdG8gbWluZC4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgbG9jYXRlZCB3aXRoaW4gYGtlcm5lbC9icGYvdGFza19pdGVyLmNgLCBhbmQgaXQncyB1c2VkIGFzIGFuIGBpcnFfd29ya2AgY2FsbGJhY2suIFdoaWxlIGl0J3MgaW52b2x2ZWQgaW4gdGhpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzLCBhbmQgcGFydCBvZiB0aGUgbW9kaWZpZWQgbG9naWMsIGl0J3Mgbm90IGEgZGlyZWN0LCBleHRlcm5hbCBBUEkgZW50cnlwb2ludC4gQW5kIHNpbmNlIHRoZSBwcm9tcHQncyBwcmVmZXJlbmNlIGlzIGNsZWFyIOKAkyBmYXZvcmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciB0aGVzZSBpbnRlcm5hbCBoZWxwZXJzIOKAkyB0aGUgcHJpbWFyeSBhcHByb2FjaCBzaG91bGQgcHJvYmFibHkgcmV2b2x2ZSBhcm91bmQgdGhlIEJQRiBoZWxwZXJzIHRoZW1zZWx2ZXMuIFNvIGxldCdzIGZvY3VzIG9uIHRob3NlLlxuXG5Ob3csIGFuIGVzc2VudGlhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGV0aGVyIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLiBUaGUgY29kZSBpcyBzcHJlYWQgYWNyb3NzIGBrZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaGAsIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLCBhbmQgYGtlcm5lbC9icGYvdGFza19pdGVyLmNgLiBJdCdzIGNvbXBpbGVkLCBpdCBzZWVtcywgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBwcm9jZXNzLiBUaGF0IHNob3VsZCBuYWlsIGRvd24gdGhlIGJ1aWxkLXRpbWUgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDc2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjM1LjA4OTY0NTQwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyMDM0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhY2ttYXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjM1LjE0Njg1NTUyMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI0MTU3NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDpcblxuKipVbmRlcnN0YW5kaW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBPYmplY3QgRmlsZXMqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGF0IGBzdGFja21hcC5vYCBnZXRzIGJ1aWx0LiBJbnRlcmVzdGluZy4gSXQncyBjb21waWxlZCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSd2ZSBnb3QgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19QRVJGX0VWRU5UU2AgZW5hYmxlZC4gVGhpcyBjb25uZWN0aW9uIGlzIGtleS4gSSBpbW1lZGlhdGVseSBrbm93IHRoaXMgaW5kaWNhdGVzIGEgZGVwZW5kZW5jeS4gVGhlIHN0YWNrbWFwIGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGFuZC9vciBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIOKAkyBvdGhlcndpc2UgaXQgd291bGRuJ3QgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBsaWtlIHRoaXMuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgd2h5IGl0IG5lZWRzICpib3RoKiBzeXNjYWxsIGFjY2VzcyBhbmQgcGVyZiBldmVudCBpbnRlZ3JhdGlvbiwgYW5kIGhvdyBzdGFja21hcHMgZmFjaWxpdGF0ZXMgdGhhdCBpbnRlZ3JhdGlvbi4gSXMgaXQgcmVsYXRlZCB0byB0cmFjaW5nLCBwZXJoYXBzPyBPciBtYXliZSB1c2luZyBwZXJmIGV2ZW50cyBkYXRhIHdpdGhpbiBCUEYgcHJvZ3JhbXMgZm9yIG1vcmUgbnVhbmNlZCBhbmFseXNpcz8gVGhpcyBpcyBhIGJyZWFkY3J1bWIgdGhhdCByZXF1aXJlcyBzb21lIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uIGludG8gaG93IGl0IGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzIxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MzguNTcxMDE1Njk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc2MTgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXNrX2l0ZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6MzguNjE1NzgyMzczWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTE4NjI2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIEJQRiBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgcmVxdWlyZW1lbnRzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJIGtub3cgSSdsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX1BFUkZfRVZFTlRTYCB0byBnZXQgdGhpcyBCUEYgc3R1ZmYgdXAgYW5kIHJ1bm5pbmcuIEdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpc24ndCBjb25kaXRpb25hbGx5IGVuYWJsZWQgYnkgc29tZSBvdGhlciBvYnNjdXJlIGNvbmZpZyBvcHRpb24uIE5vcGUsIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCwgc2VsZi1jb250YWluZWQgY29uZmlnLiBGaW5lLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucyBhbmQgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaW1wb3J0aW5nIHRoYXQgYGtlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oYCBoZWFkZXIuIEFoLCBpbnRlcmVzdGluZywgaXQncyB1c2VkIHdpdGhpbiBga2VybmVsL2JwZi9zdGFja21hcC5jYCBhbmQgYGtlcm5lbC9icGYvdGFza19pdGVyLmNgLiBUaGF0IGdpdmVzIG1lIGEgY2x1ZSBhYm91dCB3aGVyZSB0aGlzIHVubG9jayB3b3JrIGlzIGJlaW5nIHRyaWdnZXJlZCBhbmQgaGFuZGxlZCBpbiB0aGUgQlBGIGNvbnRleHQuIEdvb2QgdG8ga25vdy5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgYWJvdXQgYGJwZl9maW5kX3ZtYWAuIEFyZSB0aGVyZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG1hY3JvcyBhdCBwbGF5IHRoZXJlPyBJIHNob3VsZCBjaGVjayBpZiBpdCdzIGRlcGVuZGVudCBvbiBzb21lIHNwZWNpZmljIGNvbmZpZ3MgdG8gd29yaywgb3IgaXMgaXQgYWx3YXlzIGF2YWlsYWJsZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6NDIuOTI3NjQ4MzY0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3MjA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZmluZF92bWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIzOS1cXHRjYXNlIEJQRl9GVU5DX2ZpbmRfdm1hOlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjIyNDA6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZmluZF92bWFfcHJvdG87XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjI0MS1cXHRkZWZhdWx0Olxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03Mzc9c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdGFza192bWFfcmVnX2luZm8gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTc1Mi1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjc1MzpCUEZfQ0FMTF81KGJwZl9maW5kX3ZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHU2NCwgc3RhcnQsXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03NTQtXFx0ICAgYnBmX2NhbGxiYWNrX3QsIGNhbGxiYWNrX2ZuLCB2b2lkICosIGNhbGxiYWNrX2N0eCwgdTY0LCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtODE0LVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6ODE1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZmluZF92bWFfcHJvdG8gPSB7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo4MTY6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9maW5kX3ZtYSxcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTgxNy1cXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk2MzU9c3RhdGljIGludCBzZXRfZmluZF92bWFfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjM5LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTY0MDpcXHQvKiBicGZfZmluZF92bWEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgYWRkcixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTY0MS1cXHQgKiAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2ZuLCB2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6NDIuOTczMzI3NzQxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMDM2NTEwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBicGZfbW1hcF9yZWFkX3RyeWxvY2sgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgYnBmX2ZpbmRfdm1hYCBpcyByZWxpYWJseSBwcmVzZW50IHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gTXkgZm9jdXMgbm93IGlzIG9uIGhvdyB0aGlzIHJlY2VudCBwYXRjaCBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgYG1tYXBfdW5sb2NrX3dvcmtgIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaGAuXG5cbkluaXRpYWxseSwgSSBzZWUgdGhhdCB0aGUgY29kZSBoYXMgY29uZGl0aW9uYWwgYmVoYXZpb3IgYmFzZWQgb24gYENPTkZJR19QUkVFTVBUX1JUYC4gVGhlIG9yaWdpbmFsIGNvZGUgcHJlc2VudHMgc2VwYXJhdGUgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgcmVhbC10aW1lIGNvbmZpZ3VyYXRpb24uIEJ1dCBoYW5nIG9uLCB0aGUgcGF0Y2ggKm1vZGlmaWVzKiB0aGUgYnJhbmNoIHdoZXJlIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgKm5vdCogZW5hYmxlZCwgdGhlIG9uZSB3aXRoIGBhdG9taWNfY21weGNoZ19hY3F1aXJlYC4gVGhlcmVmb3JlLCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLCBpdCdzIGFjdHVhbGx5IGlycmVsZXZhbnQgaWYgd2UgZW5hYmxlIGBDT05GSUdfUFJFRU1QVF9SVGAgb3Igbm90LiBUaGlzIGlzIGtleSwgYXMgaXQgc2ltcGxpZmllcyBteSB0ZXN0aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVClgIHBhdGguXG5cbkxldCdzIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrOyB0aGUgcGF0Y2ggbWFrZXMgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgbG9naWMuIEluc3RlYWQgb2YgdGhlIGBpcnFfd29ya19pc19idXN5YCBjaGVjaywgaXQgbm93IHJlbGllcyBvbiBgYXRvbWljX2NtcHhjaGdfYWNxdWlyZWAuIFNvIGl0IG5vdyBkaXJlY3RseSB0cmlnZ2VycyB0aGUgYGlycV93b3JrX2J1c3kgPSB0cnVlYCBwYXRoIHdoZW4gdGhlIGF0b21pYyBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bC4gVGhpcyBjb25maXJtcyBteSBlYXJsaWVyIGFzc2Vzc21lbnQgLSB3ZSAqZG9uJ3QqIG5lZWQgYENPTkZJR19QUkVFTVBUX1JUYCBlbmFibGVkIHRvIG9ic2VydmUgdGhlIHBhdGNoJ3MgZWZmZWN0cy5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgY29yZSBoZWxwZXJzIGFuZCBlbnN1cmUgSSdtIGFjY291bnRpbmcgZm9yIHRoZW0uIFNwZWNpZmljYWxseSB0aGUgZm9sbG93aW5nIGFyZSBCUEYgaGVscGVycyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG1vZGlmaWVkIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGJlaGF2aW9yOiBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAsIGBicGZfZ2V0X3N0YWNraWRfcGVgLCBgYnBmX2dldF9zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF9zdGFja19wZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVzZSBhcmUgYWxsIGNvbnNpZGVyZWQgaW4gbXkgdGVzdCBzdWl0ZSwgb3IgYXQgbGVhc3QgY29uZmlybWVkLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIGZvciAqYW55KiBvdGhlciBjYWxsZXJzIG9mIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIG91dHNpZGUgb2YgdGhlc2Uga25vd24gQlBGIGhlbHBlcnMuIFRoaXMgaXMgYSBzdGFuZGFyZCBjb2RlIHJldmlldyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEwMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNDo1MS4yNzY5ODE5NzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjIyMTM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbW1hcF9yZWFkX3RyeWxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tbWFwX3VubG9ja193b3JrLmg9NTI9YnBmX21tYXBfdW5sb2NrX3B1dF9pcnFfd29yayhzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaC02My0gKi9cXG5rZXJuZWwvYnBmL21tYXBfdW5sb2NrX3dvcmsuaDo2NDpzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21tYXBfcmVhZF90cnlsb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmtlcm5lbC9icGYvbW1hcF91bmxvY2tfd29yay5oLTY1LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbW1hcF91bmxvY2tfaXJxX3dvcmsgKip3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTQxND1zdGF0aWMgdm9pZCBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTQzMS1cXHQgKi9cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NDMyOlxcdGlmICghaGFzX3VzZXJfY3R4IHx8ICFicGZfbW1hcF9yZWFkX3RyeWxvY2soY3VycmVudC1cXHUwMDNlbW0sIFxcdTAwMjZ3b3JrKSkge1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy00MzMtXFx0XFx0LyogY2Fubm90IGFjY2VzcyBjdXJyZW50LVxcdTAwM2VtbSwgZmFsbCBiYWNrIHRvIGlwcyAqL1xcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03NTM9QlBGX0NBTExfNShicGZfZmluZF92bWEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB1NjQsIHN0YXJ0LFxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03OTMtXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo3OTQ6XFx0aWYgKCFicGZfbW1hcF9yZWFkX3RyeWxvY2sobW0sIFxcdTAwMjZ3b3JrKSkge1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzk1LVxcdFxcdHJldCA9IC1FQlVTWTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6NTEuNDg5MjA5OTA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTUwMjE1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IEJQRiBTdGFjayBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCBzZWVtcyBsaWtlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgd2UgbmVlZCB0byBleGFtaW5lIGFyZSByZWFsbHkgY2VudGVyZWQgYXJvdW5kIGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgYW5kIGBicGZfZmluZF92bWFgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAgaXMgb25seSBjYWxsZWQgYnkgdGhlIHN0YWNrbWFwIGhlbHBlcnMsIHdoaWNoIG5hcnJvd3MgZG93biBvdXIgYXJlYSBvZiBpbnRlcmVzdCBzaWduaWZpY2FudGx5LlxuXG5UaGF0IG1lYW5zIHRoZSBjb3JlIHN5bWJvbHMgdG8gemVybyBpbiBvbiBhcmU6IGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4gQnV0LCB3YWl0IGEgbW9tZW50LCBpdCBsb29rcyBsaWtlIGBicGZfZ2V0X3Rhc2tfc3RhY2tgIG1pZ2h0IG5vdCBhY3R1YWxseSB1c2UgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBkaWcgaW50byBgX19icGZfZ2V0X3Rhc2tfc3RhY2tgIGRpcmVjdGx5IHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjExLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI0OjU1LjkwNDIzNTE0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MzM1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfZ2V0X3Rhc2tfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuYz03OTM9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgwMi1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6ODAzOnN0YXRpYyBsb25nIF9fYnBmX2dldF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODA0LVxcdFxcdFxcdFxcdCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTgyMD1CUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFjaywgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgyMi17XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjgyMzpcXHRyZXR1cm4gX19icGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgyNC19XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9ODM3PUJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTgzOS17XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjg0MDpcXHRyZXR1cm4gX19icGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgYnVmLCBzaXplLCBmbGFncywgdHJ1ZSAvKiAhbWF5X2ZhdWx0ICovKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtODQxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjQ6NTUuOTU1MDc0MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNDEyNDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFN0YWNrIFRyYWNlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIGdldHRpbmcgdGFzayBzdGFjayBpbmZvcm1hdGlvbi4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBfX2JwZl9nZXRfdGFza19zdGFja2AgaW1wbGVtZW50YXRpb24uIExldCdzIGRpZyBpbnRvIHRoYXQgY29kZS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBhY3F1aXJlcyB0aGUgc3RhY2sgZGF0YS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSB0YXJnZXQgdGFzaydzIG1lbW9yeSBsYXlvdXQsIHBhcnRpY3VsYXJseSB0aGUgZnJhbWUgcG9pbnRlciBvciBzdGFjayBwb2ludGVyIG1hbmlwdWxhdGlvbiBpdCBtaWdodCBiZSBlbXBsb3lpbmcuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBzdGFjayB1bndpbmRpbmcgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHNlZW0gbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGludmVzdGlnYXRpb24uIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYg4oCTIGhvdyBpdCBkZWFscyB3aXRoIHNpdHVhdGlvbnMgd2hlcmUgaXQgY2FuJ3QgcmVsaWFibHkgcmVhZCB0aGUgc3RhY2ssIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBiZWVuIGRlbGliZXJhdGVseSByZXN0cmljdGVkLiBMZXQncyBzZWUgaWYgaXQncyB1c2luZyB0aGUgc2FtZSBzdGFjayB1bndpbmRpbmcgdGVjaG5pcXVlcyB0aGF0IG90aGVyIGtlcm5lbCB0cmFjaW5nIHRvb2xzIHVzZSBvciBpZiBpdCBoYXMgYW55IHByb3ByaWV0YXJ5IGFwcHJvYWNoZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDc1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjU6MDAuMjg5MjAxMDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDM6XFx0c3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxcbiA4MDQ6XFx0XFx0XFx0XFx0XFx0IHU2NCBmbGFncywgYm9vbCBtYXlfZmF1bHQpXFxuIDgwNTpcXHR7XFxuIDgwNjpcXHRcXHRzdHJ1Y3QgcHRfcmVncyAqcmVncztcXG4gODA3OlxcdFxcdGxvbmcgcmVzID0gLUVJTlZBTDtcXG4gODA4OlxcdFxcbiA4MDk6XFx0XFx0aWYgKCF0cnlfZ2V0X3Rhc2tfc3RhY2sodGFzaykpXFxuIDgxMDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODExOlxcdFxcbiA4MTI6XFx0XFx0cmVncyA9IHRhc2tfcHRfcmVncyh0YXNrKTtcXG4gODEzOlxcdFxcdGlmIChyZWdzKVxcbiA4MTQ6XFx0XFx0XFx0cmVzID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIHRhc2ssIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIG1heV9mYXVsdCk7XFxuIDgxNTpcXHRcXHRwdXRfdGFza19zdGFjayh0YXNrKTtcXG4gODE2OlxcdFxcbiA4MTc6XFx0XFx0cmV0dXJuIHJlcztcXG4gODE4OlxcdH1cXG4gODE5OlxcdFxcbiA4MjA6XFx0QlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1ZixcXG4gODIxOlxcdFxcdCAgIHUzMiwgc2l6ZSwgdTY0LCBmbGFncylcXG4gODIyOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjU6MDAuMjg5MzI2NDlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2MDYyOTUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTdGFjayBUcmFjZSBBUEkqKlxuXG5SaWdodCwgc28gd2UncmUgZGl2aW5nIGludG8gdGhpcyBzdGFjayB0cmFjZSBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIGtleSBlbnRyeSBwb2ludCBoZXJlIGlzIGBfX2JwZl9nZXRfc3RhY2tgLiBJIGtuZXcgaXQgd2FzIGNhbGxpbmcgc29tZXRoaW5nIHNpZ25pZmljYW50LCBhbmQgbm93IEkgcmVtZW1iZXI6IGBzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldGAuIExldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYF9fYnBmX2dldF9zdGFja2AgZnVuY3Rpb24gY2FsbCBmbG93LCB0byBiZSBjZXJ0YWluIHdlJ3JlIGNsZWFyIG9uIGhvdyBpdCdzIG9idGFpbmluZyB0aGUgaW5mb3JtYXRpb24gaXQgbmVlZHMuIFRpbWUgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbnRlcm5hbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNTowMy41NDk5NTk0NjRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4MjpcXHRzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gNjgzOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlX2luLFxcbiA2ODQ6XFx0XFx0XFx0XFx0ICAgIHZvaWQgKmJ1ZiwgdTMyIHNpemUsIHU2NCBmbGFncywgYm9vbCBtYXlfZmF1bHQpXFxuIDY4NTpcXHR7XFxuIDY4NjpcXHRcXHR1MzIgdHJhY2VfbnIsIGNvcHlfbGVuLCBlbGVtX3NpemUsIG1heF9kZXB0aDtcXG4gNjg3OlxcdFxcdGJvb2wgdXNlcl9idWlsZF9pZCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfVVNFUl9CVUlMRF9JRDtcXG4gNjg4OlxcdFxcdGJvb2wgY3Jvc3N0YXNrID0gdGFzayBcXHUwMDI2XFx1MDAyNiB0YXNrICE9IGN1cnJlbnQ7XFxuIDY4OTpcXHRcXHR1MzIgc2tpcCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLO1xcbiA2OTA6XFx0XFx0Ym9vbCB1c2VyID0gZmxhZ3MgXFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xcbiA2OTE6XFx0XFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcXG4gNjkyOlxcdFxcdGJvb2wga2VybmVsID0gIXVzZXI7XFxuIDY5MzpcXHRcXHRpbnQgZXJyID0gLUVJTlZBTDtcXG4gNjk0OlxcdFxcdHU2NCAqaXBzO1xcbiA2OTU6XFx0XFxuIDY5NjpcXHRcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+KEJQRl9GX1NLSVBfRklFTERfTUFTSyB8IEJQRl9GX1VTRVJfU1RBQ0sgfFxcbiA2OTc6XFx0XFx0XFx0XFx0ICAgICAgIEJQRl9GX1VTRVJfQlVJTERfSUQpKSlcXG4gNjk4OlxcdFxcdFxcdGdvdG8gY2xlYXI7XFxuIDY5OTpcXHRcXHRpZiAoa2VybmVsIFxcdTAwMjZcXHUwMDI2IHVzZXJfYnVpbGRfaWQpXFxuIDcwMDpcXHRcXHRcXHRnb3RvIGNsZWFyO1xcbiA3MDE6XFx0XFxuIDcwMjpcXHRcXHRlbGVtX3NpemUgPSB1c2VyX2J1aWxkX2lkID8gc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpIDogc2l6ZW9mKHU2NCk7XFxuIDcwMzpcXHRcXHRpZiAodW5saWtlbHkoc2l6ZSAlIGVsZW1fc2l6ZSkpXFxuIDcwNDpcXHRcXHRcXHRnb3RvIGNsZWFyO1xcbiA3MDU6XFx0XFxuIDcwNjpcXHRcXHQvKiBjYW5ub3QgZ2V0IHZhbGlkIHVzZXIgc3RhY2sgZm9yIHRhc2sgd2l0aG91dCB1c2VyX21vZGUgcmVncyAqL1xcbiA3MDc6XFx0XFx0aWYgKHRhc2sgXFx1MDAyNlxcdTAwMjYgdXNlciBcXHUwMDI2XFx1MDAyNiAhdXNlcl9tb2RlKHJlZ3MpKVxcbiA3MDg6XFx0XFx0XFx0Z290byBlcnJfZmF1bHQ7XFxuIDcwOTpcXHRcXG4gNzEwOlxcdFxcdC8qIGdldF9wZXJmX2NhbGxjaGFpbiBkb2VzIG5vdCBzdXBwb3J0IGNyb3NzdGFzayB1c2VyIHN0YWNrIHdhbGtpbmdcXG4gNzExOlxcdFxcdCAqIGJ1dCByZXR1cm5zIGFuIGVtcHR5IHN0YWNrIGluc3RlYWQgb2YgTlVMTC5cXG4gNzEyOlxcdFxcdCAqL1xcbiA3MTM6XFx0XFx0aWYgKGNyb3NzdGFzayBcXHUwMDI2XFx1MDAyNiB1c2VyKSB7XFxuIDcxNDpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4gNzE1OlxcdFxcdFxcdGdvdG8gY2xlYXI7XFxuIDcxNjpcXHRcXHR9XFxuIDcxNzpcXHRcXG4gNzE4OlxcdFxcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xcbiA3MTk6XFx0XFxuIDcyMDpcXHRcXHRpZiAobWF5X2ZhdWx0KVxcbiA3MjE6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpOyAvKiBuZWVkIFJDVSBmb3IgcGVyZidzIGNhbGxjaGFpbiBiZWxvdyAqL1xcbiA3MjI6XFx0XFxuIDcyMzpcXHRcXHRpZiAodHJhY2VfaW4pIHtcXG4gNzI0OlxcdFxcdFxcdHRyYWNlID0gdHJhY2VfaW47XFxuIDcyNTpcXHRcXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBtaW5fdCh1MzIsIHRyYWNlLVxcdTAwM2VuciwgbWF4X2RlcHRoKTtcXG4gNzI2OlxcdFxcdH0gZWxzZSBpZiAoa2VybmVsIFxcdTAwMjZcXHUwMDI2IHRhc2spIHtcXG4gNzI3OlxcdFxcdFxcdHRyYWNlID0gZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayh0YXNrLCBtYXhfZGVwdGgpO1xcbiA3Mjg6XFx0XFx0fSBlbHNlIHtcXG4gNzI5OlxcdFxcdFxcdHRyYWNlID0gZ2V0X3BlcmZfY2FsbGNoYWluKHJlZ3MsIGtlcm5lbCwgdXNlciwgbWF4X2RlcHRoLFxcbiA3MzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgY3Jvc3N0YXNrLCBmYWxzZSwgMCk7XFxuIDczMTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI1OjAzLjU1MDA1ODMyNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzcxNzA4MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgYW5kIGRpdmluZyBpbnRvIHNvbWUga2VybmVsIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYF9fYnBmX2dldF9zdGFja2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgcmVzdCBvZiB0aGUgYF9fYnBmX2dldF9zdGFja2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiwgbm90IGp1c3QgdGhlIHNuaXBwZXRzIEkgbWlnaHQgaGF2ZSBiZWVuIGdsYW5jaW5nIGF0LiBJJ20gYXNzdW1pbmcgdGhlcmUncyBtb3JlIGhlcmUgdGhhbiBtZWV0cyB0aGUgZXllLCBwcm9iYWJseSBzb21lIGNyaXRpY2FsIGxvZ2ljIHJlbGF0ZWQgdG8gaG93IGl0IGFjdHVhbGx5IHJldHJpZXZlcyBhbmQgb3JnYW5pemVzIHRoZSBzdGFjayBkYXRhIGZvciBCUEYgcHJvZ3JhbXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIG9uIG1lbW9yeSBhY2Nlc3MsIHJlZ2lzdGVyIGhhbmRsaW5nLCBwZXJoYXBzIGV2ZW4gc29tZSBjbGV2ZXIgdHJpY2tzIHRvIGVmZmljaWVudGx5IGNvcHkgdGhlIHN0YWNrIGNvbnRlbnQgdG8gdXNlcnNwYWNlLCBvciBldmVuIHRvIGEgQlBGIG1hcCBmb3IgaW50cm9zcGVjdGlvbi4gSSdtIGtlZW4gdG8gc3BvdCBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IHRoaXMgZnVuY3Rpb24gbWlnaHQgaGF2ZSwgZ2l2ZW4gaXRzIHJvbGUgaW4gdGhlIGNyaXRpY2FsIHBhdGggb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJvdW5kYXJ5IGNoZWNrcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBhbGxvdyBhbiBhdHRhY2tlciB0byByZWFkL3dyaXRlIG1lbW9yeSB0aGV5IHNob3VsZG4ndC4gVGhpcyBwYXJ0IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSBvZiB0aGUgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gcGFyc2UgdGhpcyB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODExMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTQ6MjU6MDkuMzIxNzY5MzI3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MzI6XFx0XFxuIDczMzpcXHRcXHRpZiAodW5saWtlbHkoIXRyYWNlKSB8fCB0cmFjZS1cXHUwMDNlbnIgXFx1MDAzYyBza2lwKSB7XFxuIDczNDpcXHRcXHRcXHRpZiAobWF5X2ZhdWx0KVxcbiA3MzU6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDczNjpcXHRcXHRcXHRnb3RvIGVycl9mYXVsdDtcXG4gNzM3OlxcdFxcdH1cXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0dHJhY2VfbnIgPSB0cmFjZS1cXHUwMDNlbnIgLSBza2lwO1xcbiA3NDA6XFx0XFx0Y29weV9sZW4gPSB0cmFjZV9uciAqIGVsZW1fc2l6ZTtcXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aXBzID0gdHJhY2UtXFx1MDAzZWlwICsgc2tpcDtcXG4gNzQzOlxcdFxcdGlmICh1c2VyX2J1aWxkX2lkKSB7XFxuIDc0NDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzID0gYnVmO1xcbiA3NDU6XFx0XFx0XFx0dTMyIGk7XFxuIDc0NjpcXHRcXG4gNzQ3OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxcbiA3NDg6XFx0XFx0XFx0XFx0aWRfb2Zmc1tpXS5pcCA9IGlwc1tpXTtcXG4gNzQ5OlxcdFxcdH0gZWxzZSB7XFxuIDc1MDpcXHRcXHRcXHRtZW1jcHkoYnVmLCBpcHMsIGNvcHlfbGVuKTtcXG4gNzUxOlxcdFxcdH1cXG4gNzUyOlxcdFxcbiA3NTM6XFx0XFx0LyogdHJhY2UvaXBzIHNob3VsZCBub3QgYmUgZGVyZWZlcmVuY2VkIGFmdGVyIHRoaXMgcG9pbnQgKi9cXG4gNzU0OlxcdFxcdGlmIChtYXlfZmF1bHQpXFxuIDc1NTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNzU2OlxcdFxcbiA3NTc6XFx0XFx0aWYgKHVzZXJfYnVpbGRfaWQpXFxuIDc1ODpcXHRcXHRcXHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChidWYsIHRyYWNlX25yLCB1c2VyLCBtYXlfZmF1bHQpO1xcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGNvcHlfbGVuKVxcbiA3NjE6XFx0XFx0XFx0bWVtc2V0KGJ1ZiArIGNvcHlfbGVuLCAwLCBzaXplIC0gY29weV9sZW4pO1xcbiA3NjI6XFx0XFx0cmV0dXJuIGNvcHlfbGVuO1xcbiA3NjM6XFx0XFxuIDc2NDpcXHRlcnJfZmF1bHQ6XFxuIDc2NTpcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiA3NjY6XFx0Y2xlYXI6XFxuIDc2NzpcXHRcXHRtZW1zZXQoYnVmLCAwLCBzaXplKTtcXG4gNzY4OlxcdFxcdHJldHVybiBlcnI7XFxuIDc2OTpcXHR9XFxuIDc3MDpcXHRcXG4gNzcxOlxcdEJQRl9DQUxMXzQoYnBmX2dldF9zdGFjaywgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcXG4gNzcyOlxcdFxcdCAgIHU2NCwgZmxhZ3MpXFxuIDc3MzpcXHR7XFxuIDc3NDpcXHRcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xcbiA3NzU6XFx0fVxcbiA3NzY6XFx0XFxuIDc3NzpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90byA9IHtcXG4gNzc4OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3N0YWNrLFxcbiA3Nzk6XFx0XFx0LmdwbF9vbmx5XFx0PSB0cnVlLFxcbiA3ODA6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gNzgxOlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNDoyNTowOS4zMjE4Njc2NjdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ0Mjc2MzExOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTdGFjayBUcmFjZSBhbmQgVk1BIExvb2t1cCBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMuIEZpcnN0LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGJvdGggYF9fYnBmX2dldF9zdGFja2AgYW5kIGBfX2JwZl9nZXRfc3RhY2tpZGAgY2FsbCBgc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXRgIHdoZW4gYHVzZXJfYnVpbGRfaWRgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgZm9jdXNlcyBteSBhdHRlbnRpb24gb24gY2VydGFpbiBCUEYgc3ltYm9scy4gSSd2ZSBjb21waWxlZCBhIGxpc3Q6IGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBoZXJlLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGBicGZfZmluZF92bWFgLiBBIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgaXQncyB0aGUgb25seSBvbmUgZGlyZWN0bHkgcmVsYXRlZC4gR29vZCwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBBcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUEVSRl9FVkVOVFNgIHN1ZmZpY2llbnQ/IExvb2tzIGxpa2UgaXQuIGBzdGFja21hcC5vYCBpcyBjb21waWxlZCB3aGVuICpib3RoKiBhcmUgZW5hYmxlZCwgYW5kIGB0YXNrX2l0ZXIub2AgcmVxdWlyZXMgb25seSBgQ09ORklHX0JQRl9TWVNDQUxMYC4gU28sIGBCUEZfU1lTQ0FMTGAgYW5kIGBQRVJGX0VWRU5UU2AgYXJlIGluZGVlZCB0aGUgY29yZSBjb25maWdzIHdlIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGRlZmluaXRpb25zIG9mIG15IGZvY3VzIHN5bWJvbHMuIEkndmUgZm91bmQgdGhhdCBgYnBmX2ZpbmRfdm1hYCByZXNpZGVzIGluIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYCwgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlIGxpc3QgYXJlIGFsbCBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuXG5cbkEgcXVpY2sgY2hlY2sgZm9yIG90aGVyIGhlbHBlcnMgdXNpbmcgYGJwZl9tbWFwX3JlYWRfdHJ5bG9ja2AgY29uZmlybXMgdGhhdCB0aGUgb25seSBjYWxsZXJzIGFyZSBpbmRlZWQgYHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0YCBhbmQgYGJwZl9maW5kX3ZtYWAuXG5cbldhaXQgYSBtaW51dGUsIGBicGZfZ2V0X3N0YWNraWRfcGVgIGFuZCBgYnBmX2dldF9zdGFja19wZWAgYXJlIG9ubHkgYXZhaWxhYmxlIHdpdGggYENPTkZJR19QRVJGX0VWRU5UU2AsIGJ1dCBgc3RhY2ttYXAuY2AgaXRzZWxmIGlzIG9ubHkgY29tcGlsZWQgd2l0aCB0aGlzIG9wdGlvbiEgVGhhdCdzIGEgc29saWQgY29uZmlybWF0aW9uIG9mIGBDT05GSUdfUEVSRl9FVkVOVFNgIGFzIGEgaGFyZCBkZXBlbmRlbmN5LlxuXG5JIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayB0aGF0IGBicGZfZmluZF92bWFgIGlzIGFjdHVhbGx5IGEgQlBGIGhlbHBlci4gWWVwLCBgQlBGX0NBTExfNShicGZfZmluZF92bWEsIC4uLilgIGNvbmZpcm1zIGl0LCBhbmQgdGhlIGFjdHVhbCBzeW1ib2wgbmFtZSBpbiB0aGUga2VybmVsIGlzIGBicGZfZmluZF92bWFgLiBTaW1pbGFybHksIGBicGZfZ2V0X3N0YWNraWRgIGlzIGRlZmluZWQgYXMgYEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCAuLi4pYC4gT2theSwgdGhlIG5hbWVzIG1hdGNoIHRoZSBkZWZpbml0aW9ucy5cblxuU28sIHRvIHN1bW1hcml6ZSBteSBjcml0aWNhbCBjb25maWd1cmF0aW9uczpcbiogICBgQlBGX1NZU0NBTExgXG4qICAgYFBFUkZfRVZFTlRTYFxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoYW5nZSB0byBob3cgYGJwZl9tbWFwX3JlYWRfdHJ5bG9ja2AgaXMgbWFuYWdlZCBieSBCUEYgaGVscGVycywgbWFpbmx5IGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCBhbmQgYGJwZl9nZXRfc3RhY2tgIHRvIHNhZmVseSBhY3F1aXJlIHRoZSBtbWFwIGxvY2suIEl0IGludHJvZHVjZXMgYW4gYGF0b21pY190IGFjdGl2ZWAgZmxhZy4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNvcmUgQlBGLCBleHBvc2VkIHRvIHVzZXJzcGFjZSBCUEYgcHJvZ3JhbXMuIFRoZSBjb2RlIHNlZW1zIGZ1bmN0aW9uYWwsIGFuZCBJJ2QgcmVjb21tZW5kIGZ1enppbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTYxLCJPdXRwdXRUb2tlbnMiOjI0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE0OjI1OjIzLjc0OTUwMDkxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc1MjgxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maW5kX3ZtYVwiLFxuICAgIFwiYnBmX2dldF9zdGFja2lkXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNraWRfcGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfcGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGJwZl9tbWFwX3JlYWRfdHJ5bG9ja2AgbG9naWMgdXNlZCBieSBCUEYgaGVscGVycyB0byBzYWZlbHkgYWNxdWlyZSB0aGUgbW1hcCBsb2NrIGZyb20gY29udGV4dHMgd2hlcmUgSVJRcyBtYXkgYmUgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSBuZXcgYGF0b21pY190IGFjdGl2ZWAgZmxhZyB0byByZXNlcnZlIHRoZSBpcnFfd29yayBzbG90LiBUaGlzIGlzIGNvcmUgQlBGIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgaGVscGVycyBsaWtlIGBicGZfZmluZF92bWFgLCBgYnBmX2dldF9zdGFja2lkYCwgYW5kIGBicGZfZ2V0X3N0YWNrYC4gVGhlIGNvZGUgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZmluZF92bWFcIixcbiAgICBcImJwZl9nZXRfc3RhY2tpZFwiLFxuICAgIFwiYnBmX2dldF9zdGFja2lkX3BlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2dldF90YXNrX3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3BlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBicGZfbW1hcF9yZWFkX3RyeWxvY2tgIGxvZ2ljIHVzZWQgYnkgQlBGIGhlbHBlcnMgdG8gc2FmZWx5IGFjcXVpcmUgdGhlIG1tYXAgbG9jayBmcm9tIGNvbnRleHRzIHdoZXJlIElSUXMgbWF5IGJlIGRpc2FibGVkLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBhdG9taWNfdCBhY3RpdmVgIGZsYWcgdG8gcmVzZXJ2ZSB0aGUgaXJxX3dvcmsgc2xvdC4gVGhpcyBpcyBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcyBjYWxsaW5nIGhlbHBlcnMgbGlrZSBgYnBmX2ZpbmRfdm1hYCwgYGJwZl9nZXRfc3RhY2tpZGAsIGFuZCBgYnBmX2dldF9zdGFja2AuIFRoZSBjb2RlIGlzIGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowq7swf[1] Phase: Succeeded StartedAt: 2026-07-31 14:25:55 +0000 UTC FinishedAt: 2026-07-31 14:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 14:25:55 +0000 UTC FinishedAt: 2026-07-31 14:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2] Phase: Succeeded StartedAt: 2026-07-31 14:25:55 +0000 UTC FinishedAt: 2026-07-31 18:03:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:25:55 +0000 UTC FinishedAt: 2026-07-31 18:03:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:25:55 +0000 UTC FinishedAt: 2026-07-31 14:26:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:25:55 +0000 UTC FinishedAt: 2026-07-31 14:26:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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-workflowq7swf/series-workflowq7swf-convert-artifact-3186800405/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:26:05 +0000 UTC FinishedAt: 2026-07-31 14:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:26:05 +0000 UTC FinishedAt: 2026-07-31 14:42:13 +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:*ddc05769-e613-4cac-a14a-328ae5672c79,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-workflowq7swf/series-workflowq7swf-convert-artifact-3186800405/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": "a17b9c28-81a4-4941-9d8e-7264f2570fe1", "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-workflowq7swf/series-workflowq7swf-build-action-4138930043/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:26:05 +0000 UTC FinishedAt: 2026-07-31 14:42:03 +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:*ddc05769-e613-4cac-a14a-328ae5672c79,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-workflowq7swf/series-workflowq7swf-convert-artifact-3186800405/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": "a17b9c28-81a4-4941-9d8e-7264f2570fe1", "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-workflowq7swf/series-workflowq7swf-build-action-4138930043/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:42:13 +0000 UTC FinishedAt: 2026-07-31 14:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:42:13 +0000 UTC FinishedAt: 2026-07-31 14:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:42:13 +0000 UTC FinishedAt: 2026-07-31 14:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:42:13 +0000 UTC FinishedAt: 2026-07-31 14:42:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-workflowq7swf/series-workflowq7swf-convert-artifact-178384368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:42:23 +0000 UTC FinishedAt: 2026-07-31 14:44:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:42:23 +0000 UTC FinishedAt: 2026-07-31 14:44:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a17b9c28-81a4-4941-9d8e-7264f2570fe1,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-workflowq7swf/series-workflowq7swf-build-action-4138930043/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-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:44:16 +0000 UTC FinishedAt: 2026-07-31 14:44:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:44:16 +0000 UTC FinishedAt: 2026-07-31 14:44:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:44:16 +0000 UTC FinishedAt: 2026-07-31 15:00:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:44:16 +0000 UTC FinishedAt: 2026-07-31 15:00:34 +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:*ddc05769-e613-4cac-a14a-328ae5672c79,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-workflowq7swf/series-workflowq7swf-convert-artifact-178384368/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": "05f72e3a-19b1-40e9-8078-2df5cbe02419", "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-workflowq7swf/series-workflowq7swf-build-action-2603372268/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 14:44:16 +0000 UTC FinishedAt: 2026-07-31 15:00:24 +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:*ddc05769-e613-4cac-a14a-328ae5672c79,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-workflowq7swf/series-workflowq7swf-convert-artifact-178384368/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": "05f72e3a-19b1-40e9-8078-2df5cbe02419", "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-workflowq7swf/series-workflowq7swf-build-action-2603372268/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:00:34 +0000 UTC FinishedAt: 2026-07-31 15:00:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:00:34 +0000 UTC FinishedAt: 2026-07-31 15:00:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:00:34 +0000 UTC FinishedAt: 2026-07-31 15:02:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:00:34 +0000 UTC FinishedAt: 2026-07-31 15:02:22 +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:*05f72e3a-19b1-40e9-8078-2df5cbe02419,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-workflowq7swf/series-workflowq7swf-build-action-2603372268/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-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:02:32 +0000 UTC FinishedAt: 2026-07-31 18:03:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:02:32 +0000 UTC FinishedAt: 2026-07-31 18:03:51 +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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"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:*a17b9c28-81a4-4941-9d8e-7264f2570fe1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*05f72e3a-19b1-40e9-8078-2df5cbe02419,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-workflowq7swf/series-workflowq7swf-build-action-4138930043/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-workflowq7swf/series-workflowq7swf-build-action-2603372268/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:02:32 +0000 UTC FinishedAt: 2026-07-31 15:02:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:02:32 +0000 UTC FinishedAt: 2026-07-31 15:02:36 +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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"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-workflowq7swf/series-workflowq7swf-convert-artifact-2933138537/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:02:32 +0000 UTC FinishedAt: 2026-07-31 15:02:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:02:32 +0000 UTC FinishedAt: 2026-07-31 15:02:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:02:32 +0000 UTC FinishedAt: 2026-07-31 15:02:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:02:42 +0000 UTC FinishedAt: 2026-07-31 18:03:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7swf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"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_find_vma","bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"2fadc6e5-e826-40c7-b066-b0287e2a10f6","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-07-31 15:02:42 +0000 UTC FinishedAt: 2026-07-31 18:03:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a17b9c28-81a4-4941-9d8e-7264f2570fe1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*05f72e3a-19b1-40e9-8078-2df5cbe02419,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-workflowq7swf/series-workflowq7swf-build-action-4138930043/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-workflowq7swf/series-workflowq7swf-build-action-2603372268/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-workflowq7swf/series-workflowq7swf-convert-artifact-2933138537/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,}