Name: series-workflowwdmqd Phase: Running StartedAt: 2026-09-14 19:51:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[0] Phase: Succeeded StartedAt: 2026-09-14 19:51:06 +0000 UTC FinishedAt: 2026-09-14 19:55:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 19:51:06 +0000 UTC FinishedAt: 2026-09-14 19:55:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "33eff1bc-49da-4860-8fda-913b092bb2d1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "regs_exact", "regsafe", "states_equal", "bpf_is_state_visited" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "ee363e055895364039bf28348ff13c615afad4ba", "base_tree": "bpf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnc19leGFjdCYjMzQ7LAogICAgJiMzNDtyZWdzYWZlJiMzNDssCiAgICAmIzM0O3N0YXRlc19lcXVhbCYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMgaW4ga2VybmVsL2JwZi9zdGF0ZXMuYy4gU3BlY2lmaWNhbGx5LCBpdCBtb3ZlcyB0aGUgZnJhbWUgbnVtYmVyIGNoZWNrIChyb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vKSBpbnRvIHJlZ3NfZXhhY3QoKSwgZW5zdXJpbmcgdGhhdCBleGFjdCByZWdpc3RlciBzdGF0ZSBjb21wYXJpc29ucyAoc3VjaCBhcyBkdXJpbmcgbG9vcCBkZXRlY3Rpb24gYW5kIHNwaWxsZWQgc3RhY2sgcG9pbnRlciBjb21wYXJpc29uKSBjb3JyZWN0bHkgZGlzdGluZ3Vpc2ggc3RhY2sgcG9pbnRlcnMgZnJvbSBkaWZmZXJlbnQgY2FsbCBmcmFtZXMuXG5cblRoZSB0b3VjaGVkIGZpZWxkcyAocm9sZC1cdTAwM2VmcmFtZW5vIGFuZCByY3VyLVx1MDAzZWZyYW1lbm8pIGluIHN0cnVjdCBicGZfcmVnX3N0YXRlIGFyZSBhbHdheXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiByZWdpc3RlcnMgYW5kIGZ1bmMgc3RhdGVzIGFyZSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkICh2aWEgbWVtc2V0KCkgaW4gYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKCkgYW5kIGluaXRfZnVuY19zdGF0ZSgpKS4gVGhlIHBhdGNoIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgYWxsb2NhdGlvbiBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMgaW4ga2VybmVsL2JwZi9zdGF0ZXMuYywgbW92aW5nIHRoZSBmcmFtZW5vIGVxdWFsaXR5IGNoZWNrIGludG8gcmVnc19leGFjdCgpLiBUaGlzIGFmZmVjdHMgc3RhdGUgY29tcGFyaXNvbiBmb3IgUFRSX1RPX1NUQUNLIHJlZ2lzdGVycyAoaW5jbHVkaW5nIHNwaWxsZWQgcmVnaXN0ZXJzIGR1cmluZyBsb29wIHN0YXRlIHBydW5pbmcpLiBGdXp6aW5nIHZpYSB0aGUgYnBmIHN5c2NhbGwgaXMgY3JpdGljYWwgdG8gdmVyaWZ5IHNvdW5kbmVzcyBhbmQgZW5zdXJlIG5vIHZlcmlmaWVyIHJlZ3Jlc3Npb25zIG9yIGluZmluaXRlIGxvb3BzL3NhZmV0eSBieXBhc3NlcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc4ZjBiNGEyOTE5YzFjYWZlNTYxYjcyMDE1NGFhN2M3OTU4NTg5ZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxOTo1MjoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuaW5kZXggNjZmYjExYjZjNmE3Ni4uODI3MDM4ZWMxOGI3YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbkBAIC00OTEsNyAmIzQzOzQ5MSw4IEBAIHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4ge1xuIFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApO1xuJiM0MztcdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VwYXJlbnRfaWQsIHJjdXItXHUwMDNlcGFyZW50X2lkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm87XG4gfVxuIFxuIGVudW0gZXhhY3RfbGV2ZWwge1xuQEAgLTYzOSwxMCAmIzQzOzY0MCw3IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gXHRcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgICB0bnVtX2luKHJvbGQtXHUwMDNldmFyX29mZiwgcmN1ci1cdTAwM2V2YXJfb2ZmKTtcbiBcdGNhc2UgUFRSX1RPX1NUQUNLOlxuLVx0XHQvKiB0d28gc3RhY2sgcG9pbnRlcnMgYXJlIGVxdWFsIG9ubHkgaWYgdGhleSYjMzk7cmUgcG9pbnRpbmcgdG9cbi1cdFx0ICogdGhlIHNhbWUgc3RhY2sgZnJhbWUsIHNpbmNlIGZwLTggaW4gZm9vICE9IGZwLTggaW4gYmFyXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCkgXHUwMDI2XHUwMDI2IHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm87XG4mIzQzO1x0XHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XG4gXHRjYXNlIFBUUl9UT19BUkVOQTpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIFBUUl9UT19JTlNOOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuaW5kZXggZDI0OGNlODc3ZjE0ZS4uZjhiN2JhMWJmNmI4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXG5AQCAtMzAzLDQgJiM0MzszMDMsNzAgQEAgX19uYWtlZCB2b2lkIG1heWJlX2V4aXRfc2NjX2J1ZzEodm9pZClcbiBcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBsb29wIHJlYWRzIHplcm8gZnJvbSB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrIG9uIGl0cyBmaXJzdCBpdGVyYXRpb24gYW5kXG4mIzQzOyAqIG9uZSBmcm9tIHRoZSBjYWxsZWUmIzM5O3Mgc3RhY2sgb24gaXRzIHNlY29uZCBpdGVyYXRpb24uIEF0IHRoZSBsb29wIGhlYWRlcixcbiYjNDM7ICogb25seSB0aGUgZnJhbWUgbnVtYmVyIG9mIHRoZSBwb2ludGVyIGluIHIxIGNoYW5nZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuJiM0Mzt2b2lkIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDsqKHU2NCAqKShyMTAgLSA4KSA9IDE7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7MTogcjAgPSAqKHU2NCAqKShyMSAmIzQzOyAwKTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtpZiByMCAhPSAwIGdvdG8gMmY7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjEgPSByMTA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjEgJiM0Mzs9IC04O1wmIzM0O1xuJiM0MztcdFwmIzM0O2dvdG8gMWI7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7MjogZXhpdDtcJiMzNDtcbiYjNDM7XHQ6OjogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7Ym91bmRlZCBsb29wIGNoYW5naW5nIHN0YWNrIGZyYW1lIGluIGEgcmVnaXN0ZXJcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgxKVxuJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuJiM0MztfX25ha2VkIHZvaWQgYm91bmRlZF9sb29wX3N0YWNrX2ZyYW1lc19yZWcodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxID0gcjEwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxICYjNDM7PSAtODtcJiMzNDtcbiYjNDM7XHRcJiMzNDtjYWxsIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZztcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRXhlcmNpc2UgdGhlIHNhbWUgZnJhbWUgY2hhbmdlIHRocm91Z2ggYSBzcGlsbGVkIHBvaW50ZXIuIEFsbCByZWdpc3RlcnNcbiYjNDM7ICogYXQgdGhlIGxvb3AgaGVhZGVyIGFyZSBpZGVudGljYWwsIHdoaWxlIGZwLTE2IHBvaW50cyB0byBhIGRpZmZlcmVudCBmcmFtZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkXG4mIzQzO3ZvaWQgbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSAxO1wmIzM0O1xuJiM0MztcdFwmIzM0OyoodTY0ICopKHIxMCAtIDE2KSA9IHIxO1wmIzM0O1xuJiM0MztcdFwmIzM0OzE6IHIxID0gKih1NjQgKikocjEwIC0gMTYpO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IwID0gKih1NjQgKikocjEgJiM0MzsgMCk7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7aWYgcjAgIT0gMCBnb3RvIDJmO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxID0gcjEwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxICYjNDM7PSAtODtcJiMzNDtcbiYjNDM7XHRcJiMzNDsqKHU2NCAqKShyMTAgLSAxNikgPSByMTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtnb3RvIDFiO1wmIzM0O1xuJiM0MztcdFwmIzM0OzI6IGV4aXQ7XCYjMzQ7XG4mIzQzO1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2JvdW5kZWQgbG9vcCBjaGFuZ2luZyBzdGFjayBmcmFtZSBpbiBhIHNwaWxsXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMSlcbiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiYjNDM7X19uYWtlZCB2b2lkIGJvdW5kZWRfbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxID0gcjEwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxICYjNDM7PSAtODtcJiMzNDtcbiYjNDM7XHRcJiMzNDtjYWxsIGxvb3Bfc3RhY2tfZnJhbWVzX3NwaWxsO1wmIzM0O1xuJiM0MztcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdzX2V4YWN0JiMzNDssCiAgICAmIzM0O3JlZ3NhZmUmIzM0OywKICAgICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssCiAgICAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLCBtb3ZpbmcgdGhlIGZyYW1lbm8gZXF1YWxpdHkgY2hlY2sgaW50byByZWdzX2V4YWN0KCkuIFRoaXMgYWZmZWN0cyBzdGF0ZSBjb21wYXJpc29uIGZvciBQVFJfVE9fU1RBQ0sgcmVnaXN0ZXJzIChpbmNsdWRpbmcgc3BpbGxlZCByZWdpc3RlcnMgZHVyaW5nIGxvb3Agc3RhdGUgcHJ1bmluZykuIEZ1enppbmcgdmlhIHRoZSBicGYgc3lzY2FsbCBpcyBjcml0aWNhbCB0byB2ZXJpZnkgc291bmRuZXNzIGFuZCBlbnN1cmUgbm8gdmVyaWZpZXIgcmVncmVzc2lvbnMgb3IgaW5maW5pdGUgbG9vcHMvc2FmZXR5IGJ5cGFzc2VzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzhmMGI0YTI5MTljMWNhZmU1NjFiNzIwMTU0YWE3Yzc5NTg1ODllZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDE5OjUyOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKaW5kZXggNjZmYjExYjZjNmE3Ni4uODI3MDM4ZWMxOGI3YSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCkBAIC00OTEsNyAmIzQzOzQ5MSw4IEBAIHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiB7CiAJcmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwICZhbXA7JmFtcDsKIAkgICAgICAgY2hlY2tfaWRzKHJvbGQtJmd0O2lkLCByY3VyLSZndDtpZCwgaWRtYXApICZhbXA7JmFtcDsKLQkgICAgICAgY2hlY2tfaWRzKHJvbGQtJmd0O3BhcmVudF9pZCwgcmN1ci0mZ3Q7cGFyZW50X2lkLCBpZG1hcCk7CiYjNDM7CSAgICAgICBjaGVja19pZHMocm9sZC0mZ3Q7cGFyZW50X2lkLCByY3VyLSZndDtwYXJlbnRfaWQsIGlkbWFwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICByb2xkLSZndDtmcmFtZW5vID09IHJjdXItJmd0O2ZyYW1lbm87CiB9CiAKIGVudW0gZXhhY3RfbGV2ZWwgewpAQCAtNjM5LDEwICYjNDM7NjQwLDcgQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCwKIAkJcmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSAmYW1wOyZhbXA7CiAJCSAgICAgICB0bnVtX2luKHJvbGQtJmd0O3Zhcl9vZmYsIHJjdXItJmd0O3Zhcl9vZmYpOwogCWNhc2UgUFRSX1RPX1NUQUNLOgotCQkvKiB0d28gc3RhY2sgcG9pbnRlcnMgYXJlIGVxdWFsIG9ubHkgaWYgdGhleSYjMzk7cmUgcG9pbnRpbmcgdG8KLQkJICogdGhlIHNhbWUgc3RhY2sgZnJhbWUsIHNpbmNlIGZwLTggaW4gZm9vICE9IGZwLTggaW4gYmFyCi0JCSAqLwotCQlyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCkgJmFtcDsmYW1wOyByb2xkLSZndDtmcmFtZW5vID09IHJjdXItJmd0O2ZyYW1lbm87CiYjNDM7CQlyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7CiAJY2FzZSBQVFJfVE9fQVJFTkE6CiAJCXJldHVybiB0cnVlOwogCWNhc2UgUFRSX1RPX0lOU046CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMKaW5kZXggZDI0OGNlODc3ZjE0ZS4uZjhiN2JhMWJmNmI4NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYwpAQCAtMzAzLDQgJiM0MzszMDMsNzAgQEAgX19uYWtlZCB2b2lkIG1heWJlX2V4aXRfc2NjX2J1ZzEodm9pZCkKIAk6OjogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBsb29wIHJlYWRzIHplcm8gZnJvbSB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrIG9uIGl0cyBmaXJzdCBpdGVyYXRpb24gYW5kCiYjNDM7ICogb25lIGZyb20gdGhlIGNhbGxlZSYjMzk7cyBzdGFjayBvbiBpdHMgc2Vjb25kIGl0ZXJhdGlvbi4gQXQgdGhlIGxvb3AgaGVhZGVyLAomIzQzOyAqIG9ubHkgdGhlIGZyYW1lIG51bWJlciBvZiB0aGUgcG9pbnRlciBpbiByMSBjaGFuZ2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkCiYjNDM7dm9pZCBsb29wX3N0YWNrX2ZyYW1lc19yZWcodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsqKHU2NCAqKShyMTAgLSA4KSA9IDE7JiMzNDsKJiM0MzsJJiMzNDsxOiByMCA9ICoodTY0ICopKHIxICYjNDM7IDApOyYjMzQ7CiYjNDM7CSYjMzQ7aWYgcjAgIT0gMCBnb3RvIDJmOyYjMzQ7CiYjNDM7CSYjMzQ7cjEgPSByMTA7JiMzNDsKJiM0MzsJJiMzNDtyMSAmIzQzOz0gLTg7JiMzNDsKJiM0MzsJJiMzNDtnb3RvIDFiOyYjMzQ7CiYjNDM7CSYjMzQ7MjogZXhpdDsmIzM0OwomIzQzOwk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtib3VuZGVkIGxvb3AgY2hhbmdpbmcgc3RhY2sgZnJhbWUgaW4gYSByZWdpc3RlciYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgxKQomIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiYjNDM7X19uYWtlZCB2b2lkIGJvdW5kZWRfbG9vcF9zdGFja19mcmFtZXNfcmVnKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7cjEgPSByMTA7JiMzNDsKJiM0MzsJJiMzNDtyMSAmIzQzOz0gLTg7JiMzNDsKJiM0MzsJJiMzNDtjYWxsIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZzsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEV4ZXJjaXNlIHRoZSBzYW1lIGZyYW1lIGNoYW5nZSB0aHJvdWdoIGEgc3BpbGxlZCBwb2ludGVyLiBBbGwgcmVnaXN0ZXJzCiYjNDM7ICogYXQgdGhlIGxvb3AgaGVhZGVyIGFyZSBpZGVudGljYWwsIHdoaWxlIGZwLTE2IHBvaW50cyB0byBhIGRpZmZlcmVudCBmcmFtZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZAomIzQzO3ZvaWQgbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsqKHU2NCAqKShyMTAgLSA4KSA9IDE7JiMzNDsKJiM0MzsJJiMzNDsqKHU2NCAqKShyMTAgLSAxNikgPSByMTsmIzM0OwomIzQzOwkmIzM0OzE6IHIxID0gKih1NjQgKikocjEwIC0gMTYpOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAqKHU2NCAqKShyMSAmIzQzOyAwKTsmIzM0OwomIzQzOwkmIzM0O2lmIHIwICE9IDAgZ290byAyZjsmIzM0OwomIzQzOwkmIzM0O3IxID0gcjEwOyYjMzQ7CiYjNDM7CSYjMzQ7cjEgJiM0Mzs9IC04OyYjMzQ7CiYjNDM7CSYjMzQ7Kih1NjQgKikocjEwIC0gMTYpID0gcjE7JiMzNDsKJiM0MzsJJiMzNDtnb3RvIDFiOyYjMzQ7CiYjNDM7CSYjMzQ7MjogZXhpdDsmIzM0OwomIzQzOwk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtib3VuZGVkIGxvb3AgY2hhbmdpbmcgc3RhY2sgZnJhbWUgaW4gYSBzcGlsbCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgxKQomIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiYjNDM7X19uYWtlZCB2b2lkIGJvdW5kZWRfbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsqKHU2NCAqKShyMTAgLSA4KSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMSA9IHIxMDsmIzM0OwomIzQzOwkmIzM0O3IxICYjNDM7PSAtODsmIzM0OwomIzQzOwkmIzM0O2NhbGwgbG9vcF9zdGFja19mcmFtZXNfc3BpbGw7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCByZXZpZXcgcmVxdWVzdC4gRmlyc3QsIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhbmQgYWRkaW5nIHNvbWUgdGVzdHMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY2AuIFRoYXQmIzM5O3MgZ29vZCwgc2VlaW5nIHRlc3QgYWRkaXRpb25zIGFsd2F5cyBtYWtlcyBtZSBoYXBweS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gYHN0YXRlcy5jYCwgc28gbGV0JiMzOTtzIGluc3BlY3QgdGhlIGRpZmYgZGlyZWN0bHkuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGEgc3VidGxlIGNoYW5nZSB3aXRoaW4gYHJlZ3NfZXhhY3RgIGFuZCBpdHMgdXNhZ2UgaW4gdGhlIGByZWdzYWZlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBhIGByb2xkLSZndDtmcmFtZW5vID09IHJjdXItJmd0O2ZyYW1lbm9gIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBgcmVnc19leGFjdGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb21tZW50IHNlZW1zIHRvIGltcGx5IHRoYXQgdGhlIGZyYW1lIG51bWJlciBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHR3byBzdGFjayBwb2ludGVycyBhcmUgY29uc2lkZXJlZCBlcXVhbC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSByaWdodCBhcHByb2FjaC4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCBtb3JlIGNvbnRleHQuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSByZWxldmFudCBzZWN0aW9ucyBvZiBga2VybmVsL2JwZi9zdGF0ZXMuY2AgYXJvdW5kIHRoZXNlIGxpbmVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGByZWdzX2V4YWN0YCBpcyBpbnRlbmRlZCB0byBkbywgd2hlcmUgaXQmIzM5O3MgdXNlZCBpbiB0aGUgdmVyaWZpZXImIzM5O3MgbG9naWMsIGFuZCBob3cgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBpcyBzdHJ1Y3R1cmVkLiBLbm93aW5nIHRoZSBmaWVsZHMgb2YgYGJwZl9yZWdfc3RhdGVgIHdpbGwgY2xhcmlmeSB3aHkgYGZyYW1lbm9gIGlzIHNpZ25pZmljYW50IGluIHRoaXMgY29tcGFyaXNvbi4gSXMgaXQgcmVsYXRlZCB0byB0aGUgc3RhY2sgZnJhbWUgdHJhY2tpbmc/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgYXNwZWN0cyBvZiByZWdpc3RlciBzdGF0ZSB0cmFja2luZz8KCkkgd2FudCB0byBzZWUgd2hhdCBpcyBoYXBwZW5pbmcgdG8gdGhlIHN0YWNrIHBvaW50ZXIgcmVnaXN0ZXIgaGVyZS4gVGhlIGNoZWNrIGZvciBgUFRSX1RPX1NUQUNLYCB0eXBlIGlzIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IGl0IGhhbmRsZXMgdGhlIHN0YWNrIHBvaW50ZXIuIEkgYWxzbyB3YW50IHRvIGNoZWNrIHRoZSB1c2Ugb2YgYGlkbWFwYCB3aGljaCBpcyB1c2VkIGZvciBJRCBtYXBwaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDgwOlx0XHRcdHUzMiBpcCA9IGJwZl9mcmFtZV9pbnNuX2lkeChzdCwgaSk7XG4gNDgxOlx0XHRcdHUxNiBsaXZlX3JlZ3MgPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpcF0ubGl2ZV9yZWdzX2JlZm9yZTtcbiA0ODI6XHRcbiA0ODM6XHRcdFx0X19jbGVhbl9mdW5jX3N0YXRlKGVudiwgc3QtXHUwMDNlZnJhbWVbaV0sIGxpdmVfcmVncywgaSk7XG4gNDg0Olx0XHR9XG4gNDg1Olx0XHRyZXR1cm4gMDtcbiA0ODY6XHR9XG4gNDg3Olx0XG4gNDg4Olx0c3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiA0ODk6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxuIDQ5MDpcdFx0XHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gNDkxOlx0e1xuIDQ5MjpcdFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxuIDQ5MzpcdFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG4gNDk0Olx0XHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApIFx1MDAyNlx1MDAyNlxuIDQ5NTpcdFx0ICAgICAgIHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm87XG4gNDk2Olx0fVxuIDQ5NzpcdFxuIDQ5ODpcdGVudW0gZXhhY3RfbGV2ZWwge1xuIDQ5OTpcdFx0Tk9UX0VYQUNULFxuIDUwMDpcdFx0RVhBQ1QsXG4gNTAxOlx0XHRSQU5HRV9XSVRISU5cbiA1MDI6XHR9O1xuIDUwMzpcdFxuIDUwNDpcdC8qIFJldHVybnMgdHJ1ZSBpZiAocm9sZCBzYWZlIGltcGxpZXMgcmN1ciBzYWZlKSAqL1xuIDUwNTpcdHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gNTA2Olx0XHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG4gNTA3Olx0XHRcdCAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuIDUwODpcdHtcbiA1MDk6XHRcdGlmIChleGFjdCA9PSBFWEFDVClcbiA1MTA6XHRcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuIDUxMTpcdFxuIDUxMjpcdFx0aWYgKHJvbGQtXHUwMDNldHlwZSA9PSBOT1RfSU5JVClcbiA1MTM6XHRcdFx0LyogZXhwbG9yZWQgc3RhdGUgY2FuJiMzOTt0IGhhdmUgdXNlZCB0aGlzICovXG4gNTE0Olx0XHRcdHJldHVybiB0cnVlO1xuIDUxNTpcdFxuIDUxNjpcdFx0LyogRW5mb3JjZSB0aGF0IHJlZ2lzdGVyIHR5cGVzIGhhdmUgdG8gbWF0Y2ggZXhhY3RseSwgaW5jbHVkaW5nIHRoZWlyXG4gNTE3Olx0XHQgKiBtb2RpZmllcnMgKGxpa2UgUFRSX01BWUJFX05VTEwsIE1FTV9SRE9OTFksIGV0YyksIGFzIGEgZ2VuZXJhbFxuIDUxODpcdFx0ICogcnVsZS5cbiA1MTk6XHRcdCAqXG4gNTIwOlx0XHQgKiBPbmUgY2FuIG1ha2UgYSBwb2ludCB0aGF0IHVzaW5nIGEgcG9pbnRlciByZWdpc3RlciBhcyB1bmJvdW5kZWRcbiA1MjE6XHRcdCAqIFNDQUxBUiB3b3VsZCBiZSB0ZWNobmljYWxseSBhY2NlcHRhYmxlLCBidXQgdGhpcyBjb3VsZCBsZWFkIHRvXG4gNTIyOlx0XHQgKiBwb2ludGVyIGxlYWtzIGJlY2F1c2Ugc2NhbGFycyBhcmUgYWxsb3dlZCB0byBsZWFrIHdoaWxlIHBvaW50ZXJzXG4gNTIzOlx0XHQgKiBhcmUgbm90LiBXZSBjb3VsZCBtYWtlIHRoaXMgc2FmZSBpbiBzcGVjaWFsIGNhc2VzIGlmIHJvb3QgaXNcbiA1MjQ6XHRcdCAqIGNhbGxpbmcgdXMsIGJ1dCBpdCYjMzk7cyBwcm9iYWJseSBub3Qgd29ydGggdGhlIGhhc3NsZS5cbiA1MjU6XHRcdCAqXG4gNTI2Olx0XHQgKiBBbHNvLCByZWdpc3RlciB0eXBlcyB0aGF0IGFyZSAqbm90KiBNQVlCRV9OVUxMIGNvdWxkIHRlY2huaWNhbGx5IGJlXG4gNTI3Olx0XHQgKiBzYWZlIHRvIHVzZSBhcyB0aGVpciBNQVlCRV9OVUxMIHZhcmlhbnRzIChlLmcuLCBQVFJfVE9fTUFQX1ZBTFVFXG4gNTI4Olx0XHQgKiBpcyBzYWZlIHRvIGJlIHVzZWQgYXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMLCBwcm92aWRlZCBib3RoIHBvaW50XG4gNTI5Olx0XHQgKiB0byB0aGUgc2FtZSBtYXApLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NjYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUcmFjaW5nIHRoZSBVc2Ugb2YgYHJlZ3NfZXhhY3RgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHJlZ3NfZXhhY3RgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBCUEYgc3RhdGUgbWFuYWdlbWVudCBjb2RlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpjYWxsZWQqIHdpdGhpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdXJyb3VuZGluZyBsb2dpYy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGNvbnRleHQgaXQgb3BlcmF0ZXMgaW4hIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGZvdW5kYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBtb2RpZmljYXRpb25zIG9yIG9wdGltaXphdGlvbnMgSSBtaWdodCBiZSBjb25zaWRlcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdzX2V4YWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTQ3MT1zdGF0aWMgaW50IGNsZWFuX3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODctXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ4ODpzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODktXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTUwNT1zdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA5LVx0aWYgKGV4YWN0ID09IEVYQUNUKVxua2VybmVsL2JwZi9zdGF0ZXMuYzo1MTA6XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTExLVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQyLVx0Y2FzZSBQVFJfVE9fU1RBQ0s6XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY0MzpcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02NDQtXHRjYXNlIFBUUl9UT19BUkVOQTpcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0OS1cdGRlZmF1bHQ6XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY1MDpcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02NTEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQzMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFBhdGggb2YgYHJlZ3NfZXhhY3RgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbiBgcmVnc19leGFjdGAuIE15IGluaXRpYWwgcG9pbnQgb2YgaW50ZXJlc3QgaXMgdGhlIGNhbGwgc2l0ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgaW52b2tlZC4gQWgsIGhlcmUgaXQgaXMsIG9uIGxpbmUgNTA5OgoKYGBgYwoJaWYgKGV4YWN0ID09IEVYQUNUKQoJCXJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTsKYGBgCgpSaWdodCwgYSBjb25kaXRpb25hbCBjYWxsLiBOb3csIHRoZSBrZXkgaXMgdW5kZXJzdGFuZGluZyAqd2hlbiogYGV4YWN0YCBpcyBlcXVhbCB0byBgRVhBQ1RgLiAgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50LiBXaGVyZSBlbHNlIGRvZXMgdGhpcyBgcmVnc2FmZWAgZnVuY3Rpb24gd2l0aCB0aGF0IGNvbmRpdGlvbiBjb21lIGludG8gcGxheT8gSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxzIHRvIGByZWdzYWZlKC4uLiwgZXhhY3QgPT0gRVhBQ1QpYCB0byBmdWxseSBncmFzcCB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBgcmVnc19leGFjdGAgYmVpbmcgZXhlY3V0ZWQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdzYWZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTQ5OD1lbnVtIGV4YWN0X2xldmVsIHtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUwNC0vKiBSZXR1cm5zIHRydWUgaWYgKHJvbGQgc2FmZSBpbXBsaWVzIHJjdXIgc2FmZSkgKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6NTA1OnN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUwNi1cdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTY5Nz1zdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDQtXHRcdCAqIENvbnN0cnVjdCBhIGZha2UgcmVnaXN0ZXIgZm9yIHN1Y2ggc3RhY2sgYW5kIGNhbGxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NzQ1Olx0XHQgKiByZWdzYWZlKCkgdG8gZW5zdXJlIHNjYWxhciBpZHMgYXJlIGNvbXBhcmVkLlxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDYtXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNzUwLVx0XHRcdGlmIChvbGRfcmVnIFx1MDAyNlx1MDAyNiBjdXJfcmVnKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc1MTpcdFx0XHRcdGlmICghcmVnc2FmZShlbnYsIG9sZF9yZWcsIGN1cl9yZWcsIGlkbWFwLCBleGFjdCkpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc1Mi1cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNzg3LVx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo3ODg6XHRcdFx0aWYgKCFyZWdzYWZlKGVudiwgXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc4OS1cdFx0XHRcdCAgICAgXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIGlkbWFwLCBleGFjdCkpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz04NDI9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy04NTYtXHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlc3RhY2tfYXJnX3JlZ3NbaV0gOiBcdTAwMjZub3RfaW5pdDtcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODU3Olx0XHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfYXJnLCBjdXJfYXJnLCBpZG1hcCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy04NTgtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9OTQwPXN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtOTUzLVx0XHRpZiAoKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgbGl2ZV9yZWdzKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTU0Olx0XHQgICAgIXJlZ3NhZmUoZW52LCBcdTAwMjZvbGQtXHUwMDNlcmVnc1tpXSwgXHUwMDI2Y3VyLVx1MDAzZXJlZ3NbaV0sXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk1NS1cdFx0XHQgICAgIFx1MDAyNmVudi1cdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9yZWdfc3RhdGVgIHN0cnVjdHVyZSBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGBmcmFtZW5vYCBmaWVsZCBpcyBsb2NhdGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxheW91dCBvZiB0aGlzIHRoaW5nLiBMZXQgbWUgcXVpY2tseSBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBicGZfcmVnX3N0YXRlIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0zMj1lbnVtIGJwZl9pdGVyX3N0YXRlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTM3LVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDozODpzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTM5LVx0LyogT3JkZXJpbmcgb2YgZmllbGRzIG1hdHRlcnMuICBTZWUgc3RhdGVzX2VxdWFsKCkgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgaW50ZXJuYWxzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSAzOC4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgc29tZSBjb3JlIGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGJ1aWxkaW5nIGJsb2NrcyBvciBlbnRyeSBwb2ludHMgdGhlcmUuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdldCBtZSBiYWNrIHVwIHRvIHNwZWVkIHF1aWNrbHkgb24gdGhlIGtleSBjb25jZXB0cyBJIG5lZWQgdG8gZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzg6XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG4gIDM5Olx0XHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xuICA0MDpcdFx0ZW51bSBicGZfcmVnX3R5cGUgdHlwZTtcbiAgNDE6XHRcdC8qXG4gIDQyOlx0XHQgKiBDb25zdGFudCBkZWx0YSBiZXR3ZWVuIFwmIzM0O2xpbmtlZFwmIzM0OyBzY2FsYXJzIHdpdGggdGhlIHNhbWUgSUQuXG4gIDQzOlx0XHQgKi9cbiAgNDQ6XHRcdHMzMiBkZWx0YTtcbiAgNDU6XHRcdHVuaW9uIHtcbiAgNDY6XHRcdFx0LyogdmFsaWQgd2hlbiB0eXBlID09IFBUUl9UT19QQUNLRVQgKi9cbiAgNDc6XHRcdFx0aW50IHJhbmdlO1xuICA0ODpcdFxuICA0OTpcdFx0XHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxuICA1MDpcdFx0XHQgKiAgIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTFxuICA1MTpcdFx0XHQgKi9cbiAgNTI6XHRcdFx0c3RydWN0IHtcbiAgNTM6XHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcbiAgNTQ6XHRcdFx0XHQvKiBUbyBkaXN0aW5ndWlzaCBtYXAgbG9va3VwcyBmcm9tIG91dGVyIG1hcFxuICA1NTpcdFx0XHRcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcbiAgNTY6XHRcdFx0XHQgKiBwb2ludGluZyB0byBpbm5lciBtYXBzLlxuICA1NzpcdFx0XHRcdCAqL1xuICA1ODpcdFx0XHRcdHUzMiBtYXBfdWlkO1xuICA1OTpcdFx0XHR9O1xuICA2MDpcdFxuICA2MTpcdFx0XHQvKiBmb3IgUFRSX1RPX0JURl9JRCAqL1xuICA2MjpcdFx0XHRzdHJ1Y3Qge1xuICA2MzpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgNjQ6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA2NTpcdFx0XHR9O1xuICA2NjpcdFxuICA2NzpcdFx0XHRzdHJ1Y3QgeyAvKiBmb3IgUFRSX1RPX01FTSB8IFBUUl9UT19NRU1fT1JfTlVMTCAqL1xuICA2ODpcdFx0XHRcdHUzMiBtZW1fc2l6ZTtcbiAgNjk6XHRcdFx0fTtcbiAgNzA6XHRcbiAgNzE6XHRcdFx0LyogRm9yIGR5bnB0ciBzdGFjayBzbG90cyAqL1xuICA3MjpcdFx0XHRzdHJ1Y3Qge1xuICA3MzpcdFx0XHRcdGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGU7XG4gIDc0Olx0XHRcdFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cbiAgNzU6XHRcdFx0XHQgKiBXZSBuZWVkIHRvIHRyYWNrIHdoaWNoIHNsb3QgaXMgdGhlIGZpcnN0IHNsb3RcbiAgNzY6XHRcdFx0XHQgKiB0byBwcm90ZWN0IGFnYWluc3QgY2FzZXMgd2hlcmUgdGhlIHVzZXIgbWF5IHRyeSB0b1xuICA3NzpcdFx0XHRcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXG4gIDc4Olx0XHRcdFx0ICogZHlucHRyLlxuICA3OTpcdFx0XHRcdCAqL1xuICA4MDpcdFx0XHRcdGJvb2wgZmlyc3Rfc2xvdDtcbiAgODE6XHRcdFx0fSBkeW5wdHI7XG4gIDgyOlx0XG4gIDgzOlx0XHRcdC8qIEZvciBicGZfaXRlciBzdGFjayBzbG90cyAqL1xuICA4NDpcdFx0XHRzdHJ1Y3Qge1xuICA4NTpcdFx0XHRcdC8qIEJURiBjb250YWluZXIgYW5kIEJURiB0eXBlIElEIGRlc2NyaWJpbmdcbiAgODY6XHRcdFx0XHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXHUwMDNjdHlwZVx1MDAzZSBvZiBhbiBpdGVyYXRvciBzdGF0ZVxuICA4NzpcdFx0XHRcdCAqL1xuICA4ODpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgODk6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA5MDpcdFx0XHRcdC8qIHBhY2tpbmcgZm9sbG93aW5nIHR3byBmaWVsZHMgdG8gZml0IGl0ZXIgc3RhdGUgaW50byAxNiBieXRlcyAqL1xuICA5MTpcdFx0XHRcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcbiAgOTI6XHRcdFx0XHRpbnQgZGVwdGg6MzA7XG4gIDkzOlx0XHRcdH0gaXRlcjtcbiAgOTQ6XHRcbiAgOTU6XHRcdFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xuICA5NjpcdFx0XHRzdHJ1Y3Qge1xuICA5NzpcdFx0XHRcdGVudW0ge1xuICA5ODpcdFx0XHRcdFx0SVJRX05BVElWRV9LRlVOQyxcbiAgOTk6XHRcdFx0XHRcdElSUV9MT0NLX0tGVU5DLFxuIDEwMDpcdFx0XHRcdH0ga2Z1bmNfY2xhc3M7XG4gMTAxOlx0XHRcdH0gaXJxO1xuIDEwMjpcdFxuIDEwMzpcdFx0XHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXG4gMTA0Olx0XHRcdHN0cnVjdCB7XG4gMTA1Olx0XHRcdFx0dW5zaWduZWQgbG9uZyByYXcxO1xuIDEwNjpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmF3MjtcbiAxMDc6XHRcdFx0fSByYXc7XG4gMTA4Olx0XG4gMTA5Olx0XHRcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xuIDExMDpcdFx0fTtcbiAxMTE6XHRcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXG4gMTEyOlx0XHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxuIDExMzpcdFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XG4gMTE0Olx0XHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xuIDExNTpcdFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cbiAxMTY6XHRcdCAqL1xuIDExNzpcdFx0c3RydWN0IHRudW0gdmFyX29mZjtcbiAxMTg6XHRcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxuIDExOTpcdFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cbiAxMjA6XHRcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXG4gMTIxOlx0XHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXG4gMTIyOlx0XHQgKi9cbiAxMjM6XHRcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXG4gMTI0Olx0XHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xuIDEyNTpcdFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXG4gMTI2Olx0XHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cbiAxMjc6XHRcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDkwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIgSGVhZGVyKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSBkaXJlY3RseSBpbnRvIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGRlZmluaXRpb24gbGlrZWx5IHJlc2lkZXMsIGFuZCB3aGVyZSBJIG5lZWQgdG8gYmUgZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHJpZ2h0IG5vdy4gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgaW50ZXJuYWwgY29uc3RhbnRzIGRlZmluZWQgaGVyZSBpcyBjcnVjaWFsIGZvciB0aGlzIGludmVzdGlnYXRpb24uIFRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJ1bGVzIGFuZCBsb2dpYyB0aGUga2VybmVsIGVtcGxveXMgdG8ga2VlcCBCUEYgcHJvZ3JhbXMgc2FmZSBhbmQgdmFsaWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHZlcmlmaWVyJiMzOTtzIGludGVybmFsIG1lY2hhbmlzbXMsIGFuZCB0aGlzIGhlYWRlciBpcyB0aGUgbW9zdCBlZmZpY2llbnQgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI4Olx0XHQgKiBjYW1lIGZyb20sIHdoZW4gb25lIGlzIHRlc3RlZCBmb3IgIT0gTlVMTC5cbiAxMjk6XHRcdCAqIEZvciBQVFJfVE9fTUVNX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IG1lbW9yeSBhbGxvY2F0aW9uXG4gMTMwOlx0XHQgKiBmb3IgdGhlIHB1cnBvc2Ugb2YgdHJhY2tpbmcgdGhhdCBpdCYjMzk7cyBmcmVlZC5cbiAxMzE6XHRcdCAqIEZvciBQVFJfVE9fU09DS0VUIHRoaXMgaXMgdXNlZCB0byBzaGFyZSB3aGljaCBwb2ludGVycyByZXRhaW4gdGhlXG4gMTMyOlx0XHQgKiBzYW1lIHJlZmVyZW5jZSB0byB0aGUgc29ja2V0LCB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxuIDEzMzpcdFx0ICogRm9yIHN0YWNrIHNsb3RzIHRoYXQgYXJlIGR5bnB0cnMsIHRoaXMgaXMgdXNlZCB0byB0cmFjayByZWZlcmVuY2VzIHRvXG4gMTM0Olx0XHQgKiB0aGUgZHlucHRyIHRvIGRldGVybWluZSBwcm9wZXIgcmVmZXJlbmNlIGZyZWVpbmcuXG4gMTM1Olx0XHQgKiBTaW1pbGFybHkgdG8gZHlucHRycywgd2UgdXNlIElEIHRvIHRyYWNrIFwmIzM0O2JlbG9uZ2luZ1wmIzM0OyBvZiBhIHJlZmVyZW5jZVxuIDEzNjpcdFx0ICogdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiBicGZfaXRlci5cbiAxMzc6XHRcdCAqL1xuIDEzODpcdFx0LypcbiAxMzk6XHRcdCAqIFVwcGVyIGJpdCBvZiBJRCBpcyB1c2VkIHRvIHJlbWVtYmVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFwmIzM0O2xpbmtlZFwmIzM0O1xuIDE0MDpcdFx0ICogcmVnaXN0ZXJzLiBFeGFtcGxlOlxuIDE0MTpcdFx0ICogcjEgPSByMjsgICAgYm90aCB3aWxsIGhhdmUgcjEtXHUwMDNlaWQgPT0gcjItXHUwMDNlaWQgPT0gTlxuIDE0MjpcdFx0ICogcjEgJiM0Mzs9IDEwOyAgIHIxLVx1MDAzZWlkID09IE4gfCBCUEZfQUREX0NPTlNUIGFuZCByMS1cdTAwM2VkZWx0YSA9PSAxMFxuIDE0MzpcdFx0ICogcjMgPSByMjsgICAgYm90aCB3aWxsIGhhdmUgcjMtXHUwMDNlaWQgPT0gcjItXHUwMDNlaWQgPT0gTlxuIDE0NDpcdFx0ICogdzMgJiM0Mzs9IDEwOyAgIHIzLVx1MDAzZWlkID09IE4gfCBCUEZfQUREX0NPTlNUMzIgYW5kIHIzLVx1MDAzZWRlbHRhID09IDEwXG4gMTQ1Olx0XHQgKi9cbiAxNDY6XHQjZGVmaW5lIEJQRl9BRERfQ09OU1Q2NCAoMVUgXHUwMDNjXHUwMDNjIDMxKVxuIDE0NzpcdCNkZWZpbmUgQlBGX0FERF9DT05TVDMyICgxVSBcdTAwM2NcdTAwM2MgMzApXG4gMTQ4Olx0I2RlZmluZSBCUEZfQUREX0NPTlNUIChCUEZfQUREX0NPTlNUNjQgfCBCUEZfQUREX0NPTlNUMzIpXG4gMTQ5Olx0XHR1MzIgaWQ7XG4gMTUwOlx0XHQvKlxuIDE1MTpcdFx0ICogVHJhY2tzIHRoZSBwYXJlbnQgb2JqZWN0IHRoaXMgcmVnaXN0ZXIgd2FzIGRlcml2ZWQgZnJvbS5cbiAxNTI6XHRcdCAqIFVzZWQgZm9yIGNhc2NhZGluZyBpbnZhbGlkYXRpb246IHdoZW4gdGhlIHBhcmVudCBvYmplY3QgaXNcbiAxNTM6XHRcdCAqIHJlbGVhc2VkIG9yIGludmFsaWRhdGVkLCBhbGwgcmVnaXN0ZXJzIHdpdGggbWF0Y2hpbmcgcGFyZW50X2lkXG4gMTU0Olx0XHQgKiBhcmUgYWxzbyBpbnZhbGlkYXRlZC4gRm9yIGV4YW1wbGUsIGEgc2xpY2UgZnJvbSBicGZfZHlucHRyX2RhdGEoKVxuIDE1NTpcdFx0ICogZ2V0cyBwYXJlbnRfaWQgc2V0IHRvIHRoZSBkeW5wdHImIzM5O3MgaWQuXG4gMTU2Olx0XHQgKi9cbiAxNTc6XHRcdHUzMiBwYXJlbnRfaWQ7XG4gMTU4Olx0XHQvKiBJbnNpZGUgdGhlIGNhbGxlZSB0d28gcmVnaXN0ZXJzIGNhbiBiZSBib3RoIFBUUl9UT19TVEFDSyBsaWtlXG4gMTU5Olx0XHQgKiBSMT1mcC04IGFuZCBSMj1mcC04LCBidXQgb25lIG9mIHRoZW0gcG9pbnRzIHRvIHRoaXMgZnVuY3Rpb24gc3RhY2tcbiAxNjA6XHRcdCAqIHdoaWxlIGFub3RoZXIgdG8gdGhlIGNhbGxlciYjMzk7cyBzdGFjay4gVG8gZGlmZmVyZW50aWF0ZSB0aGVtICYjMzk7ZnJhbWVubyYjMzk7XG4gMTYxOlx0XHQgKiBpcyB1c2VkIHdoaWNoIGlzIGFuIGluZGV4IGluIGJwZl92ZXJpZmllcl9zdGF0ZS1cdTAwM2VmcmFtZVtdIGFycmF5XG4gMTYyOlx0XHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cbiAxNjM6XHRcdCAqL1xuIDE2NDpcdFx0dTMyIGZyYW1lbm87XG4gMTY1Olx0XHQvKiBpZiAoIXByZWNpc2UgXHUwMDI2XHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbiYjMzk7dCBhZmZlY3Qgc2FmZXR5ICovXG4gMTY2Olx0XHRib29sIHByZWNpc2U7XG4gMTY3Olx0fTtcbiAxNjg6XHRcbiAxNjk6XHRzdGF0aWMgaW5saW5lIHM2NCByZWdfc21pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIDE3MDpcdHtcbiAxNzE6XHRcdHJldHVybiBjbnVtNjRfc21pbihyZWctXHUwMDNlcjY0KTtcbiAxNzI6XHR9XG4gMTczOlx0XG4gMTc0Olx0c3RhdGljIGlubGluZSBzNjQgcmVnX3NtYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiAxNzU6XHR7XG4gMTc2Olx0XHRyZXR1cm4gY251bTY0X3NtYXgocmVnLVx1MDAzZXI2NCk7XG4gMTc3Olx0fVxuIDE3ODpcdFxuIDE3OTpcdHN0YXRpYyBpbmxpbmUgdTY0IHJlZ191bWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4gMTgwOlx0e1xuIDE4MTpcdFx0cmV0dXJuIGNudW02NF91bWluKHJlZy1cdTAwM2VyNjQpO1xuIDE4MjpcdH1cbiAxODM6XHRcbiAxODQ6XHRzdGF0aWMgaW5saW5lIHU2NCByZWdfdW1heChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIDE4NTpcdHtcbiAxODY6XHRcdHJldHVybiBjbnVtNjRfdW1heChyZWctXHUwMDNlcjY0KTtcbiAxODc6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDE5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgU3RhdGUgRXF1aXZhbGVuY2UgYW5kIGBmcmFtZW5vYCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBUaGUgYHJlZ3NfZXhhY3RgIGZ1bmN0aW9uIGNhdWdodCBteSBleWUsIGFuZCBJIHNlZSBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGlzc3VlLiBJbml0aWFsbHksIGByZWdzX2V4YWN0YCB3YXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdHdvIEJQRiByZWdpc3RlciBzdGF0ZXMgd2VyZSBpZGVudGljYWwuIExvb2tpbmcgYXQgdGhlIGNvZGU6CgpgYGBjCnN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCgkJICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLAoJCSAgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKewoJcmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwICZhbXA7JmFtcDsKCSAgICAgICBjaGVja19pZHMocm9sZC0mZ3Q7aWQsIHJjdXItJmd0O2lkLCBpZG1hcCkgJmFtcDsmYW1wOwoJICAgICAgIGNoZWNrX2lkcyhyb2xkLSZndDtwYXJlbnRfaWQsIHJjdXItJmd0O3BhcmVudF9pZCwgaWRtYXApICZhbXA7JmFtcDsKCSAgICAgICByb2xkLSZndDtmcmFtZW5vID09IHJjdXItJmd0O2ZyYW1lbm87Cn0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIG1pc3NpbmcgYSBwYXJ0IG9mIHRoZSBjaGVjaywgd2hpY2ggaXMgYHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AuIFNwZWNpZmljYWxseSwgYG1lbWNtcGAgb25seSBjb21wYXJlZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgIHVwIHRvIGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpYC4gIEZpZWxkcyBsaWtlIGBpZGAgYW5kIGBwYXJlbnRfaWRgIHdlcmUgY2hlY2tlZCBzZXBhcmF0ZWx5LCBhbmQsIGNyaXRpY2FsbHksIGBmcmFtZW5vYCBjb21lcyAqYWZ0ZXIqIHRob3NlIGZpZWxkcyBpbiB0aGUgc3RydWN0LiBUaGVyZWZvcmUsIGBtZW1jbXBgIGRpZCAqbm90KiBjaGVjayBgZnJhbWVub2AuCgpJIHRoZW4gbG9va2VkIGF0IGhvdyBgcmVnc19leGFjdGAgd2FzIHVzZWQsIGVzcGVjaWFsbHkgaW4gYHJlZ3NhZmUoKWAgYW5kIHNwZWNpZmljYWxseSB3aGVuIHRoZSBgZXhhY3QgPT0gRVhBQ1RgIGNvbmRpdGlvbiB3YXMgbWV0LiBJbiB0aGF0IGNhc2UsIGFuZCBpbiBvdGhlciBzY2VuYXJpb3Mgd2hlcmUgZXhhY3Qgc3RhdGUgbWF0Y2hpbmcgd2FzIG5lZWRlZCwgaXQgKm9ubHkqIGNhbGxlZCBgcmVnc19leGFjdGAuIFRoaXMgbWVhbnQgYGZyYW1lbm9gIHdhc24mIzM5O3QgYmVpbmcgY2hlY2tlZCBmb3IgZXF1YWxpdHkgZXZlbiB3aGVuIHdlIGV4cGxpY2l0bHkgd2FudGVkIGV4YWN0IG1hdGNoaW5nISAgVGhpcyBhbHNvIGhlbGQgdHJ1ZSB3aGVuIGxvb2tpbmcgYXQgdGhlIGNvbXBhcmlzb24gb2Ygc3BpbGxlZCByZWdpc3RlcnMgaW4gYHN0YWNrc2FmZSgpYC4KCkNvbnNpZGVyIHRoZSB0ZXN0IGNhc2UgaW4gYHZlcmlmaWVyX2xvb3BzMS5jYC4gSW1hZ2luZSBhIHN0YWNrIHBvaW50ZXIgd2l0aCBhICpkaWZmZXJlbnQqIGBmcmFtZW5vYCB3YXMgc3BpbGxlZCB0byB0aGUgc3RhY2suICBJZiB3ZSB0aGVuIGNvbXBhcmVkIHRoaXMgc3BpbGxlZCByZWdpc3RlciB3aXRoIGFuICYjMzQ7ZXhhY3QmIzM0OyBtYXRjaCB1c2luZyBgcmVnc19leGFjdGAsIHRoZSBjb21wYXJpc29uIHdvdWxkIHJldHVybiBgdHJ1ZWAgZXZlbiB0aG91Z2ggYGZyYW1lbm9gIGRpZmZlcmVkLCB3aGljaCBpcyBvYnZpb3VzbHkgd3JvbmcuCgpUaGUgZml4LCBtb3ZpbmcgdGhlIGNvbXBhcmlzb24gb2YgYGZyYW1lbm9gIGludG8gYHJlZ3NfZXhhY3RgLCBzb2x2ZXMgdGhpcyBpc3N1ZS4gIE5vdywgYm90aCBkaXJlY3QgY2hlY2tzIGluIGByZWdzYWZlKClgIGFuZCBgcmVnc19leGFjdGAgY2hlY2tzLCBpbmNsdWRpbmcgdGhvc2UgaW52b2x2aW5nIHNwaWxsZWQgcG9pbnRlcnMsIHdpbGwgcHJvcGVybHkgY29uc2lkZXIgYGZyYW1lbm9gIGluIGRldGVybWluaW5nIHJlZ2lzdGVyIHN0YXRlIGVxdWl2YWxlbmNlLgoKTm93LCBjb25zaWRlcmluZyB0aGUgY3JpdGVyaWEgZm9yIHRoaXMgY2hhbmdlOgoKKiAgICoqU3Vic3lzdGVtOioqIEJQRiAoa2VybmVsL2JwZi9zdGF0ZXMuYykgLSAqQ29uZmlybWVkLioKKiAgICoqUmVhY2hhYmlsaXR5OioqIEJQRiBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyLiBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgIGlzIGEgcHJpbWFyeSBzeXprYWxsZXIgdGFyZ2V0LiAtICpDb25maXJtZWQuKgoqICAgKipNb2RpZmllZCBSZWFjaGFibGUgS2VybmVsIENvZGU6KiogWWVzLCBga2VybmVsL2JwZi9zdGF0ZXMuY2AgaXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja2luZyBjb2RlLCBzbyB0aGlzIGNoYW5nZSBtb2RpZmllcyByZWFjaGFibGUgY29kZS4gLSAqQ29uZmlybWVkLioKKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogQlBGIC0gKkNvbmZpcm1lZC4qCiogICAqKlR5cGUgb2YgQ2hhbmdlOioqICYjMzQ7UmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzJiMzNDsgZml0cyB3ZWxsLCBhcyB0aGlzIGlzIGEgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgZXF1aXZhbGVuY2UgY2hlY2suIC0gKkNvbmZpcm1lZC4qCiogICAqKldvcnRoRnV6emluZz10cnVlIGFuZCBGb2N1c1N5bWJvbHM6KiogSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGlkZW50aWZ5IGFueSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VmdWwgZm9yIGEgZnV6emVyLiAgYHJlZ3NfZXhhY3RgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gSXQmIzM5O3MgY2xlYXJseSBpbXBvcnRhbnQgZm9yIHN0YXRlIGNvbXBhcmlzb24uIFdlIG5lZWQgdG8gY2hlY2sgaWYgYHJlZ3NfZXhhY3RgLCBgcmVnc2FmZWAsIGBmdW5jX3N0YXRlc19lcXVhbGAsIGFuZCBgc3RhdGVzX2VxdWFsYCBhcmUgaW5saW5lZCBvciBjb21waWxlZCBzdGF0aWNhbGx5IHRvIHNlZSB3aGVyZSB0aGV5IGV4aXN0LiAgSSYjMzk7bGwgY2hlY2sgdGhlIGBNYWtlZmlsZWAgYW5kIHRoZWlyIGRlZmluaXRpb25zIGluIGBzdGF0ZXMuY2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlaXIgdmlzaWJpbGl0eSBhbmQgY29tcGlsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlc1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTUtb2JqLSR7Q09ORklHX0JQRl9MU019XHQgICYjNDM7PSBicGZfaW5vZGVfc3RvcmFnZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTMwCgkJCQkJCQlvdXRwdXQ6IDYwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIGBzdGF0ZXMub2AgYW5kIEJQRiBTeXNjYWxscyoqCgpBbHJpZ2h0LCBzbyBgc3RhdGVzLm9gIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLCB3aGljaCBpcyBhIGtleSBkZXBlbmRlbmN5LiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFzIGl0IHdpbGwgaGVscCB0byB0cmFjayB3aGVyZSB0aGluZ3MgZ28gd3Jvbmcgd2l0aCBCUEYuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgaW50byBga2VybmVsL2JwZi9zdGF0ZXMuY2Agbm93IHRvIHVuZGVyc3RhbmQgdGhlIGxheW91dCBhbmQgdXNhZ2Ugb2YgdGhlIEJQRiBzdGF0ZSBtYW5hZ2VtZW50IGNvZGUuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgcHVibGljbHkgYWNjZXNzaWJsZSAobm9uLXN0YXRpYykgb3Igc2VydmUgYXMgZW50cnkgcG9pbnRzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgY3JpdGljYWwgaW50ZXJmYWNlcyBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBmb3IgdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIGlzIHRoZSBjb3JuZXJzdG9uZSBmb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFwqPyBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz0yNTk9c3RhdGljIGJvb2wgaW5jb21wbGV0ZV9yZWFkX21hcmtzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0yNzItXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjI3MzppbnQgYnBmX3VwZGF0ZV9icmFuY2hfY291bnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxua2VybmVsL2JwZi9zdGF0ZXMuYy0yNzQte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIwOT1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzMtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzQ6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDM1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqRGlnZ2luZyBpbnRvIHRoZSBCUEYgU3RhdGUgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgZnVuY3Rpb24gaW4gYHN0YXRlcy5jYC4gU2VlbXMgbGlrZSB0aGUgbGlrZWx5IGVudHJ5IHBvaW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgY2FsbHMgdGhhdCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgdXNlLCBhcyB3ZWxsIGFzIHdoZXJlIGByZWdzYWZlYCwgYHN0YXRlc19lcXVhbGAsIGFuZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgdXNlZCwgYWxsIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvc3RhdGVzLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIGRlcGVuZGVuY2llcywgYW5kIGhvdyBhbGwgdGhlc2UgaW5kaXZpZHVhbCBjb21wb25lbnRzIGZpdCBpbnRvIHRoZSBsYXJnZXIgc3RhdGUgbWFuYWdlbWVudCBwaWN0dXJlLiBHb3R0YSBidWlsZCBhIG1lbnRhbCBtb2RlbCBoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlc19lcXVhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz04NjQ9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkzOS0gKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQwOnN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDEtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk2Nz1zdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzQtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk3NTpzdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc2LVx0XHRcdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA2LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwNzpcdFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cdTAwM2VmcmFtZVtpXSwgY3VyLVx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA4LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzQ9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMjctXHRcdFx0aWYgKGlzX2l0ZXJfbmV4dF9pbnNuKGVudiwgaW5zbl9pZHgpKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMjg6XHRcdFx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzI5LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1cl9mcmFtZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzctXHRcdFx0XHRcdGl0ZXJfcmVnID0gXHUwMDI2Y3VyX2ZyYW1lLVx1MDAzZXJlZ3NbQlBGX1JFR18xXTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTMzODpcdFx0XHRcdFx0LyogY3VycmVudCBzdGF0ZSBpcyB2YWxpZCBkdWUgdG8gc3RhdGVzX2VxdWFsKCksXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzktXHRcdFx0XHRcdCAqIHNvIHdlIGNhbiBhc3N1bWUgdmFsaWQgaXRlciBhbmQgcmVnIHN0YXRlLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1Mi1cdFx0XHRcdGlmIChzbC1cdTAwM2VzdGF0ZS5tYXlfZ290b19kZXB0aCAhPSBjdXItXHUwMDNlbWF5X2dvdG9fZGVwdGggXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNTM6XHRcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU0LVx0XHRcdFx0XHRsb29wID0gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNTgtXHRcdFx0aWYgKGJwZl9jYWxsc19jYWxsYmFjayhlbnYsIGluc25faWR4KSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzU5Olx0XHRcdFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2MC1cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY2LVx0XHRcdGlmIChzdGF0ZXNfbWF5YmVfbG9vcGluZyhcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2NzpcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgRVhBQ1QpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY4LVx0XHRcdCAgICAhaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTktXHRcdGxvb3AgPSBpbmNvbXBsZXRlX3JlYWRfbWFya3MoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0MDA6XHRcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyLCBsb29wID8gUkFOR0VfV0lUSElOIDogTk9UX0VYQUNUKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDAxLWhpdDpcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MzktXHRcdFx0ICpcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ0MDpcdFx0XHQgKiAtIFdoZW4gYSB2ZXJpZmljYXRpb24gcGF0aCBlbmNvdW50ZXJzIGEgYHN0YXRlc19lcXVhbCguLi4sXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDEtXHRcdFx0ICogICBSQU5HRV9XSVRISU4pYCBjb25kaXRpb24sIHRoZXJlIGV4aXN0cyBhIGNhbGwgY2hhaW4gZGVzY3JpYmluZyB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMDYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFN0YXRlIENvbXBhcmlzb24gRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHNldmVyYWwgQlBGIHN0YXRlIGNvbXBhcmlzb24gZnVuY3Rpb25zOiBgcmVnc19leGFjdGAsIGByZWdzYWZlYCwgYHN0YWNrc2FmZWAsIGBmdW5jX3N0YXRlc19lcXVhbGAsIGBzdGF0ZXNfZXF1YWxgLCBhbmQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBpbmxpbmluZy4gQXJlIGFueSBvZiB0aGVzZSBtYXJrZWQgYG5vaW5saW5lYCBvciBkZWNsYXJlZCBhcyBgc3RhdGljYD8gVGhhdCB3b3VsZCBoYXZlIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgdGhlIGNvbXBpbGVyIG9wdGltaXplcyBjYWxscyB0byB0aGVtLiBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGxpbmtlciBpcyBkb2luZy4KClRoZSBkZWNsYXJhdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgc28gSSYjMzk7bGwgaGVhZCBvdmVyIHRoZXJlIHRvIGNoZWNrLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgSSBuZWVkIHRvIGtub3cgYWJvdXQgZnVuY3Rpb24gdmlzaWJpbGl0eSBhbmQgdGhlIGNvbXBpbGVyJiMzOTtzIGlubGluaW5nIGRlY2lzaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBjYWxscyB0byB0aGVzZSBhcmUgaW5saW5lZCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhyZWdzYWZlfHN0YWNrc2FmZXxyZWdzX2V4YWN0fHN0YXRlc19lcXVhbCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9NDcxPXN0YXRpYyBpbnQgY2xlYW5fdmVyaWZpZXJfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ4Ny1cbmtlcm5lbC9icGYvc3RhdGVzLmM6NDg4OnN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ4OS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NDk4PWVudW0gZXhhY3RfbGV2ZWwge1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA0LS8qIFJldHVybnMgdHJ1ZSBpZiAocm9sZCBzYWZlIGltcGxpZXMgcmN1ciBzYWZlKSAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo1MDU6c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA2LVx0XHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA5LVx0aWYgKGV4YWN0ID09IEVYQUNUKVxua2VybmVsL2JwZi9zdGF0ZXMuYzo1MTA6XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTExLVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQyLVx0Y2FzZSBQVFJfVE9fU1RBQ0s6XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY0MzpcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02NDQtXHRjYXNlIFBUUl9UT19BUkVOQTpcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0OS1cdGRlZmF1bHQ6XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY1MDpcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02NTEtXHR9XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz02ODU9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzY2FsYXJfcmVnX2Zvcl9zdGFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNjk2LVxua2VybmVsL2JwZi9zdGF0ZXMuYzo2OTc6c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy02OTgtXHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc0NC1cdFx0ICogQ29uc3RydWN0IGEgZmFrZSByZWdpc3RlciBmb3Igc3VjaCBzdGFjayBhbmQgY2FsbFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3NDU6XHRcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc0Ni1cdFx0ICovXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy03NTAtXHRcdFx0aWYgKG9sZF9yZWcgXHUwMDI2XHUwMDI2IGN1cl9yZWcpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmM6NzUxOlx0XHRcdFx0aWYgKCFyZWdzYWZlKGVudiwgb2xkX3JlZywgY3VyX3JlZywgaWRtYXAsIGV4YWN0KSlcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzUyLVx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy03ODctXHRcdFx0ICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc4ODpcdFx0XHRpZiAoIXJlZ3NhZmUoZW52LCBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzg5LVx0XHRcdFx0ICAgICBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTg0Mj1zdGF0aWMgYm9vbCBzdGFja19hcmdfc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTg1Ni1cdFx0XHQgIFx1MDAyNmN1ci1cdTAwM2VzdGFja19hcmdfcmVnc1tpXSA6IFx1MDAyNm5vdF9pbml0O1xua2VybmVsL2JwZi9zdGF0ZXMuYzo4NTc6XHRcdGlmICghcmVnc2FmZShlbnYsIG9sZF9hcmcsIGN1cl9hcmcsIGlkbWFwLCBleGFjdCkpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTg1OC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz04NjQ9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkzOS0gKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQwOnN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDEtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk1My1cdFx0aWYgKCgoMSBcdTAwM2NcdTAwM2MgaSkgXHUwMDI2IGxpdmVfcmVncykgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk1NDpcdFx0ICAgICFyZWdzYWZlKGVudiwgXHUwMDI2b2xkLVx1MDAzZXJlZ3NbaV0sIFx1MDAyNmN1ci1cdTAwM2VyZWdzW2ldLFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NTUtXHRcdFx0ICAgICBcdTAwMjZlbnYtXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtOTU3LVxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NTg6XHRpZiAoIXN0YWNrc2FmZShlbnYsIG9sZCwgY3VyLCBcdTAwMjZlbnYtXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NTktXHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk2Nz1zdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzQtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk3NTpzdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc2LVx0XHRcdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA2LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwNzpcdFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cdTAwM2VmcmFtZVtpXSwgY3VyLVx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA4LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzQ9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMjctXHRcdFx0aWYgKGlzX2l0ZXJfbmV4dF9pbnNuKGVudiwgaW5zbl9pZHgpKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMjg6XHRcdFx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzI5LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1cl9mcmFtZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzctXHRcdFx0XHRcdGl0ZXJfcmVnID0gXHUwMDI2Y3VyX2ZyYW1lLVx1MDAzZXJlZ3NbQlBGX1JFR18xXTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTMzODpcdFx0XHRcdFx0LyogY3VycmVudCBzdGF0ZSBpcyB2YWxpZCBkdWUgdG8gc3RhdGVzX2VxdWFsKCksXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzktXHRcdFx0XHRcdCAqIHNvIHdlIGNhbiBhc3N1bWUgdmFsaWQgaXRlciBhbmQgcmVnIHN0YXRlLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1Mi1cdFx0XHRcdGlmIChzbC1cdTAwM2VzdGF0ZS5tYXlfZ290b19kZXB0aCAhPSBjdXItXHUwMDNlbWF5X2dvdG9fZGVwdGggXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNTM6XHRcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU0LVx0XHRcdFx0XHRsb29wID0gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNTgtXHRcdFx0aWYgKGJwZl9jYWxsc19jYWxsYmFjayhlbnYsIGluc25faWR4KSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzU5Olx0XHRcdFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2MC1cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY2LVx0XHRcdGlmIChzdGF0ZXNfbWF5YmVfbG9vcGluZyhcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2NzpcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgRVhBQ1QpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY4LVx0XHRcdCAgICAhaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTktXHRcdGxvb3AgPSBpbmNvbXBsZXRlX3JlYWRfbWFya3MoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0MDA6XHRcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyLCBsb29wID8gUkFOR0VfV0lUSElOIDogTk9UX0VYQUNUKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDAxLWhpdDpcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MzktXHRcdFx0ICpcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ0MDpcdFx0XHQgKiAtIFdoZW4gYSB2ZXJpZmljYXRpb24gcGF0aCBlbmNvdW50ZXJzIGEgYHN0YXRlc19lcXVhbCguLi4sXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDEtXHRcdFx0ICogICBSQU5HRV9XSVRISU4pYCBjb25kaXRpb24sIHRoZXJlIGV4aXN0cyBhIGNhbGwgY2hhaW4gZGVzY3JpYmluZyB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGZ1bmN0aW9uIGlzIHdvcmtpbmcuIEZpcnN0LCBJIHJlbWVtYmVyIGl0JiMzOTtzIHRoZSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbiBJJiMzOTttIGRlYWxpbmcgd2l0aC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlIHRoYXQgZXhwb3J0cyB0aG9zZSBCUEYgdmVyaWZpZXIgZnVuY3Rpb25zLCB3aGljaCBpcyBsaWtlbHkgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBUaGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBJIG5lZWQsIHBhcnRpY3VsYXJseSB0aG9zZSBmcm9tIGBzdGF0ZXMuY2AsIHNvIEkgY2FuIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGJlaGluZCB0aGUgc2NlbmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTIxMD1pbnQgbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTIxMS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTIxMjppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTIxMy1pbnQgYnBmX3VwZGF0ZV9icmFuY2hfY291bnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlciBvZiBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgKioKCkFscmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpcywgKndobyogaXMgY2FsbGluZyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgPyBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uIGNhbGwgZ3JhcGggdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgc3RhdGUgY2hlY2suIEl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIEkmIzM5O20ga2VlbiB0byBkaXNzZWN0IHRoZSBzdXJyb3VuZGluZyBsb2dpYy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHByZWNpc2VseSB3aGF0JiMzOTtzIGludm9raW5nIGl0LiBUaW1lIHRvIGZpcmUgdXAgdGhlIHNvdXJjZSBjb2RlIGJyb3dzZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTEyMDk9c3RhdGljIHZvaWQgbWFya19hbGxfc2NhbGFyc19pbXByZWNpc2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjMzLVxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMjM0OmludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzUte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODM2Mz1zdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NDIzLVx0XHRpZiAoYnBmX2lzX3BydW5lX3BvaW50KGVudiwgZW52LVx1MDAzZWluc25faWR4KSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NDI0Olx0XHRcdGVyciA9IGJwZl9pc19zdGF0ZV92aXNpdGVkKGVudiwgZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODQyNS1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYwMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFZlcmlmaWNhdGlvbiBhbmQgU3ltYm9sIENvdmVyYWdlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgdGhlIGBkb19jaGVja2AgcGhhc2UsIGFuZCBJIHNlZSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGJlaW5nIGNhbGxlZC4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBga2VybmVsL2JwZi9zdGF0ZXMuY2AgZmlsZSDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHJlZ3NfZXhhY3RgIGFuZCBgcmVnc2FmZWAsIHdoaWNoIG1lYW5zIHRoZXNlIGFyZSBrZXkgYXJlYXMgdG8gZXhhbWluZS4KCk5vdywgdGhlIHN5bWJvbCBjb3ZlcmFnZSBxdWVzdGlvbiBwb3BzIHVwLiBDYW4gc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGVzZSBgLmNgIGZpbGVzIGJlIGluY2x1ZGVkIGluIG15IGFuYWx5c2lzLCBvciBhcmUgdGhleSBpbmxpbmVkPyBJIHJlbWVtYmVyIHRoYXQgYmx1cmIgYWJvdXQgaGFuZGxpbmcgc3RhdGljIGlubGluZSBmdW5jdGlvbnM6IGJhc2ljYWxseSwgdGhlIGNvbXBpbGVyIGNhbiBvcHRpbWl6ZSB0aGVtIGF3YXksIG1ha2luZyB0aGVtIGludmlzaWJsZSB0byBzeW1ib2wgZmlsdGVycy4gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgY2FsbGVyIGZ1bmN0aW9ucyB0aGF0ICp1c2UqIHRoZXNlIHN0YXRpYyBoZWxwZXJzIOKAkyB0aGlzIGhlbHBzIHRvIGNhcHR1cmUgdGhlbS4KClRoaW5raW5nIGFib3V0IGl0LCBpbiB0aGUgY29udGV4dCBvZiBgLmNgIGZpbGVzLCB0aGUgc3RhdGljIGZ1bmN0aW9ucyAqc2hvdWxkKiBoYXZlIHN5bWJvbHMgaW4gYGthbGxzeW1zYCwgbGlrZSBgcmVnc2FmZWAsIGByZWdzX2V4YWN0YCwgYW5kIGBzdGF0ZXNfZXF1YWxgLiBCdXQsIHRoZSBrZXkgaXMgdGhlIHNpemUgb2YgdGhlIGZ1bmN0aW9uLiBMdWNraWx5LCBgcmVnc2FmZWAgYW5kIGBzdGF0ZXNfZXF1YWxgIGFyZSBsYXJnZSwgc28gdGhleSBhcmUgcHJvYmFibHkgbm90IGZ1bGx5IGlubGluZWQuIEV2ZW4gYmV0dGVyLCBpbmNsdWRpbmcgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBhbG9uZyB3aXRoIGByZWdzYWZlYCwgYHJlZ3NfZXhhY3RgLCBgc3RhdGVzX2VxdWFsYCBhbmQgYHN0YWNrc2FmZWAgaXMgZ3JlYXQhIFNpbmNlIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgZ3VhcmFudGVlZCB0byBiZSBhIGRpc3RpbmN0LCBub24tc3RhdGljIHN5bWJvbC4KClNob3VsZCBJIGV4cGFuZCB0aGUgbmV0IGFuZCBsb29rIGF0IGBicGZfY2hlY2tgPyBPciBmb2N1cyBtb3JlIG9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGA/IEFoLCB3YWl0LCBubywgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyAqc3BlY2lmaWMqIHRvIHRoZSBCUEYgdmVyaWZpZXIuIEl0JiMzOTtzIG5vdCBzb21lIHViaXF1aXRvdXMgdXRpbGl0eSBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIGV4YWN0IHN0YXRlIGNvbXBhcmlzb24gZW50cnkgcG9pbnQgZm9yIHZlcmlmaWVyIHBydW5pbmcuIGBicGZfcHJvZ19sb2FkYCBpcyByZWxhdGVkIHRvIEJQRiwgYnV0IGl0JiMzOTtzIGEgYnJvYWRlciBhcmVhLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTGV0IG1lIGxvb2sgYXQgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCDigJMgSSBzZWUgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vYC4gTm93LCBJIG5lZWQgdG8gZmluZCB3aGVyZSBgQlBGX1NZU0NBTExgIGlzIGRlZmluZWQsIGxpa2VseSBpbiBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY1NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgQlBGX1NZU0NBTEwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIGFwcHJvYWNoIGlzIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIHByZXByb2Nlc3NvciBzeW1ib2wgaXMgZGVjbGFyZWQuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24sIG15IGh1bmNoIGlzIHRoYXQgaXQmIzM5O2xsIGJlIGluIG9uZSBvZiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFRoZSBjaGFsbGVuZ2UgaXMgbmFycm93aW5nIGRvd24gKndoaWNoKiBLY29uZmlnIGZpbGUuIEkmIzM5O2xsIGxpa2VseSBzdGFydCB3aXRoIGEgYGZpbmRgIG9yIGBncmVwYCBzZWFyY2ggd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHBvc3NpYmx5IGxpbWl0aW5nIHRoZSBzZWFyY2ggdG8gdGhlIGBLY29uZmlnYCBvciBgQ29uZmlnLmluYCBmaWxlcyB0byByZWR1Y2Ugbm9pc2UuIEkmIzM5O2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgZGVwZW5kZW5jaWVzLCBhcyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG1pZ2h0IGJlIG5lc3RlZCB1bmRlciBvdGhlciBjb25maWd1cmF0aW9ucyBvciBoYXZlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IGluZmx1ZW5jZSBpdHMgcHJlc2VuY2UuIE15IGFpbSBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBmaWxlIGFuZCBzcGVjaWZpYyBzZWN0aW9uIHdoZXJlIGBCUEZfU1lTQ0FMTGAgaXMgZGVjbGFyZWQgYW5kIHBvdGVudGlhbGx5IHNlZSBpdHMgZGVmYXVsdCB2YWx1ZSwgaGVscCB0ZXh0LCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGltcGFjdCBvbiB0aGUga2VybmVsIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBhcm91bmQgbGluZSAyNy4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgcHJvdmlkZSB0aGUgaW5pdGlhbCBjb250ZXh0IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBwZXJmZWN0IHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzAyCgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDk2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgVmVyaWZpZXIgU3RhdGUgRXF1aXZhbGVuY2UgRml4IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLCBhcyBpdCBwdWxscyBpbiBhbGwgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQlBGIGNvZGUuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBtYWRlIHRvIGByZWdzX2V4YWN0KClgLiAgVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgc3VidGxlIGZsYXc6IHdoZW4gY29tcGFyaW5nIHN0YWNrIHBvaW50ZXJzIGluIHRoZSB2ZXJpZmllciwgaXQgd2FzbiYjMzk7dCBjb25zaXN0ZW50bHkgY2hlY2tpbmcgYGZyYW1lbm9gLiAgUHJldmlvdXNseSwgYHJlZ3NhZmUoKWAgaGFuZGxlZCB0aGUgZnJhbWUgY2hlY2sgZm9yIGBQVFJfVE9fU1RBQ0tgIGNhc2VzLCBidXQgYHJlZ3NfZXhhY3QoKWAgd2FzIGRpcmVjdGx5IGNhbGxlZCBpbiBzb21lIHNjZW5hcmlvcyB3aXRob3V0IHRoaXMgY2hlY2ssIHNwZWNpZmljYWxseSB3aGVuIGBleGFjdCA9PSBFWEFDVGAgb3IgZm9yIHNwaWxsZWQgc3RhY2sgcmVnaXN0ZXJzLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHBydW5pbmcgb2YgdmVyaWZpY2F0aW9uIHBhdGhzLCBjb25zaWRlcmluZyBzdGFjayByZWdpc3RlcnMgZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFzIGlkZW50aWNhbCwgd2hpY2ggaXMgYSBzZXJpb3VzIGJ1Zy4KClRoZSBCUEYgdmVyaWZpZXIgaXMsIGFzIHdlIGJvdGgga25vdywgYSBjcml0aWNhbCBwaWVjZTsgaXRzIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNrcyAoYHN0YXRlc19lcXVhbGAsIGByZWdzYWZlYCwgYHJlZ3NfZXhhY3RgKSBhcmUgZnVuZGFtZW50YWwgdG8gaXRzIHNvdW5kbmVzcyBhbmQgdGVybWluYXRpb24gcHJvcGVydGllcy4gR2l2ZW4gdGhhdCwgdGhpcyBjaGFuZ2UgaXMgYSBjbGVhciBjYW5kaWRhdGUgZm9yIHRhcmdldGVkIGZ1enppbmcuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGZ1enppbmcgdGhvc2UgZnVuY3Rpb25zIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciYjMzk7cyBjb3JyZWN0bmVzcy4gU3l6a2FsbGVyJiMzOTtzIEJQRiBmdXp6aW5nIGNhcGFiaWxpdGllcyBzaG91bGQgYmUgYnJvdWdodCB0byBiZWFyIGhlcmUuCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGltcGFjdGVkOiBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBgc3RhdGVzX2VxdWFsYCwgYHJlZ3NhZmVgLCBgcmVnc19leGFjdGAgYW5kIGBzdGFja3NhZmVgLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkaXJlY3RseSByZWxldmFudCBzeW1ib2xzLCBsaWtlIGBmdW5jX3N0YXRlc19lcXVhbGAsIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4KCkkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIGFsbCB0aGUgcmVxdWlyZW1lbnRzLiBTbywgaGVyZSYjMzk7cyB0aGUgZnV6emluZyBwbGFuOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRSVUUgKGJlY2F1c2UgdGhlIGlzc3VlIGlzIGluIGEgY3JpdGljYWwgc2FmZXR5IGFyZWEgYW5kIGl0IGltcGFjdHMgdmVyaWZpZXIgYmVoYXZpb3IpCiogICAqKlJlYXNvbmluZzoqKiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSBmdXp6aW5nIHZlcmRpY3QuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFsmIzM0O0JQRl9TWVNDQUxMJiMzNDtdYAoqICAgKipGb2N1c1N5bWJvbHM6KiogYFsmIzM0O3JlZ3NfZXhhY3QmIzM0OywgJiMzNDtyZWdzYWZlJiMzNDssICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0O11gCgpMb29rcyBnb29kOyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnc19leGFjdCYjMzQ7LAogICAgJiMzNDtyZWdzYWZlJiMzNDssCiAgICAmIzM0O3N0YXRlc19lcXVhbCYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMgaW4ga2VybmVsL2JwZi9zdGF0ZXMuYywgbW92aW5nIHRoZSBmcmFtZW5vIGVxdWFsaXR5IGNoZWNrIGludG8gcmVnc19leGFjdCgpLiBUaGlzIGFmZmVjdHMgc3RhdGUgY29tcGFyaXNvbiBmb3IgUFRSX1RPX1NUQUNLIHJlZ2lzdGVycyAoaW5jbHVkaW5nIHNwaWxsZWQgcmVnaXN0ZXJzIGR1cmluZyBsb29wIHN0YXRlIHBydW5pbmcpLiBGdXp6aW5nIHZpYSB0aGUgYnBmIHN5c2NhbGwgaXMgY3JpdGljYWwgdG8gdmVyaWZ5IHNvdW5kbmVzcyBhbmQgZW5zdXJlIG5vIHZlcmlmaWVyIHJlZ3Jlc3Npb25zIG9yIGluZmluaXRlIGxvb3BzL3NhZmV0eSBieXBhc3NlcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdzX2V4YWN0JiMzNDssCiAgICAmIzM0O3JlZ3NhZmUmIzM0OywKICAgICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssCiAgICAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLCBtb3ZpbmcgdGhlIGZyYW1lbm8gZXF1YWxpdHkgY2hlY2sgaW50byByZWdzX2V4YWN0KCkuIFRoaXMgYWZmZWN0cyBzdGF0ZSBjb21wYXJpc29uIGZvciBQVFJfVE9fU1RBQ0sgcmVnaXN0ZXJzIChpbmNsdWRpbmcgc3BpbGxlZCByZWdpc3RlcnMgZHVyaW5nIGxvb3Agc3RhdGUgcHJ1bmluZykuIEZ1enppbmcgdmlhIHRoZSBicGYgc3lzY2FsbCBpcyBjcml0aWNhbCB0byB2ZXJpZnkgc291bmRuZXNzIGFuZCBlbnN1cmUgbm8gdmVyaWZpZXIgcmVncmVzc2lvbnMgb3IgaW5maW5pdGUgbG9vcHMvc2FmZXR5IGJ5cGFzc2VzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLiBTcGVjaWZpY2FsbHksIGl0IG1vdmVzIHRoZSBmcmFtZSBudW1iZXIgY2hlY2sgKHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm8pIGludG8gcmVnc19leGFjdCgpLCBlbnN1cmluZyB0aGF0IGV4YWN0IHJlZ2lzdGVyIHN0YXRlIGNvbXBhcmlzb25zIChzdWNoIGFzIGR1cmluZyBsb29wIGRldGVjdGlvbiBhbmQgc3BpbGxlZCBzdGFjayBwb2ludGVyIGNvbXBhcmlzb24pIGNvcnJlY3RseSBkaXN0aW5ndWlzaCBzdGFjayBwb2ludGVycyBmcm9tIGRpZmZlcmVudCBjYWxsIGZyYW1lcy5cblxuVGhlIHRvdWNoZWQgZmllbGRzIChyb2xkLVx1MDAzZWZyYW1lbm8gYW5kIHJjdXItXHUwMDNlZnJhbWVubykgaW4gc3RydWN0IGJwZl9yZWdfc3RhdGUgYXJlIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVycyBhbmQgZnVuYyBzdGF0ZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKHZpYSBtZW1zZXQoKSBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoKSBhbmQgaW5pdF9mdW5jX3N0YXRlKCkpLiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OGYwYjRhMjkxOWMxY2FmZTU2MWI3MjAxNTRhYTdjNzk1ODU4OWVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMTk6NTI6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuYwppbmRleCA2NmZiMTFiNmM2YTc2Li44MjcwMzhlYzE4YjdhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKQEAgLTQ5MSw3ICYjNDM7NDkxLDggQEAgc3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCwKIHsKIAlyZXR1cm4gbWVtY21wKHJvbGQsIHJjdXIsIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZCkpID09IDAgJmFtcDsmYW1wOwogCSAgICAgICBjaGVja19pZHMocm9sZC0mZ3Q7aWQsIHJjdXItJmd0O2lkLCBpZG1hcCkgJmFtcDsmYW1wOwotCSAgICAgICBjaGVja19pZHMocm9sZC0mZ3Q7cGFyZW50X2lkLCByY3VyLSZndDtwYXJlbnRfaWQsIGlkbWFwKTsKJiM0MzsJICAgICAgIGNoZWNrX2lkcyhyb2xkLSZndDtwYXJlbnRfaWQsIHJjdXItJmd0O3BhcmVudF9pZCwgaWRtYXApICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVubzsKIH0KIAogZW51bSBleGFjdF9sZXZlbCB7CkBAIC02MzksMTAgJiM0Mzs2NDAsNyBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLAogCQlyZXR1cm4gcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpICZhbXA7JmFtcDsKIAkJICAgICAgIHRudW1faW4ocm9sZC0mZ3Q7dmFyX29mZiwgcmN1ci0mZ3Q7dmFyX29mZik7CiAJY2FzZSBQVFJfVE9fU1RBQ0s6Ci0JCS8qIHR3byBzdGFjayBwb2ludGVycyBhcmUgZXF1YWwgb25seSBpZiB0aGV5JiMzOTtyZSBwb2ludGluZyB0bwotCQkgKiB0aGUgc2FtZSBzdGFjayBmcmFtZSwgc2luY2UgZnAtOCBpbiBmb28gIT0gZnAtOCBpbiBiYXIKLQkJICovCi0JCXJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKSAmYW1wOyZhbXA7IHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVubzsKJiM0MzsJCXJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTsKIAljYXNlIFBUUl9UT19BUkVOQToKIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBQVFJfVE9fSU5TTjoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYwppbmRleCBkMjQ4Y2U4NzdmMTRlLi5mOGI3YmExYmY2Yjg0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jCkBAIC0zMDMsNCAmIzQzOzMwMyw3MCBAQCBfX25ha2VkIHZvaWQgbWF5YmVfZXhpdF9zY2NfYnVnMSh2b2lkKQogCTo6OiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhlIGxvb3AgcmVhZHMgemVybyBmcm9tIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2sgb24gaXRzIGZpcnN0IGl0ZXJhdGlvbiBhbmQKJiM0MzsgKiBvbmUgZnJvbSB0aGUgY2FsbGVlJiMzOTtzIHN0YWNrIG9uIGl0cyBzZWNvbmQgaXRlcmF0aW9uLiBBdCB0aGUgbG9vcCBoZWFkZXIsCiYjNDM7ICogb25seSB0aGUgZnJhbWUgbnVtYmVyIG9mIHRoZSBwb2ludGVyIGluIHIxIGNoYW5nZXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWQKJiM0Mzt2b2lkIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZyh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OyoodTY0ICopKHIxMCAtIDgpID0gMTsmIzM0OwomIzQzOwkmIzM0OzE6IHIwID0gKih1NjQgKikocjEgJiM0MzsgMCk7JiMzNDsKJiM0MzsJJiMzNDtpZiByMCAhPSAwIGdvdG8gMmY7JiMzNDsKJiM0MzsJJiMzNDtyMSA9IHIxMDsmIzM0OwomIzQzOwkmIzM0O3IxICYjNDM7PSAtODsmIzM0OwomIzQzOwkmIzM0O2dvdG8gMWI7JiMzNDsKJiM0MzsJJiMzNDsyOiBleGl0OyYjMzQ7CiYjNDM7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2JvdW5kZWQgbG9vcCBjaGFuZ2luZyBzdGFjayBmcmFtZSBpbiBhIHJlZ2lzdGVyJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDEpCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSkKJiM0MztfX25ha2VkIHZvaWQgYm91bmRlZF9sb29wX3N0YWNrX2ZyYW1lc19yZWcodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsqKHU2NCAqKShyMTAgLSA4KSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMSA9IHIxMDsmIzM0OwomIzQzOwkmIzM0O3IxICYjNDM7PSAtODsmIzM0OwomIzQzOwkmIzM0O2NhbGwgbG9vcF9zdGFja19mcmFtZXNfcmVnOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRXhlcmNpc2UgdGhlIHNhbWUgZnJhbWUgY2hhbmdlIHRocm91Z2ggYSBzcGlsbGVkIHBvaW50ZXIuIEFsbCByZWdpc3RlcnMKJiM0MzsgKiBhdCB0aGUgbG9vcCBoZWFkZXIgYXJlIGlkZW50aWNhbCwgd2hpbGUgZnAtMTYgcG9pbnRzIHRvIGEgZGlmZmVyZW50IGZyYW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkCiYjNDM7dm9pZCBsb29wX3N0YWNrX2ZyYW1lc19zcGlsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OyoodTY0ICopKHIxMCAtIDgpID0gMTsmIzM0OwomIzQzOwkmIzM0OyoodTY0ICopKHIxMCAtIDE2KSA9IHIxOyYjMzQ7CiYjNDM7CSYjMzQ7MTogcjEgPSAqKHU2NCAqKShyMTAgLSAxNik7JiMzNDsKJiM0MzsJJiMzNDtyMCA9ICoodTY0ICopKHIxICYjNDM7IDApOyYjMzQ7CiYjNDM7CSYjMzQ7aWYgcjAgIT0gMCBnb3RvIDJmOyYjMzQ7CiYjNDM7CSYjMzQ7cjEgPSByMTA7JiMzNDsKJiM0MzsJJiMzNDtyMSAmIzQzOz0gLTg7JiMzNDsKJiM0MzsJJiMzNDsqKHU2NCAqKShyMTAgLSAxNikgPSByMTsmIzM0OwomIzQzOwkmIzM0O2dvdG8gMWI7JiMzNDsKJiM0MzsJJiMzNDsyOiBleGl0OyYjMzQ7CiYjNDM7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2JvdW5kZWQgbG9vcCBjaGFuZ2luZyBzdGFjayBmcmFtZSBpbiBhIHNwaWxsJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDEpCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSkKJiM0MztfX25ha2VkIHZvaWQgYm91bmRlZF9sb29wX3N0YWNrX2ZyYW1lc19zcGlsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OyoodTY0ICopKHIxMCAtIDgpID0gMDsmIzM0OwomIzQzOwkmIzM0O3IxID0gcjEwOyYjMzQ7CiYjNDM7CSYjMzQ7cjEgJiM0Mzs9IC04OyYjMzQ7CiYjNDM7CSYjMzQ7Y2FsbCBsb29wX3N0YWNrX2ZyYW1lc19zcGlsbDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuIGluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIHdlJiMzOTtyZSBhbHJlYWR5IGRvaW5nLiBMZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoIHN5c3RlbWF0aWNhbGx5LCBsaWtlIGFueSBnb29kIGtlcm5lbCBkZXZlbG9wZXIuCgpGaXJzdCwgdGhlIHNhZmV0eSBjaGVjazogVGhpcyBpcyBjbGVhcmx5IGRlZmVuc2l2ZSB3b3JrIOKAkyBrZXJuZWwgYXVkaXRpbmcsIGJ1ZyBkZXRlY3Rpb24sIHRoZSB1c3VhbC4gTm8gbWFsaWNpb3VzIGludGVudCBvciBleHBsb2l0IGdlbmVyYXRpb24gaGVyZSwgc28gd2UmIzM5O3JlIG9wZXJhdGluZyBpbiBhIGJlbmlnbiBlbnZpcm9ubWVudC4gU2V2ZXJpdHkgaXMgbG93OyB3ZSBjYW4gcHJvY2VlZCB3aXRob3V0IHVuZHVlIGNvbmNlcm4uCgpOb3csIHRoZSBwYXRjaCBpdHNlbGYuIEl0IHRvdWNoZXMgYGtlcm5lbC9icGYvc3RhdGVzLmNgIGFuZCBhZGRzIHRlc3RzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNgLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIFRoZSBjb2RlIHNuaXBwZXQgcHJvdmlkZWQgaGlnaGxpZ2h0cyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSA0OTEsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgYHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AgaW4gYSBmZXcgcGxhY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBgZnJhbWVub2AgY29tcGFyaXNvbiBhbmQgaXRzIGNvbnRleHQuIFdoYXQmIzM5O3MgaXQgZG9pbmc/IElzIGl0IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IEtBU0FOIG1pZ2h0IG1pc3M/CgpJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlIG9mIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhbmQgaG93IGByZWdzX2V4YWN0YCBpcyBiZWluZyB1c2VkLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBmaWxlIGFuZCB0aGUgbGluZXMgaW4gcXVlc3Rpb24sIHVzaW5nIGdyZXBwZXIgb3IgcmVhZC1maWxlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4MDpcdFx0XHR1MzIgaXAgPSBicGZfZnJhbWVfaW5zbl9pZHgoc3QsIGkpO1xuIDQ4MTpcdFx0XHR1MTYgbGl2ZV9yZWdzID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaXBdLmxpdmVfcmVnc19iZWZvcmU7XG4gNDgyOlx0XG4gNDgzOlx0XHRcdF9fY2xlYW5fZnVuY19zdGF0ZShlbnYsIHN0LVx1MDAzZWZyYW1lW2ldLCBsaXZlX3JlZ3MsIGkpO1xuIDQ4NDpcdFx0fVxuIDQ4NTpcdFx0cmV0dXJuIDA7XG4gNDg2Olx0fVxuIDQ4NzpcdFxuIDQ4ODpcdHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gNDg5Olx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcbiA0OTA6XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuIDQ5MTpcdHtcbiA0OTI6XHRcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcdTAwMjZcdTAwMjZcbiA0OTM6XHRcdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VpZCwgcmN1ci1cdTAwM2VpZCwgaWRtYXApIFx1MDAyNlx1MDAyNlxuIDQ5NDpcdFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZXBhcmVudF9pZCwgcmN1ci1cdTAwM2VwYXJlbnRfaWQsIGlkbWFwKSBcdTAwMjZcdTAwMjZcbiA0OTU6XHRcdCAgICAgICByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vO1xuIDQ5NjpcdH1cbiA0OTc6XHRcbiA0OTg6XHRlbnVtIGV4YWN0X2xldmVsIHtcbiA0OTk6XHRcdE5PVF9FWEFDVCxcbiA1MDA6XHRcdEVYQUNULFxuIDUwMTpcdFx0UkFOR0VfV0lUSElOXG4gNTAyOlx0fTtcbiA1MDM6XHRcbiA1MDQ6XHQvKiBSZXR1cm5zIHRydWUgaWYgKHJvbGQgc2FmZSBpbXBsaWVzIHJjdXIgc2FmZSkgKi9cbiA1MDU6XHRzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIDUwNjpcdFx0XHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxuIDUwNzpcdFx0XHQgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbiA1MDg6XHR7XG4gNTA5Olx0XHRpZiAoZXhhY3QgPT0gRVhBQ1QpXG4gNTEwOlx0XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbiA1MTE6XHRcbiA1MTI6XHRcdGlmIChyb2xkLVx1MDAzZXR5cGUgPT0gTk9UX0lOSVQpXG4gNTEzOlx0XHRcdC8qIGV4cGxvcmVkIHN0YXRlIGNhbiYjMzk7dCBoYXZlIHVzZWQgdGhpcyAqL1xuIDUxNDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA1MTU6XHRcbiA1MTY6XHRcdC8qIEVuZm9yY2UgdGhhdCByZWdpc3RlciB0eXBlcyBoYXZlIHRvIG1hdGNoIGV4YWN0bHksIGluY2x1ZGluZyB0aGVpclxuIDUxNzpcdFx0ICogbW9kaWZpZXJzIChsaWtlIFBUUl9NQVlCRV9OVUxMLCBNRU1fUkRPTkxZLCBldGMpLCBhcyBhIGdlbmVyYWxcbiA1MTg6XHRcdCAqIHJ1bGUuXG4gNTE5Olx0XHQgKlxuIDUyMDpcdFx0ICogT25lIGNhbiBtYWtlIGEgcG9pbnQgdGhhdCB1c2luZyBhIHBvaW50ZXIgcmVnaXN0ZXIgYXMgdW5ib3VuZGVkXG4gNTIxOlx0XHQgKiBTQ0FMQVIgd291bGQgYmUgdGVjaG5pY2FsbHkgYWNjZXB0YWJsZSwgYnV0IHRoaXMgY291bGQgbGVhZCB0b1xuIDUyMjpcdFx0ICogcG9pbnRlciBsZWFrcyBiZWNhdXNlIHNjYWxhcnMgYXJlIGFsbG93ZWQgdG8gbGVhayB3aGlsZSBwb2ludGVyc1xuIDUyMzpcdFx0ICogYXJlIG5vdC4gV2UgY291bGQgbWFrZSB0aGlzIHNhZmUgaW4gc3BlY2lhbCBjYXNlcyBpZiByb290IGlzXG4gNTI0Olx0XHQgKiBjYWxsaW5nIHVzLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBoYXNzbGUuXG4gNTI1Olx0XHQgKlxuIDUyNjpcdFx0ICogQWxzbywgcmVnaXN0ZXIgdHlwZXMgdGhhdCBhcmUgKm5vdCogTUFZQkVfTlVMTCBjb3VsZCB0ZWNobmljYWxseSBiZVxuIDUyNzpcdFx0ICogc2FmZSB0byB1c2UgYXMgdGhlaXIgTUFZQkVfTlVMTCB2YXJpYW50cyAoZS5nLiwgUFRSX1RPX01BUF9WQUxVRVxuIDUyODpcdFx0ICogaXMgc2FmZSB0byBiZSB1c2VkIGFzIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTCwgcHJvdmlkZWQgYm90aCBwb2ludFxuIDUyOTpcdFx0ICogdG8gdGhlIHNhbWUgbWFwKS5cbiA1MzA6XHRcdCAqIEhvd2V2ZXIsIGlmIHRoZSBvbGQgTUFZQkVfTlVMTCByZWdpc3RlciB0aGVuIGdvdCBOVUxMIGNoZWNrZWQsXG4gNTMxOlx0XHQgKiBkb2luZyBzbyBjb3VsZCBoYXZlIGFmZmVjdGVkIG90aGVycyB3aXRoIHRoZSBzYW1lIGlkLCBhbmQgd2UgY2FuJiMzOTt0XG4gNTMyOlx0XHQgKiBjaGVjayBmb3IgdGhhdCBiZWNhdXNlIHdlIGxvc3QgdGhlIGlkIHdoZW4gd2UgY29udmVydGVkIHRvXG4gNTMzOlx0XHQgKiBhIG5vbi1NQVlCRV9OVUxMIHZhcmlhbnQuXG4gNTM0Olx0XHQgKiBTbywgYXMgYSBnZW5lcmFsIHJ1bGUgd2UgZG9uJiMzOTt0IGFsbG93IG1peGluZyBNQVlCRV9OVUxMIGFuZFxuIDUzNTpcdFx0ICogbm9uLU1BWUJFX05VTEwgcmVnaXN0ZXJzIGFzIHdlbGwuXG4gNTM2Olx0XHQgKi9cbiA1Mzc6XHRcdGlmIChyb2xkLVx1MDAzZXR5cGUgIT0gcmN1ci1cdTAwM2V0eXBlKVxuIDUzODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcmVnc19leGFjdGAgYW5kIGBicGZfcmVnX3N0YXRlYCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGByZWdzX2V4YWN0YCBpbiB0aGlzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBBbmQsIHdoaWxlIEkmIzM5O20gYXQgaXQsIEkgc2hvdWxkIHZlcmlmeSB3aGF0IHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgIGxvb2tzIGxpa2UuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgcmVnaXN0ZXIgc3RhdGUgaXMgYmVpbmcgdHJhY2tlZCBhbmQgbW9kaWZpZWQgYXJvdW5kIHRoZSBmdW5jdGlvbiBjYWxsLiBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZSYjMzk7cyBmaWVsZHMgYW5kIHRoZWlyIHB1cnBvc2Ugd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgdW5kZXJzdGFuZGluZy4gVGhpcyB3aWxsIGhlbHAgbWUgdG8gZGVkdWNlLCBhdCBhIGdsYW5jZSwgd2hhdCB0aGUgZnVuY3Rpb24gKnNob3VsZCogYmUgZG9pbmcgdG8gdGhlIHJlZ2lzdGVyIHN0YXRlLiBBbnkgdW5leHBlY3RlZCBiZWhhdmlvciB3aWxsIGJlIHF1aWNrbHkgbm90aWNlZC4gSSYjMzk7bGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIHJlZ2lzdGVyIHN0YXRlJiMzOTtzIG1vZGlmaWNhdGlvbiB3aXRoIHRoZSBuYXR1cmUgb2YgdGhlIEJQRiBwcm9ncmFtIGJlaW5nIGFuYWx5emVkLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQlBGIHZlcmlmaWVyIG9yIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBhIGRlZXBlciBkaXZlLCBhbmQgSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgZm91bmRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDA6XHRcdHN3aXRjaCAoYmFzZV90eXBlKHJvbGQtXHUwMDNldHlwZSkpIHtcbiA1NDE6XHRcdGNhc2UgU0NBTEFSX1ZBTFVFOlxuIDU0MjpcdFx0XHRpZiAoZW52LVx1MDAzZWV4cGxvcmVfYWx1X2xpbWl0cykge1xuIDU0MzpcdFx0XHRcdC8qIGV4cGxvcmVfYWx1X2xpbWl0cyBkaXNhYmxlcyB0bnVtX2luKCkgYW5kIHJhbmdlX3dpdGhpbigpXG4gNTQ0Olx0XHRcdFx0ICogbG9naWMgYW5kIHJlcXVpcmVzIGV2ZXJ5dGhpbmcgdG8gYmUgc3RyaWN0XG4gNTQ1Olx0XHRcdFx0ICovXG4gNTQ2Olx0XHRcdFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxuIDU0NzpcdFx0XHRcdCAgICAgICBjaGVja19zY2FsYXJfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKTtcbiA1NDg6XHRcdFx0fVxuIDU0OTpcdFx0XHRpZiAoIXJvbGQtXHUwMDNlcHJlY2lzZSBcdTAwMjZcdTAwMjYgZXhhY3QgPT0gTk9UX0VYQUNUKVxuIDU1MDpcdFx0XHRcdHJldHVybiB0cnVlO1xuIDU1MTpcdFx0XHQvKlxuIDU1MjpcdFx0XHQgKiBMaW5rZWQgcmVnaXN0ZXIgdHJhY2tpbmcgdXNlcyByb2xkLVx1MDAzZWlkIHRvIGRldGVjdCByZWxhdGlvbnNoaXBzLlxuIDU1MzpcdFx0XHQgKiBXaGVuIHJvbGQtXHUwMDNlaWQgPT0gMCwgdGhlIHJlZ2lzdGVyIGlzIGluZGVwZW5kZW50IGFuZCBhbnkgbGlua2luZ1xuIDU1NDpcdFx0XHQgKiBpbiByY3VyIG9ubHkgYWRkcyBjb25zdHJhaW50cy4gV2hlbiByb2xkLVx1MDAzZWlkICE9IDAsIHdlIG11c3QgdmVyaWZ5XG4gNTU1Olx0XHRcdCAqIGlkIG1hcHBpbmcgYW5kIChmb3IgQlBGX0FERF9DT05TVCkgb2Zmc2V0IGNvbnNpc3RlbmN5LlxuIDU1NjpcdFx0XHQgKlxuIDU1NzpcdFx0XHQgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MztcbiA1NTg6XHRcdFx0ICogfCAgICAgICAgICAgICAgICAgIHwgcm9sZC1cdTAwM2VpZCAgfCByb2xkICYjNDM7IEFERF9DT05TVCB8IHJvbGQtXHUwMDNlaWQgPT0gMCB8XG4gNTU5Olx0XHRcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLXxcbiA1NjA6XHRcdFx0ICogfCByY3VyLVx1MDAzZWlkICAgICAgICAgfCByYW5nZSxpZHMgfCBmYWxzZSAgICAgICAgICAgIHwgcmFuZ2UgICAgICAgICB8XG4gNTYxOlx0XHRcdCAqIHwgcmN1ciAmIzQzOyBBRERfQ09OU1QgfCBmYWxzZSAgICAgfCByYW5nZSxpZHMsb2ZmICAgIHwgcmFuZ2UgICAgICAgICB8XG4gNTYyOlx0XHRcdCAqIHwgcmN1ci1cdTAwM2VpZCA9PSAwICAgIHwgcmFuZ2UsaWRzIHwgZmFsc2UgICAgICAgICAgICB8IHJhbmdlICAgICAgICAgfFxuIDU2MzpcdFx0XHQgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MztcbiA1NjQ6XHRcdFx0ICpcbiA1NjU6XHRcdFx0ICogV2h5IGNoZWNrX2lkcygpIGZvciBzY2FsYXIgcmVnaXN0ZXJzP1xuIDU2NjpcdFx0XHQgKlxuIDU2NzpcdFx0XHQgKiBDb25zaWRlciB0aGUgZm9sbG93aW5nIEJQRiBjb2RlOlxuIDU2ODpcdFx0XHQgKiAgIDE6IHI2ID0gLi4uIHVuYm91bmQgc2NhbGFyLCBJRD1hIC4uLlxuIDU2OTpcdFx0XHQgKiAgIDI6IHI3ID0gLi4uIHVuYm91bmQgc2NhbGFyLCBJRD1iIC4uLlxuIDU3MDpcdFx0XHQgKiAgIDM6IGlmIChyNiBcdTAwM2UgcjcpIGdvdG8gJiM0MzsxXG4gNTcxOlx0XHRcdCAqICAgNDogcjYgPSByN1xuIDU3MjpcdFx0XHQgKiAgIDU6IGlmIChyNiBcdTAwM2UgWCkgZ290byAuLi5cbiA1NzM6XHRcdFx0ICogICA2OiAuLi4gbWVtb3J5IG9wZXJhdGlvbiB1c2luZyByNyAuLi5cbiA1NzQ6XHRcdFx0ICpcbiA1NzU6XHRcdFx0ICogRmlyc3QgdmVyaWZpY2F0aW9uIHBhdGggaXMgWzEtNl06XG4gNTc2Olx0XHRcdCAqIC0gYXQgKDQpIHNhbWUgYnBmX3JlZ19zdGF0ZTo6aWQgKGIpIHdvdWxkIGJlIGFzc2lnbmVkIHRvIHI2IGFuZCByNztcbiA1Nzc6XHRcdFx0ICogLSBhdCAoNSkgcjYgd291bGQgYmUgbWFya2VkIFx1MDAzYz0gWCwgc3luY19saW5rZWRfcmVncygpIHdvdWxkIGFsc28gbWFya1xuIDU3ODpcdFx0XHQgKiAgIHI3IFx1MDAzYz0gWCwgYmVjYXVzZSByNiBhbmQgcjcgc2hhcmUgc2FtZSBpZC5cbiA1Nzk6XHRcdFx0ICogTmV4dCB2ZXJpZmljYXRpb24gcGF0aCBpcyBbMS00LCA2XS5cbiA1ODA6XHRcdFx0ICpcbiA1ODE6XHRcdFx0ICogSW5zdHJ1Y3Rpb24gKDYpIHdvdWxkIGJlIHJlYWNoZWQgaW4gdHdvIHN0YXRlczpcbiA1ODI6XHRcdFx0ICogICBJLiAgcjZ7LmlkPWJ9LCByN3suaWQ9Yn0gdmlhIHBhdGggMS02O1xuIDU4MzpcdFx0XHQgKiAgIElJLiByNnsuaWQ9YX0sIHI3ey5pZD1ifSB2aWEgcGF0aCAxLTQsIDYuXG4gNTg0Olx0XHRcdCAqXG4gNTg1Olx0XHRcdCAqIFVzZSBjaGVja19pZHMoKSB0byBkaXN0aW5ndWlzaCB0aGVzZSBzdGF0ZXMuXG4gNTg2Olx0XHRcdCAqIC0tLVxuIDU4NzpcdFx0XHQgKiBBbHNvIHZlcmlmeSB0aGF0IG5ldyB2YWx1ZSBzYXRpc2ZpZXMgb2xkIHZhbHVlIHJhbmdlIGtub3dsZWRnZS5cbiA1ODg6XHRcdFx0ICovXG4gNTg5Olx0XG4gNTkwOlx0XHRcdC8qXG4gNTkxOlx0XHRcdCAqIEFERF9DT05TVCBmbGFncyBtdXN0IG1hdGNoIGV4YWN0bHk6IEJQRl9BRERfQ09OU1QzMiBhbmRcbiA1OTI6XHRcdFx0ICogQlBGX0FERF9DT05TVDY0IGhhdmUgZGlmZmVyZW50IGxpbmtpbmcgc2VtYW50aWNzIGluXG4gNTkzOlx0XHRcdCAqIHN5bmNfbGlua2VkX3JlZ3MoKSAoYWx1MzIgemVyby1leHRlbmRzLCBhbHU2NCBkb2VzIG5vdCksXG4gNTk0Olx0XHRcdCAqIHNvIHBydW5pbmcgYWNyb3NzIGRpZmZlcmVudCBmbGFnIHR5cGVzIGlzIHVuc2FmZS5cbiA1OTU6XHRcdFx0ICovXG4gNTk2Olx0XHRcdGlmIChyb2xkLVx1MDAzZWlkIFx1MDAyNlx1MDAyNlxuIDU5NzpcdFx0XHQgICAgKHJvbGQtXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpICE9IChyY3VyLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSlcbiA1OTg6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBzZWN0aW9uIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBmcm9tIGxpbmVzIDYwMCB0byA2NjAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIEJQRiBzdGF0ZSBtYW5hZ2VtZW50IGlzIGhhbmRsZWQgdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgaG93IHByb2dyYW0gc3RhdGVzIGFyZSB0cmFja2VkLCBwb3RlbnRpYWxseSBjb250ZXh0IHN3aXRjaGluZywgb3IgcG9zc2libHkgc29tZSBhc3BlY3RzIG9mIGhvdyB0aGUgQlBGIHZpcnR1YWwgbWFjaGluZSBpbnRlcmFjdHMgd2l0aCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhpcyBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHRoZSBpbnRlcm5hbCBtZWNoYW5pY3MsIG1heWJlIHJlbGF0ZWQgdG8gcmVnaXN0ZXJzLCBzdGFjayBmcmFtZXMsIG9yIHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBmb3IgQlBGIHByb2dyYW1zLiBJJiMzOTttIGhvcGluZyBJIGNhbiBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGludm9sdmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGluIHRoZSBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljLCBiZWNhdXNlIGtub3dpbmcgd2hlcmUgdGhlIGluZWZmaWNpZW5jaWVzIG1pZ2h0IGJlIGlzIGtleSB0byBvcHRpbWl6aW5nIHRoaXMga2luZCBvZiBjb2RlLiBJIGFudGljaXBhdGUgSSYjMzk7bGwgcHJvYmFibHkgYmUgaW50ZXJlc3RlZCBpbiBob3cgdGhlIHZhcmlvdXMga2VybmVsIGNvbXBvbmVudHMgaW50ZXJhY3QgYXMgdGhlIHByb2dyYW0gbW92ZXMgdGhyb3VnaCBkaWZmZXJlbnQgc3RhdGVzLiBSaWdodCwgbGV0JiMzOTtzIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFx0XHQvKiBCb3RoIGhhdmUgb2Zmc2V0IGxpbmthZ2U6IG9mZnNldHMgbXVzdCBtYXRjaCAqL1xuIDYwMTpcdFx0XHRpZiAoKHJvbGQtXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpIFx1MDAyNlx1MDAyNiByb2xkLVx1MDAzZWRlbHRhICE9IHJjdXItXHUwMDNlZGVsdGEpXG4gNjAyOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDYwMzpcdFxuIDYwNDpcdFx0XHRpZiAoIWNoZWNrX3NjYWxhcl9pZHMocm9sZC1cdTAwM2VpZCwgcmN1ci1cdTAwM2VpZCwgaWRtYXApKVxuIDYwNTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA2MDY6XHRcbiA2MDc6XHRcdFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcdTAwMjZcdTAwMjYgdG51bV9pbihyb2xkLVx1MDAzZXZhcl9vZmYsIHJjdXItXHUwMDNldmFyX29mZik7XG4gNjA4Olx0XHRjYXNlIFBUUl9UT19NQVBfS0VZOlxuIDYwOTpcdFx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxuIDYxMDpcdFx0Y2FzZSBQVFJfVE9fTUVNOlxuIDYxMTpcdFx0Y2FzZSBQVFJfVE9fQlVGOlxuIDYxMjpcdFx0Y2FzZSBQVFJfVE9fVFBfQlVGRkVSOlxuIDYxMzpcdFx0XHQvKiBJZiB0aGUgbmV3IG1pbi9tYXgvdmFyX29mZiBzYXRpc2Z5IHRoZSBvbGQgb25lcyBhbmRcbiA2MTQ6XHRcdFx0ICogZXZlcnl0aGluZyBlbHNlIG1hdGNoZXMsIHdlIGFyZSBPSy5cbiA2MTU6XHRcdFx0ICovXG4gNjE2Olx0XHRcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIHZhcl9vZmYpKSA9PSAwIFx1MDAyNlx1MDAyNlxuIDYxNzpcdFx0XHQgICAgICAgcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpIFx1MDAyNlx1MDAyNlxuIDYxODpcdFx0XHQgICAgICAgdG51bV9pbihyb2xkLVx1MDAzZXZhcl9vZmYsIHJjdXItXHUwMDNldmFyX29mZikgXHUwMDI2XHUwMDI2XG4gNjE5Olx0XHRcdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VpZCwgcmN1ci1cdTAwM2VpZCwgaWRtYXApIFx1MDAyNlx1MDAyNlxuIDYyMDpcdFx0XHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApO1xuIDYyMTpcdFx0Y2FzZSBQVFJfVE9fUEFDS0VUX01FVEE6XG4gNjIyOlx0XHRjYXNlIFBUUl9UT19QQUNLRVQ6XG4gNjIzOlx0XHRcdC8qIFdlIG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtdWNoIHJhbmdlIGFzIHRoZSBvbGQgcHRyXG4gNjI0Olx0XHRcdCAqIGRpZCwgc28gdGhhdCBhbnkgYWNjZXNzZXMgd2hpY2ggd2VyZSBzYWZlIGJlZm9yZSBhcmVcbiA2MjU6XHRcdFx0ICogc3RpbGwgc2FmZS4gIFRoaXMgaXMgdHJ1ZSBldmVuIGlmIG9sZCByYW5nZSBcdTAwM2Mgb2xkIG9mZixcbiA2MjY6XHRcdFx0ICogc2luY2Ugc29tZW9uZSBjb3VsZCBoYXZlIGFjY2Vzc2VkIHRocm91Z2ggKHB0ciAtIGspLCBvclxuIDYyNzpcdFx0XHQgKiBldmVuIGRvbmUgcHRyIC09IGsgaW4gYSByZWdpc3RlciwgdG8gZ2V0IGEgc2FmZSBhY2Nlc3MuXG4gNjI4Olx0XHRcdCAqL1xuIDYyOTpcdFx0XHRpZiAocm9sZC1cdTAwM2VyYW5nZSBcdTAwM2MgMCB8fCByY3VyLVx1MDAzZXJhbmdlIFx1MDAzYyAwKSB7XG4gNjMwOlx0XHRcdFx0Lyogc3BlY2lhbCBjYXNlIGZvciBbQkVZT05EfEFUXV9QS1RfRU5EICovXG4gNjMxOlx0XHRcdFx0aWYgKHJvbGQtXHUwMDNlcmFuZ2UgIT0gcmN1ci1cdTAwM2VyYW5nZSlcbiA2MzI6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA2MzM6XHRcdFx0fSBlbHNlIGlmIChyb2xkLVx1MDAzZXJhbmdlIFx1MDAzZSByY3VyLVx1MDAzZXJhbmdlKSB7XG4gNjM0Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDYzNTpcdFx0XHR9XG4gNjM2Olx0XHRcdC8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqL1xuIDYzNzpcdFx0XHRpZiAoIWNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkpXG4gNjM4Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDYzOTpcdFx0XHQvKiBuZXcgdmFsIG11c3Qgc2F0aXNmeSBvbGQgdmFsIGtub3dsZWRnZSAqL1xuIDY0MDpcdFx0XHRyZXR1cm4gcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpIFx1MDAyNlx1MDAyNlxuIDY0MTpcdFx0XHQgICAgICAgdG51bV9pbihyb2xkLVx1MDAzZXZhcl9vZmYsIHJjdXItXHUwMDNldmFyX29mZik7XG4gNjQyOlx0XHRjYXNlIFBUUl9UT19TVEFDSzpcbiA2NDM6XHRcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuIDY0NDpcdFx0Y2FzZSBQVFJfVE9fQVJFTkE6XG4gNjQ1Olx0XHRcdHJldHVybiB0cnVlO1xuIDY0NjpcdFx0Y2FzZSBQVFJfVE9fSU5TTjpcbiA2NDc6XHRcdFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgdmFyX29mZikpID09IDAgXHUwMDI2XHUwMDI2XG4gNjQ4Olx0XHRcdCAgICAgICByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2IHRudW1faW4ocm9sZC1cdTAwM2V2YXJfb2ZmLCByY3VyLVx1MDAzZXZhcl9vZmYpO1xuIDY0OTpcdFx0ZGVmYXVsdDpcbiA2NTA6XHRcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuIDY1MTpcdFx0fVxuIDY1MjpcdH1cbiA2NTM6XHRcbiA2NTQ6XHRzdGF0aWMgc3RydWN0IGJwZl9yZWdfc3RhdGUgdW5ib3VuZF9yZWc7XG4gNjU1Olx0XG4gNjU2Olx0c3RhdGljIF9faW5pdCBpbnQgdW5ib3VuZF9yZWdfaW5pdCh2b2lkKVxuIDY1NzpcdHtcbiA2NTg6XHRcdGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShcdTAwMjZ1bmJvdW5kX3JlZyk7XG4gNjU5Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGByZWdzX2V4YWN0YCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIHNlZWluZyBgcmVnc19leGFjdGAgYmVpbmcgY2FsbGVkIGluIGEgY291cGxlIG9mIHBsYWNlcywgc3BlY2lmaWNhbGx5IGxpbmUgNTEwIGFuZCBsaW5lIDY1MC4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgY29uZGl0aW9uYWwgbG9naWMgYXJvdW5kIHRoZSBmaXJzdCBjYWxsOiBgaWYgKGV4YWN0ID09IEVYQUNUKSByZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7YC4gVGhhdCBpbXBsaWVzIGEgZmxhZywgYGV4YWN0YCwgd2hpY2ggY29udHJvbHMgd2hldGhlciBvciBub3QgYHJlZ3NfZXhhY3RgIGlzIGludm9rZWQgZGlyZWN0bHkuIFRoZSBvdGhlciBjYWxsIGlzIHRoZSBkZWZhdWx0IHJldHVybiwgc28gSSB3b25kZXIgd2hhdCB2YWx1ZSBpcyBiZWluZyBwYXNzZWQgaGVyZT8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIGhvdyBgZXhhY3RgIGdldHMgc2V0IHRvIGBFWEFDVGAuICBJIHNob3VsZCBwcm9iYWJseSBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBib3RoIGByZWdzX2V4YWN0YCBhbmQgYGV4YWN0YCB0aHJvdWdob3V0IHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGhvdyBhbmQgd2hlcmUgYHJlZ3NfZXhhY3RgIGlzIGFjdHVhbGx5IHVzZWQgYW5kIHdoeSBgZXhhY3RgIGlzIGJlaW5nIHNldCBvciBub3Qgc2V0LiBHb3R0YSB0cmFjZSBiYWNrIHRoZSBkZWZpbml0aW9uIGFuZCB0aGUgYXNzaWdubWVudHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdzX2V4YWN0fGV4YWN0X2xldmVsfEVYQUNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTQ3MT1zdGF0aWMgaW50IGNsZWFuX3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODctXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ4ODpzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODktXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ5Ny1cbmtlcm5lbC9icGYvc3RhdGVzLmM6NDk4OmVudW0gZXhhY3RfbGV2ZWwge1xua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTk6XHROT1RfRVhBQ1QsXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUwMDpcdEVYQUNULFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MDEtXHRSQU5HRV9XSVRISU5cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTUwNT1zdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MDYtXHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUwNzpcdFx0ICAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUwOC17XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUwOTpcdGlmIChleGFjdCA9PSBFWEFDVClcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTEwOlx0XHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUxMS1cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0OC1cdFx0fVxua2VybmVsL2JwZi9zdGF0ZXMuYzo1NDk6XHRcdGlmICghcm9sZC1cdTAwM2VwcmVjaXNlIFx1MDAyNlx1MDAyNiBleGFjdCA9PSBOT1RfRVhBQ1QpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU1MC1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0Mi1cdGNhc2UgUFRSX1RPX1NUQUNLOlxua2VybmVsL2JwZi9zdGF0ZXMuYzo2NDM6XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQ0LVx0Y2FzZSBQVFJfVE9fQVJFTkE6XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy02NDktXHRkZWZhdWx0Olxua2VybmVsL2JwZi9zdGF0ZXMuYzo2NTA6XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjUxLVx0fVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9Njk3PXN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjk4LVx0XHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY5OTpcdFx0ICAgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzAwLXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTcxMi1cbmtlcm5lbC9icGYvc3RhdGVzLmM6NzEzOlx0XHRpZiAoZXhhY3QgPT0gRVhBQ1QpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzE0LVx0XHRcdHU4IG9sZF90eXBlID0gb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9ODQyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NDMtXHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4NDQ6XHRcdFx0ICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbmtlcm5lbC9icGYvc3RhdGVzLmMtODQ1LXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk0MD1zdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQxOlx0XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCB1MzIgaW5zbl9pZHgsIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0Mi17XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz05NzU9c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzctXHRcdFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTc4Olx0XHRcdCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxua2VybmVsL2JwZi9zdGF0ZXMuYy05Nzkte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzND1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2Ni1cdFx0XHRpZiAoc3RhdGVzX21heWJlX2xvb3BpbmcoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNjc6XHRcdFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIEVYQUNUKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2OC1cdFx0XHQgICAgIWl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzk5LVx0XHRsb29wID0gaW5jb21wbGV0ZV9yZWFkX21hcmtzKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUpO1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDAwOlx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgbG9vcCA/IFJBTkdFX1dJVEhJTiA6IE5PVF9FWEFDVCkpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwMS1oaXQ6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc4NTY9c3RhdGljIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmZpbmRfcHJldl9lbnRyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODgxLSAqIENoZWNrIGlmIHNjYWxhciByZWdpc3RlcnMgYXJlIGV4YWN0IGZvciB0aGUgcHVycG9zZSBvZiBub3Qgd2lkZW5pbmcuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Nzg4MjogKiBNb3JlIGxlbmllbnQgdGhhbiByZWdzX2V4YWN0KClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODgzLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODI4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFN0YWNrIFNhZmV0eSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWgsIGBzdGFja3NhZmVgISYjMzQ7IFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIGtub3cgd2hhdCB0aGF0IGtleXdvcmQvZmVhdHVyZSBpcyBhYm91dC4gIE5vdyBJIHdhbnQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIGltcGxlbWVudGF0aW9uIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpdHMgd29ya2luZywgYW5kIGdldCBpbnRvIHRoZSBuaXR0eSBncml0dHkuIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGFjdHVhbGx5ICpkb25lKiBpdC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyA3MTIgdG8gNzgwLiBUaGF0IGNodW5rIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldyBvZiB0aGUgY29yZSBsb2dpYywgb3IgYXQgbGVhc3QgYSByZXByZXNlbnRhdGl2ZSBzYW1wbGUgb2YgaG93IHRoZSBzdGFjayBzYWZldHkgbWVjaGFuaXNtIGlzIHJlYWxpemVkIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXRhaWxzLCB0aGUgc3BlY2lmaWMgdGVjaG5pcXVlcywgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBvcHRpbWl6YXRpb24gb3Igc3VidGxlIGZsYXdzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGFuZCB3aGVyZSBJIGNhbiBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRyYWRlLW9mZnMgdGhleSYjMzk7dmUgbWFkZS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHR7XG4gNzAxOlx0XHRpbnQgaSwgc3BpO1xuIDcwMjpcdFxuIDcwMzpcdFx0Lyogd2FsayBzbG90cyBvZiB0aGUgZXhwbG9yZWQgc3RhY2sgYW5kIGlnbm9yZSBhbnkgYWRkaXRpb25hbFxuIDcwNDpcdFx0ICogc2xvdHMgaW4gdGhlIGN1cnJlbnQgc3RhY2ssIHNpbmNlIGV4cGxvcmVkKHNhZmUpIHN0YXRlXG4gNzA1Olx0XHQgKiBkaWRuJiMzOTt0IHVzZSB0aGVtXG4gNzA2Olx0XHQgKi9cbiA3MDc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9sZC1cdTAwM2VhbGxvY2F0ZWRfc3RhY2s7IGkmIzQzOyYjNDM7KSB7XG4gNzA4Olx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGRfcmVnLCAqY3VyX3JlZztcbiA3MDk6XHRcdFx0aW50IGltID0gaSAlIEJQRl9SRUdfU0laRTtcbiA3MTA6XHRcbiA3MTE6XHRcdFx0c3BpID0gaSAvIEJQRl9SRUdfU0laRTtcbiA3MTI6XHRcbiA3MTM6XHRcdFx0aWYgKGV4YWN0ID09IEVYQUNUKSB7XG4gNzE0Olx0XHRcdFx0dTggb2xkX3R5cGUgPSBvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV07XG4gNzE1Olx0XHRcdFx0dTggY3VyX3R5cGUgPSBpIFx1MDAzYyBjdXItXHUwMDNlYWxsb2NhdGVkX3N0YWNrID9cbiA3MTY6XHRcdFx0XHRcdCAgICAgIGN1ci1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA6IFNUQUNLX0lOVkFMSUQ7XG4gNzE3Olx0XG4gNzE4Olx0XHRcdFx0LyogU1RBQ0tfSU5WQUxJRCBhbmQgU1RBQ0tfUE9JU09OIGFyZSBlcXVpdmFsZW50IGZvciBwcnVuaW5nICovXG4gNzE5Olx0XHRcdFx0aWYgKG9sZF90eXBlID09IFNUQUNLX1BPSVNPTilcbiA3MjA6XHRcdFx0XHRcdG9sZF90eXBlID0gU1RBQ0tfSU5WQUxJRDtcbiA3MjE6XHRcdFx0XHRpZiAoY3VyX3R5cGUgPT0gU1RBQ0tfUE9JU09OKVxuIDcyMjpcdFx0XHRcdFx0Y3VyX3R5cGUgPSBTVEFDS19JTlZBTElEO1xuIDcyMzpcdFx0XHRcdGlmIChpIFx1MDAzZT0gY3VyLVx1MDAzZWFsbG9jYXRlZF9zdGFjayB8fCBvbGRfdHlwZSAhPSBjdXJfdHlwZSlcbiA3MjQ6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA3MjU6XHRcdFx0fVxuIDcyNjpcdFxuIDcyNzpcdFx0XHRpZiAob2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX0lOVkFMSUQgfHxcbiA3Mjg6XHRcdFx0ICAgIG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19QT0lTT04pXG4gNzI5Olx0XHRcdFx0Y29udGludWU7XG4gNzMwOlx0XG4gNzMxOlx0XHRcdGlmIChlbnYtXHUwMDNlYWxsb3dfdW5pbml0X3N0YWNrIFx1MDAyNlx1MDAyNlxuIDczMjpcdFx0XHQgICAgb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX01JU0MpXG4gNzMzOlx0XHRcdFx0Y29udGludWU7XG4gNzM0Olx0XG4gNzM1Olx0XHRcdC8qIGV4cGxvcmVkIHN0YWNrIGhhcyBtb3JlIHBvcHVsYXRlZCBzbG90cyB0aGFuIGN1cnJlbnQgc3RhY2tcbiA3MzY6XHRcdFx0ICogYW5kIHRoZXNlIHNsb3RzIHdlcmUgdXNlZFxuIDczNzpcdFx0XHQgKi9cbiA3Mzg6XHRcdFx0aWYgKGkgXHUwMDNlPSBjdXItXHUwMDNlYWxsb2NhdGVkX3N0YWNrKVxuIDczOTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA3NDA6XHRcbiA3NDE6XHRcdFx0LypcbiA3NDI6XHRcdFx0ICogNjQgYW5kIDMyLWJpdCBzY2FsYXIgc3BpbGxzIHZzIE1JU0MvSU5WQUxJRCBzbG90cyBhbmQgdmljZSB2ZXJzYS5cbiA3NDM6XHRcdFx0ICogTG9hZCBmcm9tIE1JU0MvSU5WQUxJRCBzbG90cyBwcm9kdWNlcyB1bmJvdW5kIHNjYWxhci5cbiA3NDQ6XHRcdFx0ICogQ29uc3RydWN0IGEgZmFrZSByZWdpc3RlciBmb3Igc3VjaCBzdGFjayBhbmQgY2FsbFxuIDc0NTpcdFx0XHQgKiByZWdzYWZlKCkgdG8gZW5zdXJlIHNjYWxhciBpZHMgYXJlIGNvbXBhcmVkLlxuIDc0NjpcdFx0XHQgKi9cbiA3NDc6XHRcdFx0aWYgKGltID09IDAgfHwgaW0gPT0gNCkge1xuIDc0ODpcdFx0XHRcdG9sZF9yZWcgPSBzY2FsYXJfcmVnX2Zvcl9zdGFjayhlbnYsIFx1MDAyNm9sZC1cdTAwM2VzdGFja1tzcGldLCBpbSk7XG4gNzQ5Olx0XHRcdFx0Y3VyX3JlZyA9IHNjYWxhcl9yZWdfZm9yX3N0YWNrKGVudiwgXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0sIGltKTtcbiA3NTA6XHRcdFx0XHRpZiAob2xkX3JlZyBcdTAwMjZcdTAwMjYgY3VyX3JlZykge1xuIDc1MTpcdFx0XHRcdFx0aWYgKCFyZWdzYWZlKGVudiwgb2xkX3JlZywgY3VyX3JlZywgaWRtYXAsIGV4YWN0KSlcbiA3NTI6XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDc1MzpcdFx0XHRcdFx0aSAmIzQzOz0gKGltID09IDAgPyBCUEZfUkVHX1NJWkUgLSAxIDogMyk7XG4gNzU0Olx0XHRcdFx0XHRjb250aW51ZTtcbiA3NTU6XHRcdFx0XHR9XG4gNzU2Olx0XHRcdH1cbiA3NTc6XHRcbiA3NTg6XHRcdFx0LyogaWYgb2xkIHN0YXRlIHdhcyBzYWZlIHdpdGggbWlzYyBkYXRhIGluIHRoZSBzdGFja1xuIDc1OTpcdFx0XHQgKiBpdCB3aWxsIGJlIHNhZmUgd2l0aCB6ZXJvLWluaXRpYWxpemVkIHN0YWNrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN0YWNrc2FmZWAgZm9yIERlZXBlciBJbnNpZ2h0KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgYHN0YWNrc2FmZWAgbGlicmFyeS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgbGluZXMgNzYwIHRocm91Z2ggODAwLiBJJiMzOTttIGhvcGluZyB0aGF0IGFyZWEgY292ZXJzIHRoZSBwYXJ0IEkmIzM5O20gc3RydWdnbGluZyB3aXRoIGFuZCB3aWxsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IG9uIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjcml0aWNhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9yIHBlcmhhcHMgYSBwYXJ0aWN1bGFybHkgY2xldmVyIHVzZSBvZiBzb21lIGNvbmN1cnJlbmN5IHByaW1pdGl2ZXMuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSB2YWx1YWJsZSBjb250ZXh0IGZvciB0aGUgcHJvYmxlbSBJJiMzOTttIHdvcmtpbmcgb24gYW5kIHNob3VsZCBob3BlZnVsbHkgaGVscCBtZSB0byByZXNvbHZlIGl0LiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjA6XHRcdFx0ICogVGhlIG9wcG9zaXRlIGlzIG5vdCB0cnVlXG4gNzYxOlx0XHRcdCAqL1xuIDc2MjpcdFx0XHRpZiAob2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX01JU0MgXHUwMDI2XHUwMDI2XG4gNzYzOlx0XHRcdCAgICBjdXItXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gPT0gU1RBQ0tfWkVSTylcbiA3NjQ6XHRcdFx0XHRjb250aW51ZTtcbiA3NjU6XHRcdFx0aWYgKG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPVxuIDc2NjpcdFx0XHQgICAgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdKVxuIDc2NzpcdFx0XHRcdC8qIEV4OiBvbGQgZXhwbG9yZWQgKHNhZmUpIHN0YXRlIGhhcyBTVEFDS19TUElMTCBpblxuIDc2ODpcdFx0XHRcdCAqIHRoaXMgc3RhY2sgc2xvdCwgYnV0IGN1cnJlbnQgaGFzIFNUQUNLX01JU0MgLVx1MDAzZVxuIDc2OTpcdFx0XHRcdCAqIHRoaXMgdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudCxcbiA3NzA6XHRcdFx0XHQgKiByZXR1cm4gZmFsc2UgdG8gY29udGludWUgdmVyaWZpY2F0aW9uIG9mIHRoaXMgcGF0aFxuIDc3MTpcdFx0XHRcdCAqL1xuIDc3MjpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA3NzM6XHRcdFx0aWYgKGkgJSBCUEZfUkVHX1NJWkUgIT0gQlBGX1JFR19TSVpFIC0gMSlcbiA3NzQ6XHRcdFx0XHRjb250aW51ZTtcbiA3NzU6XHRcdFx0LyogQm90aCBvbGQgYW5kIGN1ciBhcmUgaGF2aW5nIHNhbWUgc2xvdF90eXBlICovXG4gNzc2Olx0XHRcdHN3aXRjaCAob2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW0JQRl9SRUdfU0laRSAtIDFdKSB7XG4gNzc3Olx0XHRcdGNhc2UgU1RBQ0tfU1BJTEw6XG4gNzc4Olx0XHRcdFx0Lyogd2hlbiBleHBsb3JlZCBhbmQgY3VycmVudCBzdGFjayBzbG90IGFyZSBib3RoIHN0b3JpbmdcbiA3Nzk6XHRcdFx0XHQgKiBzcGlsbGVkIHJlZ2lzdGVycywgY2hlY2sgdGhhdCBzdG9yZWQgcG9pbnRlcnMgdHlwZXNcbiA3ODA6XHRcdFx0XHQgKiBhcmUgdGhlIHNhbWUgYXMgd2VsbC5cbiA3ODE6XHRcdFx0XHQgKiBFeDogZXhwbG9yZWQgc2FmZSBwYXRoIGNvdWxkIGhhdmUgc3RvcmVkXG4gNzgyOlx0XHRcdFx0ICogKGJwZl9yZWdfc3RhdGUpIHsudHlwZSA9IFBUUl9UT19TVEFDSywgLm9mZiA9IC04fVxuIDc4MzpcdFx0XHRcdCAqIGJ1dCBjdXJyZW50IHBhdGggaGFzIHN0b3JlZDpcbiA3ODQ6XHRcdFx0XHQgKiAoYnBmX3JlZ19zdGF0ZSkgey50eXBlID0gUFRSX1RPX1NUQUNLLCAub2ZmID0gLTE2fVxuIDc4NTpcdFx0XHRcdCAqIHN1Y2ggdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudC5cbiA3ODY6XHRcdFx0XHQgKiByZXR1cm4gZmFsc2UgdG8gY29udGludWUgdmVyaWZpY2F0aW9uIG9mIHRoaXMgcGF0aFxuIDc4NzpcdFx0XHRcdCAqL1xuIDc4ODpcdFx0XHRcdGlmICghcmVnc2FmZShlbnYsIFx1MDAyNm9sZC1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLFxuIDc4OTpcdFx0XHRcdFx0ICAgICBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcbiA3OTA6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA3OTE6XHRcdFx0XHRicmVhaztcbiA3OTI6XHRcdFx0Y2FzZSBTVEFDS19EWU5QVFI6XG4gNzkzOlx0XHRcdFx0b2xkX3JlZyA9IFx1MDAyNm9sZC1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuIDc5NDpcdFx0XHRcdGN1cl9yZWcgPSBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA3OTU6XHRcdFx0XHRpZiAob2xkX3JlZy1cdTAwM2VkeW5wdHIudHlwZSAhPSBjdXJfcmVnLVx1MDAzZWR5bnB0ci50eXBlIHx8XG4gNzk2Olx0XHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgIT0gY3VyX3JlZy1cdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxuIDc5NzpcdFx0XHRcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXHUwMDNlaWQsIGN1cl9yZWctXHUwMDNlaWQsIGlkbWFwKSB8fFxuIDc5ODpcdFx0XHRcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXHUwMDNlcGFyZW50X2lkLCBjdXJfcmVnLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApKVxuIDc5OTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgwMDpcdFx0XHRcdGJyZWFrO1xuIDgwMTpcdFx0XHRjYXNlIFNUQUNLX0lURVI6XG4gODAyOlx0XHRcdFx0b2xkX3JlZyA9IFx1MDAyNm9sZC1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuIDgwMzpcdFx0XHRcdGN1cl9yZWcgPSBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA4MDQ6XHRcdFx0XHQvKiBpdGVyLmRlcHRoIGlzIG5vdCBjb21wYXJlZCBiZXR3ZWVuIHN0YXRlcyBhcyBpdFxuIDgwNTpcdFx0XHRcdCAqIGRvZXNuJiMzOTt0IG1hdHRlciBmb3IgY29ycmVjdG5lc3MgYW5kIHdvdWxkIG90aGVyd2lzZVxuIDgwNjpcdFx0XHRcdCAqIHByZXZlbnQgY29udmVyZ2VuY2U7IHdlIG1haW50YWluIGl0IG9ubHkgdG8gcHJldmVudFxuIDgwNzpcdFx0XHRcdCAqIGluZmluaXRlIGxvb3AgY2hlY2sgdHJpZ2dlcmluZywgc2VlXG4gODA4Olx0XHRcdFx0ICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpXG4gODA5Olx0XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjgwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGJwZl9yZWdfc3RhdGVgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBzb21lIHN1YnRsZXRpZXMgaW4gaG93IHdlJiMzOTtyZSB0cmFja2luZyByZWdpc3RlciBzdGF0ZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgc3RhY2sgcG9pbnRlcnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byBzdGFjayBmcmFtZXMgd2l0aGluIHRoZSBCUEYgY29udGV4dC4KCkxvb2tpbmcgYXQgdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbiwgdGhlIGFkZGVkIGByb2xkLSZndDtmcmFtZW5vID09IHJjdXItJmd0O2ZyYW1lbm9gIGNoZWNrIHNlZW1zIHNpZ25pZmljYW50LiBQcmV2aW91c2x5LCB3ZSBvbmx5IGNvbnNpZGVyZWQgd2hldGhlciB0aGUgcmVnaXN0ZXIgc3RhdGVzIHdlcmUgaWRlbnRpY2FsIGJhc2VkIG9uIGEgYG1lbWNtcGAgdXAgdG8gdGhlIGBpZGAgZmllbGQgYW5kIHRoZSBvdXRjb21lIG9mIHRoZSBgY2hlY2tfaWRzYCBmdW5jdGlvbiBmb3IgYGlkYCBhbmQgYHBhcmVudF9pZGAuIE5vdywgd2UmIzM5O3JlIGV4cGxpY2l0bHkgY29tcGFyaW5nIHRoZSBgZnJhbWVub2AgZmllbGQgYXMgd2VsbC4gVGhlIGltcGxpY2F0aW9ucyBhcmUsIHRoaXMgYWRkaXRpb24gaXMgbGlrZWx5IGludGVuZGVkIHRvIGVuc3VyZSB0aGF0IHR3byByZWdpc3RlciBzdGF0ZXMgYXJlIGNvbnNpZGVyZWQgdHJ1bHkgZXF1YWwgb25seSBpZiB0aGV5IGFyZSBib3RoIHBvaW50aW5nIHRvIHRoZSBzYW1lIHN0YWNrIGZyYW1lLgoKVGhlIGNoYW5nZSBpbiBgcmVnc2FmZWAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBQVFJfVE9fU1RBQ0tgIGNhc2UsIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGlzIGludGVycHJldGF0aW9uLiBUaGUgb3JpZ2luYWwgY29tbWVudCBoaW50ZWQgYXQgdGhlIG5lZWQgZm9yIGZyYW1lLXNwZWNpZmljIGVxdWFsaXR5IHdoZW4gZGVhbGluZyB3aXRoIHN0YWNrIHBvaW50ZXJzLiBUaGUgcmVtb3ZhbCBvZiB0aGUgYHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AgY2hlY2sgdGhlcmUsICphZnRlciogdGhlIGFkZGl0aW9uIG9mIGl0IHRvIGByZWdzX2V4YWN0YCwgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IG5vdywgd2l0aCBgcmVnc19leGFjdGAgdXBkYXRlZCwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gcmUtY2hlY2sgdGhlIGZyYW1lIG51bWJlciBpbiB0aGUgUFRSX1RPX1NUQUNLIGNhc2Ugc2VwYXJhdGVseS4gYHJlZ3NfZXhhY3RgIG5vdyBoYW5kbGVzIGl0LiBUaGF0IGlzIHRoZSBjcml0aWNhbCBjaGFuZ2UuCgpNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZGVsdmUgaW50byB0aGUgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBkZWZpbml0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBmcmFtZW5vYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGNvbmZpcm0gaXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgc3RydWN0dXJlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXRzIG1lYW5pbmcgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIEJQRiByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZSBgZnJhbWVub2AgZmllbGQgcmVwcmVzZW50cyB0aGUgYWN0dWFsIGZyYW1lIG51bWJlciBvciBhIGtpbmQgb2YgZnJhbWUgaWRlbnRpZmllci4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIHNvbGlkaWZ5IHRoZSBvdmVyYWxsIGVmZmVjdCBvZiB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJwZl9yZWdfc3RhdGUgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTMyPWVudW0gYnBmX2l0ZXJfc3RhdGUge1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzctXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjM4OnN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzktXHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgaW50ZXJuYWxzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAzOCwgYXNzdW1pbmcgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBjb3JlIGRlZmluaXRpb25zLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgeW91JiMzOTtsbCBmaW5kIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zLCBpbXBvcnRhbnQgbWFjcm9zLCBhbmQgcG90ZW50aWFsbHkgc29tZSBvZiB0aGUga2V5IGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBzZXQgdGhlIHN0YWdlIGZvciBob3cgdGhlIHZlcmlmaWVyIG9wZXJhdGVzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBsaWtlbHkgYnJhbmNoIG91dCBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIGJ1dCB0aGF0JiMzOTtzIHRoZSBpbml0aWFsIHRhcmdldC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5lYXJ0aGVkLiBJJiMzOTttIGFudGljaXBhdGluZyBmaW5kaW5nIHRoZSBidWlsZGluZyBibG9ja3MgZm9yIHRoZSBjb250cm9sIGZsb3cgZ3JhcGggYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLCBwZXJoYXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM4Olx0c3RydWN0IGJwZl9yZWdfc3RhdGUge1xuICAzOTpcdFx0LyogT3JkZXJpbmcgb2YgZmllbGRzIG1hdHRlcnMuICBTZWUgc3RhdGVzX2VxdWFsKCkgKi9cbiAgNDA6XHRcdGVudW0gYnBmX3JlZ190eXBlIHR5cGU7XG4gIDQxOlx0XHQvKlxuICA0MjpcdFx0ICogQ29uc3RhbnQgZGVsdGEgYmV0d2VlbiBcJiMzNDtsaW5rZWRcJiMzNDsgc2NhbGFycyB3aXRoIHRoZSBzYW1lIElELlxuICA0MzpcdFx0ICovXG4gIDQ0Olx0XHRzMzIgZGVsdGE7XG4gIDQ1Olx0XHR1bmlvbiB7XG4gIDQ2Olx0XHRcdC8qIHZhbGlkIHdoZW4gdHlwZSA9PSBQVFJfVE9fUEFDS0VUICovXG4gIDQ3Olx0XHRcdGludCByYW5nZTtcbiAgNDg6XHRcbiAgNDk6XHRcdFx0LyogdmFsaWQgd2hlbiB0eXBlID09IENPTlNUX1BUUl9UT19NQVAgfCBQVFJfVE9fTUFQX1ZBTFVFIHxcbiAgNTA6XHRcdFx0ICogICBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTExcbiAgNTE6XHRcdFx0ICovXG4gIDUyOlx0XHRcdHN0cnVjdCB7XG4gIDUzOlx0XHRcdFx0c3RydWN0IGJwZl9tYXAgKm1hcF9wdHI7XG4gIDU0Olx0XHRcdFx0LyogVG8gZGlzdGluZ3Vpc2ggbWFwIGxvb2t1cHMgZnJvbSBvdXRlciBtYXBcbiAgNTU6XHRcdFx0XHQgKiB0aGUgbWFwX3VpZCBpcyBub24temVybyBmb3IgcmVnaXN0ZXJzXG4gIDU2Olx0XHRcdFx0ICogcG9pbnRpbmcgdG8gaW5uZXIgbWFwcy5cbiAgNTc6XHRcdFx0XHQgKi9cbiAgNTg6XHRcdFx0XHR1MzIgbWFwX3VpZDtcbiAgNTk6XHRcdFx0fTtcbiAgNjA6XHRcbiAgNjE6XHRcdFx0LyogZm9yIFBUUl9UT19CVEZfSUQgKi9cbiAgNjI6XHRcdFx0c3RydWN0IHtcbiAgNjM6XHRcdFx0XHRzdHJ1Y3QgYnRmICpidGY7XG4gIDY0Olx0XHRcdFx0dTMyIGJ0Zl9pZDtcbiAgNjU6XHRcdFx0fTtcbiAgNjY6XHRcbiAgNjc6XHRcdFx0c3RydWN0IHsgLyogZm9yIFBUUl9UT19NRU0gfCBQVFJfVE9fTUVNX09SX05VTEwgKi9cbiAgNjg6XHRcdFx0XHR1MzIgbWVtX3NpemU7XG4gIDY5Olx0XHRcdH07XG4gIDcwOlx0XG4gIDcxOlx0XHRcdC8qIEZvciBkeW5wdHIgc3RhY2sgc2xvdHMgKi9cbiAgNzI6XHRcdFx0c3RydWN0IHtcbiAgNzM6XHRcdFx0XHRlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlO1xuICA3NDpcdFx0XHRcdC8qIEEgZHlucHRyIGlzIDE2IGJ5dGVzIHNvIGl0IHRha2VzIHVwIDIgc3RhY2sgc2xvdHMuXG4gIDc1Olx0XHRcdFx0ICogV2UgbmVlZCB0byB0cmFjayB3aGljaCBzbG90IGlzIHRoZSBmaXJzdCBzbG90XG4gIDc2Olx0XHRcdFx0ICogdG8gcHJvdGVjdCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHRoZSB1c2VyIG1heSB0cnkgdG9cbiAgNzc6XHRcdFx0XHQgKiBwYXNzIGluIGFuIGFkZHJlc3Mgc3RhcnRpbmcgYXQgdGhlIHNlY29uZCBzbG90IG9mIHRoZVxuICA3ODpcdFx0XHRcdCAqIGR5bnB0ci5cbiAgNzk6XHRcdFx0XHQgKi9cbiAgODA6XHRcdFx0XHRib29sIGZpcnN0X3Nsb3Q7XG4gIDgxOlx0XHRcdH0gZHlucHRyO1xuICA4MjpcdFxuICA4MzpcdFx0XHQvKiBGb3IgYnBmX2l0ZXIgc3RhY2sgc2xvdHMgKi9cbiAgODQ6XHRcdFx0c3RydWN0IHtcbiAgODU6XHRcdFx0XHQvKiBCVEYgY29udGFpbmVyIGFuZCBCVEYgdHlwZSBJRCBkZXNjcmliaW5nXG4gIDg2Olx0XHRcdFx0ICogc3RydWN0IGJwZl9pdGVyX1x1MDAzY3R5cGVcdTAwM2Ugb2YgYW4gaXRlcmF0b3Igc3RhdGVcbiAgODc6XHRcdFx0XHQgKi9cbiAgODg6XHRcdFx0XHRzdHJ1Y3QgYnRmICpidGY7XG4gIDg5Olx0XHRcdFx0dTMyIGJ0Zl9pZDtcbiAgOTA6XHRcdFx0XHQvKiBwYWNraW5nIGZvbGxvd2luZyB0d28gZmllbGRzIHRvIGZpdCBpdGVyIHN0YXRlIGludG8gMTYgYnl0ZXMgKi9cbiAgOTE6XHRcdFx0XHRlbnVtIGJwZl9pdGVyX3N0YXRlIHN0YXRlOjI7XG4gIDkyOlx0XHRcdFx0aW50IGRlcHRoOjMwO1xuICA5MzpcdFx0XHR9IGl0ZXI7XG4gIDk0Olx0XG4gIDk1Olx0XHRcdC8qIEZvciBpcnEgc3RhY2sgc2xvdHMgKi9cbiAgOTY6XHRcdFx0c3RydWN0IHtcbiAgOTc6XHRcdFx0XHRlbnVtIHtcbiAgOTg6XHRcdFx0XHRcdElSUV9OQVRJVkVfS0ZVTkMsXG4gIDk5Olx0XHRcdFx0XHRJUlFfTE9DS19LRlVOQyxcbiAxMDA6XHRcdFx0XHR9IGtmdW5jX2NsYXNzO1xuIDEwMTpcdFx0XHR9IGlycTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0LyogTWF4IHNpemUgZnJvbSBhbnkgb2YgdGhlIGFib3ZlLiAqL1xuIDEwNDpcdFx0XHRzdHJ1Y3Qge1xuIDEwNTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmF3MTtcbiAxMDY6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHJhdzI7XG4gMTA3Olx0XHRcdH0gcmF3O1xuIDEwODpcdFxuIDEwOTpcdFx0XHR1MzIgc3VicHJvZ25vOyAvKiBmb3IgUFRSX1RPX0ZVTkMgKi9cbiAxMTA6XHRcdH07XG4gMTExOlx0XHQvKiBGb3Igc2NhbGFyIHR5cGVzIChTQ0FMQVJfVkFMVUUpLCB0aGlzIHJlcHJlc2VudHMgb3VyIGtub3dsZWRnZSBvZlxuIDExMjpcdFx0ICogdGhlIGFjdHVhbCB2YWx1ZS5cbiAxMTM6XHRcdCAqIEZvciBwb2ludGVyIHR5cGVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIHZhcmlhYmxlIHBhcnQgb2YgdGhlIG9mZnNldFxuIDExNDpcdFx0ICogZnJvbSB0aGUgcG9pbnRlZC10byBvYmplY3QsIGFuZCBpcyBzaGFyZWQgd2l0aCBhbGwgYnBmX3JlZ19zdGF0ZXNcbiAxMTU6XHRcdCAqIHdpdGggdGhlIHNhbWUgaWQgYXMgdXMuXG4gMTE2Olx0XHQgKi9cbiAxMTc6XHRcdHN0cnVjdCB0bnVtIHZhcl9vZmY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDYyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYHN0cnVjdCBicGZfcmVnX3N0YXRlYCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYWxyZWFkeSBsb29rZWQgYXQgc29tZSBhc3BlY3RzIG9mIHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgLiBOb3csIEkgbmVlZCB0byBnZXQgYSBmdWxsIGhhbmRsZSBvbiB0aGUgcmVzdCBvZiBpdC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgZmFtaWxpYXIgd2l0aCBldmVyeSBzaW5nbGUgZmllbGQgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gVGhlcmUmIzM5O3MgYSBsb3Qgb2YgaW1wb3J0YW50IG1ldGFkYXRhIHdyYXBwZWQgdXAgaW4gdGhhdCBzdHJ1Y3QsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlIGlzIGNyaXRpY2FsIGZvciB0aGUgb25nb2luZyB3b3JrLiBObyBzdG9uZSBjYW4gYmUgbGVmdCB1bnR1cm5lZCBoZXJlLCBvciBJJiMzOTttIG1pc3Npbmcgb3Bwb3J0dW5pdGllcyB0byByZWZpbmUsIG9wdGltaXplLCBhbmQgcG90ZW50aWFsbHkgZmluZCBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgSSBrbm93ICpldmVyeXRoaW5nKiBhYm91dCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTg6XHRcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxuIDExOTpcdFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cbiAxMjA6XHRcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXG4gMTIxOlx0XHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXG4gMTIyOlx0XHQgKi9cbiAxMjM6XHRcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXG4gMTI0Olx0XHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xuIDEyNTpcdFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXG4gMTI2Olx0XHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cbiAxMjc6XHRcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxuIDEyODpcdFx0ICogY2FtZSBmcm9tLCB3aGVuIG9uZSBpcyB0ZXN0ZWQgZm9yICE9IE5VTEwuXG4gMTI5Olx0XHQgKiBGb3IgUFRSX1RPX01FTV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBtZW1vcnkgYWxsb2NhdGlvblxuIDEzMDpcdFx0ICogZm9yIHRoZSBwdXJwb3NlIG9mIHRyYWNraW5nIHRoYXQgaXQmIzM5O3MgZnJlZWQuXG4gMTMxOlx0XHQgKiBGb3IgUFRSX1RPX1NPQ0tFVCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggcG9pbnRlcnMgcmV0YWluIHRoZVxuIDEzMjpcdFx0ICogc2FtZSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCwgdG8gZGV0ZXJtaW5lIHByb3BlciByZWZlcmVuY2UgZnJlZWluZy5cbiAxMzM6XHRcdCAqIEZvciBzdGFjayBzbG90cyB0aGF0IGFyZSBkeW5wdHJzLCB0aGlzIGlzIHVzZWQgdG8gdHJhY2sgcmVmZXJlbmNlcyB0b1xuIDEzNDpcdFx0ICogdGhlIGR5bnB0ciB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxuIDEzNTpcdFx0ICogU2ltaWxhcmx5IHRvIGR5bnB0cnMsIHdlIHVzZSBJRCB0byB0cmFjayBcJiMzNDtiZWxvbmdpbmdcJiMzNDsgb2YgYSByZWZlcmVuY2VcbiAxMzY6XHRcdCAqIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgYnBmX2l0ZXIuXG4gMTM3Olx0XHQgKi9cbiAxMzg6XHRcdC8qXG4gMTM5Olx0XHQgKiBVcHBlciBiaXQgb2YgSUQgaXMgdXNlZCB0byByZW1lbWJlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBcJiMzNDtsaW5rZWRcJiMzNDtcbiAxNDA6XHRcdCAqIHJlZ2lzdGVycy4gRXhhbXBsZTpcbiAxNDE6XHRcdCAqIHIxID0gcjI7ICAgIGJvdGggd2lsbCBoYXZlIHIxLVx1MDAzZWlkID09IHIyLVx1MDAzZWlkID09IE5cbiAxNDI6XHRcdCAqIHIxICYjNDM7PSAxMDsgICByMS1cdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVCBhbmQgcjEtXHUwMDNlZGVsdGEgPT0gMTBcbiAxNDM6XHRcdCAqIHIzID0gcjI7ICAgIGJvdGggd2lsbCBoYXZlIHIzLVx1MDAzZWlkID09IHIyLVx1MDAzZWlkID09IE5cbiAxNDQ6XHRcdCAqIHczICYjNDM7PSAxMDsgICByMy1cdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVDMyIGFuZCByMy1cdTAwM2VkZWx0YSA9PSAxMFxuIDE0NTpcdFx0ICovXG4gMTQ2Olx0I2RlZmluZSBCUEZfQUREX0NPTlNUNjQgKDFVIFx1MDAzY1x1MDAzYyAzMSlcbiAxNDc6XHQjZGVmaW5lIEJQRl9BRERfQ09OU1QzMiAoMVUgXHUwMDNjXHUwMDNjIDMwKVxuIDE0ODpcdCNkZWZpbmUgQlBGX0FERF9DT05TVCAoQlBGX0FERF9DT05TVDY0IHwgQlBGX0FERF9DT05TVDMyKVxuIDE0OTpcdFx0dTMyIGlkO1xuIDE1MDpcdFx0LypcbiAxNTE6XHRcdCAqIFRyYWNrcyB0aGUgcGFyZW50IG9iamVjdCB0aGlzIHJlZ2lzdGVyIHdhcyBkZXJpdmVkIGZyb20uXG4gMTUyOlx0XHQgKiBVc2VkIGZvciBjYXNjYWRpbmcgaW52YWxpZGF0aW9uOiB3aGVuIHRoZSBwYXJlbnQgb2JqZWN0IGlzXG4gMTUzOlx0XHQgKiByZWxlYXNlZCBvciBpbnZhbGlkYXRlZCwgYWxsIHJlZ2lzdGVycyB3aXRoIG1hdGNoaW5nIHBhcmVudF9pZFxuIDE1NDpcdFx0ICogYXJlIGFsc28gaW52YWxpZGF0ZWQuIEZvciBleGFtcGxlLCBhIHNsaWNlIGZyb20gYnBmX2R5bnB0cl9kYXRhKClcbiAxNTU6XHRcdCAqIGdldHMgcGFyZW50X2lkIHNldCB0byB0aGUgZHlucHRyJiMzOTtzIGlkLlxuIDE1NjpcdFx0ICovXG4gMTU3Olx0XHR1MzIgcGFyZW50X2lkO1xuIDE1ODpcdFx0LyogSW5zaWRlIHRoZSBjYWxsZWUgdHdvIHJlZ2lzdGVycyBjYW4gYmUgYm90aCBQVFJfVE9fU1RBQ0sgbGlrZVxuIDE1OTpcdFx0ICogUjE9ZnAtOCBhbmQgUjI9ZnAtOCwgYnV0IG9uZSBvZiB0aGVtIHBvaW50cyB0byB0aGlzIGZ1bmN0aW9uIHN0YWNrXG4gMTYwOlx0XHQgKiB3aGlsZSBhbm90aGVyIHRvIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2suIFRvIGRpZmZlcmVudGlhdGUgdGhlbSAmIzM5O2ZyYW1lbm8mIzM5O1xuIDE2MTpcdFx0ICogaXMgdXNlZCB3aGljaCBpcyBhbiBpbmRleCBpbiBicGZfdmVyaWZpZXJfc3RhdGUtXHUwMDNlZnJhbWVbXSBhcnJheVxuIDE2MjpcdFx0ICogcG9pbnRpbmcgdG8gYnBmX2Z1bmNfc3RhdGUuXG4gMTYzOlx0XHQgKi9cbiAxNjQ6XHRcdHUzMiBmcmFtZW5vO1xuIDE2NTpcdFx0LyogaWYgKCFwcmVjaXNlIFx1MDAyNlx1MDAyNiBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24mIzM5O3QgYWZmZWN0IHNhZmV0eSAqL1xuIDE2NjpcdFx0Ym9vbCBwcmVjaXNlO1xuIDE2NzpcdH07XG4gMTY4Olx0XG4gMTY5Olx0c3RhdGljIGlubGluZSBzNjQgcmVnX3NtaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiAxNzA6XHR7XG4gMTcxOlx0XHRyZXR1cm4gY251bTY0X3NtaW4ocmVnLVx1MDAzZXI2NCk7XG4gMTcyOlx0fVxuIDE3MzpcdFxuIDE3NDpcdHN0YXRpYyBpbmxpbmUgczY0IHJlZ19zbWF4KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4gMTc1Olx0e1xuIDE3NjpcdFx0cmV0dXJuIGNudW02NF9zbWF4KHJlZy1cdTAwM2VyNjQpO1xuIDE3NzpcdH1cbiAxNzg6XHRcbiAxNzk6XHRzdGF0aWMgaW5saW5lIHU2NCByZWdfdW1pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIDE4MDpcdHtcbiAxODE6XHRcdHJldHVybiBjbnVtNjRfdW1pbihyZWctXHUwMDNlcjY0KTtcbiAxODI6XHR9XG4gMTgzOlx0XG4gMTg0Olx0c3RhdGljIGlubGluZSB1NjQgcmVnX3VtYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiAxODU6XHR7XG4gMTg2Olx0XHRyZXR1cm4gY251bTY0X3VtYXgocmVnLVx1MDAzZXI2NCk7XG4gMTg3Olx0fVxuIDE4ODpcdFxuIDE4OTpcdHN0YXRpYyBpbmxpbmUgczMyIHJlZ19zMzJfbWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4gMTkwOlx0e1xuIDE5MTpcdFx0cmV0dXJuIGNudW0zMl9zbWluKHJlZy1cdTAwM2VyMzIpO1xuIDE5MjpcdH1cbiAxOTM6XHRcbiAxOTQ6XHRzdGF0aWMgaW5saW5lIHMzMiByZWdfczMyX21heChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIDE5NTpcdHtcbiAxOTY6XHRcdHJldHVybiBjbnVtMzJfc21heChyZWctXHUwMDNlcjMyKTtcbiAxOTc6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTMyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBCUEYgdmVyaWZpZXIgcGVyc3BlY3RpdmUuKiogSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBmb3VuZC4KCkluaXRpYWxseSwgSSBsb29rZWQgYXQgdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgZGVmaW5pdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5vdGVkIHRoZSBmaWVsZCBvcmRlcjogYGlkYCwgYHBhcmVudF9pZGAsIGBmcmFtZW5vYCwgYW5kIGBwcmVjaXNlYC4gVGhlIGV4aXN0aW5nIGByZWdzX2V4YWN0YCBmdW5jdGlvbiwgYXMgaXQgd2FzICpiZWZvcmUqIHRoZSBwYXRjaCwgd2FzIGZsYXdlZC4gSXQgdXNlZCBgbWVtY21wYCB1cCB0byBgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKWAgdG8gY29tcGFyZSByZWdpc3RlciBzdGF0ZXMsIHRoZW4gc2VwYXJhdGVseSBjaGVja2VkIGBpZGAgYW5kIGBwYXJlbnRfaWRgIHdpdGggYGNoZWNrX2lkc2AuIFRoaXMgbWVhbnQgYGZyYW1lbm9gIHdhcyAqZW50aXJlbHkqIHNraXBwZWQgZHVyaW5nIHRoZSBjb21wYXJpc29uLiBUaGUgZnVuY3Rpb24gZXNzZW50aWFsbHkgcmV0dXJuZWQgdHJ1ZSBpZiBhbGwgdGhlIGZpZWxkcyAqYmVmb3JlKiBgZnJhbWVub2Agd2VyZSB0aGUgc2FtZS4KClRoZSBwcm9ibGVtIHF1aWNrbHkgYmVjYW1lIGNsZWFyLiAgYFBUUl9UT19TVEFDS2Agc3BlY2lmaWNhbGx5IGNoZWNrZWQgYHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AsIGJ1dCBvdGhlciBwYXRocywgc3VjaCBhcyB3aGVuIGBleGFjdCA9PSBFWEFDVGAsIGNhbGxlZCBgcmVnc19leGFjdGAgZGlyZWN0bHksIHRodXMgYnlwYXNzaW5nIHRoZSBjaGVjayBvZiBmcmFtZW5vLiAgVGhpcyBvbWlzc2lvbiBhbGxvd2VkIHJlZ2lzdGVycyBwb2ludGluZyB0byAqZGlmZmVyZW50KiBzdGFjayBmcmFtZXMgKGUuZy4sIGNhbGxlciB2cy4gY2FsbGVlKSB0byBiZSBjb25zaWRlcmVkIGlkZW50aWNhbCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBidWcgaW4gdGhlIGFuYWx5c2lzLiBGdXJ0aGVybW9yZSwgc3BpbGxlZCByZWdpc3RlcnMgb24gdGhlIHN0YWNrIHdvdWxkIGFsc28gYnlwYXNzIHRoZSBleHBsaWNpdCBgZnJhbWVub2AgY2hlY2sgaW4gdGhlIGBQVFJfVE9fU1RBQ0tgIGNhc2Ugd2hlbiBgZXhhY3QgPT0gRVhBQ1RgLCBsZWFkaW5nIHRvIHRoZSBzYW1lIGluY29ycmVjdCBjb21wYXJpc29uLiBUaGUgc2VsZnRlc3QgZGVtb25zdHJhdGVkIHRoaXMgdmVyeSBwcm9ibGVtLCB1c2luZyBhIHNwaWxsZWQgcG9pbnRlciB0byBjb21wYXJlIGRpZmZlcmVudCBmcmFtZXMsIHdoaWNoIHRoZSBicm9rZW4gbG9naWMgd291bGQgaW5jb3JyZWN0bHkgZGVlbSBlcXVhbC4KClRoZSBwYXRjaCYjMzk7cyBmaXgsIG1vdmluZyBgcm9sZC0mZ3Q7ZnJhbWVubyA9PSByY3VyLSZndDtmcmFtZW5vYCBpbnRvIGByZWdzX2V4YWN0YCwgY29ycmVjdGx5IGFkZHJlc3NlZCB0aGlzIG9taXNzaW9uLCBlbnN1cmluZyAqYWxsKiBmaWVsZHMgYXJlIGNvbXBhcmVkIHdoZW4gYGV4YWN0ID09IEVYQUNUYC4KCk5vdywgSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIHRoZSBwYXRjaCYjMzk7cyBwb3RlbnRpYWwgaW1wYWN0LiBUaGUgY3JpdGljYWwgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPwoKSSBuZWVkIHRvIGFwcGx5IHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyB0aGlzIHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLCBvciBtb2RpZnkgYm91bmRzIGNoZWNrcyB0byBhbGxvdyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/CgpBbmQgYSBrZXkgcG9pbnQganVzdCBoaXQgbWU6IEkgbmVlZCB0byB2ZXJpZnkgaG93IGBmcmFtZW5vYCBpdHNlbGYgaXMgKmluaXRpYWxpemVkKiB3aXRoaW4gYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBkdXJpbmcgQlBGIHZlcmlmaWVyIG9wZXJhdGlvbnMuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZyYW1lbm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz00Nz1zdHJ1Y3QgYnBmX2RpYWdfbW9kX3RhcmdldCB7XG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTU3LVx0fTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzo1ODpcdHU4IGZyYW1lbm87XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNTktXHR1OCBraW5kO1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy02MS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzo2MjpzdGF0aWMgc3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgZGlhZ19yZWdfdGFyZ2V0KHUzMiBmcmFtZV9pZCwgdTggZnJhbWVubywgdTggcmVnbm8pXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjMte1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy02NS1cdFx0LmZyYW1lX2lkID0gZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NjY6XHRcdC5mcmFtZW5vID0gZnJhbWVubyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy02Ny1cdFx0LmtpbmQgPSBCUEZfRElBR19NT0RfVEFSR0VUX1JFRyxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNzEtXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NzI6c3RhdGljIHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0IGRpYWdfc3RhY2tfYXJnX3RhcmdldCh1MzIgZnJhbWVfaWQsIHU4IGZyYW1lbm8sIHU4IHNsb3QpXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNzMte1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy03NS1cdFx0LmZyYW1lX2lkID0gZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NzY6XHRcdC5mcmFtZW5vID0gZnJhbWVubyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy03Ny1cdFx0LmtpbmQgPSBCUEZfRElBR19NT0RfVEFSR0VUX1NUQUNLX0FSRyxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtODEtXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6ODI6c3RhdGljIHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0IGRpYWdfc3RhY2tfc2xvdF90YXJnZXQodTMyIGZyYW1lX2lkLCB1OCBmcmFtZW5vLCB1MTYgc3BpKVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTgzLXtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtODUtXHRcdC5mcmFtZV9pZCA9IGZyYW1lX2lkLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjg2Olx0XHQuZnJhbWVubyA9IGZyYW1lbm8sXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtODctXHRcdC5raW5kID0gQlBGX0RJQUdfTU9EX1RBUkdFVF9TVEFDS19TTE9ULFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy05MS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzo5MjpzdGF0aWMgc3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgZGlhZ19zdGFja19yYW5nZV90YXJnZXQodTMyIGZyYW1lX2lkLCB1OCBmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTkzLVx0XHRcdFx0XHRcdFx0ICBzMTYgbWluX29mZiwgczE2IG1heF9vZmYpXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk2LVx0XHQuZnJhbWVfaWQgPSBmcmFtZV9pZCxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzo5NzpcdFx0LmZyYW1lbm8gPSBmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk4LVx0XHQua2luZCA9IEJQRl9ESUFHX01PRF9UQVJHRVRfU1RBQ0tfUkFOR0UsXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1ND1zdHJ1Y3QgYnBmX2RpYWdfaGlzdG9yeV9vcHRzIHtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU2LVx0dTMyIGZyYW1lX2lkO1xua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE1NzpcdHUzMiBmcmFtZW5vO1xua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1OC1cdGludCByZWdubztcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9OTA2PXZvaWQgYnBmX2RpYWdfcmVnaXN0ZXJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCByZWdubyxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtOTEyLVx0XHQuZnJhbWVfaWQgPSBmcmFtZS1cdTAwM2VkaWFnX2ZyYW1lX2lkLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjkxMzpcdFx0LmZyYW1lbm8gPSBmcmFtZS1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTkxNC1cdFx0LnJlZ25vID0gcmVnbm8sXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTk5NT12b2lkIGJwZl9kaWFnX2NhbGxfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCBhcmdubywgaW50IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMDAxLVx0XHQuZnJhbWVfaWQgPSBmcmFtZS1cdTAwM2VkaWFnX2ZyYW1lX2lkLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjEwMDI6XHRcdC5mcmFtZW5vID0gZnJhbWUtXHUwMDNlZnJhbWVubyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMDAzLVx0fTtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTIzMj12b2lkIGJwZl9kaWFnX2ludmFsaWRfZGVyZWYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgcmVnbm8sXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEyMzktXHRcdC5mcmFtZV9pZCA9IGZyYW1lLVx1MDAzZWRpYWdfZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTI0MDpcdFx0LmZyYW1lbm8gPSBmcmFtZS1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEyNDEtXHRcdC5yZWdubyA9IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xMjk5PXZvaWQgYnBmX2RpYWdfdW5yZWFkYWJsZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgcmVnbm8pXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzMDQtXHRcdC5mcmFtZV9pZCA9IGZyYW1lLVx1MDAzZWRpYWdfZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTMwNTpcdFx0LmZyYW1lbm8gPSBmcmFtZS1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzMDYtXHRcdC5yZWdubyA9IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMzEyLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjEzMTM6XHR0YXJnZXQgPSBkaWFnX3JlZ190YXJnZXQob3B0cy5mcmFtZV9pZCwgb3B0cy5mcmFtZW5vLCByZWdubyk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTMxNC1cdGZvciAoaSA9IGxvZyA/IGxvZy1cdTAwM2VjbnQgOiAwOyBpIFx1MDAzZSAwOyBpLS0pIHtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTM3Nz12b2lkIGJwZl9kaWFnX3N0YWNrX2FyZ191bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgbmFyZ3MsXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzODQtXHRcdC5mcmFtZV9pZCA9IGZyYW1lLVx1MDAzZWRpYWdfZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTM4NTpcdFx0LmZyYW1lbm8gPSBmcmFtZS1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzODYtXHRcdC5zdGFja19hcmdfc2xvdCA9IHN0YWNrX2FyZ19zbG90LFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNDU1PXN0YXRpYyBib29sIGRpYWdfbW9kX2luc25fb3JpZ2luKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTQ2NC1cdCAgICBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTU9WIFx1MDAyNlx1MDAyNiBCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNDY1Olx0XHQqb3JpZ2luID0gZGlhZ19yZWdfdGFyZ2V0KHRhcmdldC1cdTAwM2VmcmFtZV9pZCwgdGFyZ2V0LVx1MDAzZWZyYW1lbm8sIGluc24tXHUwMDNlc3JjX3JlZyk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTQ2Ni1cdFx0cmV0dXJuIHRydWU7XG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE0NzQtXHRzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlZnJhbWVbZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VjdXJmcmFtZV07XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTQ3NTpcdCpvcmlnaW4gPSBkaWFnX3JlZ190YXJnZXQoc3RhdGUtXHUwMDNlZGlhZ19mcmFtZV9pZCwgc3RhdGUtXHUwMDNlZnJhbWVubywgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNDc2LVx0cmV0dXJuIHRydWU7XG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1NDg9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICp0YXJnZXRfdG9fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1NTMtXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTU1NDpcdHN0YXRlID0gdGFyZ2V0LVx1MDAzZWZyYW1lbm8gXHUwMDNjPSB2c3RhdGUtXHUwMDNlY3VyZnJhbWUgPyB2c3RhdGUtXHUwMDNlZnJhbWVbdGFyZ2V0LVx1MDAzZWZyYW1lbm9dIDogTlVMTDtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNTU1LVxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNTc5PXN0YXRpYyBib29sIHJlZ190b190YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU5NC1cdFx0aWYgKGFkZHIgXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2MgZW5kKSB7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTU5NTpcdFx0XHQqdGFyZ2V0ID0gZGlhZ19yZWdfdGFyZ2V0KHN0YXRlLVx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVx1MDAzZWZyYW1lbm8sXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU5Ni1cdFx0XHRcdFx0XHQgIHJlZyAtIHN0YXRlLVx1MDAzZXJlZ3MpO1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjAyLVx0XHRpZiAoc3RhdGUtXHUwMDNlb3V0X3N0YWNrX2FyZ19jbnQgXHUwMDI2XHUwMDI2IGFkZHIgXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2MgZW5kKSB7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTYwMzpcdFx0XHQqdGFyZ2V0ID0gZGlhZ19zdGFja19hcmdfdGFyZ2V0KHN0YXRlLVx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVx1MDAzZWZyYW1lbm8sXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYwNC1cdFx0XHRcdFx0XHRcdHJlZyAtIHN0YXRlLVx1MDAzZXN0YWNrX2FyZ19yZWdzKTtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYxMi1cdFx0XHQgICAgICBzaXplb2YoKnN0YXRlLVx1MDAzZXN0YWNrKTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNjEzOlx0XHRcdCp0YXJnZXQgPSBkaWFnX3N0YWNrX3Nsb3RfdGFyZ2V0KHN0YXRlLVx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVx1MDAzZWZyYW1lbm8sIHNwaSk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYxNC1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTY2Nj12b2lkIGJwZl9kaWFnX3JlY29yZF9zY3J1Yl9zdGFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjcwLVx0ZGlhZ19yZWNvcmRfbW9kKGVudiwgZW52LVx1MDAzZWluc25faWR4LFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2NzE6XHRcdFx0ZGlhZ19zdGFja19yYW5nZV90YXJnZXQoc3RhdGUtXHUwMDNlZGlhZ19mcmFtZV9pZCwgc3RhdGUtXHUwMDNlZnJhbWVubywgbWluX29mZiwgbWF4X29mZiksXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTY3Mi1cdFx0XHRyZWFzb24sIE5VTEwsIE5VTEwsIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNzUwPXN0YXRpYyBib29sIGRpYWdfdGFyZ2V0X21hdGNoZXMoY29uc3Qgc3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgKmV2ZW50X3RhcmdldCxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTc1NC1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNzU1Olx0aWYgKGV2ZW50X3RhcmdldC1cdTAwM2VmcmFtZV9pZCAhPSB0YXJnZXQtXHUwMDNlZnJhbWVfaWQgfHwgZXZlbnRfdGFyZ2V0LVx1MDAzZWZyYW1lbm8gIT0gdGFyZ2V0LVx1MDAzZWZyYW1lbm8pXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTc1Ni1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNzgwPXN0YXRpYyB2b2lkIGRpYWdfYnVpbGRfbGluZWFnZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2RpYWdfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE3OTAtXHRpZiAob3B0cy1cdTAwM2VzY29wZSA9PSBCUEZfRElBR19ISVNUT1JZX1NDT1BFX1JFRylcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNzkxOlx0XHR0YXJnZXQgPSBkaWFnX3JlZ190YXJnZXQob3B0cy1cdTAwM2VmcmFtZV9pZCwgb3B0cy1cdTAwM2VmcmFtZW5vLCBvcHRzLVx1MDAzZXJlZ25vKTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNzkyLVx0ZWxzZSBpZiAob3B0cy1cdTAwM2VzY29wZSA9PSBCUEZfRElBR19ISVNUT1JZX1NDT1BFX1NUQUNLX0FSRylcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNzkzOlx0XHR0YXJnZXQgPSBkaWFnX3N0YWNrX2FyZ190YXJnZXQob3B0cy1cdTAwM2VmcmFtZV9pZCwgb3B0cy1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE3OTQtXHRcdFx0XHRcdCAgICAgICBvcHRzLVx1MDAzZXN0YWNrX2FyZ19zbG90KTtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTk1Mj12b2lkIGJwZl9kaWFnX21lbV9ib3VuZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgcmVnbm8sXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE5NTktXHRcdC5mcmFtZV9pZCA9IGZyYW1lLVx1MDAzZWRpYWdfZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTk2MDpcdFx0LmZyYW1lbm8gPSBmcmFtZS1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE5NjEtXHRcdC5yZWdubyA9IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMDE9c3RhdGljIHN0cnVjdCBmdW5jX2luc3RhbmNlICpsb29rdXBfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDItXHRcdFx0XHRcdCAgICAgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAzOlx0XHRcdFx0XHQgICAgIHUzMiBmcmFtZW5vKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwOC1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDk6XHRzdWJwcm9nX3N0YXJ0ID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdC1cdTAwM2VmcmFtZVtmcmFtZW5vXS1cdTAwM2VzdWJwcm9nbm9dLnN0YXJ0O1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMDpcdGNhbGxzaXRlID0gZnJhbWVubyBcdTAwM2UgMCA/IHN0LVx1MDAzZWZyYW1lW2ZyYW1lbm9dLVx1MDAzZWNhbGxzaXRlIDogc3VicHJvZ19zdGFydDtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTEtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTEyOlx0Zm9yIChkZXB0aCA9IGZyYW1lbm87IDsgZGVwdGgtLSkge1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMy1cdFx0a2V5ID0gZGVwdGggXHUwMDNlIDAgPyBjYWxsc2l0ZSA6IHN1YnByb2dfc3RhcnQ7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTMwNj1zdGF0aWMgdm9pZCB1cGRhdGVfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlKVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zMjktXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MzMwOnN0YXRpYyBib29sIGlzX2xpdmVfYmVmb3JlKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGluc25faWR4LCB1MzIgZnJhbWVubywgdTMyIGhhbGZfc3BpKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzMS17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzMy1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozMzQ6XHRtYXNrcyA9IGdldF9mcmFtZV9tYXNrcyhpbnN0YW5jZSwgZnJhbWVubywgaW5zbl9pZHgpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzNS1cdHJldHVybiBtYXNrcyBcdTAwMjZcdTAwMjYgc3Bpc190ZXN0X2JpdChtYXNrcy1cdTAwM2VsaXZlX2JlZm9yZSwgaGFsZl9zcGkpO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0zMzg9aW50IGJwZl9saXZlX3N0YWNrX3F1ZXJ5X2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM1OC1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozNTk6Ym9vbCBicGZfc3RhY2tfc2xvdF9hbGl2ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnJhbWVubywgdTMyIGhhbGZfc3BpKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM2MC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM3Ni1cdGN1cl9kZWx0YSA9IChpbnQpY3VyZnJhbWVfaW5zdGFuY2UtXHUwMDNlZGVwdGggLSAoaW50KXEtXHUwMDNlY3VyZnJhbWU7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6Mzc3Olx0cmVsID0gZnJhbWVubyAmIzQzOyBjdXJfZGVsdGE7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzc4LVx0aWYgKHJlbCBcdTAwM2M9IGN1cmZyYW1lX2luc3RhbmNlLVx1MDAzZWRlcHRoKVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zODMtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6Mzg0Olx0Zm9yIChpID0gZnJhbWVubzsgaSBcdTAwM2MgcS1cdTAwM2VjdXJmcmFtZTsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zODUtXHRcdGluc3RhbmNlID0gcS1cdTAwM2VpbnN0YW5jZXNbaV07XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM4Ny1cdFx0XHRyZXR1cm4gdHJ1ZTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozODg6XHRcdC8qIE1hcCBhY3R1YWwgZnJhbWVubyB0byBmcmFtZSBpbmRleCB3aXRoaW4gdGhpcyBpbnN0YW5jZSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTM4OS1cdFx0ZGVsdGEgPSAoaW50KWluc3RhbmNlLVx1MDAzZWRlcHRoIC0gKGludClpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjM5MDpcdFx0cmVsID0gZnJhbWVubyAmIzQzOyBkZWx0YTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zOTEtXHRcdGlmIChyZWwgXHUwMDNlIGluc3RhbmNlLVx1MDAzZWRlcHRoKVxuLS1cbmtlcm5lbC9icGYvbG9nLmM9NjI0PXN0YXRpYyB2b2lkIHByaW50X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvbG9nLmMtNjQyLVx0aWYgKHQgPT0gUFRSX1RPX1NUQUNLKSB7XG5rZXJuZWwvYnBmL2xvZy5jOjY0MzpcdFx0aWYgKHN0YXRlLVx1MDAzZWZyYW1lbm8gIT0gcmVnLVx1MDAzZWZyYW1lbm8pXG5rZXJuZWwvYnBmL2xvZy5jOjY0NDpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7WyVkXVwmIzM0OywgcmVnLVx1MDAzZWZyYW1lbm8pO1xua2VybmVsL2JwZi9sb2cuYy02NDUtXHRcdGlmICh0bnVtX2lzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmKSkge1xuLS1cbmtlcm5lbC9icGYvbG9nLmM9NzAwPXZvaWQgcHJpbnRfdmVyaWZpZXJfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxua2VybmVsL2JwZi9sb2cuYzo3MDE6XHRcdFx0ICB1MzIgZnJhbWVubywgYm9vbCBwcmludF9hbGwpXG5rZXJuZWwvYnBmL2xvZy5jLTcwMi17XG5rZXJuZWwvYnBmL2xvZy5jOjcwMzpcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSB2c3RhdGUtXHUwMDNlZnJhbWVbZnJhbWVub107XG5rZXJuZWwvYnBmL2xvZy5jLTcwNC1cdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4tLVxua2VybmVsL2JwZi9sb2cuYy03MDYtXG5rZXJuZWwvYnBmL2xvZy5jOjcwNzpcdGlmIChzdGF0ZS1cdTAwM2VmcmFtZW5vKVxua2VybmVsL2JwZi9sb2cuYzo3MDg6XHRcdHZlcmJvc2UoZW52LCBcJiMzNDsgZnJhbWUlZDpcJiMzNDssIHN0YXRlLVx1MDAzZWZyYW1lbm8pO1xua2VybmVsL2JwZi9sb2cuYy03MDktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfQlBGX1JFRzsgaSYjNDM7JiM0MzspIHtcbi0tXG5rZXJuZWwvYnBmL2xvZy5jPTgwMz12b2lkIHByaW50X2luc25fc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxua2VybmVsL2JwZi9sb2cuYzo4MDQ6XHRcdCAgICAgIHUzMiBmcmFtZW5vKVxua2VybmVsL2JwZi9sb2cuYy04MDUte1xuLS1cbmtlcm5lbC9icGYvbG9nLmMtODEyLVx0fVxua2VybmVsL2JwZi9sb2cuYzo4MTM6XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHZzdGF0ZSwgZnJhbWVubywgZmFsc2UpO1xua2VybmVsL2JwZi9sb2cuYy04MTQtfVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NDg4PXN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00OTQtXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTU6XHQgICAgICAgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVubztcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDk2LX1cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTExMDk9c3RhdGljIGJvb2wgc3RhdGVzX21heWJlX2xvb3Bpbmcoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTEyMS1cdFx0aWYgKG1lbWNtcChcdTAwMjZmb2xkLVx1MDAzZXJlZ3NbaV0sIFx1MDAyNmZjdXItXHUwMDNlcmVnc1tpXSxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTEyMjpcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgZnJhbWVubykpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTIzLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjI3MT1zdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjgzLVx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfRlApO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIyODQ6XHRyZWdzW0JQRl9SRUdfRlBdLmZyYW1lbm8gPSBzdGF0ZS1cdTAwM2VmcmFtZW5vO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIyODUtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMjk2PXN0YXRpYyB2b2lkIGluaXRfZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyOTctXHRcdFx0ICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjI5ODpcdFx0XHQgICAgaW50IGNhbGxzaXRlLCBpbnQgZnJhbWVubywgaW50IHN1YnByb2dubylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjk5LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMzAwLVx0c3RhdGUtXHUwMDNlY2FsbHNpdGUgPSBjYWxsc2l0ZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMzAxOlx0c3RhdGUtXHUwMDNlZnJhbWVubyA9IGZyYW1lbm87XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjMwMi1cdGJwZl9kaWFnX2luaXRfZnJhbWUoZW52LCBzdGF0ZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIzMTA9c3RhdGljIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnB1c2hfYXN5bmNfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjM0NS1cdFx0XHRCUEZfTUFJTl9GVU5DIC8qIGNhbGxzaXRlICovLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIzNDY6XHRcdFx0MCAvKiBmcmFtZW5vIHdpdGhpbiB0aGlzIGNhbGxjaGFpbiAqLyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMzQ3LVx0XHRcdHN1YnByb2cgLyogc3VicHJvZyBudW1iZXIgd2l0aGluIHRoaXMgcHJvZyAqLyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMyNDg9c3RydWN0IGxpbmtlZF9yZWcge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMyNDk6XHR1OCBmcmFtZW5vO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNTAtXHR1bmlvbiB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMyNjI9c3RhdGljIHN0cnVjdCBsaW5rZWRfcmVnICpsaW5rZWRfcmVnc19wdXNoKHN0cnVjdCBsaW5rZWRfcmVncyAqcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI3My0gKiBQYWNrIG9uZSBoaXN0b3J5IGVudHJ5IGZvciBsaW5rZWQgcmVnaXN0ZXJzIGFzIDExIGJpdHMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzI3NDogKiAtIDQtYml0cyBmcmFtZW5vXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI3NS0gKiAtIDYtYml0cyBzcGlfb3JfcmVnXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMyNzg9c3RhdGljIHU2NCBsaW5rZWRfcmVnc19wYWNrKHN0cnVjdCBsaW5rZWRfcmVncyAqcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI4Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjg3Olx0XHR0bXAgfD0gZS1cdTAwM2VmcmFtZW5vO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTMyODgtXHRcdHRtcCB8PSBlLVx1MDAzZXNwaSBcdTAwM2NcdTAwM2MgTFJfU1BJX09GRjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzI5OT1zdGF0aWMgdm9pZCBsaW5rZWRfcmVnc191bnBhY2sodTY0IHZhbCwgc3RydWN0IGxpbmtlZF9yZWdzICpzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzA4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzMDk6XHRcdGUtXHUwMDNlZnJhbWVubyA9ICB2YWwgXHUwMDI2IExSX0ZSQU1FTk9fTUFTSztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzEwLVx0XHRlLVx1MDAzZXNwaSAgICAgPSAodmFsIFx1MDAzZVx1MDAzZSBMUl9TUElfT0ZGKSBcdTAwMjYgTFJfU1BJX01BU0s7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMzNDg9dm9pZCBicGZfYnRfc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgc3RydWN0IGJwZl9qbXBfaGlzdG9yeV9lbnRyeSAqaGlzdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM2MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMzYxOlx0XHRpZiAoKGUtXHUwMDNlaXNfcmVnIFx1MDAyNlx1MDAyNiBidF9pc19mcmFtZV9yZWdfc2V0KGJ0LCBlLVx1MDAzZWZyYW1lbm8sIGUtXHUwMDNlcmVnbm8pKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzNjI6XHRcdCAgICAoIWUtXHUwMDNlaXNfcmVnIFx1MDAyNlx1MDAyNiBidF9pc19mcmFtZV9zbG90X3NldChidCwgZS1cdTAwM2VmcmFtZW5vLCBlLVx1MDAzZXNwaSkpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM2My1cdFx0XHRzb21lX3ByZWNpc2UgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzc0LVx0XHRpZiAoZS1cdTAwM2Vpc19yZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzM3NTpcdFx0XHRicGZfYnRfc2V0X2ZyYW1lX3JlZyhidCwgZS1cdTAwM2VmcmFtZW5vLCBlLVx1MDAzZXJlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzc2LVx0XHRlbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzM3NzpcdFx0XHRicGZfYnRfc2V0X2ZyYW1lX3Nsb3QoYnQsIGUtXHUwMDNlZnJhbWVubywgZS1cdTAwM2VzcGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTMzNzgtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1MTk9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzUyOS1cdGludCBpbnNuX2ZsYWdzID0gSU5TTl9GX1NUQUNLX0FDQ0VTUztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTMwOlx0aW50IGhpc3Rfc3BpID0gc3BpLCBoaXN0X2ZyYW1lID0gc3RhdGUtXHUwMDNlZnJhbWVubztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTMxLVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNzk0PXN0YXRpYyBpbnQgbWFya19yZWdfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zODI4LVx0XHRpZiAoemVyb19zcGlsbF9tYXNrKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzgyOTpcdFx0XHRicGZfYnRfc2V0X2ZyYW1lX3Nsb3RfbWFzayhcdTAwMjZlbnYtXHUwMDNlYnQsIHB0cl9zdGF0ZS1cdTAwM2VmcmFtZW5vLCB6ZXJvX3NwaWxsX21hc2spO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM4MzAtXHRcdFx0cmV0dXJuIG1hcmtfY2hhaW5fcHJlY2lzaW9uX2JhdGNoKGVudiwgZW52LVx1MDAzZWN1cl9zdGF0ZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM4NjQ9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zODc1LVx0aW50IGluc25fZmxhZ3MgPSBJTlNOX0ZfU1RBQ0tfQUNDRVNTO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM4NzY6XHRpbnQgaGlzdF9zcGkgPSBzcGksIGhpc3RfZnJhbWUgPSByZWdfc3RhdGUtXHUwMDNlZnJhbWVubztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zODc3LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00MjQzPXN0YXRpYyBpbnQgbWFya19zdGFja19hcmdfcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBhcmdfaWR4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MjQ3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyNDg6XHRidF9zZXRfZnJhbWVfc3RhY2tfYXJnX3Nsb3QoXHUwMDI2ZW52LVx1MDAzZWJ0LCBjYWxsZXItXHUwMDNlZnJhbWVubywgc3BpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MjQ5LVx0cmV0dXJuIG1hcmtfY2hhaW5fcHJlY2lzaW9uX2JhdGNoKGVudiwgZW52LVx1MDAzZWN1cl9zdGF0ZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc3NDY9c3RhdGljIGludCBwcm9jZXNzX2l0ZXJfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sIGludCBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgzOS1cdFx0bWV0YS1cdTAwM2VpdGVyLnNwaSA9IHNwaTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODQwOlx0XHRtZXRhLVx1MDAzZWl0ZXIuZnJhbWVubyA9IHJlZy1cdTAwM2VmcmFtZW5vO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTc4NDEtXHRcdHVwZGF0ZV9yZWZfb2JqKFx1MDAyNm1ldGEtXHUwMDNlcmVmX29iaiwgXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc5MzM9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpnZXRfaXRlcl9mcm9tX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cl9zdCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzkzNS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzkzNjpcdGludCBpdGVyX2ZyYW1lbm8gPSBtZXRhLVx1MDAzZWl0ZXIuZnJhbWVubztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM3LVx0aW50IGl0ZXJfc3BpID0gbWV0YS1cdTAwM2VpdGVyLnNwaTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5Mzk6XHRyZXR1cm4gXHUwMDI2Y3VyX3N0LVx1MDAzZWZyYW1lW2l0ZXJfZnJhbWVub10tXHUwMDNlc3RhY2tbaXRlcl9zcGldLnNwaWxsZWRfcHRyO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTc5NDAtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04NjM2PXN0YXRpYyBpbnQgZ2V0X2NvbnN0YW50X21hcF9rZXkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODY4Ni1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjg2ODc6XHRicGZfYnRfc2V0X2ZyYW1lX3Nsb3QoXHUwMDI2ZW52LVx1MDAzZWJ0LCBrZXktXHUwMDNlZnJhbWVubywgc3BpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04Njg4LVx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb25fYmF0Y2goZW52LCBlbnYtXHUwMDNlY3VyX3N0YXRlKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTYzMj1zdGF0aWMgaW50IHNldHVwX2Z1bmNfZW50cnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2csIGludCBjYWxsc2l0ZSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTY2Mi1cdFx0XHRjYWxsc2l0ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NjYzOlx0XHRcdHN0YXRlLVx1MDAzZWN1cmZyYW1lICYjNDM7IDEgLyogZnJhbWVubyB3aXRoaW4gdGhpcyBjYWxsY2hhaW4gKi8sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTY2NC1cdFx0XHRzdWJwcm9nIC8qIHN1YnByb2cgbnVtYmVyIHdpdGhpbiB0aGlzIHByb2cgKi8pO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTE0PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwMjItXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYWxsZXI6XFxuXCYjMzQ7KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDAyMzpcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDI0LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGVlOlxcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzQ2PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MDgtXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtyZXR1cm5pbmcgZnJvbSBjYWxsZWU6XFxuXCYjMzQ7KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQwOTpcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVlLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDEwLVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7dG8gY2FsbGVyIGF0ICVkOlxcblwmIzM0OywgKmluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQxMTpcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDEyLVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDU3OD1zdGF0aWMgaW50IGNoZWNrX3JlZmVyZW5jZV9sZWFrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgZXhjZXB0aW9uX2V4aXQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNTg1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNTg2Olx0aWYgKCFleGNlcHRpb25fZXhpdCBcdTAwMjZcdTAwMjYgY3VyX2Z1bmMoZW52KS1cdTAwM2VmcmFtZW5vKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNTg3LVx0XHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY4MTI9c3RhdGljIHZvaWQgX19jb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBsaW5rZWRfcmVncyAqcmVnX3NldCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgxMzpcdFx0XHRcdCAgdTMyIGlkLCB1MzIgZnJhbWVubywgdTMyIHNwaV9vcl9yZWcsIGJvb2wgaXNfcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODE0LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MjEtXHRpZiAoZSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODIyOlx0XHRlLVx1MDAzZWZyYW1lbm8gPSBmcmFtZW5vO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODIzLVx0XHRlLVx1MDAzZWlzX3JlZyA9IGlzX3JlZztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY4Njc9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODc2LVx0XHRlID0gXHUwMDI2bGlua2VkX3JlZ3MtXHUwMDNlZW50cmllc1tpXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjg3NzpcdFx0cmVnID0gZS1cdTAwM2Vpc19yZWcgPyBcdTAwMjZ2c3RhdGUtXHUwMDNlZnJhbWVbZS1cdTAwM2VmcmFtZW5vXS1cdTAwM2VyZWdzW2UtXHUwMDNlcmVnbm9dXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY4Nzg6XHRcdFx0XHQ6IFx1MDAyNnZzdGF0ZS1cdTAwM2VmcmFtZVtlLVx1MDAzZWZyYW1lbm9dLVx1MDAzZXN0YWNrW2UtXHUwMDNlc3BpXS5zcGlsbGVkX3B0cjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjg3OS1cdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSB8fCByZWcgPT0ga25vd25fcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTQ1MD1zdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NzctXHRcdFx0QlBGX01BSU5fRlVOQyAvKiBjYWxsc2l0ZSAqLyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTQ3ODpcdFx0XHQwIC8qIGZyYW1lbm8gKi8sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NzktXHRcdFx0c3VicHJvZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzQyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZlcmlmaWVyIEJ1ZyBhbmQgaXRzIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aHJvdWdoIHRoZSBsb2dpYyBvZiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyByZWdpc3RlciBzdGF0ZSBjb21wYXJpc29ucy4gYHJlZ3NfZXhhY3RgIGlzIGEga2V5IGZ1bmN0aW9uIHVzZWQgd2hlbiB0aGUgdmVyaWZpZXIgbmVlZHMgdG8gZGV0ZXJtaW5lIGlmIHR3byByZWdpc3RlciBzdGF0ZXMgYXJlIGlkZW50aWNhbC4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGByZWdzX2V4YWN0YCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGl0IGNoZWNrcyBmb3IgZXF1YWxpdHkgb2YgdGhlIG1lbW9yeSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIgc3RhdGUgc3RydWN0cyB1cCB0byBhIGNlcnRhaW4gcG9pbnQgYW5kIHRoZW4gY2FsbHMgaGVscGVyIGZ1bmN0aW9ucyB0byBjaGVjayBJRHMuIFRoZSBpc3N1ZSBsaWVzIGluIGhvdyBgcmVnc19leGFjdGAgaXMgKnVzZWQqLgoKVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGFkZHJlc3NlcyBhIGNyaXRpY2FsIGJ1ZyBpbiBgcmVnc2FmZSgpYCByZWxhdGVkIHRvIHN0YWNrIHBvaW50ZXIgY29tcGFyaXNvbnMsIGVzcGVjaWFsbHkgd2hlbiBgZXhhY3RgIGlzIHNldCB0byBgRVhBQ1RgLiAgUHJldmlvdXNseSwgd2hlbiB0aGUgcmVnaXN0ZXIgcG9pbnRlZCB0byB0aGUgc3RhY2sgKGBQVFJfVE9fU1RBQ0tgKSwgYHJlZ3NhZmUoKWAgKnNob3VsZCogaGF2ZSBiZWVuIGNoZWNraW5nIHRoZSBgZnJhbWVub2AgZmllbGQgYXMgcGFydCBvZiB0aGUgZXF1YWxpdHkgY29tcGFyaXNvbi4gSG93ZXZlciwgd2hlbiBgZXhhY3RgIHdhcyBzZXQgdG8gYEVYQUNUYCwgc3VjaCBhcyBkdXJpbmcgbG9vcCBkZXRlY3Rpb24sIGl0IHdhcyBieXBhc3NpbmcgdGhlIGNoZWNrLCBsZWFkaW5nIHRvIGEgZmFsc2UgcG9zaXRpdmUuIFRoZSB2ZXJpZmllciB3YXMgaW5jb3JyZWN0bHkgY29uY2x1ZGluZyB0aGF0IHR3byByZWdpc3RlciBzdGF0ZXMgd2VyZSBlcXVpdmFsZW50IGV2ZW4gaWYgdGhleSBwb2ludGVkIHRvIGRpZmZlcmVudCBzdGFjayBmcmFtZXMgKGUuZy4sIGNhbGxlciB2cy4gY2FsbGVlIGZyYW1lcykuIFRoZSBzYW1lIGlzc3VlIHdhcyBoYXBwZW5pbmcgd2l0aCBzcGlsbGVkIHN0YWNrIHBvaW50ZXJzIChgU1RBQ0tfU1BJTExgKSwgYW5kIHRoZSBidWcgd2FzIHBlcm1pdHRpbmcgdGhlIHZlcmlmaWVyIHRvIHRyZWF0IGEgbG9vcCB3aXRoIGEgc3BpbGxlZCBzdGFjayBwb2ludGVyIHBvaW50aW5nIHRvIGEgZGlmZmVyZW50IGZyYW1lIGFzIGVxdWl2YWxlbnQgdG8gYW5vdGhlciBzdGF0ZSwgbGVhZGluZyB0byBpbmNvcnJlY3Qgc3RhdGUgcHJ1bmluZyBhbmQgbG9vcCBkZXRlY3Rpb24uCgpTbywgdGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCByZS1pbnRyb2R1Y2VzIHRoZSBtaXNzaW5nIGBmcmFtZW5vYCBjaGVjayB3aXRoaW4gdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbiBhbmQgcmVzdG9yZXMgdGhlIGAmYW1wOyZhbXA7IHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AgY2hlY2sgaW4gdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbi4gIEl0ICpzaG91bGQqIGhhdmUgYmVlbiB0aGVyZSBhbGwgYWxvbmcuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyAgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGByb2xkLSZndDtmcmFtZW5vYCBhbmQgYHJjdXItJmd0O2ZyYW1lbm9gIGFyZSBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGByZWdzX2V4YWN0YCBpcyBjYWxsZWQuIExvb2tpbmcgaW50byB3aGVyZSBgYnBmX3JlZ19zdGF0ZWAgc3RydWN0cyAod2hpY2ggY29udGFpbiB0aGUgYGZyYW1lbm9gIGZpZWxkKSBhcmUgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZXkgYXJlIGVpdGhlciBwYXJ0cyBvZiBgYnBmX2Z1bmNfc3RhdGVgIChmb3VuZCBpbiB0aGUgYHJlZ3NbTUFYX0JQRl9SRUddYCBhcnJheSBvciB0aGUgc3RhY2sgc2xvdHMsIGBzdGFja1tNQVhfQlBGX1NUQUNLIC8gQlBGX1JFR19TSVpFXS5zcGlsbGVkX3B0cmAgb3IgYHN0YWNrX2FyZ19yZWdzYCkuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIGBicGZfcmVnX3N0YXRlYCBpbnN0YW5jZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGluaXRpYWxpemF0aW9uIG9yIGNsZWFyaW5nIHBhdHRlcm5zIGZvciB0aGVzZSBzdHJ1Y3RzIHRvIHZlcmlmeSB0aGF0IHRoZSBgZnJhbWVub2AgZmllbGQgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGFjY2Vzc2VkLiAgSSYjMzk7bGwgc3RhcnQgZ3JlcHBpbmcgZm9yIGhvdyBgZnJhbWVub2AgaXMgaW5pdGlhbGl6ZWQgb3IgaG93IGBicGZfcmVnX3N0YXRlYCBpcyBjbGVhcmVkL2luaXRpYWxpemVkIHdpdGhpbiB0aGUgdmVyaWZpZXIgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ3NcXFtCUEZfUkVHX0ZQXFxdXFwuZnJhbWVubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTIyNzE9c3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjI4My1cdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHX0ZQKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMjg0Olx0cmVnc1tCUEZfUkVHX0ZQXS5mcmFtZW5vID0gc3RhdGUtXHUwMDNlZnJhbWVubztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjg1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczMTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBJbml0aWFsIFN0YXRlcyoqCgpPa2F5LCBzbyBiZWZvcmUgZGl2aW5nIGRlZXBlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbmFsIHN0YXRlcyBhcmUgc2V0IGNvcnJlY3RseS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgcm91dGluZSwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaW5pdF9mdW5jX3N0YXRlYCBhbmQgYGluaXRfcmVnX3N0YXRlYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEFyZSB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgc3RhdGUgYW5kIHRoZSByZWdpc3RlciB2YWx1ZXMgc2V0IHRvIHdoYXQgSSBleHBlY3QgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHBhcnRpY3VsYXIgb3BlcmF0aW9uPyBJdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgc3Vic2VxdWVudCBsb2dpYyB0byB3b3JrIGFzIGludGVuZGVkLCBhbmQgYW55IGVycm9ycyBoZXJlIHdpbGwgcmlwcGxlIHRocm91Z2ggdGhlIGV4ZWN1dGlvbi4gSXQmIzM5O3MgYSBxdWljayBzYW5pdHkgY2hlY2sgYnV0IGFuIGltcG9ydGFudCBvbmUgdG8gYXZvaWQgd2FzdGVkIHRpbWUgdHJhY2tpbmcgZG93biBkb3duc3RyZWFtIGlzc3Vlcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVzZSBpbml0aWFsaXphdGlvbiBzdGVwcyBhcmUgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjcwOlx0XG4yMjcxOlx0c3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjIyNzI6XHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKVxuMjI3MzpcdHtcbjIyNzQ6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gc3RhdGUtXHUwMDNlcmVncztcbjIyNzU6XHRcdGludCBpO1xuMjI3NjpcdFxuMjI3NzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9SRUc7IGkmIzQzOyYjNDM7KSB7XG4yMjc4Olx0XHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbaV0pO1xuMjI3OTpcdFx0fVxuMjI4MDpcdFxuMjI4MTpcdFx0LyogZnJhbWUgcG9pbnRlciAqL1xuMjI4MjpcdFx0cmVnc1tCUEZfUkVHX0ZQXS50eXBlID0gUFRSX1RPX1NUQUNLO1xuMjI4MzpcdFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfRlApO1xuMjI4NDpcdFx0cmVnc1tCUEZfUkVHX0ZQXS5mcmFtZW5vID0gc3RhdGUtXHUwMDNlZnJhbWVubztcbjIyODU6XHR9XG4yMjg2Olx0XG4yMjg3Olx0c3RhdGljIHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJldHZhbF9yYW5nZShzMzIgbWludmFsLCBzMzIgbWF4dmFsKVxuMjI4ODpcdHtcbjIyODk6XHRcdC8qXG4yMjkwOlx0XHQgKiByZXR1cm5fMzJiaXQgaXMgc2V0IHRvIGZhbHNlIGJ5IGRlZmF1bHQgYW5kIHNldCBleHBsaWNpdGx5XG4yMjkxOlx0XHQgKiBieSB0aGUgY2FsbGVyIHdoZW4gbmVjZXNzYXJ5LlxuMjI5MjpcdFx0ICovXG4yMjkzOlx0XHRyZXR1cm4gKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlKXsgbWludmFsLCBtYXh2YWwsIGZhbHNlIH07XG4yMjk0Olx0fVxuMjI5NTpcdFxuMjI5NjpcdHN0YXRpYyB2b2lkIGluaXRfZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjI5NzpcdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLFxuMjI5ODpcdFx0XHRcdCAgICBpbnQgY2FsbHNpdGUsIGludCBmcmFtZW5vLCBpbnQgc3VicHJvZ25vKVxuMjI5OTpcdHtcbjIzMDA6XHRcdHN0YXRlLVx1MDAzZWNhbGxzaXRlID0gY2FsbHNpdGU7XG4yMzAxOlx0XHRzdGF0ZS1cdTAwM2VmcmFtZW5vID0gZnJhbWVubztcbjIzMDI6XHRcdGJwZl9kaWFnX2luaXRfZnJhbWUoZW52LCBzdGF0ZSk7XG4yMzAzOlx0XHRzdGF0ZS1cdTAwM2VzdWJwcm9nbm8gPSBzdWJwcm9nbm87XG4yMzA0Olx0XHRzdGF0ZS1cdTAwM2VjYWxsYmFja19yZXRfcmFuZ2UgPSByZXR2YWxfcmFuZ2UoMCwgMCk7XG4yMzA1Olx0XHRpbml0X3JlZ19zdGF0ZShlbnYsIHN0YXRlKTtcbjIzMDY6XHRcdG1hcmtfdmVyaWZpZXJfc3RhdGVfc2NyYXRjaGVkKGVudik7XG4yMzA3Olx0fVxuMjMwODpcdFxuMjMwOTpcdC8qIFNpbWlsYXIgdG8gcHVzaF9zdGFjaygpLCBidXQgZm9yIGFzeW5jIGNhbGxiYWNrcyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE1NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGVjb2RpbmcgYGJwZl9tYXJrX3JlZ19ub3RfaW5pdGAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIGBicGZfbWFya19yZWdfbm90X2luaXRgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLCBsaWtlbHkgZUJQRiwgYW5kIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgc29ydCBvZiBpbml0aWFsaXphdGlvbiBvciByZWdpc3RlciB0cmFja2luZyBpc3N1ZS4gVGhlICYjMzQ7bm90IGluaXQmIzM0OyBwYXJ0IGlzIHRoZSBrZXkuIEl0IHNpZ25pZmllcyBhIHN0YXRlIHdoZXJlIGEgcGFydGljdWxhciBCUEYgcmVnaXN0ZXIgaGFzbiYjMzk7dCBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLiBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIGZvciB1bmRlZmluZWQgYmVoYXZpb3IgYW5kLCBmcmFua2x5LCBjcmFzaGVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSBzY2VuYXJpb3MuIElzIHRoaXMgcmVsYXRlZCB0byBhIHNwZWNpZmljIEJQRiBoZWxwZXIgZnVuY3Rpb24/IE9yIHBlcmhhcHMgYSBnZW5lcmFsIGlzc3VlIGluIHRoZSB2ZXJpZmllciB3aGVyZSBpdCYjMzk7cyBub3QgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCByZWdpc3RlciB1c2FnZSBlYXJseSBlbm91Z2g/IEkgaGF2ZSB0byByZW1lbWJlciB0aGUgdmVyaWZpZXIgaXMgKnN1cHBvc2VkKiB0byBjYXRjaCB0aGVzZSwgc28gdGhpcyBjb3VsZCBtZWFuOgoKKiAgICoqQSB2ZXJpZmllciBidWc6KiogQSBmbGF3IGluIHRoZSBzdGF0aWMgYW5hbHlzaXMgb2YgdGhlIEJQRiB2ZXJpZmllciBhbGxvd3MgdGhlIHByb2dyYW0gdG8gcGFzcyB2YWxpZGF0aW9uIHdpdGggdW5pbml0aWFsaXplZCByZWdpc3RlcnMuIFRoaXMgaXMgYmFkLCAqdmVyeSogYmFkLiBJdCBjb3VsZCBsZWFkIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBpZiBleHBsb2l0ZWQuCiogICAqKkVkZ2UgY2FzZXM6KiogUGVyaGFwcyBhIGNvbXBsZXggY29udHJvbCBmbG93IHBhdGggdGhhdCYjMzk7cyBieXBhc3NpbmcgdGhlIHZlcmlmaWVyJiMzOTtzIGNoZWNrcy4gVGhlIHZlcmlmaWVyIG1pZ2h0IHN0cnVnZ2xlIHdpdGggaW50cmljYXRlIGxvb3BzIG9yIGNvbmRpdGlvbmFsIGp1bXBzLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNhc2VzIGFyZSBoYW5kbGVkIGJ5IHRoZSB2ZXJpZmllciYjMzk7cyBhbmFseXNpcywgYW5kIHdoZXRoZXIgd2UmIzM5O3JlIHVzaW5nIGFueSB0cmlja3MgdGhhdCBtaWdodCB0aHJvdyBpdCBvZmYuCiogICAqKkNvbXBpbGVyIE9wdGltaXphdGlvbjoqKiBNaWdodCBhIGNlcnRhaW4gY29tcGlsZXIgb3B0aW1pemF0aW9uIGJlIGludHJvZHVjaW5nIHRoaXMgYnVnPyBUaGlzIGlzIGEgbGl0dGxlIGxlc3MgY29tbW9uLCBidXQgaXQmIzM5O3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlLgoqICAgKipEb2N1bWVudGF0aW9uIG9yIEFzc3VtcHRpb25zOioqIENvdWxkIHRoZXJlIGJlIHNvbWUgaW5jb3JyZWN0IGRvY3VtZW50YXRpb24sIG9yIGFuIHVud3JpdHRlbiBhc3N1bXB0aW9uIGluIHRoZSBjb2RlIHRoYXQmIzM5O3MgbGVhZCB0byB0aGUgYnVnPwoqICAgKipVc2VyIEVycm9yOioqIEluIGEgdXNlci1wcm92aWRlZCBCUEYgcHJvZ3JhbSwgc29tZSBiYWQgcHJvZ3JhbSBtaWdodCBiZSBnZW5lcmF0aW5nIHRoaXMgaXNzdWUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZSBpc3N1ZS4KCkkmIzM5O20gbm93IHRoaW5raW5nIGFib3V0IHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBBcmUgdGhlcmUgYW55IGNsdWVzIGluIHRoZSBzdGFjayB0cmFjZSwgb3IgYW55IHJlbGF0ZWQgZXJyb3IgbWVzc2FnZXM/IFdoYXQgQlBGIHByb2dyYW0gaXMgdHJpZ2dlcmluZyB0aGlzPyBVbmRlcnN0YW5kaW5nIHRoZSBwcm9ncmFtJiMzOTtzIHN0cnVjdHVyZSBhbmQgdGhlIHNwZWNpZmljIGluc3RydWN0aW9uIHNlcXVlbmNlIHdoZXJlIHRoaXMgZmFpbHVyZSBvY2N1cnMgaXMgY3J1Y2lhbC4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGRpZyBkZWVwIGludG8gdGhlIHZlcmlmaWVyJiMzOTtzIGNvZGUsIG9yIGEgZGlzYXNzZW1ibGVyIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgdGhpcy4gSSYjMzk7bSBsaWtlbHkgZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHJlZ2lzdGVyIHVzYWdlLCBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIHRoZSBmbG93IG9mIGRhdGEgd2l0aGluIHRoZSBCUEYgcHJvZ3JhbS4KCk92ZXJhbGwsIGBicGZfbWFya19yZWdfbm90X2luaXRgIGlzIGEgcmVkIGZsYWcuIEl0IHBvaW50cyB0byBhIGNyaXRpY2FsIGVycm9yLCBhbmQgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBuZWVkcyBpbW1lZGlhdGUgYW5kIGNhcmVmdWwgYXR0ZW50aW9uLiBJIG5lZWQgdG8gcmVwcm9kdWNlIHRoZSBpc3N1ZSwgYW5hbHl6ZSB0aGUgZmFpbGluZyBCUEYgcHJvZ3JhbSwgYW5kIHRoZW4gZmlndXJlIG91dCAqd2h5KiB0aGUgdmVyaWZpZXIgaXMgbGV0dGluZyB0aGlzIHNsaXAgdGhyb3VnaC4gVGhlbiwgdGltZSB0byBhcHBseSB0aGUgZml4IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGJwZl9tYXJrX3JlZ19ub3RfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTIyMTU9c3RhdGljIGludCBfX21hcmtfcmVnX3MzMl9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjM0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIyMzU6dm9pZCBicGZfbWFya19yZWdfbm90X2luaXQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjM2LVx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTU2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYnBmX21hcmtfcmVnX25vdF9pbml0YCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiByZWdpc3RlcnMgYXJlIGhhbmRsZWQgYW5kIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSBpbW1lZGlhdGVseSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byB0aGUgcHJldmVudGlvbiBvZiB1c2luZyB1bmluaXRpYWxpemVkIHJlZ2lzdGVycy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBhbmQgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgYW55IHJvYnVzdCBCUEYgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBhbmQgc2FmZXR5IG9mIHRoZSBwcm9ncmFtcyBydW5uaW5nIGluIHRoZSBCUEYgVk0uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiBpdHMgdXNlLCBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIG9wZXJhdGluZyBvbi4gSXMgaXQgY2hlY2tpbmcgcmVnaXN0ZXJzIGFmdGVyIHNwZWNpZmljIG9wZXJhdGlvbnM/IElzIGl0IGNhbGxlZCBkdXJpbmcgcHJvZ3JhbSBsb2FkaW5nIG9yIHZlcmlmaWNhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIHRyaWdnZXJlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBhbmQgc3RhcnQgbWFwcGluZyBpdCBvdXQgaW4gbXkgaGVhZCwgdGhpbmtpbmcgYWJvdXQgcG9zc2libGUgZWRnZSBjYXNlcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMzU6XHR2b2lkIGJwZl9tYXJrX3JlZ19ub3RfaW5pdChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjIzNjpcdFx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4yMjM3Olx0e1xuMjIzODpcdFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcbjIyMzk6XHRcdHJlZy1cdTAwM2V0eXBlID0gTk9UX0lOSVQ7XG4yMjQwOlx0fVxuMjI0MTpcdFxuMjI0MjpcdHN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4yMjQzOlx0XHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubyxcbjIyNDQ6XHRcdFx0XHQgICBlbnVtIGJwZl9yZWdfdHlwZSByZWdfdHlwZSxcbjIyNDU6XHRcdFx0XHQgICBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQsXG4yMjQ2Olx0XHRcdFx0ICAgZW51bSBicGZfdHlwZV9mbGFnIGZsYWcpXG4yMjQ3Olx0e1xuMjI0ODpcdFx0c3dpdGNoIChyZWdfdHlwZSkge1xuMjI0OTpcdFx0Y2FzZSBTQ0FMQVJfVkFMVUU6XG4yMjUwOlx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZWdubyk7XG4yMjUxOlx0XHRcdHJldHVybiAwO1xuMjI1MjpcdFx0Y2FzZSBQVFJfVE9fQlRGX0lEOlxuMjI1MzpcdFx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgcmVnbm8pO1xuMjI1NDpcdFx0XHRyZWdzW3JlZ25vXS50eXBlID0gUFRSX1RPX0JURl9JRCB8IGZsYWc7XG4yMjU1Olx0XHRcdHJlZ3NbcmVnbm9dLmJ0ZiA9IGJ0ZjtcbjIyNTY6XHRcdFx0cmVnc1tyZWdub10uYnRmX2lkID0gYnRmX2lkO1xuMjI1NzpcdFx0XHRpZiAodHlwZV9tYXlfYmVfbnVsbChmbGFnKSlcbjIyNTg6XHRcdFx0XHRyZWdzW3JlZ25vXS5pZCA9ICYjNDM7JiM0MztlbnYtXHUwMDNlaWRfZ2VuO1xuMjI1OTpcdFx0XHRyZXR1cm4gMDtcbjIyNjA6XHRcdGNhc2UgUFRSX1RPX01FTTpcbjIyNjE6XHRcdFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIHJlZ25vKTtcbjIyNjI6XHRcdFx0cmVnc1tyZWdub10udHlwZSA9IFBUUl9UT19NRU0gfCBmbGFnO1xuMjI2MzpcdFx0XHRyZWdzW3JlZ25vXS5tZW1fc2l6ZSA9IDA7XG4yMjY0Olx0XHRcdHJldHVybiAwO1xuMjI2NTpcdFx0ZGVmYXVsdDpcbjIyNjY6XHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCYjMzQ7dW5leHBlY3RlZCByZWdfdHlwZSAlZCBpbiAlc1xcblwmIzM0OywgcmVnX3R5cGUsIF9fZnVuY19fKTtcbjIyNjc6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yMjY4Olx0XHR9XG4yMjY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTgxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBfX21hcmtfcmVnX3Vua25vd25gIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgX19tYXJrX3JlZ191bmtub3duYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBTZWVpbmcgdGhpcyBuYW1lLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGl0cyByb2xlIGluIHJlZ2lzdGVyIG1hbmFnZW1lbnQgb3IgdHJhY2tpbmcuIFRoZSAmIzM0O3Vua25vd24mIzM0OyBwYXJ0IGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgYSBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHJlZ2lzdGVycyB3aG9zZSBzdGF0ZSBpc24mIzM5O3QgcHJlY2lzZWx5IGRlZmluZWQgYXQgYSBjZXJ0YWluIHBvaW50LCBvciBwZXJoYXBzIGluaXRpYWxpemF0aW9uLCBvciB3aXRoaW4gYSBzcGVjaWZpYyBjb250cm9sIGZsb3cuCgpJJiMzOTttIHRoaW5raW5nLCB0aGlzIGlzIHByb2JhYmx5IGltcGxlbWVudGVkIGF0IGEgZmFpcmx5IGxvdyBsZXZlbC4gV2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggdGhpbmdzIGxpa2Ugb3B0aW1pemluZyBjb21waWxlciBwYXNzZXMsIG9yIHBlcmhhcHMgZXZlbiBpbiB0aGUgY29yZSBvZiBhbiBlbXVsYXRvciBvciB2aXJ0dWFsIG1hY2hpbmUuIEdpdmVuIHRoZSBlbXBoYXNpcyBvbiAmIzM0O21hcmssJiMzNDsgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGZsYWcgb3IgYml0bWFzayB0byBiZSBtYW5pcHVsYXRlZCwgaW5kaWNhdGluZyB0aGF0IHRoZSByZWdpc3RlciYjMzk7cyBjb250ZW50cyBhcmUgaW5kZXRlcm1pbmF0ZSBvciBpbnZhbGlkIGZvciBhIHBhcnRpY3VsYXIgb3BlcmF0aW9uLgoKVGhlIGtleSBxdWVzdGlvbnMgaW1tZWRpYXRlbHkgZm9ybWluZyBpbiBteSBoZWFkIGFyZTogV2hhdCB0cmlnZ2VycyB0aGlzIG1hcmtpbmc/IElzIGl0IGR1ZSB0byBjb250cm9sIGZsb3cgcGF0aHMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBwZXJoYXBzIHJlZ2lzdGVyIGFsaWFzaW5nIHRoYXQgaXNuJiMzOTt0IGNsZWFubHkgaGFuZGxlZD8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciByZWdpc3RlciBhbmFseXNpcyB0ZWNobmlxdWVzIGxpa2UgbGl2ZW5lc3MgYW5hbHlzaXMgb3IgcmVnaXN0ZXIgYWxsb2NhdGlvbj8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgb2Z0ZW4sIGlzIGl0IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gQXJlIHRoZXJlIG90aGVyIHJlbGF0ZWQgcm91dGluZXMsIGUuZy4gYF9fdW5tYXJrX3JlZ19rbm93bmA/IElzIHRoZXJlIGEgY29udGV4dCBzd2l0Y2gsIG9yIGZ1bmN0aW9uIGNhbGwgaGVyZT8gSG93IGFyZSB0aGVzZSByZWdpc3RlcnMgbGF0ZXIgYmVpbmcgdXNlZD8gQXJlIHRoZXJlIHJ1bnRpbWUgY2hlY2tzPyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgZ2VuZXJhdGUgY29tcGlsZSB0aW1lIGVycm9ycz8gSXMgaXQgZ2VuZXJhdGluZyBhIHdhcm5pbmc/IFRoaXMgbXVzdCBiZSBpbXBvcnRhbnQuCgpJbiBzaG9ydCwgbXkgbWluZCBpcyBhbHJlYWR5IGZvcm11bGF0aW5nIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgYWNjdXJhY3ksIGFuZCBob3cgdGhpcyBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoYXRldmVyIHN5c3RlbSBvciB0b29sIHdlJiMzOTtyZSBleGFtaW5pbmcuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBlZGdlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIF9fbWFya19yZWdfdW5rbm93biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTc1Mz1zdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzcyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc3MzpzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzQtXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTkxPXZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyMDEtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjIwMjpzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjAzLVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUxMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyB6ZXJvIGluIG9uIHRob3NlIGNydWNpYWwgbGluZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGxpbmVzIDIyMDAtMjIzMC4gQmFzZWQgb24gcHJldmlvdXMgZGVidWdnaW5nIHNlc3Npb25zLCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBsb2dpYyByZXNwb25zaWJsZSBmb3IgWyoqKkluc2VydCBZb3VyIEtub3dsZWRnZSBvZiB3aGF0IHRob3NlIGxpbmVzIGxpa2VseSByZWxhdGUgdG8gaGVyZSwgZS5nLiwgcmVnaXN0ZXIgdmFsaWRhdGlvbiwgbG9vcCBkZXRlY3Rpb24sIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGhhbmRsaW5nLCBvciBhIHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24gcGF0dGVybioqKl0uIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMgYW5kIGNvZGUgZmxvdy4gSSB3YW50IHRvIGNoZWNrIGZvciBlZGdlIGNhc2VzLCBwb3RlbnRpYWwgZmxhd3MsIG9yIGV2ZW4ganVzdCBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gd29ya3Mgd2l0aGluIHRoZSB2ZXJpZmllciYjMzk7cyBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlIGltcGxlbWVudGF0aW9uIGFjY291bnRzIGZvciBhbGwgcmVsZXZhbnQgc2NlbmFyaW9zIGFuZCBwb3RlbnRpYWxseSBsb29rIHRvIG9wdGltaXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIwMDpcdCAqIGluaXRpYWxpemUgLnByZWNpc2UgYXMgdHJ1ZSB3aGVuIG5vdCBicGYgY2FwYWJsZS5cbjIyMDE6XHQgKi9cbjIyMDI6XHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjIyMDM6XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbjIyMDQ6XHR7XG4yMjA1Olx0XHRicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UocmVnKTtcbjIyMDY6XHRcdHJlZy1cdTAwM2VwcmVjaXNlID0gIWVudi1cdTAwM2VicGZfY2FwYWJsZTtcbjIyMDc6XHR9XG4yMjA4Olx0XG4yMjA5Olx0c3RhdGljIHZvaWQgbWFya19yZWdfdW5rbm93bihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjIxMDpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubylcbjIyMTE6XHR7XG4yMjEyOlx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWdzICYjNDM7IHJlZ25vKTtcbjIyMTM6XHR9XG4yMjE0Olx0XG4yMjE1Olx0c3RhdGljIGludCBfX21hcmtfcmVnX3MzMl9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjIxNjpcdFx0XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXG4yMjE3Olx0XHRcdFx0XHR1MzIgcmVnbm8sXG4yMjE4Olx0XHRcdFx0XHRzMzIgczMyX21pbixcbjIyMTk6XHRcdFx0XHRcdHMzMiBzMzJfbWF4KVxuMjIyMDpcdHtcbjIyMjE6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSByZWdzICYjNDM7IHJlZ25vO1xuMjIyMjpcdFxuMjIyMzpcdFx0cmVnX3NldF9zcmFuZ2UzMihyZWcsXG4yMjI0Olx0XHRcdFx0IG1heF90KHMzMiwgcmVnX3MzMl9taW4ocmVnKSwgczMyX21pbiksXG4yMjI1Olx0XHRcdFx0IG1pbl90KHMzMiwgcmVnX3MzMl9tYXgocmVnKSwgczMyX21heCkpO1xuMjIyNjpcdFx0cmVnX3NldF9zcmFuZ2U2NChyZWcsXG4yMjI3Olx0XHRcdFx0IG1heF90KHM2NCwgcmVnX3NtaW4ocmVnKSwgczMyX21pbiksXG4yMjI4Olx0XHRcdFx0IG1pbl90KHM2NCwgcmVnX3NtYXgocmVnKSwgczMyX21heCkpO1xuMjIyOTpcdFxuMjIzMDpcdFx0cmVnX2JvdW5kc19zeW5jKHJlZyk7XG4yMjMxOlx0XG4yMjMyOlx0XHRyZXR1cm4gcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soZW52LCByZWcsIFwmIzM0O3MzMl9yYW5nZVwmIzM0Oyk7XG4yMjMzOlx0fVxuMjIzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTM2OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlYCwgc3VtbWFyaXplZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqTXkgUGVyc3BlY3RpdmUgb24gYGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZWAqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2VgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgY29yZSBvZiBCUEYgcHJvZ3JhbSBhbmFseXNpcy4gVGhpcyBmdW5jdGlvbiwgb3Igd2hhdGV2ZXIgaXQgaXMsIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBjcnVjaWFsIGNvbXBvbmVudCBpbiBoYW5kbGluZyAqdW5jZXJ0YWludHkqIGR1cmluZyByZWdpc3RlciBzdGF0ZSB0cmFja2luZywgYSBwbGFjZSB3aGVyZSB0aGluZ3MgYXJlbiYjMzk7dCBwZXJmZWN0bHkgcHJlZGljdGFibGUuICBUaGUgJiMzNDt1bmtub3duJiMzNDsgcGFydCBpcyBjbGVhciDigJMgd2UmIzM5O3ZlIGVuY291bnRlcmVkIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBleGFjdCB2YWx1ZSBvZiBhIHJlZ2lzdGVyIGNhbiYjMzk7dCBiZSBwaW5uZWQgZG93biBkZWZpbml0aXZlbHkuIFRoaXMgY291bGQgYmUgZHVlIHRvIGEgY29tcGxleCBjb25kaXRpb25hbCBwYXRoLCBhbiBleHRlcm5hbCBpbnB1dCwgb3IgZXZlbiBqdXN0IHNvbWUgZGVsaWJlcmF0ZSBvYmZ1c2NhdGlvbiB3aXRoaW4gdGhlIHByb2dyYW0uCgpUaGUgJiMzNDtpbXByZWNpc2UmIzM0OyBsYWJlbCBpcyBhbHNvIHZlcnkgdGVsbGluZy4gSXQgc3VnZ2VzdHMgd2UgYXJlbiYjMzk7dCB0aHJvd2luZyBvdXIgaGFuZHMgdXAgaW4gdGhlIGFpciBhbmQgZ2l2aW5nIHVwIG9uIHRyYWNraW5nIHRoaXMgcmVnaXN0ZXIgZW50aXJlbHkuIEluc3RlYWQsIHdlJiMzOTtyZSBsaWtlbHkgYWRvcHRpbmcgYSBjb25zZXJ2YXRpdmUsIG92ZXItYXBwcm94aW1hdGluZyBzdHJhdGVneS4gIFdlJiMzOTtyZSBhY2tub3dsZWRnaW5nIHRoZSBhbWJpZ3VpdHksIHllcywgYnV0IHdlJiMzOTtyZSB0cnlpbmcgdG8gY29udGFpbiBpdC4gVGhlIHByb2dyYW0gbWlnaHQgY29udGludWUgdG8gb3BlcmF0ZSBvbiB0aGUgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkIHRvIHByb3ZpZGUgYSB2YWx1ZSBvciBjb25zdHJhaW50IGZvciBpdCwgZXZlbiBpZiB0aGF0IHZhbHVlIGlzIGV4dHJlbWVseSBicm9hZC4KCkZyb20gYSBwcmFjdGljYWwgYW5nbGUsIEkmIzM5O2QgYmV0IHRoaXMgZnVuY3Rpb24gaXMgZXNzZW50aWFsIGZvciBzYWZldHkgYW5kIGNvcnJlY3RuZXNzLiBUaGUgZ29hbCBpc24mIzM5O3QgbmVjZXNzYXJpbHkgdG8gKnNvbHZlKiBmb3IgdGhlIGV4YWN0IHJlZ2lzdGVyIHZhbHVlLCBidXQgdG8gcHJldmVudCBkYW5nZXJvdXMgYmVoYXZpb3IgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGxlYXZpbmcgdGhlIHZhbHVlIHVuaW5pdGlhbGl6ZWQgb3IgaW1wcm9wZXJseSBjb25zdHJhaW5lZC4gRm9yIGluc3RhbmNlLCB5b3UgY291bGQgc2VlIGl0IHVzZWQgdG86CgoqICAgKipGbGFnIGEgcmVnaXN0ZXIgZm9yIGEgbW9yZSBpbi1kZXB0aCBhbmFseXNpcyBsYXRlcjoqKiB0aGUgJiMzNDtpbXByZWNpc2UmIzM0OyBtYXJraW5nIGNvdWxkIHRyaWdnZXIgbW9yZSBzb3BoaXN0aWNhdGVkIHN5bWJvbGljIGV4ZWN1dGlvbiBpZiBlbmFibGVkCiogICAqKlByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uOioqIFRoaXMgbWlnaHQgbWVhbiBsaW1pdGluZyB3aGF0IG9wZXJhdGlvbnMgdGhhdCByZWdpc3RlciBjYW4gdGFrZSBwYXJ0IGluIGR1cmluZyBhIHNhZmV0eSBjaGVjaywgcHJldmVudGluZyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MsIG9yIGFyaXRobWV0aWMgb3ZlcmZsb3dzLgoqICAgKipFc3RhYmxpc2ggYSBib3VuZGFyeSBmb3IgdmFsdWUgcmFuZ2VzOioqIFRoaXMgcHJldmVudHMgdW5leHBlY3RlZCBiZWhhdmlvciwgYW5kIGFsbG93cyBmdXJ0aGVyIG9wZXJhdGlvbnMgb24gdGhlIHJlZ2lzdGVyIHdpdGggcmVhc29uYWJsZSBjb25zdHJhaW50cwoqICAgKipFbmZvcmNlIHNhZmV0eSBjb25zdHJhaW50czoqKiBQcmV2ZW50cyBtYWxpY2lvdXMgaW5wdXRzIHRvIHRoZSBCUEYgbWFjaGluZS4KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgY2FsbGVkIGZyb20gd2l0aGluIEJQRiB2ZXJpZmllci4gVGhlIHZlcmlmaWVyIGhhcyB0byBiZSBleHRyZW1lbHkgY2F1dGlvdXMgYW5kIGVyciBvbiB0aGUgc2lkZSBvZiBzYWZldHkgaW4gdGhlIGZhY2Ugb2YgdW5jZXJ0YWludHkuIFRoYXQmIzM5O3MgaXRzIGpvYiEgU28sIGBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2VgIGlzIGEgc21hbGwgYnV0IGNyaXRpY2FsIGNvZyBpbiB0aGF0IG1hY2hpbmUuIEl0IHByb3ZpZGVzIGEgbWVhbnMgdG8gYWNjb3VudCBmb3IgYW1iaWd1aXR5IHdoaWxlIHN0aWxsIG1haW50YWluaW5nIGNvbnRyb2wgb3ZlciB0aGUgcHJvZ3JhbSYjMzk7cyBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTg1Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjE4NjpcdFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcbjIxODc6XHRcdHJldHVybiAwO1xuMjE4ODpcdH1cbjIxODk6XHRcbjIxOTA6XHQvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xuMjE5MTpcdHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4yMTkyOlx0e1xuMjE5MzpcdFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcbjIxOTQ6XHRcdHJlZy1cdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xuMjE5NTpcdFx0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XG4yMTk2Olx0XHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xuMjE5NzpcdH1cbjIxOTg6XHRcbjIxOTk6XHQvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLFxuMjIwMDpcdCAqIGluaXRpYWxpemUgLnByZWNpc2UgYXMgdHJ1ZSB3aGVuIG5vdCBicGYgY2FwYWJsZS5cbjIyMDE6XHQgKi9cbjIyMDI6XHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjIyMDM6XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbjIyMDQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjc1CgkJCQkJCQlvdXRwdXQ6IDIyMwoJCQkJCQkJdGhvdWdodHM6IDE5NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQlBGIFZlcmlmaWVyIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGV2ZXJ5IGBicGZfcmVnX3N0YXRlYCBzdGFydHMgemVyb2VkIG91dCwgc28gYGZyYW1lbm9gIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQuIEkgc2VlIHRoYXQgYHN0YXRlc19tYXliZV9sb29waW5nYCBoYXMgYSBgbWVtY21wYCB1cCB0byBgZnJhbWVub2AsIHdoaWNoIHNlZW1zIHJlbGV2YW50LiBBbmQgSSBub3RpY2UgdGhhdCBgcmVnc19leGFjdGAgaXMgc3VwcG9zZWQgdG8gY2hlY2sgaWYgdHdvIHJlZ2lzdGVycyBhcmUgZXhhY3RseSB0aGUgc2FtZS4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgb25seSBjaGVja2VkIHVwIHRvIHRoZSBgaWRgIGZpZWxkLiBJdCBza2lwcGVkIGNvbXBhcmluZyBgZnJhbWVub2AgaW4gc29tZSBrZXkgc2l0dWF0aW9ucy4gRm9yIGV4YW1wbGUsIGluIGByZWdzYWZlYCBmb3IgYFBUUl9UT19TVEFDS2AsIGFuZCB3aGVuIGBleGFjdCA9PSBFWEFDVGAgZHVyaW5nIGxvb3AgZGV0ZWN0aW9uLiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50ISBUaGUgcGF0Y2ggYXBwZWFycyB0byBhZGRyZXNzIHRoZSBmYWN0IHRoYXQgdGhlIHZlcmlmaWVyIHdhcyBtaXNzaW5nIHRoZSBjaGVjayBmb3IgYGZyYW1lbm9gIGluIGByZWdzX2V4YWN0YC4gTm93LCBpdCBlbnN1cmVzIHRoYXQgc3RhY2sgZnJhbWUgZGlmZmVyZW5jZXMgYXJlIGNhdWdodCBjb3JyZWN0bHkuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgY291bGQgdGhpcyBidWcgb3IgdGhlIGZpeCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGtlcm5lbD8gV2hhdCB3YXMgdGhlIGJ1ZyBkb2luZz8gV2VsbCwgdGhlIHRlc3QgY2FzZSBwcm92aWRlZCBzaG93cyBhIHNjZW5hcmlvIHdoZXJlIGEgbG9vcCBtb2RpZmllcyB0aGUgc3RhY2sgZnJhbWUgb2YgYSBwb2ludGVyLiBUaGUgdmVyaWZpZXIgd2FzIGluY29ycmVjdGx5IHRoaW5raW5nIHRoZSBzdGF0ZXMgd2VyZSBlcXVhbCBvciBhbiBpbmZpbml0ZSBsb29wIHdoZW4gdGhleSB3ZXJlbiYjMzk7dC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIHZlcmlmaWVyIGdvdCB0aGlzIGNvbXBsZXRlbHkgd3JvbmcuIEl0IGNvdWxkIGhhdmUgZWl0aGVyIHJlamVjdGVkIHRoZSBjb2RlIGluY29ycmVjdGx5IG9yIGxldCBhIGxvb3AgcnVuIGZvcmV2ZXIgYnkgbWlzc2luZyB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uLiBCdXQgZG9lcyBpdCBsZWFrIGluZm8gb3IgZXhwb3NlIHVuaW5pdCBtZW0/CgpMZXQmIzM5O3MgY2FyZWZ1bGx5IGNoZWNrIHRoZSBLTVNBTiBndWlkZWxpbmVzLiBEb2VzIHRoZSBwYXRjaC4uLgoxLiAgSW50cm9kdWNlIGtlcm5lbCBzdHJ1Y3RzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vLCB0aGUgY29kZSBpcyBpbnRlcm5hbCB0byB0aGUgdmVyaWZpZXIuCjIuICBJbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYmVjYXVzZSBgZnJhbWVub2AgaXMgYWx3YXlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHN0cnVjdHMgYXJlIGNyZWF0ZWQuCjMuICBBbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vLgo0LiAgTW9kaWZ5IGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8gTm8uCgpBaCwgbm8sIHRoYXQgaXNuJiMzOTt0IHRoZSBjYXNlIGhlcmUuIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IGZpeGluZyBhIGxvZ2ljYWwgZXJyb3IsIG5vdCBpbnRyb2R1Y2luZyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBJdOKAmXMgYWJvdXQgZW5zdXJpbmcgdGhlICpjb3JyZWN0bmVzcyogb2YgY29tcGFyaXNvbnMsIG5vdCBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdHRlcm5zLiBUaGUgY29tcGFyaXNvbiBub3cgaW5jbHVkZXMgYHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYWxsIHplcm8taW5pdGlhbGl6ZWQgYW5kIGFyZSBmdWxseSBpbml0aWFsaXplZCBhdCB0aGUgdGltZSB0aGUgY29tcGFyaXNvbnMgYXJlIG1hZGUuCgpUaGUgcGF0Y2ggaXRzZWxmIGp1c3QgaW1wcm92ZXMgdGhlIGxvb3AgZGV0ZWN0aW9uIGxvZ2ljLCB3aGljaCB1c2VzIGFscmVhZHktaW5pdGlhbGl6ZWQgZGF0YS4KClRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgaXQmIzM5O3MgYWxsIGJhc2VkIG9uIHplcm8taW5pdGlhbGl6ZWQgc3RydWN0dXJlcy4gVGhlIHBhdGNoIHNpbXBseSBlbnN1cmVzIHRoYXQgYGZyYW1lbm9gIGlzIGFjY291bnRlZCBmb3Igd2hlbiBjaGVja2luZyBpZiBzdGF0ZXMgYXJlIGlkZW50aWNhbC4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3Rpb24sIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGV0Yy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLiBTcGVjaWZpY2FsbHksIGl0IG1vdmVzIHRoZSBmcmFtZSBudW1iZXIgY2hlY2sgKHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm8pIGludG8gcmVnc19leGFjdCgpLCBlbnN1cmluZyB0aGF0IGV4YWN0IHJlZ2lzdGVyIHN0YXRlIGNvbXBhcmlzb25zIChzdWNoIGFzIGR1cmluZyBsb29wIGRldGVjdGlvbiBhbmQgc3BpbGxlZCBzdGFjayBwb2ludGVyIGNvbXBhcmlzb24pIGNvcnJlY3RseSBkaXN0aW5ndWlzaCBzdGFjayBwb2ludGVycyBmcm9tIGRpZmZlcmVudCBjYWxsIGZyYW1lcy5cblxuVGhlIHRvdWNoZWQgZmllbGRzIChyb2xkLVx1MDAzZWZyYW1lbm8gYW5kIHJjdXItXHUwMDNlZnJhbWVubykgaW4gc3RydWN0IGJwZl9yZWdfc3RhdGUgYXJlIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVycyBhbmQgZnVuYyBzdGF0ZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKHZpYSBtZW1zZXQoKSBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoKSBhbmQgaW5pdF9mdW5jX3N0YXRlKCkpLiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIGluIGtlcm5lbC9icGYvc3RhdGVzLmMuIFNwZWNpZmljYWxseSwgaXQgbW92ZXMgdGhlIGZyYW1lIG51bWJlciBjaGVjayAocm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVubykgaW50byByZWdzX2V4YWN0KCksIGVuc3VyaW5nIHRoYXQgZXhhY3QgcmVnaXN0ZXIgc3RhdGUgY29tcGFyaXNvbnMgKHN1Y2ggYXMgZHVyaW5nIGxvb3AgZGV0ZWN0aW9uIGFuZCBzcGlsbGVkIHN0YWNrIHBvaW50ZXIgY29tcGFyaXNvbikgY29ycmVjdGx5IGRpc3Rpbmd1aXNoIHN0YWNrIHBvaW50ZXJzIGZyb20gZGlmZmVyZW50IGNhbGwgZnJhbWVzLlxuXG5UaGUgdG91Y2hlZCBmaWVsZHMgKHJvbGQtXHUwMDNlZnJhbWVubyBhbmQgcmN1ci1cdTAwM2VmcmFtZW5vKSBpbiBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBhcmUgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gcmVnaXN0ZXJzIGFuZCBmdW5jIHN0YXRlcyBhcmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAodmlhIG1lbXNldCgpIGluIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZSgpIGFuZCBpbml0X2Z1bmNfc3RhdGUoKSkuIFRoZSBwYXRjaCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGFsbG9jYXRpb24gaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6MTUuMjk2NDI0NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEyOTc5NTE2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdzX2V4YWN0XCIsXG4gICAgXCJyZWdzYWZlXCIsXG4gICAgXCJzdGF0ZXNfZXF1YWxcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIGluIGtlcm5lbC9icGYvc3RhdGVzLmMuIFNwZWNpZmljYWxseSwgaXQgbW92ZXMgdGhlIGZyYW1lIG51bWJlciBjaGVjayAocm9sZC1cXHUwMDNlZnJhbWVubyA9PSByY3VyLVxcdTAwM2VmcmFtZW5vKSBpbnRvIHJlZ3NfZXhhY3QoKSwgZW5zdXJpbmcgdGhhdCBleGFjdCByZWdpc3RlciBzdGF0ZSBjb21wYXJpc29ucyAoc3VjaCBhcyBkdXJpbmcgbG9vcCBkZXRlY3Rpb24gYW5kIHNwaWxsZWQgc3RhY2sgcG9pbnRlciBjb21wYXJpc29uKSBjb3JyZWN0bHkgZGlzdGluZ3Vpc2ggc3RhY2sgcG9pbnRlcnMgZnJvbSBkaWZmZXJlbnQgY2FsbCBmcmFtZXMuXFxuXFxuVGhlIHRvdWNoZWQgZmllbGRzIChyb2xkLVxcdTAwM2VmcmFtZW5vIGFuZCByY3VyLVxcdTAwM2VmcmFtZW5vKSBpbiBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBhcmUgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gcmVnaXN0ZXJzIGFuZCBmdW5jIHN0YXRlcyBhcmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAodmlhIG1lbXNldCgpIGluIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZSgpIGFuZCBpbml0X2Z1bmNfc3RhdGUoKSkuIFRoZSBwYXRjaCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGFsbG9jYXRpb24gaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMgaW4ga2VybmVsL2JwZi9zdGF0ZXMuYywgbW92aW5nIHRoZSBmcmFtZW5vIGVxdWFsaXR5IGNoZWNrIGludG8gcmVnc19leGFjdCgpLiBUaGlzIGFmZmVjdHMgc3RhdGUgY29tcGFyaXNvbiBmb3IgUFRSX1RPX1NUQUNLIHJlZ2lzdGVycyAoaW5jbHVkaW5nIHNwaWxsZWQgcmVnaXN0ZXJzIGR1cmluZyBsb29wIHN0YXRlIHBydW5pbmcpLiBGdXp6aW5nIHZpYSB0aGUgYnBmIHN5c2NhbGwgaXMgY3JpdGljYWwgdG8gdmVyaWZ5IHNvdW5kbmVzcyBhbmQgZW5zdXJlIG5vIHZlcmlmaWVyIHJlZ3Jlc3Npb25zIG9yIGluZmluaXRlIGxvb3BzL3NhZmV0eSBieXBhc3NlcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6MTUuMjk2NDI5MzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTk2OTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc4ZjBiNGEyOTE5YzFjYWZlNTYxYjcyMDE1NGFhN2M3OTU4NTg5ZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTk6NTI6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcXG5pbmRleCA2NmZiMTFiNmM2YTc2Li44MjcwMzhlYzE4YjdhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXFxuQEAgLTQ5MSw3ICs0OTEsOCBAQCBzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbiB7XFxuIFxcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXFx1MDAzZWlkLCByY3VyLVxcdTAwM2VpZCwgaWRtYXApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICBjaGVja19pZHMocm9sZC1cXHUwMDNlcGFyZW50X2lkLCByY3VyLVxcdTAwM2VwYXJlbnRfaWQsIGlkbWFwKTtcXG4rXFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVxcdTAwM2VwYXJlbnRfaWQsIHJjdXItXFx1MDAzZXBhcmVudF9pZCwgaWRtYXApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICByb2xkLVxcdTAwM2VmcmFtZW5vID09IHJjdXItXFx1MDAzZWZyYW1lbm87XFxuIH1cXG4gXFxuIGVudW0gZXhhY3RfbGV2ZWwge1xcbkBAIC02MzksMTAgKzY0MCw3IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxuIFxcdFxcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAgIHRudW1faW4ocm9sZC1cXHUwMDNldmFyX29mZiwgcmN1ci1cXHUwMDNldmFyX29mZik7XFxuIFxcdGNhc2UgUFRSX1RPX1NUQUNLOlxcbi1cXHRcXHQvKiB0d28gc3RhY2sgcG9pbnRlcnMgYXJlIGVxdWFsIG9ubHkgaWYgdGhleSdyZSBwb2ludGluZyB0b1xcbi1cXHRcXHQgKiB0aGUgc2FtZSBzdGFjayBmcmFtZSwgc2luY2UgZnAtOCBpbiBmb28gIT0gZnAtOCBpbiBiYXJcXG4tXFx0XFx0ICovXFxuLVxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKSBcXHUwMDI2XFx1MDAyNiByb2xkLVxcdTAwM2VmcmFtZW5vID09IHJjdXItXFx1MDAzZWZyYW1lbm87XFxuK1xcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG4gXFx0Y2FzZSBQVFJfVE9fQVJFTkE6XFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRjYXNlIFBUUl9UT19JTlNOOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNcXG5pbmRleCBkMjQ4Y2U4NzdmMTRlLi5mOGI3YmExYmY2Yjg0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xcbkBAIC0zMDMsNCArMzAzLDcwIEBAIF9fbmFrZWQgdm9pZCBtYXliZV9leGl0X3NjY19idWcxKHZvaWQpXFxuIFxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIGxvb3AgcmVhZHMgemVybyBmcm9tIHRoZSBjYWxsZXIncyBzdGFjayBvbiBpdHMgZmlyc3QgaXRlcmF0aW9uIGFuZFxcbisgKiBvbmUgZnJvbSB0aGUgY2FsbGVlJ3Mgc3RhY2sgb24gaXRzIHNlY29uZCBpdGVyYXRpb24uIEF0IHRoZSBsb29wIGhlYWRlcixcXG4rICogb25seSB0aGUgZnJhbWUgbnVtYmVyIG9mIHRoZSBwb2ludGVyIGluIHIxIGNoYW5nZXMuXFxuKyAqL1xcbitzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxcbit2b2lkIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZyh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIioodTY0ICopKHIxMCAtIDgpID0gMTtcXFwiXFxuK1xcdFxcXCIxOiByMCA9ICoodTY0ICopKHIxICsgMCk7XFxcIlxcbitcXHRcXFwiaWYgcjAgIT0gMCBnb3RvIDJmO1xcXCJcXG4rXFx0XFxcInIxID0gcjEwO1xcXCJcXG4rXFx0XFxcInIxICs9IC04O1xcXCJcXG4rXFx0XFxcImdvdG8gMWI7XFxcIlxcbitcXHRcXFwiMjogZXhpdDtcXFwiXFxuK1xcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ4ZHBcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJib3VuZGVkIGxvb3AgY2hhbmdpbmcgc3RhY2sgZnJhbWUgaW4gYSByZWdpc3RlclxcXCIpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgxKVxcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxcbitfX25ha2VkIHZvaWQgYm91bmRlZF9sb29wX3N0YWNrX2ZyYW1lc19yZWcodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCIqKHU2NCAqKShyMTAgLSA4KSA9IDA7XFxcIlxcbitcXHRcXFwicjEgPSByMTA7XFxcIlxcbitcXHRcXFwicjEgKz0gLTg7XFxcIlxcbitcXHRcXFwiY2FsbCBsb29wX3N0YWNrX2ZyYW1lc19yZWc7XFxcIlxcbitcXHRcXFwiZXhpdDtcXFwiXFxuK1xcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogRXhlcmNpc2UgdGhlIHNhbWUgZnJhbWUgY2hhbmdlIHRocm91Z2ggYSBzcGlsbGVkIHBvaW50ZXIuIEFsbCByZWdpc3RlcnNcXG4rICogYXQgdGhlIGxvb3AgaGVhZGVyIGFyZSBpZGVudGljYWwsIHdoaWxlIGZwLTE2IHBvaW50cyB0byBhIGRpZmZlcmVudCBmcmFtZS5cXG4rICovXFxuK3N0YXRpYyBfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkXFxuK3ZvaWQgbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCIqKHU2NCAqKShyMTAgLSA4KSA9IDE7XFxcIlxcbitcXHRcXFwiKih1NjQgKikocjEwIC0gMTYpID0gcjE7XFxcIlxcbitcXHRcXFwiMTogcjEgPSAqKHU2NCAqKShyMTAgLSAxNik7XFxcIlxcbitcXHRcXFwicjAgPSAqKHU2NCAqKShyMSArIDApO1xcXCJcXG4rXFx0XFxcImlmIHIwICE9IDAgZ290byAyZjtcXFwiXFxuK1xcdFxcXCJyMSA9IHIxMDtcXFwiXFxuK1xcdFxcXCJyMSArPSAtODtcXFwiXFxuK1xcdFxcXCIqKHU2NCAqKShyMTAgLSAxNikgPSByMTtcXFwiXFxuK1xcdFxcXCJnb3RvIDFiO1xcXCJcXG4rXFx0XFxcIjI6IGV4aXQ7XFxcIlxcbitcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwiYm91bmRlZCBsb29wIGNoYW5naW5nIHN0YWNrIGZyYW1lIGluIGEgc3BpbGxcXFwiKVxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMSlcXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcXG4rX19uYWtlZCB2b2lkIGJvdW5kZWRfbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCIqKHU2NCAqKShyMTAgLSA4KSA9IDA7XFxcIlxcbitcXHRcXFwicjEgPSByMTA7XFxcIlxcbitcXHRcXFwicjEgKz0gLTg7XFxcIlxcbitcXHRcXFwiY2FsbCBsb29wX3N0YWNrX2ZyYW1lc19zcGlsbDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6MTUuNzgyOTk2NTkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5MDU0Njk0NDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ3NfZXhhY3RcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcInN0YXRlc19lcXVhbFwiLFxuICAgIFwiYnBmX2lzX3N0YXRlX3Zpc2l0ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMgaW4ga2VybmVsL2JwZi9zdGF0ZXMuYywgbW92aW5nIHRoZSBmcmFtZW5vIGVxdWFsaXR5IGNoZWNrIGludG8gcmVnc19leGFjdCgpLiBUaGlzIGFmZmVjdHMgc3RhdGUgY29tcGFyaXNvbiBmb3IgUFRSX1RPX1NUQUNLIHJlZ2lzdGVycyAoaW5jbHVkaW5nIHNwaWxsZWQgcmVnaXN0ZXJzIGR1cmluZyBsb29wIHN0YXRlIHBydW5pbmcpLiBGdXp6aW5nIHZpYSB0aGUgYnBmIHN5c2NhbGwgaXMgY3JpdGljYWwgdG8gdmVyaWZ5IHNvdW5kbmVzcyBhbmQgZW5zdXJlIG5vIHZlcmlmaWVyIHJlZ3Jlc3Npb25zIG9yIGluZmluaXRlIGxvb3BzL3NhZmV0eSBieXBhc3NlcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OGYwYjRhMjkxOWMxY2FmZTU2MWI3MjAxNTRhYTdjNzk1ODU4OWVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTk6NTI6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuaW5kZXggNjZmYjExYjZjNmE3Ni4uODI3MDM4ZWMxOGI3YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmNcbisrKyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbkBAIC00OTEsNyArNDkxLDggQEAgc3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiB7XG4gXHRyZXR1cm4gbWVtY21wKHJvbGQsIHJjdXIsIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZCkpID09IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VwYXJlbnRfaWQsIHJjdXItXHUwMDNlcGFyZW50X2lkLCBpZG1hcCk7XG4rXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm87XG4gfVxuIFxuIGVudW0gZXhhY3RfbGV2ZWwge1xuQEAgLTYzOSwxMCArNjQwLDcgQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiBcdFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAgIHRudW1faW4ocm9sZC1cdTAwM2V2YXJfb2ZmLCByY3VyLVx1MDAzZXZhcl9vZmYpO1xuIFx0Y2FzZSBQVFJfVE9fU1RBQ0s6XG4tXHRcdC8qIHR3byBzdGFjayBwb2ludGVycyBhcmUgZXF1YWwgb25seSBpZiB0aGV5J3JlIHBvaW50aW5nIHRvXG4tXHRcdCAqIHRoZSBzYW1lIHN0YWNrIGZyYW1lLCBzaW5jZSBmcC04IGluIGZvbyAhPSBmcC04IGluIGJhclxuLVx0XHQgKi9cbi1cdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApIFx1MDAyNlx1MDAyNiByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vO1xuK1x0XHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XG4gXHRjYXNlIFBUUl9UT19BUkVOQTpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIFBUUl9UT19JTlNOOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuaW5kZXggZDI0OGNlODc3ZjE0ZS4uZjhiN2JhMWJmNmI4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXG5AQCAtMzAzLDQgKzMwMyw3MCBAQCBfX25ha2VkIHZvaWQgbWF5YmVfZXhpdF9zY2NfYnVnMSh2b2lkKVxuIFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbisvKlxuKyAqIFRoZSBsb29wIHJlYWRzIHplcm8gZnJvbSB0aGUgY2FsbGVyJ3Mgc3RhY2sgb24gaXRzIGZpcnN0IGl0ZXJhdGlvbiBhbmRcbisgKiBvbmUgZnJvbSB0aGUgY2FsbGVlJ3Mgc3RhY2sgb24gaXRzIHNlY29uZCBpdGVyYXRpb24uIEF0IHRoZSBsb29wIGhlYWRlcixcbisgKiBvbmx5IHRoZSBmcmFtZSBudW1iZXIgb2YgdGhlIHBvaW50ZXIgaW4gcjEgY2hhbmdlcy5cbisgKi9cbitzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3ZvaWQgbG9vcF9zdGFja19mcmFtZXNfcmVnKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIioodTY0ICopKHIxMCAtIDgpID0gMTtcIlxuK1x0XCIxOiByMCA9ICoodTY0ICopKHIxICsgMCk7XCJcbitcdFwiaWYgcjAgIT0gMCBnb3RvIDJmO1wiXG4rXHRcInIxID0gcjEwO1wiXG4rXHRcInIxICs9IC04O1wiXG4rXHRcImdvdG8gMWI7XCJcbitcdFwiMjogZXhpdDtcIlxuK1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJ4ZHBcIilcbitfX2Rlc2NyaXB0aW9uKFwiYm91bmRlZCBsb29wIGNoYW5naW5nIHN0YWNrIGZyYW1lIGluIGEgcmVnaXN0ZXJcIilcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMSlcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK19fbmFrZWQgdm9pZCBib3VuZGVkX2xvb3Bfc3RhY2tfZnJhbWVzX3JlZyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCIqKHU2NCAqKShyMTAgLSA4KSA9IDA7XCJcbitcdFwicjEgPSByMTA7XCJcbitcdFwicjEgKz0gLTg7XCJcbitcdFwiY2FsbCBsb29wX3N0YWNrX2ZyYW1lc19yZWc7XCJcbitcdFwiZXhpdDtcIlxuK1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIEV4ZXJjaXNlIHRoZSBzYW1lIGZyYW1lIGNoYW5nZSB0aHJvdWdoIGEgc3BpbGxlZCBwb2ludGVyLiBBbGwgcmVnaXN0ZXJzXG4rICogYXQgdGhlIGxvb3AgaGVhZGVyIGFyZSBpZGVudGljYWwsIHdoaWxlIGZwLTE2IHBvaW50cyB0byBhIGRpZmZlcmVudCBmcmFtZS5cbisgKi9cbitzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3ZvaWQgbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiKih1NjQgKikocjEwIC0gOCkgPSAxO1wiXG4rXHRcIioodTY0ICopKHIxMCAtIDE2KSA9IHIxO1wiXG4rXHRcIjE6IHIxID0gKih1NjQgKikocjEwIC0gMTYpO1wiXG4rXHRcInIwID0gKih1NjQgKikocjEgKyAwKTtcIlxuK1x0XCJpZiByMCAhPSAwIGdvdG8gMmY7XCJcbitcdFwicjEgPSByMTA7XCJcbitcdFwicjEgKz0gLTg7XCJcbitcdFwiKih1NjQgKikocjEwIC0gMTYpID0gcjE7XCJcbitcdFwiZ290byAxYjtcIlxuK1x0XCIyOiBleGl0O1wiXG4rXHQ6OjogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInhkcFwiKVxuK19fZGVzY3JpcHRpb24oXCJib3VuZGVkIGxvb3AgY2hhbmdpbmcgc3RhY2sgZnJhbWUgaW4gYSBzcGlsbFwiKVxuK19fc3VjY2VzcyBfX3JldHZhbCgxKVxuK19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXG4rX19uYWtlZCB2b2lkIGJvdW5kZWRfbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiKih1NjQgKikocjEwIC0gOCkgPSAwO1wiXG4rXHRcInIxID0gcjEwO1wiXG4rXHRcInIxICs9IC04O1wiXG4rXHRcImNhbGwgbG9vcF9zdGFja19mcmFtZXNfc3BpbGw7XCJcbitcdFwiZXhpdDtcIlxuK1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjoxNS43ODI5OTgzMzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5Mjg5MTc1MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHJldmlldyByZXF1ZXN0LiBGaXJzdCwgSSBzZWUgaXQncyB0b3VjaGluZyBga2VybmVsL2JwZi9zdGF0ZXMuY2AgYW5kIGFkZGluZyBzb21lIHRlc3RzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNgLiBUaGF0J3MgZ29vZCwgc2VlaW5nIHRlc3QgYWRkaXRpb25zIGFsd2F5cyBtYWtlcyBtZSBoYXBweS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gYHN0YXRlcy5jYCwgc28gbGV0J3MgaW5zcGVjdCB0aGUgZGlmZiBkaXJlY3RseS5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBhIHN1YnRsZSBjaGFuZ2Ugd2l0aGluIGByZWdzX2V4YWN0YCBhbmQgaXRzIHVzYWdlIGluIHRoZSBgcmVnc2FmZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgYSBgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVub2AgY2hlY2sgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvbW1lbnQgc2VlbXMgdG8gaW1wbHkgdGhhdCB0aGUgZnJhbWUgbnVtYmVyIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gdHdvIHN0YWNrIHBvaW50ZXJzIGFyZSBjb25zaWRlcmVkIGVxdWFsLiBMZXQncyBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgcmlnaHQgYXBwcm9hY2guXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCBtb3JlIGNvbnRleHQuIEknbGwgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhcm91bmQgdGhlc2UgbGluZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHJlZ3NfZXhhY3RgIGlzIGludGVuZGVkIHRvIGRvLCB3aGVyZSBpdCdzIHVzZWQgaW4gdGhlIHZlcmlmaWVyJ3MgbG9naWMsIGFuZCBob3cgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBpcyBzdHJ1Y3R1cmVkLiBLbm93aW5nIHRoZSBmaWVsZHMgb2YgYGJwZl9yZWdfc3RhdGVgIHdpbGwgY2xhcmlmeSB3aHkgYGZyYW1lbm9gIGlzIHNpZ25pZmljYW50IGluIHRoaXMgY29tcGFyaXNvbi4gSXMgaXQgcmVsYXRlZCB0byB0aGUgc3RhY2sgZnJhbWUgdHJhY2tpbmc/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgYXNwZWN0cyBvZiByZWdpc3RlciBzdGF0ZSB0cmFja2luZz9cblxuSSB3YW50IHRvIHNlZSB3aGF0IGlzIGhhcHBlbmluZyB0byB0aGUgc3RhY2sgcG9pbnRlciByZWdpc3RlciBoZXJlLiBUaGUgY2hlY2sgZm9yIGBQVFJfVE9fU1RBQ0tgIHR5cGUgaXMgY3JpdGljYWwgaW4gdW5kZXJzdGFuZGluZyBob3cgaXQgaGFuZGxlcyB0aGUgc3RhY2sgcG9pbnRlci4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgdGhlIHVzZSBvZiBgaWRtYXBgIHdoaWNoIGlzIHVzZWQgZm9yIElEIG1hcHBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjoyNS4wNzIxNzY3MDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODA6XFx0XFx0XFx0dTMyIGlwID0gYnBmX2ZyYW1lX2luc25faWR4KHN0LCBpKTtcXG4gNDgxOlxcdFxcdFxcdHUxNiBsaXZlX3JlZ3MgPSBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaXBdLmxpdmVfcmVnc19iZWZvcmU7XFxuIDQ4MjpcXHRcXG4gNDgzOlxcdFxcdFxcdF9fY2xlYW5fZnVuY19zdGF0ZShlbnYsIHN0LVxcdTAwM2VmcmFtZVtpXSwgbGl2ZV9yZWdzLCBpKTtcXG4gNDg0OlxcdFxcdH1cXG4gNDg1OlxcdFxcdHJldHVybiAwO1xcbiA0ODY6XFx0fVxcbiA0ODc6XFx0XFxuIDQ4ODpcXHRzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbiA0ODk6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxcbiA0OTA6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbiA0OTE6XFx0e1xcbiA0OTI6XFx0XFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuIDQ5MzpcXHRcXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXFx1MDAzZWlkLCByY3VyLVxcdTAwM2VpZCwgaWRtYXApIFxcdTAwMjZcXHUwMDI2XFxuIDQ5NDpcXHRcXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXFx1MDAzZXBhcmVudF9pZCwgcmN1ci1cXHUwMDNlcGFyZW50X2lkLCBpZG1hcCkgXFx1MDAyNlxcdTAwMjZcXG4gNDk1OlxcdFxcdCAgICAgICByb2xkLVxcdTAwM2VmcmFtZW5vID09IHJjdXItXFx1MDAzZWZyYW1lbm87XFxuIDQ5NjpcXHR9XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdGVudW0gZXhhY3RfbGV2ZWwge1xcbiA0OTk6XFx0XFx0Tk9UX0VYQUNULFxcbiA1MDA6XFx0XFx0RVhBQ1QsXFxuIDUwMTpcXHRcXHRSQU5HRV9XSVRISU5cXG4gNTAyOlxcdH07XFxuIDUwMzpcXHRcXG4gNTA0OlxcdC8qIFJldHVybnMgdHJ1ZSBpZiAocm9sZCBzYWZlIGltcGxpZXMgcmN1ciBzYWZlKSAqL1xcbiA1MDU6XFx0c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG4gNTA2OlxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXFxuIDUwNzpcXHRcXHRcXHQgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4gNTA4OlxcdHtcXG4gNTA5OlxcdFxcdGlmIChleGFjdCA9PSBFWEFDVClcXG4gNTEwOlxcdFxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG4gNTExOlxcdFxcbiA1MTI6XFx0XFx0aWYgKHJvbGQtXFx1MDAzZXR5cGUgPT0gTk9UX0lOSVQpXFxuIDUxMzpcXHRcXHRcXHQvKiBleHBsb3JlZCBzdGF0ZSBjYW4ndCBoYXZlIHVzZWQgdGhpcyAqL1xcbiA1MTQ6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUxNTpcXHRcXG4gNTE2OlxcdFxcdC8qIEVuZm9yY2UgdGhhdCByZWdpc3RlciB0eXBlcyBoYXZlIHRvIG1hdGNoIGV4YWN0bHksIGluY2x1ZGluZyB0aGVpclxcbiA1MTc6XFx0XFx0ICogbW9kaWZpZXJzIChsaWtlIFBUUl9NQVlCRV9OVUxMLCBNRU1fUkRPTkxZLCBldGMpLCBhcyBhIGdlbmVyYWxcXG4gNTE4OlxcdFxcdCAqIHJ1bGUuXFxuIDUxOTpcXHRcXHQgKlxcbiA1MjA6XFx0XFx0ICogT25lIGNhbiBtYWtlIGEgcG9pbnQgdGhhdCB1c2luZyBhIHBvaW50ZXIgcmVnaXN0ZXIgYXMgdW5ib3VuZGVkXFxuIDUyMTpcXHRcXHQgKiBTQ0FMQVIgd291bGQgYmUgdGVjaG5pY2FsbHkgYWNjZXB0YWJsZSwgYnV0IHRoaXMgY291bGQgbGVhZCB0b1xcbiA1MjI6XFx0XFx0ICogcG9pbnRlciBsZWFrcyBiZWNhdXNlIHNjYWxhcnMgYXJlIGFsbG93ZWQgdG8gbGVhayB3aGlsZSBwb2ludGVyc1xcbiA1MjM6XFx0XFx0ICogYXJlIG5vdC4gV2UgY291bGQgbWFrZSB0aGlzIHNhZmUgaW4gc3BlY2lhbCBjYXNlcyBpZiByb290IGlzXFxuIDUyNDpcXHRcXHQgKiBjYWxsaW5nIHVzLCBidXQgaXQncyBwcm9iYWJseSBub3Qgd29ydGggdGhlIGhhc3NsZS5cXG4gNTI1OlxcdFxcdCAqXFxuIDUyNjpcXHRcXHQgKiBBbHNvLCByZWdpc3RlciB0eXBlcyB0aGF0IGFyZSAqbm90KiBNQVlCRV9OVUxMIGNvdWxkIHRlY2huaWNhbGx5IGJlXFxuIDUyNzpcXHRcXHQgKiBzYWZlIHRvIHVzZSBhcyB0aGVpciBNQVlCRV9OVUxMIHZhcmlhbnRzIChlLmcuLCBQVFJfVE9fTUFQX1ZBTFVFXFxuIDUyODpcXHRcXHQgKiBpcyBzYWZlIHRvIGJlIHVzZWQgYXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMLCBwcm92aWRlZCBib3RoIHBvaW50XFxuIDUyOTpcXHRcXHQgKiB0byB0aGUgc2FtZSBtYXApLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjoyNS4wNzIyOTA4MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDY4NzcwNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUcmFjaW5nIHRoZSBVc2Ugb2YgYHJlZ3NfZXhhY3RgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcmVnc19leGFjdGAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIEJQRiBzdGF0ZSBtYW5hZ2VtZW50IGNvZGUuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmNhbGxlZCogd2l0aGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhhdCdzIHdoZXJlIEkgY2FuIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBjb250ZXh0IGl0IG9wZXJhdGVzIGluISBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBmb3VuZGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgbW9kaWZpY2F0aW9ucyBvciBvcHRpbWl6YXRpb25zIEkgbWlnaHQgYmUgY29uc2lkZXJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjI4LjU0MTA2MzU4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ0MTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdzX2V4YWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz00NzE9c3RhdGljIGludCBjbGVhbl92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODctXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0ODg6c3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ4OS1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTUwNT1zdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MDktXFx0aWYgKGV4YWN0ID09IEVYQUNUKVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTEwOlxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUxMS1cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQyLVxcdGNhc2UgUFRSX1RPX1NUQUNLOlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NjQzOlxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0NC1cXHRjYXNlIFBUUl9UT19BUkVOQTpcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQ5LVxcdGRlZmF1bHQ6XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo2NTA6XFx0XFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjUxLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6MjguNTg3NTE1MDE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE5MDU3OTIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBQYXRoIG9mIGByZWdzX2V4YWN0YCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGByZWdzX2V4YWN0YC4gTXkgaW5pdGlhbCBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGUgY2FsbCBzaXRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIGludm9rZWQuIEFoLCBoZXJlIGl0IGlzLCBvbiBsaW5lIDUwOTpcblxuYGBgY1xuXHRpZiAoZXhhY3QgPT0gRVhBQ1QpXG5cdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuYGBgXG5cblJpZ2h0LCBhIGNvbmRpdGlvbmFsIGNhbGwuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nICp3aGVuKiBgZXhhY3RgIGlzIGVxdWFsIHRvIGBFWEFDVGAuICBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgcG9pbnQuIFdoZXJlIGVsc2UgZG9lcyB0aGlzIGByZWdzYWZlYCBmdW5jdGlvbiB3aXRoIHRoYXQgY29uZGl0aW9uIGNvbWUgaW50byBwbGF5PyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbHMgdG8gYHJlZ3NhZmUoLi4uLCBleGFjdCA9PSBFWEFDVClgIHRvIGZ1bGx5IGdyYXNwIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGByZWdzX2V4YWN0YCBiZWluZyBleGVjdXRlZC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjozMC43NzgwOTYzOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0OTI2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnc2FmZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9NDk4PWVudW0gZXhhY3RfbGV2ZWwge1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MDQtLyogUmV0dXJucyB0cnVlIGlmIChyb2xkIHNhZmUgaW1wbGllcyByY3VyIHNhZmUpICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1MDU6c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUwNi1cXHRcXHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz02OTc9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDQtXFx0XFx0ICogQ29uc3RydWN0IGEgZmFrZSByZWdpc3RlciBmb3Igc3VjaCBzdGFjayBhbmQgY2FsbFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NzQ1OlxcdFxcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDYtXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc1MC1cXHRcXHRcXHRpZiAob2xkX3JlZyBcXHUwMDI2XFx1MDAyNiBjdXJfcmVnKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3NTE6XFx0XFx0XFx0XFx0aWYgKCFyZWdzYWZlKGVudiwgb2xkX3JlZywgY3VyX3JlZywgaWRtYXAsIGV4YWN0KSlcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc1Mi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc4Ny1cXHRcXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc4ODpcXHRcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzg5LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9ODQyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NTYtXFx0XFx0XFx0ICBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja19hcmdfcmVnc1tpXSA6IFxcdTAwMjZub3RfaW5pdDtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjg1NzpcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfYXJnLCBjdXJfYXJnLCBpZG1hcCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODU4LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9OTQwPXN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NTMtXFx0XFx0aWYgKCgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IGxpdmVfcmVncykgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk1NDpcXHRcXHQgICAgIXJlZ3NhZmUoZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VyZWdzW2ldLCBcXHUwMDI2Y3VyLVxcdTAwM2VyZWdzW2ldLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTU1LVxcdFxcdFxcdCAgICAgXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjozMC44MjQ1OTU3MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjM0NTE4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX3JlZ19zdGF0ZWAgc3RydWN0dXJlIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYGZyYW1lbm9gIGZpZWxkIGlzIGxvY2F0ZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbGF5b3V0IG9mIHRoaXMgdGhpbmcuIExldCBtZSBxdWlja2x5IGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBicGZfcmVnX3N0YXRlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjM1LjQ1OTExNjg2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNjIxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGJwZl9yZWdfc3RhdGUgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTMyPWVudW0gYnBmX2l0ZXJfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zNy1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjM4OnN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTM5LVxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjM1LjUwNjM4Mjk5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjcwNTY0ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIEJQRiB2ZXJpZmllcidzIGludGVybmFscy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDM4LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBzb21lIGNvcmUgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBidWlsZGluZyBibG9ja3Mgb3IgZW50cnkgcG9pbnRzIHRoZXJlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgYmFjayB1cCB0byBzcGVlZCBxdWlja2x5IG9uIHRoZSBrZXkgY29uY2VwdHMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6MzcuMTc2OTQ5ODE3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4LFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG4gIDM5OlxcdFxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuICA0MDpcXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xcbiAgNDE6XFx0XFx0LypcXG4gIDQyOlxcdFxcdCAqIENvbnN0YW50IGRlbHRhIGJldHdlZW4gXFxcImxpbmtlZFxcXCIgc2NhbGFycyB3aXRoIHRoZSBzYW1lIElELlxcbiAgNDM6XFx0XFx0ICovXFxuICA0NDpcXHRcXHRzMzIgZGVsdGE7XFxuICA0NTpcXHRcXHR1bmlvbiB7XFxuICA0NjpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gUFRSX1RPX1BBQ0tFVCAqL1xcbiAgNDc6XFx0XFx0XFx0aW50IHJhbmdlO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxcbiAgNTA6XFx0XFx0XFx0ICogICBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTExcXG4gIDUxOlxcdFxcdFxcdCAqL1xcbiAgNTI6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDUzOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXBfcHRyO1xcbiAgNTQ6XFx0XFx0XFx0XFx0LyogVG8gZGlzdGluZ3Vpc2ggbWFwIGxvb2t1cHMgZnJvbSBvdXRlciBtYXBcXG4gIDU1OlxcdFxcdFxcdFxcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcXG4gIDU2OlxcdFxcdFxcdFxcdCAqIHBvaW50aW5nIHRvIGlubmVyIG1hcHMuXFxuICA1NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDU4OlxcdFxcdFxcdFxcdHUzMiBtYXBfdWlkO1xcbiAgNTk6XFx0XFx0XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0XFx0LyogZm9yIFBUUl9UT19CVEZfSUQgKi9cXG4gIDYyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA2MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnRmICpidGY7XFxuICA2NDpcXHRcXHRcXHRcXHR1MzIgYnRmX2lkO1xcbiAgNjU6XFx0XFx0XFx0fTtcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0XFx0c3RydWN0IHsgLyogZm9yIFBUUl9UT19NRU0gfCBQVFJfVE9fTUVNX09SX05VTEwgKi9cXG4gIDY4OlxcdFxcdFxcdFxcdHUzMiBtZW1fc2l6ZTtcXG4gIDY5OlxcdFxcdFxcdH07XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC8qIEZvciBkeW5wdHIgc3RhY2sgc2xvdHMgKi9cXG4gIDcyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA3MzpcXHRcXHRcXHRcXHRlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlO1xcbiAgNzQ6XFx0XFx0XFx0XFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cXG4gIDc1OlxcdFxcdFxcdFxcdCAqIFdlIG5lZWQgdG8gdHJhY2sgd2hpY2ggc2xvdCBpcyB0aGUgZmlyc3Qgc2xvdFxcbiAgNzY6XFx0XFx0XFx0XFx0ICogdG8gcHJvdGVjdCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHRoZSB1c2VyIG1heSB0cnkgdG9cXG4gIDc3OlxcdFxcdFxcdFxcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXFxuICA3ODpcXHRcXHRcXHRcXHQgKiBkeW5wdHIuXFxuICA3OTpcXHRcXHRcXHRcXHQgKi9cXG4gIDgwOlxcdFxcdFxcdFxcdGJvb2wgZmlyc3Rfc2xvdDtcXG4gIDgxOlxcdFxcdFxcdH0gZHlucHRyO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRcXHQvKiBGb3IgYnBmX2l0ZXIgc3RhY2sgc2xvdHMgKi9cXG4gIDg0OlxcdFxcdFxcdHN0cnVjdCB7XFxuICA4NTpcXHRcXHRcXHRcXHQvKiBCVEYgY29udGFpbmVyIGFuZCBCVEYgdHlwZSBJRCBkZXNjcmliaW5nXFxuICA4NjpcXHRcXHRcXHRcXHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXFx1MDAzY3R5cGVcXHUwMDNlIG9mIGFuIGl0ZXJhdG9yIHN0YXRlXFxuICA4NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDg4OlxcdFxcdFxcdFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gIDg5OlxcdFxcdFxcdFxcdHUzMiBidGZfaWQ7XFxuICA5MDpcXHRcXHRcXHRcXHQvKiBwYWNraW5nIGZvbGxvd2luZyB0d28gZmllbGRzIHRvIGZpdCBpdGVyIHN0YXRlIGludG8gMTYgYnl0ZXMgKi9cXG4gIDkxOlxcdFxcdFxcdFxcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcXG4gIDkyOlxcdFxcdFxcdFxcdGludCBkZXB0aDozMDtcXG4gIDkzOlxcdFxcdFxcdH0gaXRlcjtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0XFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xcbiAgOTY6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDk3OlxcdFxcdFxcdFxcdGVudW0ge1xcbiAgOTg6XFx0XFx0XFx0XFx0XFx0SVJRX05BVElWRV9LRlVOQyxcXG4gIDk5OlxcdFxcdFxcdFxcdFxcdElSUV9MT0NLX0tGVU5DLFxcbiAxMDA6XFx0XFx0XFx0XFx0fSBrZnVuY19jbGFzcztcXG4gMTAxOlxcdFxcdFxcdH0gaXJxO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXFxuIDEwNDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAxMDU6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcxO1xcbiAxMDY6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcyO1xcbiAxMDc6XFx0XFx0XFx0fSByYXc7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdFxcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xcbiAxMTA6XFx0XFx0fTtcXG4gMTExOlxcdFxcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXFxuIDExMjpcXHRcXHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxcbiAxMTM6XFx0XFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XFxuIDExNDpcXHRcXHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xcbiAxMTU6XFx0XFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cXG4gMTE2OlxcdFxcdCAqL1xcbiAxMTc6XFx0XFx0c3RydWN0IHRudW0gdmFyX29mZjtcXG4gMTE4OlxcdFxcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxcbiAxMTk6XFx0XFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cXG4gMTIwOlxcdFxcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXFxuIDEyMTpcXHRcXHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXFxuIDEyMjpcXHRcXHQgKi9cXG4gMTIzOlxcdFxcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXFxuIDEyNDpcXHRcXHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xcbiAxMjU6XFx0XFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXFxuIDEyNjpcXHRcXHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cXG4gMTI3OlxcdFxcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjozNy4xNzcxMjc5MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYyODIzODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIgSGVhZGVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgaW50byBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIEJQRiB2ZXJpZmllcidzIGRlZmluaXRpb24gbGlrZWx5IHJlc2lkZXMsIGFuZCB3aGVyZSBJIG5lZWQgdG8gYmUgZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHJpZ2h0IG5vdy4gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgaW50ZXJuYWwgY29uc3RhbnRzIGRlZmluZWQgaGVyZSBpcyBjcnVjaWFsIGZvciB0aGlzIGludmVzdGlnYXRpb24uIFRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJ1bGVzIGFuZCBsb2dpYyB0aGUga2VybmVsIGVtcGxveXMgdG8ga2VlcCBCUEYgcHJvZ3JhbXMgc2FmZSBhbmQgdmFsaWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHZlcmlmaWVyJ3MgaW50ZXJuYWwgbWVjaGFuaXNtcywgYW5kIHRoaXMgaGVhZGVyIGlzIHRoZSBtb3N0IGVmZmljaWVudCBzdGFydGluZyBwb2ludC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDkwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjozOS44MDUzNjkyODdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI4OlxcdFxcdCAqIGNhbWUgZnJvbSwgd2hlbiBvbmUgaXMgdGVzdGVkIGZvciAhPSBOVUxMLlxcbiAxMjk6XFx0XFx0ICogRm9yIFBUUl9UT19NRU1fT1JfTlVMTCB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgbWVtb3J5IGFsbG9jYXRpb25cXG4gMTMwOlxcdFxcdCAqIGZvciB0aGUgcHVycG9zZSBvZiB0cmFja2luZyB0aGF0IGl0J3MgZnJlZWQuXFxuIDEzMTpcXHRcXHQgKiBGb3IgUFRSX1RPX1NPQ0tFVCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggcG9pbnRlcnMgcmV0YWluIHRoZVxcbiAxMzI6XFx0XFx0ICogc2FtZSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCwgdG8gZGV0ZXJtaW5lIHByb3BlciByZWZlcmVuY2UgZnJlZWluZy5cXG4gMTMzOlxcdFxcdCAqIEZvciBzdGFjayBzbG90cyB0aGF0IGFyZSBkeW5wdHJzLCB0aGlzIGlzIHVzZWQgdG8gdHJhY2sgcmVmZXJlbmNlcyB0b1xcbiAxMzQ6XFx0XFx0ICogdGhlIGR5bnB0ciB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxcbiAxMzU6XFx0XFx0ICogU2ltaWxhcmx5IHRvIGR5bnB0cnMsIHdlIHVzZSBJRCB0byB0cmFjayBcXFwiYmVsb25naW5nXFxcIiBvZiBhIHJlZmVyZW5jZVxcbiAxMzY6XFx0XFx0ICogdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiBicGZfaXRlci5cXG4gMTM3OlxcdFxcdCAqL1xcbiAxMzg6XFx0XFx0LypcXG4gMTM5OlxcdFxcdCAqIFVwcGVyIGJpdCBvZiBJRCBpcyB1c2VkIHRvIHJlbWVtYmVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFxcXCJsaW5rZWRcXFwiXFxuIDE0MDpcXHRcXHQgKiByZWdpc3RlcnMuIEV4YW1wbGU6XFxuIDE0MTpcXHRcXHQgKiByMSA9IHIyOyAgICBib3RoIHdpbGwgaGF2ZSByMS1cXHUwMDNlaWQgPT0gcjItXFx1MDAzZWlkID09IE5cXG4gMTQyOlxcdFxcdCAqIHIxICs9IDEwOyAgIHIxLVxcdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVCBhbmQgcjEtXFx1MDAzZWRlbHRhID09IDEwXFxuIDE0MzpcXHRcXHQgKiByMyA9IHIyOyAgICBib3RoIHdpbGwgaGF2ZSByMy1cXHUwMDNlaWQgPT0gcjItXFx1MDAzZWlkID09IE5cXG4gMTQ0OlxcdFxcdCAqIHczICs9IDEwOyAgIHIzLVxcdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVDMyIGFuZCByMy1cXHUwMDNlZGVsdGEgPT0gMTBcXG4gMTQ1OlxcdFxcdCAqL1xcbiAxNDY6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUNjQgKDFVIFxcdTAwM2NcXHUwMDNjIDMxKVxcbiAxNDc6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUMzIgKDFVIFxcdTAwM2NcXHUwMDNjIDMwKVxcbiAxNDg6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUIChCUEZfQUREX0NPTlNUNjQgfCBCUEZfQUREX0NPTlNUMzIpXFxuIDE0OTpcXHRcXHR1MzIgaWQ7XFxuIDE1MDpcXHRcXHQvKlxcbiAxNTE6XFx0XFx0ICogVHJhY2tzIHRoZSBwYXJlbnQgb2JqZWN0IHRoaXMgcmVnaXN0ZXIgd2FzIGRlcml2ZWQgZnJvbS5cXG4gMTUyOlxcdFxcdCAqIFVzZWQgZm9yIGNhc2NhZGluZyBpbnZhbGlkYXRpb246IHdoZW4gdGhlIHBhcmVudCBvYmplY3QgaXNcXG4gMTUzOlxcdFxcdCAqIHJlbGVhc2VkIG9yIGludmFsaWRhdGVkLCBhbGwgcmVnaXN0ZXJzIHdpdGggbWF0Y2hpbmcgcGFyZW50X2lkXFxuIDE1NDpcXHRcXHQgKiBhcmUgYWxzbyBpbnZhbGlkYXRlZC4gRm9yIGV4YW1wbGUsIGEgc2xpY2UgZnJvbSBicGZfZHlucHRyX2RhdGEoKVxcbiAxNTU6XFx0XFx0ICogZ2V0cyBwYXJlbnRfaWQgc2V0IHRvIHRoZSBkeW5wdHIncyBpZC5cXG4gMTU2OlxcdFxcdCAqL1xcbiAxNTc6XFx0XFx0dTMyIHBhcmVudF9pZDtcXG4gMTU4OlxcdFxcdC8qIEluc2lkZSB0aGUgY2FsbGVlIHR3byByZWdpc3RlcnMgY2FuIGJlIGJvdGggUFRSX1RPX1NUQUNLIGxpa2VcXG4gMTU5OlxcdFxcdCAqIFIxPWZwLTggYW5kIFIyPWZwLTgsIGJ1dCBvbmUgb2YgdGhlbSBwb2ludHMgdG8gdGhpcyBmdW5jdGlvbiBzdGFja1xcbiAxNjA6XFx0XFx0ICogd2hpbGUgYW5vdGhlciB0byB0aGUgY2FsbGVyJ3Mgc3RhY2suIFRvIGRpZmZlcmVudGlhdGUgdGhlbSAnZnJhbWVubydcXG4gMTYxOlxcdFxcdCAqIGlzIHVzZWQgd2hpY2ggaXMgYW4gaW5kZXggaW4gYnBmX3ZlcmlmaWVyX3N0YXRlLVxcdTAwM2VmcmFtZVtdIGFycmF5XFxuIDE2MjpcXHRcXHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cXG4gMTYzOlxcdFxcdCAqL1xcbiAxNjQ6XFx0XFx0dTMyIGZyYW1lbm87XFxuIDE2NTpcXHRcXHQvKiBpZiAoIXByZWNpc2UgXFx1MDAyNlxcdTAwMjYgU0NBTEFSX1ZBTFVFKSBtaW4vbWF4L3RudW0gZG9uJ3QgYWZmZWN0IHNhZmV0eSAqL1xcbiAxNjY6XFx0XFx0Ym9vbCBwcmVjaXNlO1xcbiAxNjc6XFx0fTtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0c3RhdGljIGlubGluZSBzNjQgcmVnX3NtaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdHJldHVybiBjbnVtNjRfc21pbihyZWctXFx1MDAzZXI2NCk7XFxuIDE3MjpcXHR9XFxuIDE3MzpcXHRcXG4gMTc0OlxcdHN0YXRpYyBpbmxpbmUgczY0IHJlZ19zbWF4KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIDE3NTpcXHR7XFxuIDE3NjpcXHRcXHRyZXR1cm4gY251bTY0X3NtYXgocmVnLVxcdTAwM2VyNjQpO1xcbiAxNzc6XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRzdGF0aWMgaW5saW5lIHU2NCByZWdfdW1pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiAxODA6XFx0e1xcbiAxODE6XFx0XFx0cmV0dXJuIGNudW02NF91bWluKHJlZy1cXHUwMDNlcjY0KTtcXG4gMTgyOlxcdH1cXG4gMTgzOlxcdFxcbiAxODQ6XFx0c3RhdGljIGlubGluZSB1NjQgcmVnX3VtYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gMTg1OlxcdHtcXG4gMTg2OlxcdFxcdHJldHVybiBjbnVtNjRfdW1heChyZWctXFx1MDAzZXI2NCk7XFxuIDE4NzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjM5LjgwNTQ4NzA2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTAzMTA1MDI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgU3RhdGUgRXF1aXZhbGVuY2UgYW5kIGBmcmFtZW5vYCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbiBjYXVnaHQgbXkgZXllLCBhbmQgSSBzZWUgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBpc3N1ZS4gSW5pdGlhbGx5LCBgcmVnc19leGFjdGAgd2FzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHR3byBCUEYgcmVnaXN0ZXIgc3RhdGVzIHdlcmUgaWRlbnRpY2FsLiBMb29raW5nIGF0IHRoZSBjb2RlOlxuXG5gYGBjXG5zdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcblx0XHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG57XG5cdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcdTAwMjZcdTAwMjZcblx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG5cdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VwYXJlbnRfaWQsIHJjdXItXHUwMDNlcGFyZW50X2lkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG5cdCAgICAgICByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vO1xufVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3YXMgbWlzc2luZyBhIHBhcnQgb2YgdGhlIGNoZWNrLCB3aGljaCBpcyBgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVub2AuIFNwZWNpZmljYWxseSwgYG1lbWNtcGAgb25seSBjb21wYXJlZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgIHVwIHRvIGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpYC4gIEZpZWxkcyBsaWtlIGBpZGAgYW5kIGBwYXJlbnRfaWRgIHdlcmUgY2hlY2tlZCBzZXBhcmF0ZWx5LCBhbmQsIGNyaXRpY2FsbHksIGBmcmFtZW5vYCBjb21lcyAqYWZ0ZXIqIHRob3NlIGZpZWxkcyBpbiB0aGUgc3RydWN0LiBUaGVyZWZvcmUsIGBtZW1jbXBgIGRpZCAqbm90KiBjaGVjayBgZnJhbWVub2AuXG5cbkkgdGhlbiBsb29rZWQgYXQgaG93IGByZWdzX2V4YWN0YCB3YXMgdXNlZCwgZXNwZWNpYWxseSBpbiBgcmVnc2FmZSgpYCBhbmQgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGBleGFjdCA9PSBFWEFDVGAgY29uZGl0aW9uIHdhcyBtZXQuIEluIHRoYXQgY2FzZSwgYW5kIGluIG90aGVyIHNjZW5hcmlvcyB3aGVyZSBleGFjdCBzdGF0ZSBtYXRjaGluZyB3YXMgbmVlZGVkLCBpdCAqb25seSogY2FsbGVkIGByZWdzX2V4YWN0YC4gVGhpcyBtZWFudCBgZnJhbWVub2Agd2Fzbid0IGJlaW5nIGNoZWNrZWQgZm9yIGVxdWFsaXR5IGV2ZW4gd2hlbiB3ZSBleHBsaWNpdGx5IHdhbnRlZCBleGFjdCBtYXRjaGluZyEgIFRoaXMgYWxzbyBoZWxkIHRydWUgd2hlbiBsb29raW5nIGF0IHRoZSBjb21wYXJpc29uIG9mIHNwaWxsZWQgcmVnaXN0ZXJzIGluIGBzdGFja3NhZmUoKWAuXG5cbkNvbnNpZGVyIHRoZSB0ZXN0IGNhc2UgaW4gYHZlcmlmaWVyX2xvb3BzMS5jYC4gSW1hZ2luZSBhIHN0YWNrIHBvaW50ZXIgd2l0aCBhICpkaWZmZXJlbnQqIGBmcmFtZW5vYCB3YXMgc3BpbGxlZCB0byB0aGUgc3RhY2suICBJZiB3ZSB0aGVuIGNvbXBhcmVkIHRoaXMgc3BpbGxlZCByZWdpc3RlciB3aXRoIGFuIFwiZXhhY3RcIiBtYXRjaCB1c2luZyBgcmVnc19leGFjdGAsIHRoZSBjb21wYXJpc29uIHdvdWxkIHJldHVybiBgdHJ1ZWAgZXZlbiB0aG91Z2ggYGZyYW1lbm9gIGRpZmZlcmVkLCB3aGljaCBpcyBvYnZpb3VzbHkgd3JvbmcuXG5cblRoZSBmaXgsIG1vdmluZyB0aGUgY29tcGFyaXNvbiBvZiBgZnJhbWVub2AgaW50byBgcmVnc19leGFjdGAsIHNvbHZlcyB0aGlzIGlzc3VlLiAgTm93LCBib3RoIGRpcmVjdCBjaGVja3MgaW4gYHJlZ3NhZmUoKWAgYW5kIGByZWdzX2V4YWN0YCBjaGVja3MsIGluY2x1ZGluZyB0aG9zZSBpbnZvbHZpbmcgc3BpbGxlZCBwb2ludGVycywgd2lsbCBwcm9wZXJseSBjb25zaWRlciBgZnJhbWVub2AgaW4gZGV0ZXJtaW5pbmcgcmVnaXN0ZXIgc3RhdGUgZXF1aXZhbGVuY2UuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhIGZvciB0aGlzIGNoYW5nZTpcblxuKiAgICoqU3Vic3lzdGVtOioqIEJQRiAoa2VybmVsL2JwZi9zdGF0ZXMuYykgLSAqQ29uZmlybWVkLipcbiogICAqKlJlYWNoYWJpbGl0eToqKiBCUEYgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBRRU1VL3N5emthbGxlci4gYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYCBpcyBhIHByaW1hcnkgc3l6a2FsbGVyIHRhcmdldC4gLSAqQ29uZmlybWVkLipcbiogICAqKk1vZGlmaWVkIFJlYWNoYWJsZSBLZXJuZWwgQ29kZToqKiBZZXMsIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBpcyB0aGUgQlBGIHZlcmlmaWVyIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNraW5nIGNvZGUsIHNvIHRoaXMgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb2RlLiAtICpDb25maXJtZWQuKlxuKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogQlBGIC0gKkNvbmZpcm1lZC4qXG4qICAgKipUeXBlIG9mIENoYW5nZToqKiBcIlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwc1wiIGZpdHMgd2VsbCwgYXMgdGhpcyBpcyBhIHJlc3RydWN0dXJpbmcgb2YgdGhlIGVxdWl2YWxlbmNlIGNoZWNrLiAtICpDb25maXJtZWQuKlxuKiAgICoqV29ydGhGdXp6aW5nPXRydWUgYW5kIEZvY3VzU3ltYm9sczoqKiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaWRlbnRpZnkgYW55IHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBmb3IgYSBmdXp6ZXIuICBgcmVnc19leGFjdGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBJdCdzIGNsZWFybHkgaW1wb3J0YW50IGZvciBzdGF0ZSBjb21wYXJpc29uLiBXZSBuZWVkIHRvIGNoZWNrIGlmIGByZWdzX2V4YWN0YCwgYHJlZ3NhZmVgLCBgZnVuY19zdGF0ZXNfZXF1YWxgLCBhbmQgYHN0YXRlc19lcXVhbGAgYXJlIGlubGluZWQgb3IgY29tcGlsZWQgc3RhdGljYWxseSB0byBzZWUgd2hlcmUgdGhleSBleGlzdC4gIEknbGwgY2hlY2sgdGhlIGBNYWtlZmlsZWAgYW5kIHRoZWlyIGRlZmluaXRpb25zIGluIGBzdGF0ZXMuY2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlaXIgdmlzaWJpbGl0eSBhbmQgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDE5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjU0LjgzNjUzOTI3OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4OTczNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGVzXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6NTQuODg2NDQxMzY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0NTE0OTQ5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIGBzdGF0ZXMub2AgYW5kIEJQRiBTeXNjYWxscyoqXG5cbkFscmlnaHQsIHNvIGBzdGF0ZXMub2AgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEga2V5IGRlcGVuZGVuY3kuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgYXMgaXQgd2lsbCBoZWxwIHRvIHRyYWNrIHdoZXJlIHRoaW5ncyBnbyB3cm9uZyB3aXRoIEJQRi4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGludG8gYGtlcm5lbC9icGYvc3RhdGVzLmNgIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBsYXlvdXQgYW5kIHVzYWdlIG9mIHRoZSBCUEYgc3RhdGUgbWFuYWdlbWVudCBjb2RlLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIHB1YmxpY2x5IGFjY2Vzc2libGUgKG5vbi1zdGF0aWMpIG9yIHNlcnZlIGFzIGVudHJ5IHBvaW50cyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXQuIFRoaXMgd2lsbCByZXZlYWwgdGhlIGNyaXRpY2FsIGludGVyZmFjZXMgYW5kIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gZm9yIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyB0aGUgY29ybmVyc3RvbmUgZm9yIGRlYnVnZ2luZyBhbnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzMCwiT3V0cHV0VG9rZW5zIjo2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjU5LjMzNzkzODIxOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMzA2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKj8gW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz0yNTk9c3RhdGljIGJvb2wgaW5jb21wbGV0ZV9yZWFkX21hcmtzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTI3Mi1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjI3MzppbnQgYnBmX3VwZGF0ZV9icmFuY2hfY291bnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMjc0LXtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIwOT1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzMy1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzQ6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1Mjo1OS4zODQ5NzU4MzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzM5Mzg0NTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBCUEYgU3RhdGUgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGZ1bmN0aW9uIGluIGBzdGF0ZXMuY2AuIFNlZW1zIGxpa2UgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gTGV0J3Mgc2VlIHdoYXQgY2FsbHMgdGhhdCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2UsIGFzIHdlbGwgYXMgd2hlcmUgYHJlZ3NhZmVgLCBgc3RhdGVzX2VxdWFsYCwgYW5kIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSB1c2VkLCBhbGwgd2l0aGluIHRoZSBga2VybmVsL2JwZi9zdGF0ZXMuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGFsbCB0aGVzZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgZml0IGludG8gdGhlIGxhcmdlciBzdGF0ZSBtYW5hZ2VtZW50IHBpY3R1cmUuIEdvdHRhIGJ1aWxkIGEgbWVudGFsIG1vZGVsIGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzowNi43Nzg4MjM2MjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTExMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlc19lcXVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9ODY0PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkzOS0gKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0MDpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0MS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgdTMyIGluc25faWR4LCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05Njc9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzQtXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NzU6c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzYtXFx0XFx0XFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAwNi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMDA3OlxcdFxcdGlmICghZnVuY19zdGF0ZXNfZXF1YWwoZW52LCBvbGQtXFx1MDAzZWZyYW1lW2ldLCBjdXItXFx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAwOC1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzQ9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMyNy1cXHRcXHRcXHRpZiAoaXNfaXRlcl9uZXh0X2luc24oZW52LCBpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMjg6XFx0XFx0XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMyOS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1cl9mcmFtZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMzNy1cXHRcXHRcXHRcXHRcXHRpdGVyX3JlZyA9IFxcdTAwMjZjdXJfZnJhbWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18xXTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMzg6XFx0XFx0XFx0XFx0XFx0LyogY3VycmVudCBzdGF0ZSBpcyB2YWxpZCBkdWUgdG8gc3RhdGVzX2VxdWFsKCksXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzM5LVxcdFxcdFxcdFxcdFxcdCAqIHNvIHdlIGNhbiBhc3N1bWUgdmFsaWQgaXRlciBhbmQgcmVnIHN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzUyLVxcdFxcdFxcdFxcdGlmIChzbC1cXHUwMDNlc3RhdGUubWF5X2dvdG9fZGVwdGggIT0gY3VyLVxcdTAwM2VtYXlfZ290b19kZXB0aCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM1MzpcXHRcXHRcXHRcXHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU0LVxcdFxcdFxcdFxcdFxcdGxvb3AgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU4LVxcdFxcdFxcdGlmIChicGZfY2FsbHNfY2FsbGJhY2soZW52LCBpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNTk6XFx0XFx0XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2MC1cXHRcXHRcXHRcXHRcXHRsb29wID0gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2Ni1cXHRcXHRcXHRpZiAoc3RhdGVzX21heWJlX2xvb3BpbmcoXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2NzpcXHRcXHRcXHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBFWEFDVCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjgtXFx0XFx0XFx0ICAgICFpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1cikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM5OS1cXHRcXHRsb29wID0gaW5jb21wbGV0ZV9yZWFkX21hcmtzKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDAwOlxcdFxcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIGxvb3AgPyBSQU5HRV9XSVRISU4gOiBOT1RfRVhBQ1QpKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDAxLWhpdDpcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQzOS1cXHRcXHRcXHQgKlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ0MDpcXHRcXHRcXHQgKiAtIFdoZW4gYSB2ZXJpZmljYXRpb24gcGF0aCBlbmNvdW50ZXJzIGEgYHN0YXRlc19lcXVhbCguLi4sXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDQxLVxcdFxcdFxcdCAqICAgUkFOR0VfV0lUSElOKWAgY29uZGl0aW9uLCB0aGVyZSBleGlzdHMgYSBjYWxsIGNoYWluIGRlc2NyaWJpbmcgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjA2LjgyNDM0MDU2NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTU5MDk3MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgU3RhdGUgQ29tcGFyaXNvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHNldmVyYWwgQlBGIHN0YXRlIGNvbXBhcmlzb24gZnVuY3Rpb25zOiBgcmVnc19leGFjdGAsIGByZWdzYWZlYCwgYHN0YWNrc2FmZWAsIGBmdW5jX3N0YXRlc19lcXVhbGAsIGBzdGF0ZXNfZXF1YWxgLCBhbmQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBpbmxpbmluZy4gQXJlIGFueSBvZiB0aGVzZSBtYXJrZWQgYG5vaW5saW5lYCBvciBkZWNsYXJlZCBhcyBgc3RhdGljYD8gVGhhdCB3b3VsZCBoYXZlIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgdGhlIGNvbXBpbGVyIG9wdGltaXplcyBjYWxscyB0byB0aGVtLiBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGxpbmtlciBpcyBkb2luZy5cblxuVGhlIGRlY2xhcmF0aW9ucyBhcmUgZ29pbmcgdG8gYmUgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLCBzbyBJJ2xsIGhlYWQgb3ZlciB0aGVyZSB0byBjaGVjay4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IEkgbmVlZCB0byBrbm93IGFib3V0IGZ1bmN0aW9uIHZpc2liaWxpdHkgYW5kIHRoZSBjb21waWxlcidzIGlubGluaW5nIGRlY2lzaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBjYWxscyB0byB0aGVzZSBhcmUgaW5saW5lZCBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzA2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTM6MDguOTgzNDQwNzEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgyMDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIocmVnc2FmZXxzdGFja3NhZmV8cmVnc19leGFjdHxzdGF0ZXNfZXF1YWwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz00NzE9c3RhdGljIGludCBjbGVhbl92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODctXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0ODg6c3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ4OS1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTQ5OD1lbnVtIGV4YWN0X2xldmVsIHtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA0LS8qIFJldHVybnMgdHJ1ZSBpZiAocm9sZCBzYWZlIGltcGxpZXMgcmN1ciBzYWZlKSAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTA1OnN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MDYtXFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA5LVxcdGlmIChleGFjdCA9PSBFWEFDVClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUxMDpcXHRcXHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MTEtXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0Mi1cXHRjYXNlIFBUUl9UT19TVEFDSzpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY0MzpcXHRcXHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy02NDQtXFx0Y2FzZSBQVFJfVE9fQVJFTkE6XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0OS1cXHRkZWZhdWx0Olxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NjUwOlxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY1MS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTY4NT1zdGF0aWMgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNjYWxhcl9yZWdfZm9yX3N0YWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY5Ni1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY5NzpzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy02OTgtXFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDQtXFx0XFx0ICogQ29uc3RydWN0IGEgZmFrZSByZWdpc3RlciBmb3Igc3VjaCBzdGFjayBhbmQgY2FsbFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NzQ1OlxcdFxcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDYtXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc1MC1cXHRcXHRcXHRpZiAob2xkX3JlZyBcXHUwMDI2XFx1MDAyNiBjdXJfcmVnKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3NTE6XFx0XFx0XFx0XFx0aWYgKCFyZWdzYWZlKGVudiwgb2xkX3JlZywgY3VyX3JlZywgaWRtYXAsIGV4YWN0KSlcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc1Mi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc4Ny1cXHRcXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc4ODpcXHRcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzg5LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9ODQyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NTYtXFx0XFx0XFx0ICBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja19hcmdfcmVnc1tpXSA6IFxcdTAwMjZub3RfaW5pdDtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjg1NzpcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfYXJnLCBjdXJfYXJnLCBpZG1hcCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODU4LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9ODY0PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkzOS0gKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0MDpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0MS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgdTMyIGluc25faWR4LCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NTMtXFx0XFx0aWYgKCgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IGxpdmVfcmVncykgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk1NDpcXHRcXHQgICAgIXJlZ3NhZmUoZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VyZWdzW2ldLCBcXHUwMDI2Y3VyLVxcdTAwM2VyZWdzW2ldLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTU1LVxcdFxcdFxcdCAgICAgXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NTctXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NTg6XFx0aWYgKCFzdGFja3NhZmUoZW52LCBvbGQsIGN1ciwgXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTU5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9OTY3PXN0YXRpYyB2b2lkIHJlc2V0X2lkbWFwX3NjcmF0Y2goc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc0LVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTc1OnN0YXRpYyBib29sIHN0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc2LVxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMDYtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwNzpcXHRcXHRpZiAoIWZ1bmNfc3RhdGVzX2VxdWFsKGVudiwgb2xkLVxcdTAwM2VmcmFtZVtpXSwgY3VyLVxcdTAwM2VmcmFtZVtpXSwgaW5zbl9pZHgsIGV4YWN0KSlcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMDgtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM0PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMjctXFx0XFx0XFx0aWYgKGlzX2l0ZXJfbmV4dF9pbnNuKGVudiwgaW5zbl9pZHgpKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzI4OlxcdFxcdFxcdFxcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMjktXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXJfZnJhbWU7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzctXFx0XFx0XFx0XFx0XFx0aXRlcl9yZWcgPSBcXHUwMDI2Y3VyX2ZyYW1lLVxcdTAwM2VyZWdzW0JQRl9SRUdfMV07XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzM4OlxcdFxcdFxcdFxcdFxcdC8qIGN1cnJlbnQgc3RhdGUgaXMgdmFsaWQgZHVlIHRvIHN0YXRlc19lcXVhbCgpLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMzOS1cXHRcXHRcXHRcXHRcXHQgKiBzbyB3ZSBjYW4gYXNzdW1lIHZhbGlkIGl0ZXIgYW5kIHJlZyBzdGF0ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1Mi1cXHRcXHRcXHRcXHRpZiAoc2wtXFx1MDAzZXN0YXRlLm1heV9nb3RvX2RlcHRoICE9IGN1ci1cXHUwMDNlbWF5X2dvdG9fZGVwdGggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNTM6XFx0XFx0XFx0XFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1NC1cXHRcXHRcXHRcXHRcXHRsb29wID0gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1OC1cXHRcXHRcXHRpZiAoYnBmX2NhbGxzX2NhbGxiYWNrKGVudiwgaW5zbl9pZHgpKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzU5OlxcdFxcdFxcdFxcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjAtXFx0XFx0XFx0XFx0XFx0bG9vcCA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjYtXFx0XFx0XFx0aWYgKHN0YXRlc19tYXliZV9sb29waW5nKFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1cikgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNjc6XFx0XFx0XFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgRVhBQ1QpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY4LVxcdFxcdFxcdCAgICAhaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTktXFx0XFx0bG9vcCA9IGluY29tcGxldGVfcmVhZF9tYXJrcyhlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUpO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQwMDpcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBsb29wID8gUkFOR0VfV0lUSElOIDogTk9UX0VYQUNUKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwMS1oaXQ6XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MzktXFx0XFx0XFx0ICpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0NDA6XFx0XFx0XFx0ICogLSBXaGVuIGEgdmVyaWZpY2F0aW9uIHBhdGggZW5jb3VudGVycyBhIGBzdGF0ZXNfZXF1YWwoLi4uLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ0MS1cXHRcXHRcXHQgKiAgIFJBTkdFX1dJVEhJTilgIGNvbmRpdGlvbiwgdGhlcmUgZXhpc3RzIGEgY2FsbCBjaGFpbiBkZXNjcmliaW5nIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzowOS4wMjkyNjYyMTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg5MDc4OTA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgZnVuY3Rpb24gaXMgd29ya2luZy4gRmlyc3QsIEkgcmVtZW1iZXIgaXQncyB0aGUgbm9uLXN0YXRpYywgZXhwb3J0ZWQgZnVuY3Rpb24gSSdtIGRlYWxpbmcgd2l0aC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlIHRoYXQgZXhwb3J0cyB0aG9zZSBCUEYgdmVyaWZpZXIgZnVuY3Rpb25zLCB3aGljaCBpcyBsaWtlbHkgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBUaGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBJIG5lZWQsIHBhcnRpY3VsYXJseSB0aG9zZSBmcm9tIGBzdGF0ZXMuY2AsIHNvIEkgY2FuIHNlZSB3aGF0J3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoxMC45MjAwNTg4MzNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODkwNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xMjEwPWludCBtYXJrX2NoYWluX3ByZWNpc2lvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8pO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTIxMS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEyMTI6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCk7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMjEzLWludCBicGZfdXBkYXRlX2JyYW5jaF9jb3VudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoxMC45NjU5NTQ5NzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTM2NjkxMTY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXIgb2YgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpcywgKndobyogaXMgY2FsbGluZyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgPyBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uIGNhbGwgZ3JhcGggdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgc3RhdGUgY2hlY2suIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgc28gSSdtIGtlZW4gdG8gZGlzc2VjdCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHByZWNpc2VseSB3aGF0J3MgaW52b2tpbmcgaXQuIFRpbWUgdG8gZmlyZSB1cCB0aGUgc291cmNlIGNvZGUgYnJvd3Nlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoyMC4zMzI4NjkxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMzI5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2lzX3N0YXRlX3Zpc2l0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTEyMDk9c3RhdGljIHZvaWQgbWFya19hbGxfc2NhbGFyc19pbXByZWNpc2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzMtXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMjM0OmludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjM1LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODM2Mz1zdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg0MjMtXFx0XFx0aWYgKGJwZl9pc19wcnVuZV9wb2ludChlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NDI0OlxcdFxcdFxcdGVyciA9IGJwZl9pc19zdGF0ZV92aXNpdGVkKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NDI1LVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoyMC4zODA5MDc5MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDY3Njc0MjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFZlcmlmaWNhdGlvbiBhbmQgU3ltYm9sIENvdmVyYWdlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHRoZSBgZG9fY2hlY2tgIHBoYXNlLCBhbmQgSSBzZWUgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBiZWluZyBjYWxsZWQuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgYGtlcm5lbC9icGYvc3RhdGVzLmNgIGZpbGUg4oCTIHRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHJlZ3NfZXhhY3RgIGFuZCBgcmVnc2FmZWAsIHdoaWNoIG1lYW5zIHRoZXNlIGFyZSBrZXkgYXJlYXMgdG8gZXhhbWluZS5cblxuTm93LCB0aGUgc3ltYm9sIGNvdmVyYWdlIHF1ZXN0aW9uIHBvcHMgdXAuIENhbiBzdGF0aWMgZnVuY3Rpb25zIGluIHRoZXNlIGAuY2AgZmlsZXMgYmUgaW5jbHVkZWQgaW4gbXkgYW5hbHlzaXMsIG9yIGFyZSB0aGV5IGlubGluZWQ/IEkgcmVtZW1iZXIgdGhhdCBibHVyYiBhYm91dCBoYW5kbGluZyBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uczogYmFzaWNhbGx5LCB0aGUgY29tcGlsZXIgY2FuIG9wdGltaXplIHRoZW0gYXdheSwgbWFraW5nIHRoZW0gaW52aXNpYmxlIHRvIHN5bWJvbCBmaWx0ZXJzLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgKnVzZSogdGhlc2Ugc3RhdGljIGhlbHBlcnMg4oCTIHRoaXMgaGVscHMgdG8gY2FwdHVyZSB0aGVtLlxuXG5UaGlua2luZyBhYm91dCBpdCwgaW4gdGhlIGNvbnRleHQgb2YgYC5jYCBmaWxlcywgdGhlIHN0YXRpYyBmdW5jdGlvbnMgKnNob3VsZCogaGF2ZSBzeW1ib2xzIGluIGBrYWxsc3ltc2AsIGxpa2UgYHJlZ3NhZmVgLCBgcmVnc19leGFjdGAsIGFuZCBgc3RhdGVzX2VxdWFsYC4gQnV0LCB0aGUga2V5IGlzIHRoZSBzaXplIG9mIHRoZSBmdW5jdGlvbi4gTHVja2lseSwgYHJlZ3NhZmVgIGFuZCBgc3RhdGVzX2VxdWFsYCBhcmUgbGFyZ2UsIHNvIHRoZXkgYXJlIHByb2JhYmx5IG5vdCBmdWxseSBpbmxpbmVkLiBFdmVuIGJldHRlciwgaW5jbHVkaW5nIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgYWxvbmcgd2l0aCBgcmVnc2FmZWAsIGByZWdzX2V4YWN0YCwgYHN0YXRlc19lcXVhbGAgYW5kIGBzdGFja3NhZmVgIGlzIGdyZWF0ISBTaW5jZSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBkaXN0aW5jdCwgbm9uLXN0YXRpYyBzeW1ib2wuXG5cblNob3VsZCBJIGV4cGFuZCB0aGUgbmV0IGFuZCBsb29rIGF0IGBicGZfY2hlY2tgPyBPciBmb2N1cyBtb3JlIG9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGA/IEFoLCB3YWl0LCBubywgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyAqc3BlY2lmaWMqIHRvIHRoZSBCUEYgdmVyaWZpZXIuIEl0J3Mgbm90IHNvbWUgdWJpcXVpdG91cyB1dGlsaXR5IGZ1bmN0aW9uLiBJdCdzIHRoZSBleGFjdCBzdGF0ZSBjb21wYXJpc29uIGVudHJ5IHBvaW50IGZvciB2ZXJpZmllciBwcnVuaW5nLiBgYnBmX3Byb2dfbG9hZGAgaXMgcmVsYXRlZCB0byBCUEYsIGJ1dCBpdCdzIGEgYnJvYWRlciBhcmVhLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMZXQgbWUgbG9vayBhdCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIOKAkyBJIHNlZSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub2AuIE5vdywgSSBuZWVkIHRvIGZpbmQgd2hlcmUgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbmVkLCBsaWtlbHkgaW4gYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjI1LjA1NzY1MzQxN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MDcxNjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjI1LjEwMzQ2ODU0N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDEzOTg2NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIEJQRl9TWVNDQUxMIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIGFwcHJvYWNoIGlzIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIHByZXByb2Nlc3NvciBzeW1ib2wgaXMgZGVjbGFyZWQuIEdpdmVuIHRoYXQgaXQncyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbXkgaHVuY2ggaXMgdGhhdCBpdCdsbCBiZSBpbiBvbmUgb2YgdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFRoZSBjaGFsbGVuZ2UgaXMgbmFycm93aW5nIGRvd24gKndoaWNoKiBLY29uZmlnIGZpbGUuIEknbGwgbGlrZWx5IHN0YXJ0IHdpdGggYSBgZmluZGAgb3IgYGdyZXBgIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgcG9zc2libHkgbGltaXRpbmcgdGhlIHNlYXJjaCB0byB0aGUgYEtjb25maWdgIG9yIGBDb25maWcuaW5gIGZpbGVzIHRvIHJlZHVjZSBub2lzZS4gSSdsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNyb3NzLXJlZmVyZW5jZXMgYW5kIGRlcGVuZGVuY2llcywgYXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBiZSBuZXN0ZWQgdW5kZXIgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgaGF2ZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBpbmZsdWVuY2UgaXRzIHByZXNlbmNlLiBNeSBhaW0gaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgZmlsZSBhbmQgc3BlY2lmaWMgc2VjdGlvbiB3aGVyZSBgQlBGX1NZU0NBTExgIGlzIGRlY2xhcmVkIGFuZCBwb3RlbnRpYWxseSBzZWUgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3Qgb24gdGhlIGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoyNy41MTc0NTcyMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzM1MjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoyOS4xODA4MTU1MDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEwMjM5NzMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIGFyb3VuZCBsaW5lIDI3LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBpbml0aWFsIGNvbnRleHQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIHBlcmZlY3QgcGxhY2UgdG8gc3RhcnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjMxLjI4MzIxNTMwMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjMxLjI4MzI4NTA5M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDk2NjM5Njg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgVmVyaWZpZXIgU3RhdGUgRXF1aXZhbGVuY2UgRml4IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUsIGFzIGl0IHB1bGxzIGluIGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBmb3IgdGhpcyBCUEYgY29kZS4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBJJ20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgbWFkZSB0byBgcmVnc19leGFjdCgpYC4gIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHN1YnRsZSBmbGF3OiB3aGVuIGNvbXBhcmluZyBzdGFjayBwb2ludGVycyBpbiB0aGUgdmVyaWZpZXIsIGl0IHdhc24ndCBjb25zaXN0ZW50bHkgY2hlY2tpbmcgYGZyYW1lbm9gLiAgUHJldmlvdXNseSwgYHJlZ3NhZmUoKWAgaGFuZGxlZCB0aGUgZnJhbWUgY2hlY2sgZm9yIGBQVFJfVE9fU1RBQ0tgIGNhc2VzLCBidXQgYHJlZ3NfZXhhY3QoKWAgd2FzIGRpcmVjdGx5IGNhbGxlZCBpbiBzb21lIHNjZW5hcmlvcyB3aXRob3V0IHRoaXMgY2hlY2ssIHNwZWNpZmljYWxseSB3aGVuIGBleGFjdCA9PSBFWEFDVGAgb3IgZm9yIHNwaWxsZWQgc3RhY2sgcmVnaXN0ZXJzLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHBydW5pbmcgb2YgdmVyaWZpY2F0aW9uIHBhdGhzLCBjb25zaWRlcmluZyBzdGFjayByZWdpc3RlcnMgZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFzIGlkZW50aWNhbCwgd2hpY2ggaXMgYSBzZXJpb3VzIGJ1Zy5cblxuVGhlIEJQRiB2ZXJpZmllciBpcywgYXMgd2UgYm90aCBrbm93LCBhIGNyaXRpY2FsIHBpZWNlOyBpdHMgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tzIChgc3RhdGVzX2VxdWFsYCwgYHJlZ3NhZmVgLCBgcmVnc19leGFjdGApIGFyZSBmdW5kYW1lbnRhbCB0byBpdHMgc291bmRuZXNzIGFuZCB0ZXJtaW5hdGlvbiBwcm9wZXJ0aWVzLiBHaXZlbiB0aGF0LCB0aGlzIGNoYW5nZSBpcyBhIGNsZWFyIGNhbmRpZGF0ZSBmb3IgdGFyZ2V0ZWQgZnV6emluZy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBmdXp6aW5nIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIHRvIGVuc3VyZSB0aGUgdmVyaWZpZXIncyBjb3JyZWN0bmVzcy4gU3l6a2FsbGVyJ3MgQlBGIGZ1enppbmcgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBicm91Z2h0IHRvIGJlYXIgaGVyZS5cblxuSSd2ZSByZXZpZXdlZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGltcGFjdGVkOiBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBgc3RhdGVzX2VxdWFsYCwgYHJlZ3NhZmVgLCBgcmVnc19leGFjdGAgYW5kIGBzdGFja3NhZmVgLiBUaGVyZSBhcmVuJ3QgYW55IG90aGVyIGRpcmVjdGx5IHJlbGV2YW50IHN5bWJvbHMsIGxpa2UgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLlxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIGFsbCB0aGUgcmVxdWlyZW1lbnRzLiBTbywgaGVyZSdzIHRoZSBmdXp6aW5nIHBsYW46XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUUlVFIChiZWNhdXNlIHRoZSBpc3N1ZSBpcyBpbiBhIGNyaXRpY2FsIHNhZmV0eSBhcmVhIGFuZCBpdCBpbXBhY3RzIHZlcmlmaWVyIGJlaGF2aW9yKVxuKiAgICoqUmVhc29uaW5nOioqIENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIGZ1enppbmcgdmVyZGljdC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIkJQRl9TWVNDQUxMXCJdYFxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbXCJyZWdzX2V4YWN0XCIsIFwicmVnc2FmZVwiLCBcInN0YXRlc19lcXVhbFwiLCBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCJdYFxuXG5Mb29rcyBnb29kOyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MDIsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTM6NDYuMjQ5Njg0MDc1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyNTQwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnc19leGFjdFwiLFxuICAgIFwicmVnc2FmZVwiLFxuICAgIFwic3RhdGVzX2VxdWFsXCIsXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLCBtb3ZpbmcgdGhlIGZyYW1lbm8gZXF1YWxpdHkgY2hlY2sgaW50byByZWdzX2V4YWN0KCkuIFRoaXMgYWZmZWN0cyBzdGF0ZSBjb21wYXJpc29uIGZvciBQVFJfVE9fU1RBQ0sgcmVnaXN0ZXJzIChpbmNsdWRpbmcgc3BpbGxlZCByZWdpc3RlcnMgZHVyaW5nIGxvb3Agc3RhdGUgcHJ1bmluZykuIEZ1enppbmcgdmlhIHRoZSBicGYgc3lzY2FsbCBpcyBjcml0aWNhbCB0byB2ZXJpZnkgc291bmRuZXNzIGFuZCBlbnN1cmUgbm8gdmVyaWZpZXIgcmVncmVzc2lvbnMgb3IgaW5maW5pdGUgbG9vcHMvc2FmZXR5IGJ5cGFzc2VzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnc19leGFjdFwiLFxuICAgIFwicmVnc2FmZVwiLFxuICAgIFwic3RhdGVzX2VxdWFsXCIsXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLCBtb3ZpbmcgdGhlIGZyYW1lbm8gZXF1YWxpdHkgY2hlY2sgaW50byByZWdzX2V4YWN0KCkuIFRoaXMgYWZmZWN0cyBzdGF0ZSBjb21wYXJpc29uIGZvciBQVFJfVE9fU1RBQ0sgcmVnaXN0ZXJzIChpbmNsdWRpbmcgc3BpbGxlZCByZWdpc3RlcnMgZHVyaW5nIGxvb3Agc3RhdGUgcHJ1bmluZykuIEZ1enppbmcgdmlhIHRoZSBicGYgc3lzY2FsbCBpcyBjcml0aWNhbCB0byB2ZXJpZnkgc291bmRuZXNzIGFuZCBlbnN1cmUgbm8gdmVyaWZpZXIgcmVncmVzc2lvbnMgb3IgaW5maW5pdGUgbG9vcHMvc2FmZXR5IGJ5cGFzc2VzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1Mzo0Ni4zMjk5NDUyMzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDI2NDQxNTkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjQ2LjMzMDM5MjEwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyMDI2Mzk2MzIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLiBTcGVjaWZpY2FsbHksIGl0IG1vdmVzIHRoZSBmcmFtZSBudW1iZXIgY2hlY2sgKHJvbGQtXFx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cXHUwMDNlZnJhbWVubykgaW50byByZWdzX2V4YWN0KCksIGVuc3VyaW5nIHRoYXQgZXhhY3QgcmVnaXN0ZXIgc3RhdGUgY29tcGFyaXNvbnMgKHN1Y2ggYXMgZHVyaW5nIGxvb3AgZGV0ZWN0aW9uIGFuZCBzcGlsbGVkIHN0YWNrIHBvaW50ZXIgY29tcGFyaXNvbikgY29ycmVjdGx5IGRpc3Rpbmd1aXNoIHN0YWNrIHBvaW50ZXJzIGZyb20gZGlmZmVyZW50IGNhbGwgZnJhbWVzLlxcblxcblRoZSB0b3VjaGVkIGZpZWxkcyAocm9sZC1cXHUwMDNlZnJhbWVubyBhbmQgcmN1ci1cXHUwMDNlZnJhbWVubykgaW4gc3RydWN0IGJwZl9yZWdfc3RhdGUgYXJlIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVycyBhbmQgZnVuYyBzdGF0ZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKHZpYSBtZW1zZXQoKSBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoKSBhbmQgaW5pdF9mdW5jX3N0YXRlKCkpLiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzhmMGI0YTI5MTljMWNhZmU1NjFiNzIwMTU0YWE3Yzc5NTg1ODllZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDE5OjUyOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjgyNzAzOGVjMThiN2EgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtNDkxLDcgKzQ5MSw4IEBAIHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4ge1xuIFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApO1xuK1x0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZXBhcmVudF9pZCwgcmN1ci1cdTAwM2VwYXJlbnRfaWQsIGlkbWFwKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vO1xuIH1cbiBcbiBlbnVtIGV4YWN0X2xldmVsIHtcbkBAIC02MzksMTAgKzY0MCw3IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gXHRcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgICB0bnVtX2luKHJvbGQtXHUwMDNldmFyX29mZiwgcmN1ci1cdTAwM2V2YXJfb2ZmKTtcbiBcdGNhc2UgUFRSX1RPX1NUQUNLOlxuLVx0XHQvKiB0d28gc3RhY2sgcG9pbnRlcnMgYXJlIGVxdWFsIG9ubHkgaWYgdGhleSdyZSBwb2ludGluZyB0b1xuLVx0XHQgKiB0aGUgc2FtZSBzdGFjayBmcmFtZSwgc2luY2UgZnAtOCBpbiBmb28gIT0gZnAtOCBpbiBiYXJcbi1cdFx0ICovXG4tXHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKSBcdTAwMjZcdTAwMjYgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVubztcbitcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuIFx0Y2FzZSBQVFJfVE9fQVJFTkE6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBQVFJfVE9fSU5TTjpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNcbmluZGV4IGQyNDhjZTg3N2YxNGUuLmY4YjdiYTFiZjZiODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuQEAgLTMwMyw0ICszMDMsNzAgQEAgX19uYWtlZCB2b2lkIG1heWJlX2V4aXRfc2NjX2J1ZzEodm9pZClcbiBcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rLypcbisgKiBUaGUgbG9vcCByZWFkcyB6ZXJvIGZyb20gdGhlIGNhbGxlcidzIHN0YWNrIG9uIGl0cyBmaXJzdCBpdGVyYXRpb24gYW5kXG4rICogb25lIGZyb20gdGhlIGNhbGxlZSdzIHN0YWNrIG9uIGl0cyBzZWNvbmQgaXRlcmF0aW9uLiBBdCB0aGUgbG9vcCBoZWFkZXIsXG4rICogb25seSB0aGUgZnJhbWUgbnVtYmVyIG9mIHRoZSBwb2ludGVyIGluIHIxIGNoYW5nZXMuXG4rICovXG4rc3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbit2b2lkIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCIqKHU2NCAqKShyMTAgLSA4KSA9IDE7XCJcbitcdFwiMTogcjAgPSAqKHU2NCAqKShyMSArIDApO1wiXG4rXHRcImlmIHIwICE9IDAgZ290byAyZjtcIlxuK1x0XCJyMSA9IHIxMDtcIlxuK1x0XCJyMSArPSAtODtcIlxuK1x0XCJnb3RvIDFiO1wiXG4rXHRcIjI6IGV4aXQ7XCJcbitcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rU0VDKFwieGRwXCIpXG4rX19kZXNjcmlwdGlvbihcImJvdW5kZWQgbG9vcCBjaGFuZ2luZyBzdGFjayBmcmFtZSBpbiBhIHJlZ2lzdGVyXCIpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDEpXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitfX25ha2VkIHZvaWQgYm91bmRlZF9sb29wX3N0YWNrX2ZyYW1lc19yZWcodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiKih1NjQgKikocjEwIC0gOCkgPSAwO1wiXG4rXHRcInIxID0gcjEwO1wiXG4rXHRcInIxICs9IC04O1wiXG4rXHRcImNhbGwgbG9vcF9zdGFja19mcmFtZXNfcmVnO1wiXG4rXHRcImV4aXQ7XCJcbitcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBFeGVyY2lzZSB0aGUgc2FtZSBmcmFtZSBjaGFuZ2UgdGhyb3VnaCBhIHNwaWxsZWQgcG9pbnRlci4gQWxsIHJlZ2lzdGVyc1xuKyAqIGF0IHRoZSBsb29wIGhlYWRlciBhcmUgaWRlbnRpY2FsLCB3aGlsZSBmcC0xNiBwb2ludHMgdG8gYSBkaWZmZXJlbnQgZnJhbWUuXG4rICovXG4rc3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbit2b2lkIGxvb3Bfc3RhY2tfZnJhbWVzX3NwaWxsKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIioodTY0ICopKHIxMCAtIDgpID0gMTtcIlxuK1x0XCIqKHU2NCAqKShyMTAgLSAxNikgPSByMTtcIlxuK1x0XCIxOiByMSA9ICoodTY0ICopKHIxMCAtIDE2KTtcIlxuK1x0XCJyMCA9ICoodTY0ICopKHIxICsgMCk7XCJcbitcdFwiaWYgcjAgIT0gMCBnb3RvIDJmO1wiXG4rXHRcInIxID0gcjEwO1wiXG4rXHRcInIxICs9IC04O1wiXG4rXHRcIioodTY0ICopKHIxMCAtIDE2KSA9IHIxO1wiXG4rXHRcImdvdG8gMWI7XCJcbitcdFwiMjogZXhpdDtcIlxuK1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJ4ZHBcIilcbitfX2Rlc2NyaXB0aW9uKFwiYm91bmRlZCBsb29wIGNoYW5naW5nIHN0YWNrIGZyYW1lIGluIGEgc3BpbGxcIilcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMSlcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK19fbmFrZWQgdm9pZCBib3VuZGVkX2xvb3Bfc3RhY2tfZnJhbWVzX3NwaWxsKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIioodTY0ICopKHIxMCAtIDgpID0gMDtcIlxuK1x0XCJyMSA9IHIxMDtcIlxuK1x0XCJyMSArPSAtODtcIlxuK1x0XCJjYWxsIGxvb3Bfc3RhY2tfZnJhbWVzX3NwaWxsO1wiXG4rXHRcImV4aXQ7XCJcbitcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTM6NDYuMzMwMzkzMjQ0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyOTUxMzg2OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbjogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuIGluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIHdlJ3JlIGFscmVhZHkgZG9pbmcuIExldCdzIHRoaW5rIHRoaXMgdGhyb3VnaCBzeXN0ZW1hdGljYWxseSwgbGlrZSBhbnkgZ29vZCBrZXJuZWwgZGV2ZWxvcGVyLlxuXG5GaXJzdCwgdGhlIHNhZmV0eSBjaGVjazogVGhpcyBpcyBjbGVhcmx5IGRlZmVuc2l2ZSB3b3JrIOKAkyBrZXJuZWwgYXVkaXRpbmcsIGJ1ZyBkZXRlY3Rpb24sIHRoZSB1c3VhbC4gTm8gbWFsaWNpb3VzIGludGVudCBvciBleHBsb2l0IGdlbmVyYXRpb24gaGVyZSwgc28gd2UncmUgb3BlcmF0aW5nIGluIGEgYmVuaWduIGVudmlyb25tZW50LiBTZXZlcml0eSBpcyBsb3c7IHdlIGNhbiBwcm9jZWVkIHdpdGhvdXQgdW5kdWUgY29uY2Vybi5cblxuTm93LCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCB0b3VjaGVzIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhbmQgYWRkcyB0ZXN0cyB0byBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jYC4gQWxyaWdodCwgbGV0J3Mgem9vbSBpbiBvbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIFRoZSBjb2RlIHNuaXBwZXQgcHJvdmlkZWQgaGlnaGxpZ2h0cyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSA0OTEsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUncyBhIG5ldyBjaGVjayBgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVub2AgaW4gYSBmZXcgcGxhY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBgZnJhbWVub2AgY29tcGFyaXNvbiBhbmQgaXRzIGNvbnRleHQuIFdoYXQncyBpdCBkb2luZz8gSXMgaXQgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgS0FTQU4gbWlnaHQgbWlzcz9cblxuSSBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSBvZiBga2VybmVsL2JwZi9zdGF0ZXMuY2AgYW5kIGhvdyBgcmVnc19leGFjdGAgaXMgYmVpbmcgdXNlZC4gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBmaWxlIGFuZCB0aGUgbGluZXMgaW4gcXVlc3Rpb24sIHVzaW5nIGdyZXBwZXIgb3IgcmVhZC1maWxlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6MDkuMjgxNzgyMjM0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHRcXHRcXHR1MzIgaXAgPSBicGZfZnJhbWVfaW5zbl9pZHgoc3QsIGkpO1xcbiA0ODE6XFx0XFx0XFx0dTE2IGxpdmVfcmVncyA9IGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpcF0ubGl2ZV9yZWdzX2JlZm9yZTtcXG4gNDgyOlxcdFxcbiA0ODM6XFx0XFx0XFx0X19jbGVhbl9mdW5jX3N0YXRlKGVudiwgc3QtXFx1MDAzZWZyYW1lW2ldLCBsaXZlX3JlZ3MsIGkpO1xcbiA0ODQ6XFx0XFx0fVxcbiA0ODU6XFx0XFx0cmV0dXJuIDA7XFxuIDQ4NjpcXHR9XFxuIDQ4NzpcXHRcXG4gNDg4OlxcdHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxuIDQ4OTpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsXFxuIDQ5MDpcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuIDQ5MTpcXHR7XFxuIDQ5MjpcXHRcXHRyZXR1cm4gbWVtY21wKHJvbGQsIHJjdXIsIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZCkpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4gNDkzOlxcdFxcdCAgICAgICBjaGVja19pZHMocm9sZC1cXHUwMDNlaWQsIHJjdXItXFx1MDAzZWlkLCBpZG1hcCkgXFx1MDAyNlxcdTAwMjZcXG4gNDk0OlxcdFxcdCAgICAgICBjaGVja19pZHMocm9sZC1cXHUwMDNlcGFyZW50X2lkLCByY3VyLVxcdTAwM2VwYXJlbnRfaWQsIGlkbWFwKSBcXHUwMDI2XFx1MDAyNlxcbiA0OTU6XFx0XFx0ICAgICAgIHJvbGQtXFx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cXHUwMDNlZnJhbWVubztcXG4gNDk2OlxcdH1cXG4gNDk3OlxcdFxcbiA0OTg6XFx0ZW51bSBleGFjdF9sZXZlbCB7XFxuIDQ5OTpcXHRcXHROT1RfRVhBQ1QsXFxuIDUwMDpcXHRcXHRFWEFDVCxcXG4gNTAxOlxcdFxcdFJBTkdFX1dJVEhJTlxcbiA1MDI6XFx0fTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0LyogUmV0dXJucyB0cnVlIGlmIChyb2xkIHNhZmUgaW1wbGllcyByY3VyIHNhZmUpICovXFxuIDUwNTpcXHRzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbiA1MDY6XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG4gNTA3OlxcdFxcdFxcdCAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbiA1MDg6XFx0e1xcbiA1MDk6XFx0XFx0aWYgKGV4YWN0ID09IEVYQUNUKVxcbiA1MTA6XFx0XFx0XFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRpZiAocm9sZC1cXHUwMDNldHlwZSA9PSBOT1RfSU5JVClcXG4gNTEzOlxcdFxcdFxcdC8qIGV4cGxvcmVkIHN0YXRlIGNhbid0IGhhdmUgdXNlZCB0aGlzICovXFxuIDUxNDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNTE1OlxcdFxcbiA1MTY6XFx0XFx0LyogRW5mb3JjZSB0aGF0IHJlZ2lzdGVyIHR5cGVzIGhhdmUgdG8gbWF0Y2ggZXhhY3RseSwgaW5jbHVkaW5nIHRoZWlyXFxuIDUxNzpcXHRcXHQgKiBtb2RpZmllcnMgKGxpa2UgUFRSX01BWUJFX05VTEwsIE1FTV9SRE9OTFksIGV0YyksIGFzIGEgZ2VuZXJhbFxcbiA1MTg6XFx0XFx0ICogcnVsZS5cXG4gNTE5OlxcdFxcdCAqXFxuIDUyMDpcXHRcXHQgKiBPbmUgY2FuIG1ha2UgYSBwb2ludCB0aGF0IHVzaW5nIGEgcG9pbnRlciByZWdpc3RlciBhcyB1bmJvdW5kZWRcXG4gNTIxOlxcdFxcdCAqIFNDQUxBUiB3b3VsZCBiZSB0ZWNobmljYWxseSBhY2NlcHRhYmxlLCBidXQgdGhpcyBjb3VsZCBsZWFkIHRvXFxuIDUyMjpcXHRcXHQgKiBwb2ludGVyIGxlYWtzIGJlY2F1c2Ugc2NhbGFycyBhcmUgYWxsb3dlZCB0byBsZWFrIHdoaWxlIHBvaW50ZXJzXFxuIDUyMzpcXHRcXHQgKiBhcmUgbm90LiBXZSBjb3VsZCBtYWtlIHRoaXMgc2FmZSBpbiBzcGVjaWFsIGNhc2VzIGlmIHJvb3QgaXNcXG4gNTI0OlxcdFxcdCAqIGNhbGxpbmcgdXMsIGJ1dCBpdCdzIHByb2JhYmx5IG5vdCB3b3J0aCB0aGUgaGFzc2xlLlxcbiA1MjU6XFx0XFx0ICpcXG4gNTI2OlxcdFxcdCAqIEFsc28sIHJlZ2lzdGVyIHR5cGVzIHRoYXQgYXJlICpub3QqIE1BWUJFX05VTEwgY291bGQgdGVjaG5pY2FsbHkgYmVcXG4gNTI3OlxcdFxcdCAqIHNhZmUgdG8gdXNlIGFzIHRoZWlyIE1BWUJFX05VTEwgdmFyaWFudHMgKGUuZy4sIFBUUl9UT19NQVBfVkFMVUVcXG4gNTI4OlxcdFxcdCAqIGlzIHNhZmUgdG8gYmUgdXNlZCBhcyBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwsIHByb3ZpZGVkIGJvdGggcG9pbnRcXG4gNTI5OlxcdFxcdCAqIHRvIHRoZSBzYW1lIG1hcCkuXFxuIDUzMDpcXHRcXHQgKiBIb3dldmVyLCBpZiB0aGUgb2xkIE1BWUJFX05VTEwgcmVnaXN0ZXIgdGhlbiBnb3QgTlVMTCBjaGVja2VkLFxcbiA1MzE6XFx0XFx0ICogZG9pbmcgc28gY291bGQgaGF2ZSBhZmZlY3RlZCBvdGhlcnMgd2l0aCB0aGUgc2FtZSBpZCwgYW5kIHdlIGNhbid0XFxuIDUzMjpcXHRcXHQgKiBjaGVjayBmb3IgdGhhdCBiZWNhdXNlIHdlIGxvc3QgdGhlIGlkIHdoZW4gd2UgY29udmVydGVkIHRvXFxuIDUzMzpcXHRcXHQgKiBhIG5vbi1NQVlCRV9OVUxMIHZhcmlhbnQuXFxuIDUzNDpcXHRcXHQgKiBTbywgYXMgYSBnZW5lcmFsIHJ1bGUgd2UgZG9uJ3QgYWxsb3cgbWl4aW5nIE1BWUJFX05VTEwgYW5kXFxuIDUzNTpcXHRcXHQgKiBub24tTUFZQkVfTlVMTCByZWdpc3RlcnMgYXMgd2VsbC5cXG4gNTM2OlxcdFxcdCAqL1xcbiA1Mzc6XFx0XFx0aWYgKHJvbGQtXFx1MDAzZXR5cGUgIT0gcmN1ci1cXHUwMDNldHlwZSlcXG4gNTM4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDowOS4yODE4ODg2MTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTg4NzIxNzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHJlZ3NfZXhhY3RgIGFuZCBgYnBmX3JlZ19zdGF0ZWAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGByZWdzX2V4YWN0YCBpbiB0aGlzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBBbmQsIHdoaWxlIEknbSBhdCBpdCwgSSBzaG91bGQgdmVyaWZ5IHdoYXQgdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgbG9va3MgbGlrZS4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyByZWdpc3RlciBzdGF0ZSBpcyBiZWluZyB0cmFja2VkIGFuZCBtb2RpZmllZCBhcm91bmQgdGhlIGZ1bmN0aW9uIGNhbGwuIFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlJ3MgZmllbGRzIGFuZCB0aGVpciBwdXJwb3NlIHdpbGwgZ2l2ZSBtZSBhIGNyaXRpY2FsIHVuZGVyc3RhbmRpbmcuIFRoaXMgd2lsbCBoZWxwIG1lIHRvIGRlZHVjZSwgYXQgYSBnbGFuY2UsIHdoYXQgdGhlIGZ1bmN0aW9uICpzaG91bGQqIGJlIGRvaW5nIHRvIHRoZSByZWdpc3RlciBzdGF0ZS4gQW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2lsbCBiZSBxdWlja2x5IG5vdGljZWQuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIHJlZ2lzdGVyIHN0YXRlJ3MgbW9kaWZpY2F0aW9uIHdpdGggdGhlIG5hdHVyZSBvZiB0aGUgQlBGIHByb2dyYW0gYmVpbmcgYW5hbHl6ZWQuIFVsdGltYXRlbHksIEknbSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEJQRiB2ZXJpZmllciBvciBleGVjdXRpb24gZW52aXJvbm1lbnQuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gYSBkZWVwZXIgZGl2ZSwgYW5kIEkgd2FudCB0byBidWlsZCBhIHNvbGlkIGZvdW5kYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjE1LjE2OTEwODIzNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDA6XFx0XFx0c3dpdGNoIChiYXNlX3R5cGUocm9sZC1cXHUwMDNldHlwZSkpIHtcXG4gNTQxOlxcdFxcdGNhc2UgU0NBTEFSX1ZBTFVFOlxcbiA1NDI6XFx0XFx0XFx0aWYgKGVudi1cXHUwMDNlZXhwbG9yZV9hbHVfbGltaXRzKSB7XFxuIDU0MzpcXHRcXHRcXHRcXHQvKiBleHBsb3JlX2FsdV9saW1pdHMgZGlzYWJsZXMgdG51bV9pbigpIGFuZCByYW5nZV93aXRoaW4oKVxcbiA1NDQ6XFx0XFx0XFx0XFx0ICogbG9naWMgYW5kIHJlcXVpcmVzIGV2ZXJ5dGhpbmcgdG8gYmUgc3RyaWN0XFxuIDU0NTpcXHRcXHRcXHRcXHQgKi9cXG4gNTQ2OlxcdFxcdFxcdFxcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiA1NDc6XFx0XFx0XFx0XFx0ICAgICAgIGNoZWNrX3NjYWxhcl9pZHMocm9sZC1cXHUwMDNlaWQsIHJjdXItXFx1MDAzZWlkLCBpZG1hcCk7XFxuIDU0ODpcXHRcXHRcXHR9XFxuIDU0OTpcXHRcXHRcXHRpZiAoIXJvbGQtXFx1MDAzZXByZWNpc2UgXFx1MDAyNlxcdTAwMjYgZXhhY3QgPT0gTk9UX0VYQUNUKVxcbiA1NTA6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDU1MTpcXHRcXHRcXHQvKlxcbiA1NTI6XFx0XFx0XFx0ICogTGlua2VkIHJlZ2lzdGVyIHRyYWNraW5nIHVzZXMgcm9sZC1cXHUwMDNlaWQgdG8gZGV0ZWN0IHJlbGF0aW9uc2hpcHMuXFxuIDU1MzpcXHRcXHRcXHQgKiBXaGVuIHJvbGQtXFx1MDAzZWlkID09IDAsIHRoZSByZWdpc3RlciBpcyBpbmRlcGVuZGVudCBhbmQgYW55IGxpbmtpbmdcXG4gNTU0OlxcdFxcdFxcdCAqIGluIHJjdXIgb25seSBhZGRzIGNvbnN0cmFpbnRzLiBXaGVuIHJvbGQtXFx1MDAzZWlkICE9IDAsIHdlIG11c3QgdmVyaWZ5XFxuIDU1NTpcXHRcXHRcXHQgKiBpZCBtYXBwaW5nIGFuZCAoZm9yIEJQRl9BRERfQ09OU1QpIG9mZnNldCBjb25zaXN0ZW5jeS5cXG4gNTU2OlxcdFxcdFxcdCAqXFxuIDU1NzpcXHRcXHRcXHQgKiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rXFxuIDU1ODpcXHRcXHRcXHQgKiB8ICAgICAgICAgICAgICAgICAgfCByb2xkLVxcdTAwM2VpZCAgfCByb2xkICsgQUREX0NPTlNUIHwgcm9sZC1cXHUwMDNlaWQgPT0gMCB8XFxuIDU1OTpcXHRcXHRcXHQgKiB8LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS18XFxuIDU2MDpcXHRcXHRcXHQgKiB8IHJjdXItXFx1MDAzZWlkICAgICAgICAgfCByYW5nZSxpZHMgfCBmYWxzZSAgICAgICAgICAgIHwgcmFuZ2UgICAgICAgICB8XFxuIDU2MTpcXHRcXHRcXHQgKiB8IHJjdXIgKyBBRERfQ09OU1QgfCBmYWxzZSAgICAgfCByYW5nZSxpZHMsb2ZmICAgIHwgcmFuZ2UgICAgICAgICB8XFxuIDU2MjpcXHRcXHRcXHQgKiB8IHJjdXItXFx1MDAzZWlkID09IDAgICAgfCByYW5nZSxpZHMgfCBmYWxzZSAgICAgICAgICAgIHwgcmFuZ2UgICAgICAgICB8XFxuIDU2MzpcXHRcXHRcXHQgKiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rXFxuIDU2NDpcXHRcXHRcXHQgKlxcbiA1NjU6XFx0XFx0XFx0ICogV2h5IGNoZWNrX2lkcygpIGZvciBzY2FsYXIgcmVnaXN0ZXJzP1xcbiA1NjY6XFx0XFx0XFx0ICpcXG4gNTY3OlxcdFxcdFxcdCAqIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgQlBGIGNvZGU6XFxuIDU2ODpcXHRcXHRcXHQgKiAgIDE6IHI2ID0gLi4uIHVuYm91bmQgc2NhbGFyLCBJRD1hIC4uLlxcbiA1Njk6XFx0XFx0XFx0ICogICAyOiByNyA9IC4uLiB1bmJvdW5kIHNjYWxhciwgSUQ9YiAuLi5cXG4gNTcwOlxcdFxcdFxcdCAqICAgMzogaWYgKHI2IFxcdTAwM2UgcjcpIGdvdG8gKzFcXG4gNTcxOlxcdFxcdFxcdCAqICAgNDogcjYgPSByN1xcbiA1NzI6XFx0XFx0XFx0ICogICA1OiBpZiAocjYgXFx1MDAzZSBYKSBnb3RvIC4uLlxcbiA1NzM6XFx0XFx0XFx0ICogICA2OiAuLi4gbWVtb3J5IG9wZXJhdGlvbiB1c2luZyByNyAuLi5cXG4gNTc0OlxcdFxcdFxcdCAqXFxuIDU3NTpcXHRcXHRcXHQgKiBGaXJzdCB2ZXJpZmljYXRpb24gcGF0aCBpcyBbMS02XTpcXG4gNTc2OlxcdFxcdFxcdCAqIC0gYXQgKDQpIHNhbWUgYnBmX3JlZ19zdGF0ZTo6aWQgKGIpIHdvdWxkIGJlIGFzc2lnbmVkIHRvIHI2IGFuZCByNztcXG4gNTc3OlxcdFxcdFxcdCAqIC0gYXQgKDUpIHI2IHdvdWxkIGJlIG1hcmtlZCBcXHUwMDNjPSBYLCBzeW5jX2xpbmtlZF9yZWdzKCkgd291bGQgYWxzbyBtYXJrXFxuIDU3ODpcXHRcXHRcXHQgKiAgIHI3IFxcdTAwM2M9IFgsIGJlY2F1c2UgcjYgYW5kIHI3IHNoYXJlIHNhbWUgaWQuXFxuIDU3OTpcXHRcXHRcXHQgKiBOZXh0IHZlcmlmaWNhdGlvbiBwYXRoIGlzIFsxLTQsIDZdLlxcbiA1ODA6XFx0XFx0XFx0ICpcXG4gNTgxOlxcdFxcdFxcdCAqIEluc3RydWN0aW9uICg2KSB3b3VsZCBiZSByZWFjaGVkIGluIHR3byBzdGF0ZXM6XFxuIDU4MjpcXHRcXHRcXHQgKiAgIEkuICByNnsuaWQ9Yn0sIHI3ey5pZD1ifSB2aWEgcGF0aCAxLTY7XFxuIDU4MzpcXHRcXHRcXHQgKiAgIElJLiByNnsuaWQ9YX0sIHI3ey5pZD1ifSB2aWEgcGF0aCAxLTQsIDYuXFxuIDU4NDpcXHRcXHRcXHQgKlxcbiA1ODU6XFx0XFx0XFx0ICogVXNlIGNoZWNrX2lkcygpIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIHN0YXRlcy5cXG4gNTg2OlxcdFxcdFxcdCAqIC0tLVxcbiA1ODc6XFx0XFx0XFx0ICogQWxzbyB2ZXJpZnkgdGhhdCBuZXcgdmFsdWUgc2F0aXNmaWVzIG9sZCB2YWx1ZSByYW5nZSBrbm93bGVkZ2UuXFxuIDU4ODpcXHRcXHRcXHQgKi9cXG4gNTg5OlxcdFxcbiA1OTA6XFx0XFx0XFx0LypcXG4gNTkxOlxcdFxcdFxcdCAqIEFERF9DT05TVCBmbGFncyBtdXN0IG1hdGNoIGV4YWN0bHk6IEJQRl9BRERfQ09OU1QzMiBhbmRcXG4gNTkyOlxcdFxcdFxcdCAqIEJQRl9BRERfQ09OU1Q2NCBoYXZlIGRpZmZlcmVudCBsaW5raW5nIHNlbWFudGljcyBpblxcbiA1OTM6XFx0XFx0XFx0ICogc3luY19saW5rZWRfcmVncygpIChhbHUzMiB6ZXJvLWV4dGVuZHMsIGFsdTY0IGRvZXMgbm90KSxcXG4gNTk0OlxcdFxcdFxcdCAqIHNvIHBydW5pbmcgYWNyb3NzIGRpZmZlcmVudCBmbGFnIHR5cGVzIGlzIHVuc2FmZS5cXG4gNTk1OlxcdFxcdFxcdCAqL1xcbiA1OTY6XFx0XFx0XFx0aWYgKHJvbGQtXFx1MDAzZWlkIFxcdTAwMjZcXHUwMDI2XFxuIDU5NzpcXHRcXHRcXHQgICAgKHJvbGQtXFx1MDAzZWlkIFxcdTAwMjYgQlBGX0FERF9DT05TVCkgIT0gKHJjdXItXFx1MDAzZWlkIFxcdTAwMjYgQlBGX0FERF9DT05TVCkpXFxuIDU5ODpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDU5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6MTUuMTY5MjQ4OTE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxMjc1MTU5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHNlY3Rpb24gaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgIGZyb20gbGluZXMgNjAwIHRvIDY2MC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgQlBGIHN0YXRlIG1hbmFnZW1lbnQgaXMgaGFuZGxlZCB0aGVyZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgYXJvdW5kIGhvdyBwcm9ncmFtIHN0YXRlcyBhcmUgdHJhY2tlZCwgcG90ZW50aWFsbHkgY29udGV4dCBzd2l0Y2hpbmcsIG9yIHBvc3NpYmx5IHNvbWUgYXNwZWN0cyBvZiBob3cgdGhlIEJQRiB2aXJ0dWFsIG1hY2hpbmUgaW50ZXJhY3RzIHdpdGgga2VybmVsIGRhdGEgc3RydWN0dXJlcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoaXMgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgaW50ZXJuYWwgbWVjaGFuaWNzLCBtYXliZSByZWxhdGVkIHRvIHJlZ2lzdGVycywgc3RhY2sgZnJhbWVzLCBvciB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZW52aXJvbm1lbnQgZm9yIEJQRiBwcm9ncmFtcy4gSSdtIGhvcGluZyBJIGNhbiBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGludm9sdmVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIHN0YXRlIHRyYW5zaXRpb24gbG9naWMsIGJlY2F1c2Uga25vd2luZyB3aGVyZSB0aGUgaW5lZmZpY2llbmNpZXMgbWlnaHQgYmUgaXMga2V5IHRvIG9wdGltaXppbmcgdGhpcyBraW5kIG9mIGNvZGUuIEkgYW50aWNpcGF0ZSBJJ2xsIHByb2JhYmx5IGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSB2YXJpb3VzIGtlcm5lbCBjb21wb25lbnRzIGludGVyYWN0IGFzIHRoZSBwcm9ncmFtIG1vdmVzIHRocm91Z2ggZGlmZmVyZW50IHN0YXRlcy4gUmlnaHQsIGxldCdzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDoyMS4yOTY3Njg1MjFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcdFxcdC8qIEJvdGggaGF2ZSBvZmZzZXQgbGlua2FnZTogb2Zmc2V0cyBtdXN0IG1hdGNoICovXFxuIDYwMTpcXHRcXHRcXHRpZiAoKHJvbGQtXFx1MDAzZWlkIFxcdTAwMjYgQlBGX0FERF9DT05TVCkgXFx1MDAyNlxcdTAwMjYgcm9sZC1cXHUwMDNlZGVsdGEgIT0gcmN1ci1cXHUwMDNlZGVsdGEpXFxuIDYwMjpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDYwMzpcXHRcXG4gNjA0OlxcdFxcdFxcdGlmICghY2hlY2tfc2NhbGFyX2lkcyhyb2xkLVxcdTAwM2VpZCwgcmN1ci1cXHUwMDNlaWQsIGlkbWFwKSlcXG4gNjA1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNjA2OlxcdFxcbiA2MDc6XFx0XFx0XFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcXHUwMDI2XFx1MDAyNiB0bnVtX2luKHJvbGQtXFx1MDAzZXZhcl9vZmYsIHJjdXItXFx1MDAzZXZhcl9vZmYpO1xcbiA2MDg6XFx0XFx0Y2FzZSBQVFJfVE9fTUFQX0tFWTpcXG4gNjA5OlxcdFxcdGNhc2UgUFRSX1RPX01BUF9WQUxVRTpcXG4gNjEwOlxcdFxcdGNhc2UgUFRSX1RPX01FTTpcXG4gNjExOlxcdFxcdGNhc2UgUFRSX1RPX0JVRjpcXG4gNjEyOlxcdFxcdGNhc2UgUFRSX1RPX1RQX0JVRkZFUjpcXG4gNjEzOlxcdFxcdFxcdC8qIElmIHRoZSBuZXcgbWluL21heC92YXJfb2ZmIHNhdGlzZnkgdGhlIG9sZCBvbmVzIGFuZFxcbiA2MTQ6XFx0XFx0XFx0ICogZXZlcnl0aGluZyBlbHNlIG1hdGNoZXMsIHdlIGFyZSBPSy5cXG4gNjE1OlxcdFxcdFxcdCAqL1xcbiA2MTY6XFx0XFx0XFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgdmFyX29mZikpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4gNjE3OlxcdFxcdFxcdCAgICAgICByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXFx1MDAyNlxcdTAwMjZcXG4gNjE4OlxcdFxcdFxcdCAgICAgICB0bnVtX2luKHJvbGQtXFx1MDAzZXZhcl9vZmYsIHJjdXItXFx1MDAzZXZhcl9vZmYpIFxcdTAwMjZcXHUwMDI2XFxuIDYxOTpcXHRcXHRcXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXFx1MDAzZWlkLCByY3VyLVxcdTAwM2VpZCwgaWRtYXApIFxcdTAwMjZcXHUwMDI2XFxuIDYyMDpcXHRcXHRcXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXFx1MDAzZXBhcmVudF9pZCwgcmN1ci1cXHUwMDNlcGFyZW50X2lkLCBpZG1hcCk7XFxuIDYyMTpcXHRcXHRjYXNlIFBUUl9UT19QQUNLRVRfTUVUQTpcXG4gNjIyOlxcdFxcdGNhc2UgUFRSX1RPX1BBQ0tFVDpcXG4gNjIzOlxcdFxcdFxcdC8qIFdlIG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtdWNoIHJhbmdlIGFzIHRoZSBvbGQgcHRyXFxuIDYyNDpcXHRcXHRcXHQgKiBkaWQsIHNvIHRoYXQgYW55IGFjY2Vzc2VzIHdoaWNoIHdlcmUgc2FmZSBiZWZvcmUgYXJlXFxuIDYyNTpcXHRcXHRcXHQgKiBzdGlsbCBzYWZlLiAgVGhpcyBpcyB0cnVlIGV2ZW4gaWYgb2xkIHJhbmdlIFxcdTAwM2Mgb2xkIG9mZixcXG4gNjI2OlxcdFxcdFxcdCAqIHNpbmNlIHNvbWVvbmUgY291bGQgaGF2ZSBhY2Nlc3NlZCB0aHJvdWdoIChwdHIgLSBrKSwgb3JcXG4gNjI3OlxcdFxcdFxcdCAqIGV2ZW4gZG9uZSBwdHIgLT0gayBpbiBhIHJlZ2lzdGVyLCB0byBnZXQgYSBzYWZlIGFjY2Vzcy5cXG4gNjI4OlxcdFxcdFxcdCAqL1xcbiA2Mjk6XFx0XFx0XFx0aWYgKHJvbGQtXFx1MDAzZXJhbmdlIFxcdTAwM2MgMCB8fCByY3VyLVxcdTAwM2VyYW5nZSBcXHUwMDNjIDApIHtcXG4gNjMwOlxcdFxcdFxcdFxcdC8qIHNwZWNpYWwgY2FzZSBmb3IgW0JFWU9ORHxBVF1fUEtUX0VORCAqL1xcbiA2MzE6XFx0XFx0XFx0XFx0aWYgKHJvbGQtXFx1MDAzZXJhbmdlICE9IHJjdXItXFx1MDAzZXJhbmdlKVxcbiA2MzI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA2MzM6XFx0XFx0XFx0fSBlbHNlIGlmIChyb2xkLVxcdTAwM2VyYW5nZSBcXHUwMDNlIHJjdXItXFx1MDAzZXJhbmdlKSB7XFxuIDYzNDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDYzNTpcXHRcXHRcXHR9XFxuIDYzNjpcXHRcXHRcXHQvKiBpZCByZWxhdGlvbnMgbXVzdCBiZSBwcmVzZXJ2ZWQgKi9cXG4gNjM3OlxcdFxcdFxcdGlmICghY2hlY2tfaWRzKHJvbGQtXFx1MDAzZWlkLCByY3VyLVxcdTAwM2VpZCwgaWRtYXApKVxcbiA2Mzg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA2Mzk6XFx0XFx0XFx0LyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi9cXG4gNjQwOlxcdFxcdFxcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXFx1MDAyNlxcdTAwMjZcXG4gNjQxOlxcdFxcdFxcdCAgICAgICB0bnVtX2luKHJvbGQtXFx1MDAzZXZhcl9vZmYsIHJjdXItXFx1MDAzZXZhcl9vZmYpO1xcbiA2NDI6XFx0XFx0Y2FzZSBQVFJfVE9fU1RBQ0s6XFxuIDY0MzpcXHRcXHRcXHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XFxuIDY0NDpcXHRcXHRjYXNlIFBUUl9UT19BUkVOQTpcXG4gNjQ1OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA2NDY6XFx0XFx0Y2FzZSBQVFJfVE9fSU5TTjpcXG4gNjQ3OlxcdFxcdFxcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIHZhcl9vZmYpKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuIDY0ODpcXHRcXHRcXHQgICAgICAgcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpIFxcdTAwMjZcXHUwMDI2IHRudW1faW4ocm9sZC1cXHUwMDNldmFyX29mZiwgcmN1ci1cXHUwMDNldmFyX29mZik7XFxuIDY0OTpcXHRcXHRkZWZhdWx0OlxcbiA2NTA6XFx0XFx0XFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xcbiA2NTE6XFx0XFx0fVxcbiA2NTI6XFx0fVxcbiA2NTM6XFx0XFxuIDY1NDpcXHRzdGF0aWMgc3RydWN0IGJwZl9yZWdfc3RhdGUgdW5ib3VuZF9yZWc7XFxuIDY1NTpcXHRcXG4gNjU2OlxcdHN0YXRpYyBfX2luaXQgaW50IHVuYm91bmRfcmVnX2luaXQodm9pZClcXG4gNjU3OlxcdHtcXG4gNjU4OlxcdFxcdGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShcXHUwMDI2dW5ib3VuZF9yZWcpO1xcbiA2NTk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjIxLjI5NjkxOTI0MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ4NzYyNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHJlZ3NfZXhhY3RgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gc2VlaW5nIGByZWdzX2V4YWN0YCBiZWluZyBjYWxsZWQgaW4gYSBjb3VwbGUgb2YgcGxhY2VzLCBzcGVjaWZpY2FsbHkgbGluZSA1MTAgYW5kIGxpbmUgNjUwLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdGhlIGZpcnN0IGNhbGw6IGBpZiAoZXhhY3QgPT0gRVhBQ1QpIHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtgLiBUaGF0IGltcGxpZXMgYSBmbGFnLCBgZXhhY3RgLCB3aGljaCBjb250cm9scyB3aGV0aGVyIG9yIG5vdCBgcmVnc19leGFjdGAgaXMgaW52b2tlZCBkaXJlY3RseS4gVGhlIG90aGVyIGNhbGwgaXMgdGhlIGRlZmF1bHQgcmV0dXJuLCBzbyBJIHdvbmRlciB3aGF0IHZhbHVlIGlzIGJlaW5nIHBhc3NlZCBoZXJlP1xuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCBob3cgYGV4YWN0YCBnZXRzIHNldCB0byBgRVhBQ1RgLiAgSSBzaG91bGQgcHJvYmFibHkgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYm90aCBgcmVnc19leGFjdGAgYW5kIGBleGFjdGAgdGhyb3VnaG91dCB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBob3cgYW5kIHdoZXJlIGByZWdzX2V4YWN0YCBpcyBhY3R1YWxseSB1c2VkIGFuZCB3aHkgYGV4YWN0YCBpcyBiZWluZyBzZXQgb3Igbm90IHNldC4gR290dGEgdHJhY2UgYmFjayB0aGUgZGVmaW5pdGlvbiBhbmQgdGhlIGFzc2lnbm1lbnRzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjIzLjQ0NTY4NDk1OFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwMDcwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnc19leGFjdHxleGFjdF9sZXZlbHxFWEFDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9NDcxPXN0YXRpYyBpbnQgY2xlYW5fdmVyaWZpZXJfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDg3LVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDg4OnN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODktXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00OTctXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTg6ZW51bSBleGFjdF9sZXZlbCB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTk6XFx0Tk9UX0VYQUNULFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTAwOlxcdEVYQUNULFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTAxLVxcdFJBTkdFX1dJVEhJTlxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz01MDU9c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUwNi1cXHRcXHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTA3OlxcdFxcdCAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA4LXtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUwOTpcXHRpZiAoZXhhY3QgPT0gRVhBQ1QpXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1MTA6XFx0XFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTExLVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01NDgtXFx0XFx0fVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTQ5OlxcdFxcdGlmICghcm9sZC1cXHUwMDNlcHJlY2lzZSBcXHUwMDI2XFx1MDAyNiBleGFjdCA9PSBOT1RfRVhBQ1QpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01NTAtXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0Mi1cXHRjYXNlIFBUUl9UT19TVEFDSzpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY0MzpcXHRcXHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy02NDQtXFx0Y2FzZSBQVFJfVE9fQVJFTkE6XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0OS1cXHRkZWZhdWx0Olxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NjUwOlxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY1MS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTY5Nz1zdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy02OTgtXFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6Njk5OlxcdFxcdCAgICAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MDAte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MTItXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3MTM6XFx0XFx0aWYgKGV4YWN0ID09IEVYQUNUKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MTQtXFx0XFx0XFx0dTggb2xkX3R5cGUgPSBvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz04NDI9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NDMtXFx0XFx0XFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODQ0OlxcdFxcdFxcdCAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NDUte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05NDA9c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NDE6XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk3NT1zdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc3LVxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5Nzg6XFx0XFx0XFx0IGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05Nzkte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM0PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjYtXFx0XFx0XFx0aWYgKHN0YXRlc19tYXliZV9sb29waW5nKFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1cikgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNjc6XFx0XFx0XFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgRVhBQ1QpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY4LVxcdFxcdFxcdCAgICAhaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTktXFx0XFx0bG9vcCA9IGluY29tcGxldGVfcmVhZF9tYXJrcyhlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUpO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQwMDpcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBsb29wID8gUkFOR0VfV0lUSElOIDogTk9UX0VYQUNUKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwMS1oaXQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzg1Nj1zdGF0aWMgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqZmluZF9wcmV2X2VudHJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzg4MS0gKiBDaGVjayBpZiBzY2FsYXIgcmVnaXN0ZXJzIGFyZSBleGFjdCBmb3IgdGhlIHB1cnBvc2Ugb2Ygbm90IHdpZGVuaW5nLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODgyOiAqIE1vcmUgbGVuaWVudCB0aGFuIHJlZ3NfZXhhY3QoKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODgzLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDoyMy40OTc3MDAyNjdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDY5NjI2NjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFN0YWNrIFNhZmV0eSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFoLCBgc3RhY2tzYWZlYCFcIiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBrbm93IHdoYXQgdGhhdCBrZXl3b3JkL2ZlYXR1cmUgaXMgYWJvdXQuICBOb3cgSSB3YW50IHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBxdWlja2x5IHVuZGVyc3RhbmQgaXRzIHdvcmtpbmcsIGFuZCBnZXQgaW50byB0aGUgbml0dHkgZ3JpdHR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3ZlIGFjdHVhbGx5ICpkb25lKiBpdC4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDcxMiB0byA3ODAuIFRoYXQgY2h1bmsgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB2aWV3IG9mIHRoZSBjb3JlIGxvZ2ljLCBvciBhdCBsZWFzdCBhIHJlcHJlc2VudGF0aXZlIHNhbXBsZSBvZiBob3cgdGhlIHN0YWNrIHNhZmV0eSBtZWNoYW5pc20gaXMgcmVhbGl6ZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbnRleHQuIEknbSBsb29raW5nIGZvciB0aGUgZGV0YWlscywgdGhlIHNwZWNpZmljIHRlY2huaXF1ZXMsIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2Ygb3B0aW1pemF0aW9uIG9yIHN1YnRsZSBmbGF3cy4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBhbmQgd2hlcmUgSSBjYW4gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0cmFkZS1vZmZzIHRoZXkndmUgbWFkZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODI4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6MjguMTkzOTY5MDk2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcwMDpcXHR7XFxuIDcwMTpcXHRcXHRpbnQgaSwgc3BpO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHQvKiB3YWxrIHNsb3RzIG9mIHRoZSBleHBsb3JlZCBzdGFjayBhbmQgaWdub3JlIGFueSBhZGRpdGlvbmFsXFxuIDcwNDpcXHRcXHQgKiBzbG90cyBpbiB0aGUgY3VycmVudCBzdGFjaywgc2luY2UgZXhwbG9yZWQoc2FmZSkgc3RhdGVcXG4gNzA1OlxcdFxcdCAqIGRpZG4ndCB1c2UgdGhlbVxcbiA3MDY6XFx0XFx0ICovXFxuIDcwNzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2xkLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2s7IGkrKykge1xcbiA3MDg6XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZF9yZWcsICpjdXJfcmVnO1xcbiA3MDk6XFx0XFx0XFx0aW50IGltID0gaSAlIEJQRl9SRUdfU0laRTtcXG4gNzEwOlxcdFxcbiA3MTE6XFx0XFx0XFx0c3BpID0gaSAvIEJQRl9SRUdfU0laRTtcXG4gNzEyOlxcdFxcbiA3MTM6XFx0XFx0XFx0aWYgKGV4YWN0ID09IEVYQUNUKSB7XFxuIDcxNDpcXHRcXHRcXHRcXHR1OCBvbGRfdHlwZSA9IG9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV07XFxuIDcxNTpcXHRcXHRcXHRcXHR1OCBjdXJfdHlwZSA9IGkgXFx1MDAzYyBjdXItXFx1MDAzZWFsbG9jYXRlZF9zdGFjayA/XFxuIDcxNjpcXHRcXHRcXHRcXHRcXHQgICAgICBjdXItXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdIDogU1RBQ0tfSU5WQUxJRDtcXG4gNzE3OlxcdFxcbiA3MTg6XFx0XFx0XFx0XFx0LyogU1RBQ0tfSU5WQUxJRCBhbmQgU1RBQ0tfUE9JU09OIGFyZSBlcXVpdmFsZW50IGZvciBwcnVuaW5nICovXFxuIDcxOTpcXHRcXHRcXHRcXHRpZiAob2xkX3R5cGUgPT0gU1RBQ0tfUE9JU09OKVxcbiA3MjA6XFx0XFx0XFx0XFx0XFx0b2xkX3R5cGUgPSBTVEFDS19JTlZBTElEO1xcbiA3MjE6XFx0XFx0XFx0XFx0aWYgKGN1cl90eXBlID09IFNUQUNLX1BPSVNPTilcXG4gNzIyOlxcdFxcdFxcdFxcdFxcdGN1cl90eXBlID0gU1RBQ0tfSU5WQUxJRDtcXG4gNzIzOlxcdFxcdFxcdFxcdGlmIChpIFxcdTAwM2U9IGN1ci1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIHx8IG9sZF90eXBlICE9IGN1cl90eXBlKVxcbiA3MjQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3MjU6XFx0XFx0XFx0fVxcbiA3MjY6XFx0XFxuIDcyNzpcXHRcXHRcXHRpZiAob2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19JTlZBTElEIHx8XFxuIDcyODpcXHRcXHRcXHQgICAgb2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19QT0lTT04pXFxuIDcyOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0XFx0aWYgKGVudi1cXHUwMDNlYWxsb3dfdW5pbml0X3N0YWNrIFxcdTAwMjZcXHUwMDI2XFxuIDczMjpcXHRcXHRcXHQgICAgb2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19NSVNDKVxcbiA3MzM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDczNDpcXHRcXG4gNzM1OlxcdFxcdFxcdC8qIGV4cGxvcmVkIHN0YWNrIGhhcyBtb3JlIHBvcHVsYXRlZCBzbG90cyB0aGFuIGN1cnJlbnQgc3RhY2tcXG4gNzM2OlxcdFxcdFxcdCAqIGFuZCB0aGVzZSBzbG90cyB3ZXJlIHVzZWRcXG4gNzM3OlxcdFxcdFxcdCAqL1xcbiA3Mzg6XFx0XFx0XFx0aWYgKGkgXFx1MDAzZT0gY3VyLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2spXFxuIDczOTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdFxcdC8qXFxuIDc0MjpcXHRcXHRcXHQgKiA2NCBhbmQgMzItYml0IHNjYWxhciBzcGlsbHMgdnMgTUlTQy9JTlZBTElEIHNsb3RzIGFuZCB2aWNlIHZlcnNhLlxcbiA3NDM6XFx0XFx0XFx0ICogTG9hZCBmcm9tIE1JU0MvSU5WQUxJRCBzbG90cyBwcm9kdWNlcyB1bmJvdW5kIHNjYWxhci5cXG4gNzQ0OlxcdFxcdFxcdCAqIENvbnN0cnVjdCBhIGZha2UgcmVnaXN0ZXIgZm9yIHN1Y2ggc3RhY2sgYW5kIGNhbGxcXG4gNzQ1OlxcdFxcdFxcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXFxuIDc0NjpcXHRcXHRcXHQgKi9cXG4gNzQ3OlxcdFxcdFxcdGlmIChpbSA9PSAwIHx8IGltID09IDQpIHtcXG4gNzQ4OlxcdFxcdFxcdFxcdG9sZF9yZWcgPSBzY2FsYXJfcmVnX2Zvcl9zdGFjayhlbnYsIFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0sIGltKTtcXG4gNzQ5OlxcdFxcdFxcdFxcdGN1cl9yZWcgPSBzY2FsYXJfcmVnX2Zvcl9zdGFjayhlbnYsIFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrW3NwaV0sIGltKTtcXG4gNzUwOlxcdFxcdFxcdFxcdGlmIChvbGRfcmVnIFxcdTAwMjZcXHUwMDI2IGN1cl9yZWcpIHtcXG4gNzUxOlxcdFxcdFxcdFxcdFxcdGlmICghcmVnc2FmZShlbnYsIG9sZF9yZWcsIGN1cl9yZWcsIGlkbWFwLCBleGFjdCkpXFxuIDc1MjpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDc1MzpcXHRcXHRcXHRcXHRcXHRpICs9IChpbSA9PSAwID8gQlBGX1JFR19TSVpFIC0gMSA6IDMpO1xcbiA3NTQ6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDc1NTpcXHRcXHRcXHRcXHR9XFxuIDc1NjpcXHRcXHRcXHR9XFxuIDc1NzpcXHRcXG4gNzU4OlxcdFxcdFxcdC8qIGlmIG9sZCBzdGF0ZSB3YXMgc2FmZSB3aXRoIG1pc2MgZGF0YSBpbiB0aGUgc3RhY2tcXG4gNzU5OlxcdFxcdFxcdCAqIGl0IHdpbGwgYmUgc2FmZSB3aXRoIHplcm8taW5pdGlhbGl6ZWQgc3RhY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjI4LjE5NDE1NjY2NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTUyMzYzMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBzdGFja3NhZmVgIGZvciBEZWVwZXIgSW5zaWdodCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYSBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBgc3RhY2tzYWZlYCBsaWJyYXJ5LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBsaW5lcyA3NjAgdGhyb3VnaCA4MDAuIEknbSBob3BpbmcgdGhhdCBhcmVhIGNvdmVycyB0aGUgcGFydCBJJ20gc3RydWdnbGluZyB3aXRoIGFuZCB3aWxsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IG9uIHdoYXQncyBnb2luZyBvbi4gSSBleHBlY3QgdG8gZmluZCBzb21lIGNyaXRpY2FsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3IgcGVyaGFwcyBhIHBhcnRpY3VsYXJseSBjbGV2ZXIgdXNlIG9mIHNvbWUgY29uY3VycmVuY3kgcHJpbWl0aXZlcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIHZhbHVhYmxlIGNvbnRleHQgZm9yIHRoZSBwcm9ibGVtIEknbSB3b3JraW5nIG9uIGFuZCBzaG91bGQgaG9wZWZ1bGx5IGhlbHAgbWUgdG8gcmVzb2x2ZSBpdC4gVGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDozMi4zNDY1MjI2MDNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcdFxcdCAqIFRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZVxcbiA3NjE6XFx0XFx0XFx0ICovXFxuIDc2MjpcXHRcXHRcXHRpZiAob2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19NSVNDIFxcdTAwMjZcXHUwMDI2XFxuIDc2MzpcXHRcXHRcXHQgICAgY3VyLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19aRVJPKVxcbiA3NjQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDc2NTpcXHRcXHRcXHRpZiAob2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPVxcbiA3NjY6XFx0XFx0XFx0ICAgIGN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0pXFxuIDc2NzpcXHRcXHRcXHRcXHQvKiBFeDogb2xkIGV4cGxvcmVkIChzYWZlKSBzdGF0ZSBoYXMgU1RBQ0tfU1BJTEwgaW5cXG4gNzY4OlxcdFxcdFxcdFxcdCAqIHRoaXMgc3RhY2sgc2xvdCwgYnV0IGN1cnJlbnQgaGFzIFNUQUNLX01JU0MgLVxcdTAwM2VcXG4gNzY5OlxcdFxcdFxcdFxcdCAqIHRoaXMgdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudCxcXG4gNzcwOlxcdFxcdFxcdFxcdCAqIHJldHVybiBmYWxzZSB0byBjb250aW51ZSB2ZXJpZmljYXRpb24gb2YgdGhpcyBwYXRoXFxuIDc3MTpcXHRcXHRcXHRcXHQgKi9cXG4gNzcyOlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzczOlxcdFxcdFxcdGlmIChpICUgQlBGX1JFR19TSVpFICE9IEJQRl9SRUdfU0laRSAtIDEpXFxuIDc3NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzc1OlxcdFxcdFxcdC8qIEJvdGggb2xkIGFuZCBjdXIgYXJlIGhhdmluZyBzYW1lIHNsb3RfdHlwZSAqL1xcbiA3NzY6XFx0XFx0XFx0c3dpdGNoIChvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW0JQRl9SRUdfU0laRSAtIDFdKSB7XFxuIDc3NzpcXHRcXHRcXHRjYXNlIFNUQUNLX1NQSUxMOlxcbiA3Nzg6XFx0XFx0XFx0XFx0Lyogd2hlbiBleHBsb3JlZCBhbmQgY3VycmVudCBzdGFjayBzbG90IGFyZSBib3RoIHN0b3JpbmdcXG4gNzc5OlxcdFxcdFxcdFxcdCAqIHNwaWxsZWQgcmVnaXN0ZXJzLCBjaGVjayB0aGF0IHN0b3JlZCBwb2ludGVycyB0eXBlc1xcbiA3ODA6XFx0XFx0XFx0XFx0ICogYXJlIHRoZSBzYW1lIGFzIHdlbGwuXFxuIDc4MTpcXHRcXHRcXHRcXHQgKiBFeDogZXhwbG9yZWQgc2FmZSBwYXRoIGNvdWxkIGhhdmUgc3RvcmVkXFxuIDc4MjpcXHRcXHRcXHRcXHQgKiAoYnBmX3JlZ19zdGF0ZSkgey50eXBlID0gUFRSX1RPX1NUQUNLLCAub2ZmID0gLTh9XFxuIDc4MzpcXHRcXHRcXHRcXHQgKiBidXQgY3VycmVudCBwYXRoIGhhcyBzdG9yZWQ6XFxuIDc4NDpcXHRcXHRcXHRcXHQgKiAoYnBmX3JlZ19zdGF0ZSkgey50eXBlID0gUFRSX1RPX1NUQUNLLCAub2ZmID0gLTE2fVxcbiA3ODU6XFx0XFx0XFx0XFx0ICogc3VjaCB2ZXJpZmllciBzdGF0ZXMgYXJlIG5vdCBlcXVpdmFsZW50LlxcbiA3ODY6XFx0XFx0XFx0XFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcXG4gNzg3OlxcdFxcdFxcdFxcdCAqL1xcbiA3ODg6XFx0XFx0XFx0XFx0aWYgKCFyZWdzYWZlKGVudiwgXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcXG4gNzg5OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcXG4gNzkwOlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzkxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3OTI6XFx0XFx0XFx0Y2FzZSBTVEFDS19EWU5QVFI6XFxuIDc5MzpcXHRcXHRcXHRcXHRvbGRfcmVnID0gXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gNzk0OlxcdFxcdFxcdFxcdGN1cl9yZWcgPSBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA3OTU6XFx0XFx0XFx0XFx0aWYgKG9sZF9yZWctXFx1MDAzZWR5bnB0ci50eXBlICE9IGN1cl9yZWctXFx1MDAzZWR5bnB0ci50eXBlIHx8XFxuIDc5NjpcXHRcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgIT0gY3VyX3JlZy1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcXG4gNzk3OlxcdFxcdFxcdFxcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXFx1MDAzZWlkLCBjdXJfcmVnLVxcdTAwM2VpZCwgaWRtYXApIHx8XFxuIDc5ODpcXHRcXHRcXHRcXHQgICAgIWNoZWNrX2lkcyhvbGRfcmVnLVxcdTAwM2VwYXJlbnRfaWQsIGN1cl9yZWctXFx1MDAzZXBhcmVudF9pZCwgaWRtYXApKVxcbiA3OTk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4MDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgwMTpcXHRcXHRcXHRjYXNlIFNUQUNLX0lURVI6XFxuIDgwMjpcXHRcXHRcXHRcXHRvbGRfcmVnID0gXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gODAzOlxcdFxcdFxcdFxcdGN1cl9yZWcgPSBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA4MDQ6XFx0XFx0XFx0XFx0LyogaXRlci5kZXB0aCBpcyBub3QgY29tcGFyZWQgYmV0d2VlbiBzdGF0ZXMgYXMgaXRcXG4gODA1OlxcdFxcdFxcdFxcdCAqIGRvZXNuJ3QgbWF0dGVyIGZvciBjb3JyZWN0bmVzcyBhbmQgd291bGQgb3RoZXJ3aXNlXFxuIDgwNjpcXHRcXHRcXHRcXHQgKiBwcmV2ZW50IGNvbnZlcmdlbmNlOyB3ZSBtYWludGFpbiBpdCBvbmx5IHRvIHByZXZlbnRcXG4gODA3OlxcdFxcdFxcdFxcdCAqIGluZmluaXRlIGxvb3AgY2hlY2sgdHJpZ2dlcmluZywgc2VlXFxuIDgwODpcXHRcXHRcXHRcXHQgKiBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcXG4gODA5OlxcdFxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDozMi4zNDY2ODA4NTJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzg0NDA3NDA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBicGZfcmVnX3N0YXRlYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIHNvbWUgc3VidGxldGllcyBpbiBob3cgd2UncmUgdHJhY2tpbmcgcmVnaXN0ZXIgc3RhdGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHN0YWNrIHBvaW50ZXJzIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gc3RhY2sgZnJhbWVzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuXG5cbkxvb2tpbmcgYXQgdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbiwgdGhlIGFkZGVkIGByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vYCBjaGVjayBzZWVtcyBzaWduaWZpY2FudC4gUHJldmlvdXNseSwgd2Ugb25seSBjb25zaWRlcmVkIHdoZXRoZXIgdGhlIHJlZ2lzdGVyIHN0YXRlcyB3ZXJlIGlkZW50aWNhbCBiYXNlZCBvbiBhIGBtZW1jbXBgIHVwIHRvIHRoZSBgaWRgIGZpZWxkIGFuZCB0aGUgb3V0Y29tZSBvZiB0aGUgYGNoZWNrX2lkc2AgZnVuY3Rpb24gZm9yIGBpZGAgYW5kIGBwYXJlbnRfaWRgLiBOb3csIHdlJ3JlIGV4cGxpY2l0bHkgY29tcGFyaW5nIHRoZSBgZnJhbWVub2AgZmllbGQgYXMgd2VsbC4gVGhlIGltcGxpY2F0aW9ucyBhcmUsIHRoaXMgYWRkaXRpb24gaXMgbGlrZWx5IGludGVuZGVkIHRvIGVuc3VyZSB0aGF0IHR3byByZWdpc3RlciBzdGF0ZXMgYXJlIGNvbnNpZGVyZWQgdHJ1bHkgZXF1YWwgb25seSBpZiB0aGV5IGFyZSBib3RoIHBvaW50aW5nIHRvIHRoZSBzYW1lIHN0YWNrIGZyYW1lLlxuXG5UaGUgY2hhbmdlIGluIGByZWdzYWZlYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYFBUUl9UT19TVEFDS2AgY2FzZSwgZnVydGhlciByZWluZm9yY2VzIHRoaXMgaW50ZXJwcmV0YXRpb24uIFRoZSBvcmlnaW5hbCBjb21tZW50IGhpbnRlZCBhdCB0aGUgbmVlZCBmb3IgZnJhbWUtc3BlY2lmaWMgZXF1YWxpdHkgd2hlbiBkZWFsaW5nIHdpdGggc3RhY2sgcG9pbnRlcnMuIFRoZSByZW1vdmFsIG9mIHRoZSBgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVub2AgY2hlY2sgdGhlcmUsICphZnRlciogdGhlIGFkZGl0aW9uIG9mIGl0IHRvIGByZWdzX2V4YWN0YCwgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IG5vdywgd2l0aCBgcmVnc19leGFjdGAgdXBkYXRlZCwgd2UgZG9uJ3QgbmVlZCB0byByZS1jaGVjayB0aGUgZnJhbWUgbnVtYmVyIGluIHRoZSBQVFJfVE9fU1RBQ0sgY2FzZSBzZXBhcmF0ZWx5LiBgcmVnc19leGFjdGAgbm93IGhhbmRsZXMgaXQuIFRoYXQgaXMgdGhlIGNyaXRpY2FsIGNoYW5nZS5cblxuTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGRlbHZlIGludG8gdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgZGVmaW5pdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZnJhbWVub2AgaXMgZGVmaW5lZCBhbmQgdXNlZC4gSXQncyBjcnVjaWFsIHRvIGNvbmZpcm0gaXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgc3RydWN0dXJlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXRzIG1lYW5pbmcgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIEJQRiByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZSBgZnJhbWVub2AgZmllbGQgcmVwcmVzZW50cyB0aGUgYWN0dWFsIGZyYW1lIG51bWJlciBvciBhIGtpbmQgb2YgZnJhbWUgaWRlbnRpZmllci4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIHNvbGlkaWZ5IHRoZSBvdmVyYWxsIGVmZmVjdCBvZiB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyODAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDozNi4xOTA3NTcyMzRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODQyNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBicGZfcmVnX3N0YXRlIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0zMj1lbnVtIGJwZl9pdGVyX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzctXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDozODpzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zOS1cXHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDozNi4yNDE2MjQyNTNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzY1ODE4OTcxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBCUEYgdmVyaWZpZXIncyBpbnRlcm5hbHMuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAzOCwgYXNzdW1pbmcgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbnMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCdzIG9mdGVuIHdoZXJlIHlvdSdsbCBmaW5kIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zLCBpbXBvcnRhbnQgbWFjcm9zLCBhbmQgcG90ZW50aWFsbHkgc29tZSBvZiB0aGUga2V5IGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBzZXQgdGhlIHN0YWdlIGZvciBob3cgdGhlIHZlcmlmaWVyIG9wZXJhdGVzLiBGcm9tIHRoZXJlLCBJJ2xsIGxpa2VseSBicmFuY2ggb3V0IGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgYnV0IHRoYXQncyB0aGUgaW5pdGlhbCB0YXJnZXQuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5lYXJ0aGVkLiBJJ20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdGhlIGNvbnRyb2wgZmxvdyBncmFwaCBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIHBlcmhhcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6MzkuODk5ODE3NDE3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG4gIDM5OlxcdFxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuICA0MDpcXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xcbiAgNDE6XFx0XFx0LypcXG4gIDQyOlxcdFxcdCAqIENvbnN0YW50IGRlbHRhIGJldHdlZW4gXFxcImxpbmtlZFxcXCIgc2NhbGFycyB3aXRoIHRoZSBzYW1lIElELlxcbiAgNDM6XFx0XFx0ICovXFxuICA0NDpcXHRcXHRzMzIgZGVsdGE7XFxuICA0NTpcXHRcXHR1bmlvbiB7XFxuICA0NjpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gUFRSX1RPX1BBQ0tFVCAqL1xcbiAgNDc6XFx0XFx0XFx0aW50IHJhbmdlO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxcbiAgNTA6XFx0XFx0XFx0ICogICBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTExcXG4gIDUxOlxcdFxcdFxcdCAqL1xcbiAgNTI6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDUzOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXBfcHRyO1xcbiAgNTQ6XFx0XFx0XFx0XFx0LyogVG8gZGlzdGluZ3Vpc2ggbWFwIGxvb2t1cHMgZnJvbSBvdXRlciBtYXBcXG4gIDU1OlxcdFxcdFxcdFxcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcXG4gIDU2OlxcdFxcdFxcdFxcdCAqIHBvaW50aW5nIHRvIGlubmVyIG1hcHMuXFxuICA1NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDU4OlxcdFxcdFxcdFxcdHUzMiBtYXBfdWlkO1xcbiAgNTk6XFx0XFx0XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0XFx0LyogZm9yIFBUUl9UT19CVEZfSUQgKi9cXG4gIDYyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA2MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnRmICpidGY7XFxuICA2NDpcXHRcXHRcXHRcXHR1MzIgYnRmX2lkO1xcbiAgNjU6XFx0XFx0XFx0fTtcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0XFx0c3RydWN0IHsgLyogZm9yIFBUUl9UT19NRU0gfCBQVFJfVE9fTUVNX09SX05VTEwgKi9cXG4gIDY4OlxcdFxcdFxcdFxcdHUzMiBtZW1fc2l6ZTtcXG4gIDY5OlxcdFxcdFxcdH07XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC8qIEZvciBkeW5wdHIgc3RhY2sgc2xvdHMgKi9cXG4gIDcyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA3MzpcXHRcXHRcXHRcXHRlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlO1xcbiAgNzQ6XFx0XFx0XFx0XFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cXG4gIDc1OlxcdFxcdFxcdFxcdCAqIFdlIG5lZWQgdG8gdHJhY2sgd2hpY2ggc2xvdCBpcyB0aGUgZmlyc3Qgc2xvdFxcbiAgNzY6XFx0XFx0XFx0XFx0ICogdG8gcHJvdGVjdCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHRoZSB1c2VyIG1heSB0cnkgdG9cXG4gIDc3OlxcdFxcdFxcdFxcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXFxuICA3ODpcXHRcXHRcXHRcXHQgKiBkeW5wdHIuXFxuICA3OTpcXHRcXHRcXHRcXHQgKi9cXG4gIDgwOlxcdFxcdFxcdFxcdGJvb2wgZmlyc3Rfc2xvdDtcXG4gIDgxOlxcdFxcdFxcdH0gZHlucHRyO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRcXHQvKiBGb3IgYnBmX2l0ZXIgc3RhY2sgc2xvdHMgKi9cXG4gIDg0OlxcdFxcdFxcdHN0cnVjdCB7XFxuICA4NTpcXHRcXHRcXHRcXHQvKiBCVEYgY29udGFpbmVyIGFuZCBCVEYgdHlwZSBJRCBkZXNjcmliaW5nXFxuICA4NjpcXHRcXHRcXHRcXHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXFx1MDAzY3R5cGVcXHUwMDNlIG9mIGFuIGl0ZXJhdG9yIHN0YXRlXFxuICA4NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDg4OlxcdFxcdFxcdFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gIDg5OlxcdFxcdFxcdFxcdHUzMiBidGZfaWQ7XFxuICA5MDpcXHRcXHRcXHRcXHQvKiBwYWNraW5nIGZvbGxvd2luZyB0d28gZmllbGRzIHRvIGZpdCBpdGVyIHN0YXRlIGludG8gMTYgYnl0ZXMgKi9cXG4gIDkxOlxcdFxcdFxcdFxcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcXG4gIDkyOlxcdFxcdFxcdFxcdGludCBkZXB0aDozMDtcXG4gIDkzOlxcdFxcdFxcdH0gaXRlcjtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0XFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xcbiAgOTY6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDk3OlxcdFxcdFxcdFxcdGVudW0ge1xcbiAgOTg6XFx0XFx0XFx0XFx0XFx0SVJRX05BVElWRV9LRlVOQyxcXG4gIDk5OlxcdFxcdFxcdFxcdFxcdElSUV9MT0NLX0tGVU5DLFxcbiAxMDA6XFx0XFx0XFx0XFx0fSBrZnVuY19jbGFzcztcXG4gMTAxOlxcdFxcdFxcdH0gaXJxO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXFxuIDEwNDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAxMDU6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcxO1xcbiAxMDY6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcyO1xcbiAxMDc6XFx0XFx0XFx0fSByYXc7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdFxcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xcbiAxMTA6XFx0XFx0fTtcXG4gMTExOlxcdFxcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXFxuIDExMjpcXHRcXHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxcbiAxMTM6XFx0XFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XFxuIDExNDpcXHRcXHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xcbiAxMTU6XFx0XFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cXG4gMTE2OlxcdFxcdCAqL1xcbiAxMTc6XFx0XFx0c3RydWN0IHRudW0gdmFyX29mZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6MzkuODk5OTgzNjc3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4ODY4ODI5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBhbHJlYWR5IGxvb2tlZCBhdCBzb21lIGFzcGVjdHMgb2YgdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAuIE5vdywgSSBuZWVkIHRvIGdldCBhIGZ1bGwgaGFuZGxlIG9uIHRoZSByZXN0IG9mIGl0LiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBmYW1pbGlhciB3aXRoIGV2ZXJ5IHNpbmdsZSBmaWVsZCBhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoaXMgc3RydWN0dXJlLiBUaGVyZSdzIGEgbG90IG9mIGltcG9ydGFudCBtZXRhZGF0YSB3cmFwcGVkIHVwIGluIHRoYXQgc3RydWN0LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZSBpcyBjcml0aWNhbCBmb3IgdGhlIG9uZ29pbmcgd29yay4gTm8gc3RvbmUgY2FuIGJlIGxlZnQgdW50dXJuZWQgaGVyZSwgb3IgSSdtIG1pc3Npbmcgb3Bwb3J0dW5pdGllcyB0byByZWZpbmUsIG9wdGltaXplLCBhbmQgcG90ZW50aWFsbHkgZmluZCBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSBJIGtub3cgKmV2ZXJ5dGhpbmcqIGFib3V0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ2MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6NDEuNzg2ODY5NTM5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExOCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExODpcXHRcXHQvKiBVc2VkIHRvIGRldGVybWluZSBpZiBhbnkgbWVtb3J5IGFjY2VzcyB1c2luZyB0aGlzIHJlZ2lzdGVyIHdpbGxcXG4gMTE5OlxcdFxcdCAqIHJlc3VsdCBpbiBhIGJhZCBhY2Nlc3MuXFxuIDEyMDpcXHRcXHQgKiBUaGVzZSByZWZlciB0byB0aGUgc2FtZSB2YWx1ZSBhcyB2YXJfb2ZmLCBub3QgbmVjZXNzYXJpbHkgdGhlIGFjdHVhbFxcbiAxMjE6XFx0XFx0ICogY29udGVudHMgb2YgdGhlIHJlZ2lzdGVyLlxcbiAxMjI6XFx0XFx0ICovXFxuIDEyMzpcXHRcXHRzdHJ1Y3QgY251bTY0IHI2NDsgLyogNjQtYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xcbiAxMjQ6XFx0XFx0c3RydWN0IGNudW0zMiByMzI7IC8qIDMyLWJpdCByYW5nZSBhcyBjaXJjdWxhciBudW1iZXIgKi9cXG4gMTI1OlxcdFxcdC8qIEZvciBQVFJfVE9fUEFDS0VULCB1c2VkIHRvIGZpbmQgb3RoZXIgcG9pbnRlcnMgd2l0aCB0aGUgc2FtZSB2YXJpYWJsZVxcbiAxMjY6XFx0XFx0ICogb2Zmc2V0LCBzbyB0aGV5IGNhbiBzaGFyZSByYW5nZSBrbm93bGVkZ2UuXFxuIDEyNzpcXHRcXHQgKiBGb3IgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBzaGFyZSB3aGljaCBtYXAgdmFsdWUgd2VcXG4gMTI4OlxcdFxcdCAqIGNhbWUgZnJvbSwgd2hlbiBvbmUgaXMgdGVzdGVkIGZvciAhPSBOVUxMLlxcbiAxMjk6XFx0XFx0ICogRm9yIFBUUl9UT19NRU1fT1JfTlVMTCB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgbWVtb3J5IGFsbG9jYXRpb25cXG4gMTMwOlxcdFxcdCAqIGZvciB0aGUgcHVycG9zZSBvZiB0cmFja2luZyB0aGF0IGl0J3MgZnJlZWQuXFxuIDEzMTpcXHRcXHQgKiBGb3IgUFRSX1RPX1NPQ0tFVCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggcG9pbnRlcnMgcmV0YWluIHRoZVxcbiAxMzI6XFx0XFx0ICogc2FtZSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCwgdG8gZGV0ZXJtaW5lIHByb3BlciByZWZlcmVuY2UgZnJlZWluZy5cXG4gMTMzOlxcdFxcdCAqIEZvciBzdGFjayBzbG90cyB0aGF0IGFyZSBkeW5wdHJzLCB0aGlzIGlzIHVzZWQgdG8gdHJhY2sgcmVmZXJlbmNlcyB0b1xcbiAxMzQ6XFx0XFx0ICogdGhlIGR5bnB0ciB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxcbiAxMzU6XFx0XFx0ICogU2ltaWxhcmx5IHRvIGR5bnB0cnMsIHdlIHVzZSBJRCB0byB0cmFjayBcXFwiYmVsb25naW5nXFxcIiBvZiBhIHJlZmVyZW5jZVxcbiAxMzY6XFx0XFx0ICogdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiBicGZfaXRlci5cXG4gMTM3OlxcdFxcdCAqL1xcbiAxMzg6XFx0XFx0LypcXG4gMTM5OlxcdFxcdCAqIFVwcGVyIGJpdCBvZiBJRCBpcyB1c2VkIHRvIHJlbWVtYmVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFxcXCJsaW5rZWRcXFwiXFxuIDE0MDpcXHRcXHQgKiByZWdpc3RlcnMuIEV4YW1wbGU6XFxuIDE0MTpcXHRcXHQgKiByMSA9IHIyOyAgICBib3RoIHdpbGwgaGF2ZSByMS1cXHUwMDNlaWQgPT0gcjItXFx1MDAzZWlkID09IE5cXG4gMTQyOlxcdFxcdCAqIHIxICs9IDEwOyAgIHIxLVxcdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVCBhbmQgcjEtXFx1MDAzZWRlbHRhID09IDEwXFxuIDE0MzpcXHRcXHQgKiByMyA9IHIyOyAgICBib3RoIHdpbGwgaGF2ZSByMy1cXHUwMDNlaWQgPT0gcjItXFx1MDAzZWlkID09IE5cXG4gMTQ0OlxcdFxcdCAqIHczICs9IDEwOyAgIHIzLVxcdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVDMyIGFuZCByMy1cXHUwMDNlZGVsdGEgPT0gMTBcXG4gMTQ1OlxcdFxcdCAqL1xcbiAxNDY6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUNjQgKDFVIFxcdTAwM2NcXHUwMDNjIDMxKVxcbiAxNDc6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUMzIgKDFVIFxcdTAwM2NcXHUwMDNjIDMwKVxcbiAxNDg6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUIChCUEZfQUREX0NPTlNUNjQgfCBCUEZfQUREX0NPTlNUMzIpXFxuIDE0OTpcXHRcXHR1MzIgaWQ7XFxuIDE1MDpcXHRcXHQvKlxcbiAxNTE6XFx0XFx0ICogVHJhY2tzIHRoZSBwYXJlbnQgb2JqZWN0IHRoaXMgcmVnaXN0ZXIgd2FzIGRlcml2ZWQgZnJvbS5cXG4gMTUyOlxcdFxcdCAqIFVzZWQgZm9yIGNhc2NhZGluZyBpbnZhbGlkYXRpb246IHdoZW4gdGhlIHBhcmVudCBvYmplY3QgaXNcXG4gMTUzOlxcdFxcdCAqIHJlbGVhc2VkIG9yIGludmFsaWRhdGVkLCBhbGwgcmVnaXN0ZXJzIHdpdGggbWF0Y2hpbmcgcGFyZW50X2lkXFxuIDE1NDpcXHRcXHQgKiBhcmUgYWxzbyBpbnZhbGlkYXRlZC4gRm9yIGV4YW1wbGUsIGEgc2xpY2UgZnJvbSBicGZfZHlucHRyX2RhdGEoKVxcbiAxNTU6XFx0XFx0ICogZ2V0cyBwYXJlbnRfaWQgc2V0IHRvIHRoZSBkeW5wdHIncyBpZC5cXG4gMTU2OlxcdFxcdCAqL1xcbiAxNTc6XFx0XFx0dTMyIHBhcmVudF9pZDtcXG4gMTU4OlxcdFxcdC8qIEluc2lkZSB0aGUgY2FsbGVlIHR3byByZWdpc3RlcnMgY2FuIGJlIGJvdGggUFRSX1RPX1NUQUNLIGxpa2VcXG4gMTU5OlxcdFxcdCAqIFIxPWZwLTggYW5kIFIyPWZwLTgsIGJ1dCBvbmUgb2YgdGhlbSBwb2ludHMgdG8gdGhpcyBmdW5jdGlvbiBzdGFja1xcbiAxNjA6XFx0XFx0ICogd2hpbGUgYW5vdGhlciB0byB0aGUgY2FsbGVyJ3Mgc3RhY2suIFRvIGRpZmZlcmVudGlhdGUgdGhlbSAnZnJhbWVubydcXG4gMTYxOlxcdFxcdCAqIGlzIHVzZWQgd2hpY2ggaXMgYW4gaW5kZXggaW4gYnBmX3ZlcmlmaWVyX3N0YXRlLVxcdTAwM2VmcmFtZVtdIGFycmF5XFxuIDE2MjpcXHRcXHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cXG4gMTYzOlxcdFxcdCAqL1xcbiAxNjQ6XFx0XFx0dTMyIGZyYW1lbm87XFxuIDE2NTpcXHRcXHQvKiBpZiAoIXByZWNpc2UgXFx1MDAyNlxcdTAwMjYgU0NBTEFSX1ZBTFVFKSBtaW4vbWF4L3RudW0gZG9uJ3QgYWZmZWN0IHNhZmV0eSAqL1xcbiAxNjY6XFx0XFx0Ym9vbCBwcmVjaXNlO1xcbiAxNjc6XFx0fTtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0c3RhdGljIGlubGluZSBzNjQgcmVnX3NtaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdHJldHVybiBjbnVtNjRfc21pbihyZWctXFx1MDAzZXI2NCk7XFxuIDE3MjpcXHR9XFxuIDE3MzpcXHRcXG4gMTc0OlxcdHN0YXRpYyBpbmxpbmUgczY0IHJlZ19zbWF4KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIDE3NTpcXHR7XFxuIDE3NjpcXHRcXHRyZXR1cm4gY251bTY0X3NtYXgocmVnLVxcdTAwM2VyNjQpO1xcbiAxNzc6XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRzdGF0aWMgaW5saW5lIHU2NCByZWdfdW1pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiAxODA6XFx0e1xcbiAxODE6XFx0XFx0cmV0dXJuIGNudW02NF91bWluKHJlZy1cXHUwMDNlcjY0KTtcXG4gMTgyOlxcdH1cXG4gMTgzOlxcdFxcbiAxODQ6XFx0c3RhdGljIGlubGluZSB1NjQgcmVnX3VtYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gMTg1OlxcdHtcXG4gMTg2OlxcdFxcdHJldHVybiBjbnVtNjRfdW1heChyZWctXFx1MDAzZXI2NCk7XFxuIDE4NzpcXHR9XFxuIDE4ODpcXHRcXG4gMTg5OlxcdHN0YXRpYyBpbmxpbmUgczMyIHJlZ19zMzJfbWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIDE5MDpcXHR7XFxuIDE5MTpcXHRcXHRyZXR1cm4gY251bTMyX3NtaW4ocmVnLVxcdTAwM2VyMzIpO1xcbiAxOTI6XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRzdGF0aWMgaW5saW5lIHMzMiByZWdfczMyX21heChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiAxOTU6XFx0e1xcbiAxOTY6XFx0XFx0cmV0dXJuIGNudW0zMl9zbWF4KHJlZy1cXHUwMDNlcjMyKTtcXG4gMTk3OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6NDEuNzg3MDU3MDY5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0OTM2Nzg2MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgQlBGIHZlcmlmaWVyIHBlcnNwZWN0aXZlLioqIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyB3aGF0IEkndmUgZm91bmQuXG5cbkluaXRpYWxseSwgSSBsb29rZWQgYXQgdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgZGVmaW5pdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5vdGVkIHRoZSBmaWVsZCBvcmRlcjogYGlkYCwgYHBhcmVudF9pZGAsIGBmcmFtZW5vYCwgYW5kIGBwcmVjaXNlYC4gVGhlIGV4aXN0aW5nIGByZWdzX2V4YWN0YCBmdW5jdGlvbiwgYXMgaXQgd2FzICpiZWZvcmUqIHRoZSBwYXRjaCwgd2FzIGZsYXdlZC4gSXQgdXNlZCBgbWVtY21wYCB1cCB0byBgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKWAgdG8gY29tcGFyZSByZWdpc3RlciBzdGF0ZXMsIHRoZW4gc2VwYXJhdGVseSBjaGVja2VkIGBpZGAgYW5kIGBwYXJlbnRfaWRgIHdpdGggYGNoZWNrX2lkc2AuIFRoaXMgbWVhbnQgYGZyYW1lbm9gIHdhcyAqZW50aXJlbHkqIHNraXBwZWQgZHVyaW5nIHRoZSBjb21wYXJpc29uLiBUaGUgZnVuY3Rpb24gZXNzZW50aWFsbHkgcmV0dXJuZWQgdHJ1ZSBpZiBhbGwgdGhlIGZpZWxkcyAqYmVmb3JlKiBgZnJhbWVub2Agd2VyZSB0aGUgc2FtZS5cblxuVGhlIHByb2JsZW0gcXVpY2tseSBiZWNhbWUgY2xlYXIuICBgUFRSX1RPX1NUQUNLYCBzcGVjaWZpY2FsbHkgY2hlY2tlZCBgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVub2AsIGJ1dCBvdGhlciBwYXRocywgc3VjaCBhcyB3aGVuIGBleGFjdCA9PSBFWEFDVGAsIGNhbGxlZCBgcmVnc19leGFjdGAgZGlyZWN0bHksIHRodXMgYnlwYXNzaW5nIHRoZSBjaGVjayBvZiBmcmFtZW5vLiAgVGhpcyBvbWlzc2lvbiBhbGxvd2VkIHJlZ2lzdGVycyBwb2ludGluZyB0byAqZGlmZmVyZW50KiBzdGFjayBmcmFtZXMgKGUuZy4sIGNhbGxlciB2cy4gY2FsbGVlKSB0byBiZSBjb25zaWRlcmVkIGlkZW50aWNhbCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBidWcgaW4gdGhlIGFuYWx5c2lzLiBGdXJ0aGVybW9yZSwgc3BpbGxlZCByZWdpc3RlcnMgb24gdGhlIHN0YWNrIHdvdWxkIGFsc28gYnlwYXNzIHRoZSBleHBsaWNpdCBgZnJhbWVub2AgY2hlY2sgaW4gdGhlIGBQVFJfVE9fU1RBQ0tgIGNhc2Ugd2hlbiBgZXhhY3QgPT0gRVhBQ1RgLCBsZWFkaW5nIHRvIHRoZSBzYW1lIGluY29ycmVjdCBjb21wYXJpc29uLiBUaGUgc2VsZnRlc3QgZGVtb25zdHJhdGVkIHRoaXMgdmVyeSBwcm9ibGVtLCB1c2luZyBhIHNwaWxsZWQgcG9pbnRlciB0byBjb21wYXJlIGRpZmZlcmVudCBmcmFtZXMsIHdoaWNoIHRoZSBicm9rZW4gbG9naWMgd291bGQgaW5jb3JyZWN0bHkgZGVlbSBlcXVhbC5cblxuVGhlIHBhdGNoJ3MgZml4LCBtb3ZpbmcgYHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm9gIGludG8gYHJlZ3NfZXhhY3RgLCBjb3JyZWN0bHkgYWRkcmVzc2VkIHRoaXMgb21pc3Npb24sIGVuc3VyaW5nICphbGwqIGZpZWxkcyBhcmUgY29tcGFyZWQgd2hlbiBgZXhhY3QgPT0gRVhBQ1RgLlxuXG5Ob3csIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFzc2VzcyB0aGUgcGF0Y2gncyBwb3RlbnRpYWwgaW1wYWN0LiBUaGUgY3JpdGljYWwgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzP1xuXG5JIG5lZWQgdG8gYXBwbHkgdGhlIEtNU0FOIGNyaXRlcmlhLiBEb2VzIHRoaXMgdG91Y2gga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIsIG9yIG1vZGlmeSBib3VuZHMgY2hlY2tzIHRvIGFsbG93IHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcz9cblxuQW5kIGEga2V5IHBvaW50IGp1c3QgaGl0IG1lOiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZnJhbWVub2AgaXRzZWxmIGlzICppbml0aWFsaXplZCogd2l0aGluIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgZHVyaW5nIEJQRiB2ZXJpZmllciBvcGVyYXRpb25zLiBUaGF0J3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTMyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjU2LjcyMzg0NjIxMVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NjI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnJhbWVub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz00Nz1zdHJ1Y3QgYnBmX2RpYWdfbW9kX3RhcmdldCB7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNTctXFx0fTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NTg6XFx0dTggZnJhbWVubztcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNTktXFx0dTgga2luZDtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy02MS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NjI6c3RhdGljIHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0IGRpYWdfcmVnX3RhcmdldCh1MzIgZnJhbWVfaWQsIHU4IGZyYW1lbm8sIHU4IHJlZ25vKVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy02My17XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjUtXFx0XFx0LmZyYW1lX2lkID0gZnJhbWVfaWQsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjY2OlxcdFxcdC5mcmFtZW5vID0gZnJhbWVubyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjctXFx0XFx0LmtpbmQgPSBCUEZfRElBR19NT0RfVEFSR0VUX1JFRyxcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy03MS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NzI6c3RhdGljIHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0IGRpYWdfc3RhY2tfYXJnX3RhcmdldCh1MzIgZnJhbWVfaWQsIHU4IGZyYW1lbm8sIHU4IHNsb3QpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTczLXtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy03NS1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NzY6XFx0XFx0LmZyYW1lbm8gPSBmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy03Ny1cXHRcXHQua2luZCA9IEJQRl9ESUFHX01PRF9UQVJHRVRfU1RBQ0tfQVJHLFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTgxLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzo4MjpzdGF0aWMgc3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgZGlhZ19zdGFja19zbG90X3RhcmdldCh1MzIgZnJhbWVfaWQsIHU4IGZyYW1lbm8sIHUxNiBzcGkpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTgzLXtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy04NS1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6ODY6XFx0XFx0LmZyYW1lbm8gPSBmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy04Ny1cXHRcXHQua2luZCA9IEJQRl9ESUFHX01PRF9UQVJHRVRfU1RBQ0tfU0xPVCxcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy05MS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6OTI6c3RhdGljIHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0IGRpYWdfc3RhY2tfcmFuZ2VfdGFyZ2V0KHUzMiBmcmFtZV9pZCwgdTggZnJhbWVubyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtOTMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzMTYgbWluX29mZiwgczE2IG1heF9vZmYpXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtOTYtXFx0XFx0LmZyYW1lX2lkID0gZnJhbWVfaWQsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjk3OlxcdFxcdC5mcmFtZW5vID0gZnJhbWVubyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtOTgtXFx0XFx0LmtpbmQgPSBCUEZfRElBR19NT0RfVEFSR0VUX1NUQUNLX1JBTkdFLFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1ND1zdHJ1Y3QgYnBmX2RpYWdfaGlzdG9yeV9vcHRzIHtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNTYtXFx0dTMyIGZyYW1lX2lkO1xcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNTc6XFx0dTMyIGZyYW1lbm87XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1OC1cXHRpbnQgcmVnbm87XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9OTA2PXZvaWQgYnBmX2RpYWdfcmVnaXN0ZXJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCByZWdubyxcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy05MTItXFx0XFx0LmZyYW1lX2lkID0gZnJhbWUtXFx1MDAzZWRpYWdfZnJhbWVfaWQsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjkxMzpcXHRcXHQuZnJhbWVubyA9IGZyYW1lLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy05MTQtXFx0XFx0LnJlZ25vID0gcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9OTk1PXZvaWQgYnBmX2RpYWdfY2FsbF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCwgaW50IGFyZ25vLCBpbnQgcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTAwMS1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZS1cXHUwMDNlZGlhZ19mcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTAwMjpcXHRcXHQuZnJhbWVubyA9IGZyYW1lLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMDAzLVxcdH07XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTIzMj12b2lkIGJwZl9kaWFnX2ludmFsaWRfZGVyZWYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTIzOS1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZS1cXHUwMDNlZGlhZ19mcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTI0MDpcXHRcXHQuZnJhbWVubyA9IGZyYW1lLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMjQxLVxcdFxcdC5yZWdubyA9IHJlZ25vLFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTEyOTk9dm9pZCBicGZfZGlhZ191bnJlYWRhYmxlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCByZWdubylcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMzA0LVxcdFxcdC5mcmFtZV9pZCA9IGZyYW1lLVxcdTAwM2VkaWFnX2ZyYW1lX2lkLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxMzA1OlxcdFxcdC5mcmFtZW5vID0gZnJhbWUtXFx1MDAzZWZyYW1lbm8sXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzMDYtXFx0XFx0LnJlZ25vID0gcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTMxMi1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTMxMzpcXHR0YXJnZXQgPSBkaWFnX3JlZ190YXJnZXQob3B0cy5mcmFtZV9pZCwgb3B0cy5mcmFtZW5vLCByZWdubyk7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzMTQtXFx0Zm9yIChpID0gbG9nID8gbG9nLVxcdTAwM2VjbnQgOiAwOyBpIFxcdTAwM2UgMDsgaS0tKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTM3Nz12b2lkIGJwZl9kaWFnX3N0YWNrX2FyZ191bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgbmFyZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTM4NC1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZS1cXHUwMDNlZGlhZ19mcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTM4NTpcXHRcXHQuZnJhbWVubyA9IGZyYW1lLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMzg2LVxcdFxcdC5zdGFja19hcmdfc2xvdCA9IHN0YWNrX2FyZ19zbG90LFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE0NTU9c3RhdGljIGJvb2wgZGlhZ19tb2RfaW5zbl9vcmlnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE0NjQtXFx0ICAgIEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTU9WIFxcdTAwMjZcXHUwMDI2IEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTQ2NTpcXHRcXHQqb3JpZ2luID0gZGlhZ19yZWdfdGFyZ2V0KHRhcmdldC1cXHUwMDNlZnJhbWVfaWQsIHRhcmdldC1cXHUwMDNlZnJhbWVubywgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE0NjYtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTQ3NC1cXHRzdGF0ZSA9IGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VmcmFtZVtlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlY3VyZnJhbWVdO1xcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNDc1OlxcdCpvcmlnaW4gPSBkaWFnX3JlZ190YXJnZXQoc3RhdGUtXFx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVxcdTAwM2VmcmFtZW5vLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTQ3Ni1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNTQ4PXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqdGFyZ2V0X3RvX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1NTMtXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE1NTQ6XFx0c3RhdGUgPSB0YXJnZXQtXFx1MDAzZWZyYW1lbm8gXFx1MDAzYz0gdnN0YXRlLVxcdTAwM2VjdXJmcmFtZSA/IHZzdGF0ZS1cXHUwMDNlZnJhbWVbdGFyZ2V0LVxcdTAwM2VmcmFtZW5vXSA6IE5VTEw7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1NTUtXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTU3OT1zdGF0aWMgYm9vbCByZWdfdG9fdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU5NC1cXHRcXHRpZiAoYWRkciBcXHUwMDNlPSBzdGFydCBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgZW5kKSB7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE1OTU6XFx0XFx0XFx0KnRhcmdldCA9IGRpYWdfcmVnX3RhcmdldChzdGF0ZS1cXHUwMDNlZGlhZ19mcmFtZV9pZCwgc3RhdGUtXFx1MDAzZWZyYW1lbm8sXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1OTYtXFx0XFx0XFx0XFx0XFx0XFx0ICByZWcgLSBzdGF0ZS1cXHUwMDNlcmVncyk7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYwMi1cXHRcXHRpZiAoc3RhdGUtXFx1MDAzZW91dF9zdGFja19hcmdfY250IFxcdTAwMjZcXHUwMDI2IGFkZHIgXFx1MDAzZT0gc3RhcnQgXFx1MDAyNlxcdTAwMjYgYWRkciBcXHUwMDNjIGVuZCkge1xcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNjAzOlxcdFxcdFxcdCp0YXJnZXQgPSBkaWFnX3N0YWNrX2FyZ190YXJnZXQoc3RhdGUtXFx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjA0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdHJlZyAtIHN0YXRlLVxcdTAwM2VzdGFja19hcmdfcmVncyk7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYxMi1cXHRcXHRcXHQgICAgICBzaXplb2YoKnN0YXRlLVxcdTAwM2VzdGFjayk7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2MTM6XFx0XFx0XFx0KnRhcmdldCA9IGRpYWdfc3RhY2tfc2xvdF90YXJnZXQoc3RhdGUtXFx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVxcdTAwM2VmcmFtZW5vLCBzcGkpO1xcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjE0LVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE2NjY9dm9pZCBicGZfZGlhZ19yZWNvcmRfc2NydWJfc3RhY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjcwLVxcdGRpYWdfcmVjb3JkX21vZChlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2NzE6XFx0XFx0XFx0ZGlhZ19zdGFja19yYW5nZV90YXJnZXQoc3RhdGUtXFx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVxcdTAwM2VmcmFtZW5vLCBtaW5fb2ZmLCBtYXhfb2ZmKSxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTY3Mi1cXHRcXHRcXHRyZWFzb24sIE5VTEwsIE5VTEwsIE5VTEwpO1xcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE3NTA9c3RhdGljIGJvb2wgZGlhZ190YXJnZXRfbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgYnBmX2RpYWdfbW9kX3RhcmdldCAqZXZlbnRfdGFyZ2V0LFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE3NTQtXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE3NTU6XFx0aWYgKGV2ZW50X3RhcmdldC1cXHUwMDNlZnJhbWVfaWQgIT0gdGFyZ2V0LVxcdTAwM2VmcmFtZV9pZCB8fCBldmVudF90YXJnZXQtXFx1MDAzZWZyYW1lbm8gIT0gdGFyZ2V0LVxcdTAwM2VmcmFtZW5vKVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNzU2LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNzgwPXN0YXRpYyB2b2lkIGRpYWdfYnVpbGRfbGluZWFnZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2RpYWdfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTc5MC1cXHRpZiAob3B0cy1cXHUwMDNlc2NvcGUgPT0gQlBGX0RJQUdfSElTVE9SWV9TQ09QRV9SRUcpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE3OTE6XFx0XFx0dGFyZ2V0ID0gZGlhZ19yZWdfdGFyZ2V0KG9wdHMtXFx1MDAzZWZyYW1lX2lkLCBvcHRzLVxcdTAwM2VmcmFtZW5vLCBvcHRzLVxcdTAwM2VyZWdubyk7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE3OTItXFx0ZWxzZSBpZiAob3B0cy1cXHUwMDNlc2NvcGUgPT0gQlBGX0RJQUdfSElTVE9SWV9TQ09QRV9TVEFDS19BUkcpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE3OTM6XFx0XFx0dGFyZ2V0ID0gZGlhZ19zdGFja19hcmdfdGFyZ2V0KG9wdHMtXFx1MDAzZWZyYW1lX2lkLCBvcHRzLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNzk0LVxcdFxcdFxcdFxcdFxcdCAgICAgICBvcHRzLVxcdTAwM2VzdGFja19hcmdfc2xvdCk7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTk1Mj12b2lkIGJwZl9kaWFnX21lbV9ib3VuZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTk1OS1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZS1cXHUwMDNlZGlhZ19mcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTk2MDpcXHRcXHQuZnJhbWVubyA9IGZyYW1lLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xOTYxLVxcdFxcdC5yZWdubyA9IHJlZ25vLFxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEwMT1zdGF0aWMgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmxvb2t1cF9pbnN0YW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDItXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdCxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAzOlxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGZyYW1lbm8pXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNC17XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA4LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDk6XFx0c3VicHJvZ19zdGFydCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW3N0LVxcdTAwM2VmcmFtZVtmcmFtZW5vXS1cXHUwMDNlc3VicHJvZ25vXS5zdGFydDtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTEwOlxcdGNhbGxzaXRlID0gZnJhbWVubyBcXHUwMDNlIDAgPyBzdC1cXHUwMDNlZnJhbWVbZnJhbWVub10tXFx1MDAzZWNhbGxzaXRlIDogc3VicHJvZ19zdGFydDtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTExLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTI6XFx0Zm9yIChkZXB0aCA9IGZyYW1lbm87IDsgZGVwdGgtLSkge1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTMtXFx0XFx0a2V5ID0gZGVwdGggXFx1MDAzZSAwID8gY2FsbHNpdGUgOiBzdWJwcm9nX3N0YXJ0O1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTMwNj1zdGF0aWMgdm9pZCB1cGRhdGVfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlKVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMyOS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MzMwOnN0YXRpYyBib29sIGlzX2xpdmVfYmVmb3JlKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGluc25faWR4LCB1MzIgZnJhbWVubywgdTMyIGhhbGZfc3BpKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zMzEte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzMy1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MzM0OlxcdG1hc2tzID0gZ2V0X2ZyYW1lX21hc2tzKGluc3RhbmNlLCBmcmFtZW5vLCBpbnNuX2lkeCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzNS1cXHRyZXR1cm4gbWFza3MgXFx1MDAyNlxcdTAwMjYgc3Bpc190ZXN0X2JpdChtYXNrcy1cXHUwMDNlbGl2ZV9iZWZvcmUsIGhhbGZfc3BpKTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0zMzg9aW50IGJwZl9saXZlX3N0YWNrX3F1ZXJ5X2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzU4LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozNTk6Ym9vbCBicGZfc3RhY2tfc2xvdF9hbGl2ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnJhbWVubywgdTMyIGhhbGZfc3BpKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zNjAte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM3Ni1cXHRjdXJfZGVsdGEgPSAoaW50KWN1cmZyYW1lX2luc3RhbmNlLVxcdTAwM2VkZXB0aCAtIChpbnQpcS1cXHUwMDNlY3VyZnJhbWU7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjM3NzpcXHRyZWwgPSBmcmFtZW5vICsgY3VyX2RlbHRhO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zNzgtXFx0aWYgKHJlbCBcXHUwMDNjPSBjdXJmcmFtZV9pbnN0YW5jZS1cXHUwMDNlZGVwdGgpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzgzLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozODQ6XFx0Zm9yIChpID0gZnJhbWVubzsgaSBcXHUwMDNjIHEtXFx1MDAzZWN1cmZyYW1lOyBpKyspIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzg1LVxcdFxcdGluc3RhbmNlID0gcS1cXHUwMDNlaW5zdGFuY2VzW2ldO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM4Ny1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6Mzg4OlxcdFxcdC8qIE1hcCBhY3R1YWwgZnJhbWVubyB0byBmcmFtZSBpbmRleCB3aXRoaW4gdGhpcyBpbnN0YW5jZSAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zODktXFx0XFx0ZGVsdGEgPSAoaW50KWluc3RhbmNlLVxcdTAwM2VkZXB0aCAtIChpbnQpaTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MzkwOlxcdFxcdHJlbCA9IGZyYW1lbm8gKyBkZWx0YTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzkxLVxcdFxcdGlmIChyZWwgXFx1MDAzZSBpbnN0YW5jZS1cXHUwMDNlZGVwdGgpXFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jPTYyND1zdGF0aWMgdm9pZCBwcmludF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvbG9nLmMtNjQyLVxcdGlmICh0ID09IFBUUl9UT19TVEFDSykge1xcbmtlcm5lbC9icGYvbG9nLmM6NjQzOlxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZnJhbWVubyAhPSByZWctXFx1MDAzZWZyYW1lbm8pXFxua2VybmVsL2JwZi9sb2cuYzo2NDQ6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJbJWRdXFxcIiwgcmVnLVxcdTAwM2VmcmFtZW5vKTtcXG5rZXJuZWwvYnBmL2xvZy5jLTY0NS1cXHRcXHRpZiAodG51bV9pc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jPTcwMD12b2lkIHByaW50X3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSxcXG5rZXJuZWwvYnBmL2xvZy5jOjcwMTpcXHRcXHRcXHQgIHUzMiBmcmFtZW5vLCBib29sIHByaW50X2FsbClcXG5rZXJuZWwvYnBmL2xvZy5jLTcwMi17XFxua2VybmVsL2JwZi9sb2cuYzo3MDM6XFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IHZzdGF0ZS1cXHUwMDNlZnJhbWVbZnJhbWVub107XFxua2VybmVsL2JwZi9sb2cuYy03MDQtXFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4tLVxcbmtlcm5lbC9icGYvbG9nLmMtNzA2LVxcbmtlcm5lbC9icGYvbG9nLmM6NzA3OlxcdGlmIChzdGF0ZS1cXHUwMDNlZnJhbWVubylcXG5rZXJuZWwvYnBmL2xvZy5jOjcwODpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiBmcmFtZSVkOlxcXCIsIHN0YXRlLVxcdTAwM2VmcmFtZW5vKTtcXG5rZXJuZWwvYnBmL2xvZy5jLTcwOS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0JQRl9SRUc7IGkrKykge1xcbi0tXFxua2VybmVsL2JwZi9sb2cuYz04MDM9dm9pZCBwcmludF9pbnNuX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSxcXG5rZXJuZWwvYnBmL2xvZy5jOjgwNDpcXHRcXHQgICAgICB1MzIgZnJhbWVubylcXG5rZXJuZWwvYnBmL2xvZy5jLTgwNS17XFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jLTgxMi1cXHR9XFxua2VybmVsL2JwZi9sb2cuYzo4MTM6XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCB2c3RhdGUsIGZyYW1lbm8sIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2xvZy5jLTgxNC19XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTQ4OD1zdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00OTQtXFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVxcdTAwM2VwYXJlbnRfaWQsIHJjdXItXFx1MDAzZXBhcmVudF9pZCwgaWRtYXApIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTU6XFx0ICAgICAgIHJvbGQtXFx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cXHUwMDNlZnJhbWVubztcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ5Ni19XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTExMDk9c3RhdGljIGJvb2wgc3RhdGVzX21heWJlX2xvb3Bpbmcoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTIxLVxcdFxcdGlmIChtZW1jbXAoXFx1MDAyNmZvbGQtXFx1MDAzZXJlZ3NbaV0sIFxcdTAwMjZmY3VyLVxcdTAwM2VyZWdzW2ldLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTEyMjpcXHRcXHRcXHQgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgZnJhbWVubykpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTEyMy1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjI3MT1zdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyODMtXFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfRlApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMjg0OlxcdHJlZ3NbQlBGX1JFR19GUF0uZnJhbWVubyA9IHN0YXRlLVxcdTAwM2VmcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjg1LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMjk2PXN0YXRpYyB2b2lkIGluaXRfZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjk3LVxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMjk4OlxcdFxcdFxcdCAgICBpbnQgY2FsbHNpdGUsIGludCBmcmFtZW5vLCBpbnQgc3VicHJvZ25vKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjk5LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjMwMC1cXHRzdGF0ZS1cXHUwMDNlY2FsbHNpdGUgPSBjYWxsc2l0ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjMwMTpcXHRzdGF0ZS1cXHUwMDNlZnJhbWVubyA9IGZyYW1lbm87XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIzMDItXFx0YnBmX2RpYWdfaW5pdF9mcmFtZShlbnYsIHN0YXRlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMzEwPXN0YXRpYyBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpwdXNoX2FzeW5jX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjM0NS1cXHRcXHRcXHRCUEZfTUFJTl9GVU5DIC8qIGNhbGxzaXRlICovLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMzQ2OlxcdFxcdFxcdDAgLyogZnJhbWVubyB3aXRoaW4gdGhpcyBjYWxsY2hhaW4gKi8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIzNDctXFx0XFx0XFx0c3VicHJvZyAvKiBzdWJwcm9nIG51bWJlciB3aXRoaW4gdGhpcyBwcm9nICovKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjQ4PXN0cnVjdCBsaW5rZWRfcmVnIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzI0OTpcXHR1OCBmcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjUwLVxcdHVuaW9uIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjYyPXN0YXRpYyBzdHJ1Y3QgbGlua2VkX3JlZyAqbGlua2VkX3JlZ3NfcHVzaChzdHJ1Y3QgbGlua2VkX3JlZ3MgKnMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI3My0gKiBQYWNrIG9uZSBoaXN0b3J5IGVudHJ5IGZvciBsaW5rZWQgcmVnaXN0ZXJzIGFzIDExIGJpdHMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyNzQ6ICogLSA0LWJpdHMgZnJhbWVub1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjc1LSAqIC0gNi1iaXRzIHNwaV9vcl9yZWdcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjc4PXN0YXRpYyB1NjQgbGlua2VkX3JlZ3NfcGFjayhzdHJ1Y3QgbGlua2VkX3JlZ3MgKnMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI4Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzI4NzpcXHRcXHR0bXAgfD0gZS1cXHUwMDNlZnJhbWVubztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI4OC1cXHRcXHR0bXAgfD0gZS1cXHUwMDNlc3BpIFxcdTAwM2NcXHUwMDNjIExSX1NQSV9PRkY7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzI5OT1zdGF0aWMgdm9pZCBsaW5rZWRfcmVnc191bnBhY2sodTY0IHZhbCwgc3RydWN0IGxpbmtlZF9yZWdzICpzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMDgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzMDk6XFx0XFx0ZS1cXHUwMDNlZnJhbWVubyA9ICB2YWwgXFx1MDAyNiBMUl9GUkFNRU5PX01BU0s7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMTAtXFx0XFx0ZS1cXHUwMDNlc3BpICAgICA9ICh2YWwgXFx1MDAzZVxcdTAwM2UgTFJfU1BJX09GRikgXFx1MDAyNiBMUl9TUElfTUFTSztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzQ4PXZvaWQgYnBmX2J0X3N5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQsIHN0cnVjdCBicGZfam1wX2hpc3RvcnlfZW50cnkgKmhpc3QpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM2MC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzM2MTpcXHRcXHRpZiAoKGUtXFx1MDAzZWlzX3JlZyBcXHUwMDI2XFx1MDAyNiBidF9pc19mcmFtZV9yZWdfc2V0KGJ0LCBlLVxcdTAwM2VmcmFtZW5vLCBlLVxcdTAwM2VyZWdubykpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzNjI6XFx0XFx0ICAgICghZS1cXHUwMDNlaXNfcmVnIFxcdTAwMjZcXHUwMDI2IGJ0X2lzX2ZyYW1lX3Nsb3Rfc2V0KGJ0LCBlLVxcdTAwM2VmcmFtZW5vLCBlLVxcdTAwM2VzcGkpKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzYzLVxcdFxcdFxcdHNvbWVfcHJlY2lzZSA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM3NC1cXHRcXHRpZiAoZS1cXHUwMDNlaXNfcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMzc1OlxcdFxcdFxcdGJwZl9idF9zZXRfZnJhbWVfcmVnKGJ0LCBlLVxcdTAwM2VmcmFtZW5vLCBlLVxcdTAwM2VyZWdubyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzNzYtXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMzc3OlxcdFxcdFxcdGJwZl9idF9zZXRfZnJhbWVfc2xvdChidCwgZS1cXHUwMDNlZnJhbWVubywgZS1cXHUwMDNlc3BpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM3OC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzUxOT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1MjktXFx0aW50IGluc25fZmxhZ3MgPSBJTlNOX0ZfU1RBQ0tfQUNDRVNTO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTMwOlxcdGludCBoaXN0X3NwaSA9IHNwaSwgaGlzdF9mcmFtZSA9IHN0YXRlLVxcdTAwM2VmcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTMxLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM3OTQ9c3RhdGljIGludCBtYXJrX3JlZ19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzgyOC1cXHRcXHRpZiAoemVyb19zcGlsbF9tYXNrKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM4Mjk6XFx0XFx0XFx0YnBmX2J0X3NldF9mcmFtZV9zbG90X21hc2soXFx1MDAyNmVudi1cXHUwMDNlYnQsIHB0cl9zdGF0ZS1cXHUwMDNlZnJhbWVubywgemVyb19zcGlsbF9tYXNrKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzgzMC1cXHRcXHRcXHRyZXR1cm4gbWFya19jaGFpbl9wcmVjaXNpb25fYmF0Y2goZW52LCBlbnYtXFx1MDAzZWN1cl9zdGF0ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzg2ND1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzg3NS1cXHRpbnQgaW5zbl9mbGFncyA9IElOU05fRl9TVEFDS19BQ0NFU1M7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM4NzY6XFx0aW50IGhpc3Rfc3BpID0gc3BpLCBoaXN0X2ZyYW1lID0gcmVnX3N0YXRlLVxcdTAwM2VmcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zODc3LVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQyNDM9c3RhdGljIGludCBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGFyZ19pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDI0Ny1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI0ODpcXHRidF9zZXRfZnJhbWVfc3RhY2tfYXJnX3Nsb3QoXFx1MDAyNmVudi1cXHUwMDNlYnQsIGNhbGxlci1cXHUwMDNlZnJhbWVubywgc3BpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDI0OS1cXHRyZXR1cm4gbWFya19jaGFpbl9wcmVjaXNpb25fYmF0Y2goZW52LCBlbnYtXFx1MDAzZWN1cl9zdGF0ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzc0Nj1zdGF0aWMgaW50IHByb2Nlc3NfaXRlcl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MzktXFx0XFx0bWV0YS1cXHUwMDNlaXRlci5zcGkgPSBzcGk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc4NDA6XFx0XFx0bWV0YS1cXHUwMDNlaXRlci5mcmFtZW5vID0gcmVnLVxcdTAwM2VmcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODQxLVxcdFxcdHVwZGF0ZV9yZWZfb2JqKFxcdTAwMjZtZXRhLVxcdTAwM2VyZWZfb2JqLCBcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc5MzM9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpnZXRfaXRlcl9mcm9tX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cl9zdCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM1LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzkzNjpcXHRpbnQgaXRlcl9mcmFtZW5vID0gbWV0YS1cXHUwMDNlaXRlci5mcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM3LVxcdGludCBpdGVyX3NwaSA9IG1ldGEtXFx1MDAzZWl0ZXIuc3BpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3OTM5OlxcdHJldHVybiBcXHUwMDI2Y3VyX3N0LVxcdTAwM2VmcmFtZVtpdGVyX2ZyYW1lbm9dLVxcdTAwM2VzdGFja1tpdGVyX3NwaV0uc3BpbGxlZF9wdHI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5NDAtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTg2MzY9c3RhdGljIGludCBnZXRfY29uc3RhbnRfbWFwX2tleShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg2ODYtXFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjg2ODc6XFx0YnBmX2J0X3NldF9mcmFtZV9zbG90KFxcdTAwMjZlbnYtXFx1MDAzZWJ0LCBrZXktXFx1MDAzZWZyYW1lbm8sIHNwaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg2ODgtXFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb25fYmF0Y2goZW52LCBlbnYtXFx1MDAzZWN1cl9zdGF0ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTYzMj1zdGF0aWMgaW50IHNldHVwX2Z1bmNfZW50cnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2csIGludCBjYWxsc2l0ZSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjYyLVxcdFxcdFxcdGNhbGxzaXRlLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NjYzOlxcdFxcdFxcdHN0YXRlLVxcdTAwM2VjdXJmcmFtZSArIDEgLyogZnJhbWVubyB3aXRoaW4gdGhpcyBjYWxsY2hhaW4gKi8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk2NjQtXFx0XFx0XFx0c3VicHJvZyAvKiBzdWJwcm9nIG51bWJlciB3aXRoaW4gdGhpcyBwcm9nICovKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTE0PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDAyMi1cXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxlcjpcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDAyMzpcXHRcXHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXFx1MDAzZWZyYW1lbm8sIHRydWUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDAyNC1cXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxlZTpcXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzQ2PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQwOC1cXHRcXHR2ZXJib3NlKGVudiwgXFxcInJldHVybmluZyBmcm9tIGNhbGxlZTpcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQwOTpcXHRcXHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZWUtXFx1MDAzZWZyYW1lbm8sIHRydWUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxMC1cXHRcXHR2ZXJib3NlKGVudiwgXFxcInRvIGNhbGxlciBhdCAlZDpcXFxcblxcXCIsICppbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDExOlxcdFxcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cXHUwMDNlZnJhbWVubywgdHJ1ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDEyLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDU3OD1zdGF0aWMgaW50IGNoZWNrX3JlZmVyZW5jZV9sZWFrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgZXhjZXB0aW9uX2V4aXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA1ODUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNTg2OlxcdGlmICghZXhjZXB0aW9uX2V4aXQgXFx1MDAyNlxcdTAwMjYgY3VyX2Z1bmMoZW52KS1cXHUwMDNlZnJhbWVubylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA1ODctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY4MTI9c3RhdGljIHZvaWQgX19jb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBsaW5rZWRfcmVncyAqcmVnX3NldCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY4MTM6XFx0XFx0XFx0XFx0ICB1MzIgaWQsIHUzMiBmcmFtZW5vLCB1MzIgc3BpX29yX3JlZywgYm9vbCBpc19yZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODE0LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgyMS1cXHRpZiAoZSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgyMjpcXHRcXHRlLVxcdTAwM2VmcmFtZW5vID0gZnJhbWVubztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MjMtXFx0XFx0ZS1cXHUwMDNlaXNfcmVnID0gaXNfcmVnO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2ODY3PXN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODc2LVxcdFxcdGUgPSBcXHUwMDI2bGlua2VkX3JlZ3MtXFx1MDAzZWVudHJpZXNbaV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODc3OlxcdFxcdHJlZyA9IGUtXFx1MDAzZWlzX3JlZyA/IFxcdTAwMjZ2c3RhdGUtXFx1MDAzZWZyYW1lW2UtXFx1MDAzZWZyYW1lbm9dLVxcdTAwM2VyZWdzW2UtXFx1MDAzZXJlZ25vXVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjg3ODpcXHRcXHRcXHRcXHQ6IFxcdTAwMjZ2c3RhdGUtXFx1MDAzZWZyYW1lW2UtXFx1MDAzZWZyYW1lbm9dLVxcdTAwM2VzdGFja1tlLVxcdTAwM2VzcGldLnNwaWxsZWRfcHRyO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjg3OS1cXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSB8fCByZWcgPT0ga25vd25fcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NDUwPXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDc3LVxcdFxcdFxcdEJQRl9NQUlOX0ZVTkMgLyogY2FsbHNpdGUgKi8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDc4OlxcdFxcdFxcdDAgLyogZnJhbWVubyAqLyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NzktXFx0XFx0XFx0c3VicHJvZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjU2Ljc3MTUxNTY4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg0OTU2MzkxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVmVyaWZpZXIgQnVnIGFuZCBpdHMgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aHJvdWdoIHRoZSBsb2dpYyBvZiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyByZWdpc3RlciBzdGF0ZSBjb21wYXJpc29ucy4gYHJlZ3NfZXhhY3RgIGlzIGEga2V5IGZ1bmN0aW9uIHVzZWQgd2hlbiB0aGUgdmVyaWZpZXIgbmVlZHMgdG8gZGV0ZXJtaW5lIGlmIHR3byByZWdpc3RlciBzdGF0ZXMgYXJlIGlkZW50aWNhbC4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGByZWdzX2V4YWN0YCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGl0IGNoZWNrcyBmb3IgZXF1YWxpdHkgb2YgdGhlIG1lbW9yeSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIgc3RhdGUgc3RydWN0cyB1cCB0byBhIGNlcnRhaW4gcG9pbnQgYW5kIHRoZW4gY2FsbHMgaGVscGVyIGZ1bmN0aW9ucyB0byBjaGVjayBJRHMuIFRoZSBpc3N1ZSBsaWVzIGluIGhvdyBgcmVnc19leGFjdGAgaXMgKnVzZWQqLlxuXG5UaGUgcGF0Y2ggaW4gcXVlc3Rpb24gYWRkcmVzc2VzIGEgY3JpdGljYWwgYnVnIGluIGByZWdzYWZlKClgIHJlbGF0ZWQgdG8gc3RhY2sgcG9pbnRlciBjb21wYXJpc29ucywgZXNwZWNpYWxseSB3aGVuIGBleGFjdGAgaXMgc2V0IHRvIGBFWEFDVGAuICBQcmV2aW91c2x5LCB3aGVuIHRoZSByZWdpc3RlciBwb2ludGVkIHRvIHRoZSBzdGFjayAoYFBUUl9UT19TVEFDS2ApLCBgcmVnc2FmZSgpYCAqc2hvdWxkKiBoYXZlIGJlZW4gY2hlY2tpbmcgdGhlIGBmcmFtZW5vYCBmaWVsZCBhcyBwYXJ0IG9mIHRoZSBlcXVhbGl0eSBjb21wYXJpc29uLiBIb3dldmVyLCB3aGVuIGBleGFjdGAgd2FzIHNldCB0byBgRVhBQ1RgLCBzdWNoIGFzIGR1cmluZyBsb29wIGRldGVjdGlvbiwgaXQgd2FzIGJ5cGFzc2luZyB0aGUgY2hlY2ssIGxlYWRpbmcgdG8gYSBmYWxzZSBwb3NpdGl2ZS4gVGhlIHZlcmlmaWVyIHdhcyBpbmNvcnJlY3RseSBjb25jbHVkaW5nIHRoYXQgdHdvIHJlZ2lzdGVyIHN0YXRlcyB3ZXJlIGVxdWl2YWxlbnQgZXZlbiBpZiB0aGV5IHBvaW50ZWQgdG8gZGlmZmVyZW50IHN0YWNrIGZyYW1lcyAoZS5nLiwgY2FsbGVyIHZzLiBjYWxsZWUgZnJhbWVzKS4gVGhlIHNhbWUgaXNzdWUgd2FzIGhhcHBlbmluZyB3aXRoIHNwaWxsZWQgc3RhY2sgcG9pbnRlcnMgKGBTVEFDS19TUElMTGApLCBhbmQgdGhlIGJ1ZyB3YXMgcGVybWl0dGluZyB0aGUgdmVyaWZpZXIgdG8gdHJlYXQgYSBsb29wIHdpdGggYSBzcGlsbGVkIHN0YWNrIHBvaW50ZXIgcG9pbnRpbmcgdG8gYSBkaWZmZXJlbnQgZnJhbWUgYXMgZXF1aXZhbGVudCB0byBhbm90aGVyIHN0YXRlLCBsZWFkaW5nIHRvIGluY29ycmVjdCBzdGF0ZSBwcnVuaW5nIGFuZCBsb29wIGRldGVjdGlvbi5cblxuU28sIHRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggcmUtaW50cm9kdWNlcyB0aGUgbWlzc2luZyBgZnJhbWVub2AgY2hlY2sgd2l0aGluIHRoZSBgcmVnc19leGFjdGAgZnVuY3Rpb24gYW5kIHJlc3RvcmVzIHRoZSBgXHUwMDI2XHUwMDI2IHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm9gIGNoZWNrIGluIHRoZSBgcmVnc19leGFjdGAgZnVuY3Rpb24uICBJdCAqc2hvdWxkKiBoYXZlIGJlZW4gdGhlcmUgYWxsIGFsb25nLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyAgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGByb2xkLVx1MDAzZWZyYW1lbm9gIGFuZCBgcmN1ci1cdTAwM2VmcmFtZW5vYCBhcmUgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSBgcmVnc19leGFjdGAgaXMgY2FsbGVkLiBMb29raW5nIGludG8gd2hlcmUgYGJwZl9yZWdfc3RhdGVgIHN0cnVjdHMgKHdoaWNoIGNvbnRhaW4gdGhlIGBmcmFtZW5vYCBmaWVsZCkgYXJlIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkLiBUaGV5IGFyZSBlaXRoZXIgcGFydHMgb2YgYGJwZl9mdW5jX3N0YXRlYCAoZm91bmQgaW4gdGhlIGByZWdzW01BWF9CUEZfUkVHXWAgYXJyYXkgb3IgdGhlIHN0YWNrIHNsb3RzLCBgc3RhY2tbTUFYX0JQRl9TVEFDSyAvIEJQRl9SRUdfU0laRV0uc3BpbGxlZF9wdHJgIG9yIGBzdGFja19hcmdfcmVnc2ApLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIGBicGZfcmVnX3N0YXRlYCBpbnN0YW5jZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgaW5pdGlhbGl6YXRpb24gb3IgY2xlYXJpbmcgcGF0dGVybnMgZm9yIHRoZXNlIHN0cnVjdHMgdG8gdmVyaWZ5IHRoYXQgdGhlIGBmcmFtZW5vYCBmaWVsZCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgYWNjZXNzZWQuICBJJ2xsIHN0YXJ0IGdyZXBwaW5nIGZvciBob3cgYGZyYW1lbm9gIGlzIGluaXRpYWxpemVkIG9yIGhvdyBgYnBmX3JlZ19zdGF0ZWAgaXMgY2xlYXJlZC9pbml0aWFsaXplZCB3aXRoaW4gdGhlIHZlcmlmaWVyIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NTowNS4yNjcxNTc5NjFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTU1MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ3NcXFxcW0JQRl9SRUdfRlBcXFxcXVxcXFwuZnJhbWVub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMjcxPXN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjI4My1cXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR19GUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIyODQ6XFx0cmVnc1tCUEZfUkVHX0ZQXS5mcmFtZW5vID0gc3RhdGUtXFx1MDAzZWZyYW1lbm87XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyODUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NTowNS4zMTU3MjQ5ODFaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzcwMzIwNTg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgSW5pdGlhbCBTdGF0ZXMqKlxuXG5Pa2F5LCBzbyBiZWZvcmUgZGl2aW5nIGRlZXBlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbmFsIHN0YXRlcyBhcmUgc2V0IGNvcnJlY3RseS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBleGVjdXRpb24gb2YgdGhpcyByb3V0aW5lLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpbml0X2Z1bmNfc3RhdGVgIGFuZCBgaW5pdF9yZWdfc3RhdGVgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gQXJlIHRoZSBmdW5jdGlvbidzIGludGVybmFsIHN0YXRlIGFuZCB0aGUgcmVnaXN0ZXIgdmFsdWVzIHNldCB0byB3aGF0IEkgZXhwZWN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBwYXJ0aWN1bGFyIG9wZXJhdGlvbj8gSXQncyBjcnVjaWFsIGZvciB0aGUgc3Vic2VxdWVudCBsb2dpYyB0byB3b3JrIGFzIGludGVuZGVkLCBhbmQgYW55IGVycm9ycyBoZXJlIHdpbGwgcmlwcGxlIHRocm91Z2ggdGhlIGV4ZWN1dGlvbi4gSXQncyBhIHF1aWNrIHNhbml0eSBjaGVjayBidXQgYW4gaW1wb3J0YW50IG9uZSB0byBhdm9pZCB3YXN0ZWQgdGltZSB0cmFja2luZyBkb3duIGRvd25zdHJlYW0gaXNzdWVzLiBMZXQncyBtYWtlIHN1cmUgdGhlc2UgaW5pdGlhbGl6YXRpb24gc3RlcHMgYXJlIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzMxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjEzLjAxODkzMzY1M1oiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNzA6XFx0XFxuMjI3MTpcXHRzdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyNzI6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSlcXG4yMjczOlxcdHtcXG4yMjc0OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gc3RhdGUtXFx1MDAzZXJlZ3M7XFxuMjI3NTpcXHRcXHRpbnQgaTtcXG4yMjc2OlxcdFxcbjIyNzc6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9CUEZfUkVHOyBpKyspIHtcXG4yMjc4OlxcdFxcdFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZyZWdzW2ldKTtcXG4yMjc5OlxcdFxcdH1cXG4yMjgwOlxcdFxcbjIyODE6XFx0XFx0LyogZnJhbWUgcG9pbnRlciAqL1xcbjIyODI6XFx0XFx0cmVnc1tCUEZfUkVHX0ZQXS50eXBlID0gUFRSX1RPX1NUQUNLO1xcbjIyODM6XFx0XFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfRlApO1xcbjIyODQ6XFx0XFx0cmVnc1tCUEZfUkVHX0ZQXS5mcmFtZW5vID0gc3RhdGUtXFx1MDAzZWZyYW1lbm87XFxuMjI4NTpcXHR9XFxuMjI4NjpcXHRcXG4yMjg3OlxcdHN0YXRpYyBzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSByZXR2YWxfcmFuZ2UoczMyIG1pbnZhbCwgczMyIG1heHZhbClcXG4yMjg4OlxcdHtcXG4yMjg5OlxcdFxcdC8qXFxuMjI5MDpcXHRcXHQgKiByZXR1cm5fMzJiaXQgaXMgc2V0IHRvIGZhbHNlIGJ5IGRlZmF1bHQgYW5kIHNldCBleHBsaWNpdGx5XFxuMjI5MTpcXHRcXHQgKiBieSB0aGUgY2FsbGVyIHdoZW4gbmVjZXNzYXJ5LlxcbjIyOTI6XFx0XFx0ICovXFxuMjI5MzpcXHRcXHRyZXR1cm4gKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlKXsgbWludmFsLCBtYXh2YWwsIGZhbHNlIH07XFxuMjI5NDpcXHR9XFxuMjI5NTpcXHRcXG4yMjk2OlxcdHN0YXRpYyB2b2lkIGluaXRfZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyOTc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXFxuMjI5ODpcXHRcXHRcXHRcXHQgICAgaW50IGNhbGxzaXRlLCBpbnQgZnJhbWVubywgaW50IHN1YnByb2dubylcXG4yMjk5OlxcdHtcXG4yMzAwOlxcdFxcdHN0YXRlLVxcdTAwM2VjYWxsc2l0ZSA9IGNhbGxzaXRlO1xcbjIzMDE6XFx0XFx0c3RhdGUtXFx1MDAzZWZyYW1lbm8gPSBmcmFtZW5vO1xcbjIzMDI6XFx0XFx0YnBmX2RpYWdfaW5pdF9mcmFtZShlbnYsIHN0YXRlKTtcXG4yMzAzOlxcdFxcdHN0YXRlLVxcdTAwM2VzdWJwcm9nbm8gPSBzdWJwcm9nbm87XFxuMjMwNDpcXHRcXHRzdGF0ZS1cXHUwMDNlY2FsbGJhY2tfcmV0X3JhbmdlID0gcmV0dmFsX3JhbmdlKDAsIDApO1xcbjIzMDU6XFx0XFx0aW5pdF9yZWdfc3RhdGUoZW52LCBzdGF0ZSk7XFxuMjMwNjpcXHRcXHRtYXJrX3ZlcmlmaWVyX3N0YXRlX3NjcmF0Y2hlZChlbnYpO1xcbjIzMDc6XFx0fVxcbjIzMDg6XFx0XFxuMjMwOTpcXHQvKiBTaW1pbGFyIHRvIHB1c2hfc3RhY2soKSwgYnV0IGZvciBhc3luYyBjYWxsYmFja3MgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTU6MTMuMDE5NTg0MjUzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNTkxMDgyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEZWNvZGluZyBgYnBmX21hcmtfcmVnX25vdF9pbml0YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgYnBmX21hcmtfcmVnX25vdF9pbml0YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggQlBGLCBsaWtlbHkgZUJQRiwgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBzb3J0IG9mIGluaXRpYWxpemF0aW9uIG9yIHJlZ2lzdGVyIHRyYWNraW5nIGlzc3VlLiBUaGUgXCJub3QgaW5pdFwiIHBhcnQgaXMgdGhlIGtleS4gSXQgc2lnbmlmaWVzIGEgc3RhdGUgd2hlcmUgYSBwYXJ0aWN1bGFyIEJQRiByZWdpc3RlciBoYXNuJ3QgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gVGhpcyBzY3JlYW1zIHBvdGVudGlhbCBmb3IgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCwgZnJhbmtseSwgY3Jhc2hlcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSBzY2VuYXJpb3MuIElzIHRoaXMgcmVsYXRlZCB0byBhIHNwZWNpZmljIEJQRiBoZWxwZXIgZnVuY3Rpb24/IE9yIHBlcmhhcHMgYSBnZW5lcmFsIGlzc3VlIGluIHRoZSB2ZXJpZmllciB3aGVyZSBpdCdzIG5vdCBjYXRjaGluZyB1bmluaXRpYWxpemVkIHJlZ2lzdGVyIHVzYWdlIGVhcmx5IGVub3VnaD8gSSBoYXZlIHRvIHJlbWVtYmVyIHRoZSB2ZXJpZmllciBpcyAqc3VwcG9zZWQqIHRvIGNhdGNoIHRoZXNlLCBzbyB0aGlzIGNvdWxkIG1lYW46XG5cbiogICAqKkEgdmVyaWZpZXIgYnVnOioqIEEgZmxhdyBpbiB0aGUgc3RhdGljIGFuYWx5c2lzIG9mIHRoZSBCUEYgdmVyaWZpZXIgYWxsb3dzIHRoZSBwcm9ncmFtIHRvIHBhc3MgdmFsaWRhdGlvbiB3aXRoIHVuaW5pdGlhbGl6ZWQgcmVnaXN0ZXJzLiBUaGlzIGlzIGJhZCwgKnZlcnkqIGJhZC4gSXQgY291bGQgbGVhZCB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaWYgZXhwbG9pdGVkLlxuKiAgICoqRWRnZSBjYXNlczoqKiBQZXJoYXBzIGEgY29tcGxleCBjb250cm9sIGZsb3cgcGF0aCB0aGF0J3MgYnlwYXNzaW5nIHRoZSB2ZXJpZmllcidzIGNoZWNrcy4gVGhlIHZlcmlmaWVyIG1pZ2h0IHN0cnVnZ2xlIHdpdGggaW50cmljYXRlIGxvb3BzIG9yIGNvbmRpdGlvbmFsIGp1bXBzLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNhc2VzIGFyZSBoYW5kbGVkIGJ5IHRoZSB2ZXJpZmllcidzIGFuYWx5c2lzLCBhbmQgd2hldGhlciB3ZSdyZSB1c2luZyBhbnkgdHJpY2tzIHRoYXQgbWlnaHQgdGhyb3cgaXQgb2ZmLlxuKiAgICoqQ29tcGlsZXIgT3B0aW1pemF0aW9uOioqIE1pZ2h0IGEgY2VydGFpbiBjb21waWxlciBvcHRpbWl6YXRpb24gYmUgaW50cm9kdWNpbmcgdGhpcyBidWc/IFRoaXMgaXMgYSBsaXR0bGUgbGVzcyBjb21tb24sIGJ1dCBpdCdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZS5cbiogICAqKkRvY3VtZW50YXRpb24gb3IgQXNzdW1wdGlvbnM6KiogQ291bGQgdGhlcmUgYmUgc29tZSBpbmNvcnJlY3QgZG9jdW1lbnRhdGlvbiwgb3IgYW4gdW53cml0dGVuIGFzc3VtcHRpb24gaW4gdGhlIGNvZGUgdGhhdCdzIGxlYWQgdG8gdGhlIGJ1Zz9cbiogICAqKlVzZXIgRXJyb3I6KiogSW4gYSB1c2VyLXByb3ZpZGVkIEJQRiBwcm9ncmFtLCBzb21lIGJhZCBwcm9ncmFtIG1pZ2h0IGJlIGdlbmVyYXRpbmcgdGhpcyBpc3N1ZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIHRoYXQncyB0cmlnZ2VyaW5nIHRoZSBpc3N1ZS5cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBBcmUgdGhlcmUgYW55IGNsdWVzIGluIHRoZSBzdGFjayB0cmFjZSwgb3IgYW55IHJlbGF0ZWQgZXJyb3IgbWVzc2FnZXM/IFdoYXQgQlBGIHByb2dyYW0gaXMgdHJpZ2dlcmluZyB0aGlzPyBVbmRlcnN0YW5kaW5nIHRoZSBwcm9ncmFtJ3Mgc3RydWN0dXJlIGFuZCB0aGUgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2VxdWVuY2Ugd2hlcmUgdGhpcyBmYWlsdXJlIG9jY3VycyBpcyBjcnVjaWFsLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBkaWcgZGVlcCBpbnRvIHRoZSB2ZXJpZmllcidzIGNvZGUsIG9yIGEgZGlzYXNzZW1ibGVyIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgdGhpcy4gSSdtIGxpa2VseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgcmVnaXN0ZXIgdXNhZ2UsIHN0YXRlIHRyYW5zaXRpb25zLCBhbmQgdGhlIGZsb3cgb2YgZGF0YSB3aXRoaW4gdGhlIEJQRiBwcm9ncmFtLlxuXG5PdmVyYWxsLCBgYnBmX21hcmtfcmVnX25vdF9pbml0YCBpcyBhIHJlZCBmbGFnLiBJdCBwb2ludHMgdG8gYSBjcml0aWNhbCBlcnJvciwgYW5kIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGFuZCBjYXJlZnVsIGF0dGVudGlvbi4gSSBuZWVkIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWUsIGFuYWx5emUgdGhlIGZhaWxpbmcgQlBGIHByb2dyYW0sIGFuZCB0aGVuIGZpZ3VyZSBvdXQgKndoeSogdGhlIHZlcmlmaWVyIGlzIGxldHRpbmcgdGhpcyBzbGlwIHRocm91Z2guIFRoZW4sIHRpbWUgdG8gYXBwbHkgdGhlIGZpeCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjE3LjI3ODY5NTQ2OFoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3OTE2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicGZfbWFya19yZWdfbm90X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjIxNT1zdGF0aWMgaW50IF9fbWFya19yZWdfczMyX3JhbmdlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjIzNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjIzNTp2b2lkIGJwZl9tYXJrX3JlZ19ub3RfaW5pdChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjM2LVxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjE3LjMyNjQ5MzM4N1oiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTg0Nzk1NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX21hcmtfcmVnX25vdF9pbml0YCBmdW5jdGlvbi4gSSBzZWUgaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgQlBGIHJlZ2lzdGVycyBhcmUgaGFuZGxlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBJIGltbWVkaWF0ZWx5IHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBpcyByZWxhdGVkIHRvIHRoZSBwcmV2ZW50aW9uIG9mIHVzaW5nIHVuaW5pdGlhbGl6ZWQgcmVnaXN0ZXJzLiBUaGF0J3MgYSBjbGFzc2ljIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYW5kIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIGFueSByb2J1c3QgQlBGIGltcGxlbWVudGF0aW9uLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBhbmQgc2FmZXR5IG9mIHRoZSBwcm9ncmFtcyBydW5uaW5nIGluIHRoZSBCUEYgVk0uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGl0cyB1c2UsIGFuZCB3aGF0IGRhdGEgaXQncyBvcGVyYXRpbmcgb24uIElzIGl0IGNoZWNraW5nIHJlZ2lzdGVycyBhZnRlciBzcGVjaWZpYyBvcGVyYXRpb25zPyBJcyBpdCBjYWxsZWQgZHVyaW5nIHByb2dyYW0gbG9hZGluZyBvciB2ZXJpZmljYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIHRyaWdnZXJlZC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGFuZCBzdGFydCBtYXBwaW5nIGl0IG91dCBpbiBteSBoZWFkLCB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBlZGdlIGNhc2VzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTU6MTkuNTExMjkyMjM0WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIzNSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIzNTpcXHR2b2lkIGJwZl9tYXJrX3JlZ19ub3RfaW5pdChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyMzY6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4yMjM3OlxcdHtcXG4yMjM4OlxcdFxcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIHJlZyk7XFxuMjIzOTpcXHRcXHRyZWctXFx1MDAzZXR5cGUgPSBOT1RfSU5JVDtcXG4yMjQwOlxcdH1cXG4yMjQxOlxcdFxcbjIyNDI6XFx0c3RhdGljIGludCBtYXJrX2J0Zl9sZF9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4yMjQzOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXFxuMjI0NDpcXHRcXHRcXHRcXHQgICBlbnVtIGJwZl9yZWdfdHlwZSByZWdfdHlwZSxcXG4yMjQ1OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZCxcXG4yMjQ2OlxcdFxcdFxcdFxcdCAgIGVudW0gYnBmX3R5cGVfZmxhZyBmbGFnKVxcbjIyNDc6XFx0e1xcbjIyNDg6XFx0XFx0c3dpdGNoIChyZWdfdHlwZSkge1xcbjIyNDk6XFx0XFx0Y2FzZSBTQ0FMQVJfVkFMVUU6XFxuMjI1MDpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xcbjIyNTE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjI1MjpcXHRcXHRjYXNlIFBUUl9UT19CVEZfSUQ6XFxuMjI1MzpcXHRcXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgcmVnbm8pO1xcbjIyNTQ6XFx0XFx0XFx0cmVnc1tyZWdub10udHlwZSA9IFBUUl9UT19CVEZfSUQgfCBmbGFnO1xcbjIyNTU6XFx0XFx0XFx0cmVnc1tyZWdub10uYnRmID0gYnRmO1xcbjIyNTY6XFx0XFx0XFx0cmVnc1tyZWdub10uYnRmX2lkID0gYnRmX2lkO1xcbjIyNTc6XFx0XFx0XFx0aWYgKHR5cGVfbWF5X2JlX251bGwoZmxhZykpXFxuMjI1ODpcXHRcXHRcXHRcXHRyZWdzW3JlZ25vXS5pZCA9ICsrZW52LVxcdTAwM2VpZF9nZW47XFxuMjI1OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjYwOlxcdFxcdGNhc2UgUFRSX1RPX01FTTpcXG4yMjYxOlxcdFxcdFxcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCByZWdubyk7XFxuMjI2MjpcXHRcXHRcXHRyZWdzW3JlZ25vXS50eXBlID0gUFRSX1RPX01FTSB8IGZsYWc7XFxuMjI2MzpcXHRcXHRcXHRyZWdzW3JlZ25vXS5tZW1fc2l6ZSA9IDA7XFxuMjI2NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjY1OlxcdFxcdGRlZmF1bHQ6XFxuMjI2NjpcXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwidW5leHBlY3RlZCByZWdfdHlwZSAlZCBpbiAlc1xcXFxuXFxcIiwgcmVnX3R5cGUsIF9fZnVuY19fKTtcXG4yMjY3OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjIyNjg6XFx0XFx0fVxcbjIyNjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NToxOS41MTE5MDk2NzRaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMwMDc5NTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYF9fbWFya19yZWdfdW5rbm93bmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgX19tYXJrX3JlZ191bmtub3duYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBTZWVpbmcgdGhpcyBuYW1lLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgaXRzIHJvbGUgaW4gcmVnaXN0ZXIgbWFuYWdlbWVudCBvciB0cmFja2luZy4gVGhlIFwidW5rbm93blwiIHBhcnQgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBJdCBzdWdnZXN0cyBhIG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgcmVnaXN0ZXJzIHdob3NlIHN0YXRlIGlzbid0IHByZWNpc2VseSBkZWZpbmVkIGF0IGEgY2VydGFpbiBwb2ludCwgb3IgcGVyaGFwcyBpbml0aWFsaXphdGlvbiwgb3Igd2l0aGluIGEgc3BlY2lmaWMgY29udHJvbCBmbG93LlxuXG5JJ20gdGhpbmtpbmcsIHRoaXMgaXMgcHJvYmFibHkgaW1wbGVtZW50ZWQgYXQgYSBmYWlybHkgbG93IGxldmVsLiBXZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHRoaW5ncyBsaWtlIG9wdGltaXppbmcgY29tcGlsZXIgcGFzc2VzLCBvciBwZXJoYXBzIGV2ZW4gaW4gdGhlIGNvcmUgb2YgYW4gZW11bGF0b3Igb3IgdmlydHVhbCBtYWNoaW5lLiBHaXZlbiB0aGUgZW1waGFzaXMgb24gXCJtYXJrLFwiIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGZsYWcgb3IgYml0bWFzayB0byBiZSBtYW5pcHVsYXRlZCwgaW5kaWNhdGluZyB0aGF0IHRoZSByZWdpc3RlcidzIGNvbnRlbnRzIGFyZSBpbmRldGVybWluYXRlIG9yIGludmFsaWQgZm9yIGEgcGFydGljdWxhciBvcGVyYXRpb24uXG5cblRoZSBrZXkgcXVlc3Rpb25zIGltbWVkaWF0ZWx5IGZvcm1pbmcgaW4gbXkgaGVhZCBhcmU6IFdoYXQgdHJpZ2dlcnMgdGhpcyBtYXJraW5nPyBJcyBpdCBkdWUgdG8gY29udHJvbCBmbG93IHBhdGhzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgcGVyaGFwcyByZWdpc3RlciBhbGlhc2luZyB0aGF0IGlzbid0IGNsZWFubHkgaGFuZGxlZD8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciByZWdpc3RlciBhbmFseXNpcyB0ZWNobmlxdWVzIGxpa2UgbGl2ZW5lc3MgYW5hbHlzaXMgb3IgcmVnaXN0ZXIgYWxsb2NhdGlvbj8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgb2Z0ZW4sIGlzIGl0IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gQXJlIHRoZXJlIG90aGVyIHJlbGF0ZWQgcm91dGluZXMsIGUuZy4gYF9fdW5tYXJrX3JlZ19rbm93bmA/IElzIHRoZXJlIGEgY29udGV4dCBzd2l0Y2gsIG9yIGZ1bmN0aW9uIGNhbGwgaGVyZT8gSG93IGFyZSB0aGVzZSByZWdpc3RlcnMgbGF0ZXIgYmVpbmcgdXNlZD8gQXJlIHRoZXJlIHJ1bnRpbWUgY2hlY2tzPyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgZ2VuZXJhdGUgY29tcGlsZSB0aW1lIGVycm9ycz8gSXMgaXQgZ2VuZXJhdGluZyBhIHdhcm5pbmc/IFRoaXMgbXVzdCBiZSBpbXBvcnRhbnQuXG5cbkluIHNob3J0LCBteSBtaW5kIGlzIGFscmVhZHkgZm9ybXVsYXRpbmcgYSBzZXJpZXMgb2YgcXVlc3Rpb25zIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBhY2N1cmFjeSwgYW5kIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2Ygd2hhdGV2ZXIgc3lzdGVtIG9yIHRvb2wgd2UncmUgZXhhbWluaW5nLiBJJ20ga2VlbiB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBlZGdlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTgxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTU6MjIuODEyNzA4NjI0WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYxNDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIF9fbWFya19yZWdfdW5rbm93blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz03NTM9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzcyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NzM6c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc3NC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjE5MT12b2lkIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyMDEtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIyMDI6c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyMDMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjIyLjg2MTMyNzcwM1oiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDAzMDA5NDM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyB6ZXJvIGluIG9uIHRob3NlIGNydWNpYWwgbGluZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGxpbmVzIDIyMDAtMjIzMC4gQmFzZWQgb24gcHJldmlvdXMgZGVidWdnaW5nIHNlc3Npb25zLCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGxvZ2ljIHJlc3BvbnNpYmxlIGZvciBbKioqSW5zZXJ0IFlvdXIgS25vd2xlZGdlIG9mIHdoYXQgdGhvc2UgbGluZXMgbGlrZWx5IHJlbGF0ZSB0byBoZXJlLCBlLmcuLCByZWdpc3RlciB2YWxpZGF0aW9uLCBsb29wIGRldGVjdGlvbiwgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaGFuZGxpbmcsIG9yIGEgcGFydGljdWxhciBpbnN0cnVjdGlvbiBwYXR0ZXJuKioqXS4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIGFuZCBjb2RlIGZsb3cuIEkgd2FudCB0byBjaGVjayBmb3IgZWRnZSBjYXNlcywgcG90ZW50aWFsIGZsYXdzLCBvciBldmVuIGp1c3Qgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgdmVyaWZpZXIncyBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSSdsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gYWNjb3VudHMgZm9yIGFsbCByZWxldmFudCBzY2VuYXJpb3MgYW5kIHBvdGVudGlhbGx5IGxvb2sgdG8gb3B0aW1pemUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTU6MzIuODkxNDI1NTAxWiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTY4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMDA6XFx0ICogaW5pdGlhbGl6ZSAucHJlY2lzZSBhcyB0cnVlIHdoZW4gbm90IGJwZiBjYXBhYmxlLlxcbjIyMDE6XFx0ICovXFxuMjIwMjpcXHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4yMjAzOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbjIyMDQ6XFx0e1xcbjIyMDU6XFx0XFx0YnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHJlZyk7XFxuMjIwNjpcXHRcXHRyZWctXFx1MDAzZXByZWNpc2UgPSAhZW52LVxcdTAwM2VicGZfY2FwYWJsZTtcXG4yMjA3OlxcdH1cXG4yMjA4OlxcdFxcbjIyMDk6XFx0c3RhdGljIHZvaWQgbWFya19yZWdfdW5rbm93bihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyMTA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vKVxcbjIyMTE6XFx0e1xcbjIyMTI6XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVncyArIHJlZ25vKTtcXG4yMjEzOlxcdH1cXG4yMjE0OlxcdFxcbjIyMTU6XFx0c3RhdGljIGludCBfX21hcmtfcmVnX3MzMl9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyMTY6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXFxuMjIxNzpcXHRcXHRcXHRcXHRcXHR1MzIgcmVnbm8sXFxuMjIxODpcXHRcXHRcXHRcXHRcXHRzMzIgczMyX21pbixcXG4yMjE5OlxcdFxcdFxcdFxcdFxcdHMzMiBzMzJfbWF4KVxcbjIyMjA6XFx0e1xcbjIyMjE6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ3MgKyByZWdubztcXG4yMjIyOlxcdFxcbjIyMjM6XFx0XFx0cmVnX3NldF9zcmFuZ2UzMihyZWcsXFxuMjIyNDpcXHRcXHRcXHRcXHQgbWF4X3QoczMyLCByZWdfczMyX21pbihyZWcpLCBzMzJfbWluKSxcXG4yMjI1OlxcdFxcdFxcdFxcdCBtaW5fdChzMzIsIHJlZ19zMzJfbWF4KHJlZyksIHMzMl9tYXgpKTtcXG4yMjI2OlxcdFxcdHJlZ19zZXRfc3JhbmdlNjQocmVnLFxcbjIyMjc6XFx0XFx0XFx0XFx0IG1heF90KHM2NCwgcmVnX3NtaW4ocmVnKSwgczMyX21pbiksXFxuMjIyODpcXHRcXHRcXHRcXHQgbWluX3QoczY0LCByZWdfc21heChyZWcpLCBzMzJfbWF4KSk7XFxuMjIyOTpcXHRcXG4yMjMwOlxcdFxcdHJlZ19ib3VuZHNfc3luYyhyZWcpO1xcbjIyMzE6XFx0XFxuMjIzMjpcXHRcXHRyZXR1cm4gcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soZW52LCByZWcsIFxcXCJzMzJfcmFuZ2VcXFwiKTtcXG4yMjMzOlxcdH1cXG4yMjM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NTozMi44OTI1Mjc1M1oiLCJTZXEiOjY5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTY0ODQwMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZWAsIHN1bW1hcml6ZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqTXkgUGVyc3BlY3RpdmUgb24gYGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZWAqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlYC4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgb2YgQlBGIHByb2dyYW0gYW5hbHlzaXMuIFRoaXMgZnVuY3Rpb24sIG9yIHdoYXRldmVyIGl0IGlzLCBpcyBhbG1vc3QgY2VydGFpbmx5IGEgY3J1Y2lhbCBjb21wb25lbnQgaW4gaGFuZGxpbmcgKnVuY2VydGFpbnR5KiBkdXJpbmcgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIGEgcGxhY2Ugd2hlcmUgdGhpbmdzIGFyZW4ndCBwZXJmZWN0bHkgcHJlZGljdGFibGUuICBUaGUgXCJ1bmtub3duXCIgcGFydCBpcyBjbGVhciDigJMgd2UndmUgZW5jb3VudGVyZWQgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGV4YWN0IHZhbHVlIG9mIGEgcmVnaXN0ZXIgY2FuJ3QgYmUgcGlubmVkIGRvd24gZGVmaW5pdGl2ZWx5LiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBhIGNvbXBsZXggY29uZGl0aW9uYWwgcGF0aCwgYW4gZXh0ZXJuYWwgaW5wdXQsIG9yIGV2ZW4ganVzdCBzb21lIGRlbGliZXJhdGUgb2JmdXNjYXRpb24gd2l0aGluIHRoZSBwcm9ncmFtLlxuXG5UaGUgXCJpbXByZWNpc2VcIiBsYWJlbCBpcyBhbHNvIHZlcnkgdGVsbGluZy4gSXQgc3VnZ2VzdHMgd2UgYXJlbid0IHRocm93aW5nIG91ciBoYW5kcyB1cCBpbiB0aGUgYWlyIGFuZCBnaXZpbmcgdXAgb24gdHJhY2tpbmcgdGhpcyByZWdpc3RlciBlbnRpcmVseS4gSW5zdGVhZCwgd2UncmUgbGlrZWx5IGFkb3B0aW5nIGEgY29uc2VydmF0aXZlLCBvdmVyLWFwcHJveGltYXRpbmcgc3RyYXRlZ3kuICBXZSdyZSBhY2tub3dsZWRnaW5nIHRoZSBhbWJpZ3VpdHksIHllcywgYnV0IHdlJ3JlIHRyeWluZyB0byBjb250YWluIGl0LiBUaGUgcHJvZ3JhbSBtaWdodCBjb250aW51ZSB0byBvcGVyYXRlIG9uIHRoZSByZWdpc3RlciwgYW5kIHdlIG5lZWQgdG8gcHJvdmlkZSBhIHZhbHVlIG9yIGNvbnN0cmFpbnQgZm9yIGl0LCBldmVuIGlmIHRoYXQgdmFsdWUgaXMgZXh0cmVtZWx5IGJyb2FkLlxuXG5Gcm9tIGEgcHJhY3RpY2FsIGFuZ2xlLCBJJ2QgYmV0IHRoaXMgZnVuY3Rpb24gaXMgZXNzZW50aWFsIGZvciBzYWZldHkgYW5kIGNvcnJlY3RuZXNzLiBUaGUgZ29hbCBpc24ndCBuZWNlc3NhcmlseSB0byAqc29sdmUqIGZvciB0aGUgZXhhY3QgcmVnaXN0ZXIgdmFsdWUsIGJ1dCB0byBwcmV2ZW50IGRhbmdlcm91cyBiZWhhdmlvciB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gbGVhdmluZyB0aGUgdmFsdWUgdW5pbml0aWFsaXplZCBvciBpbXByb3Blcmx5IGNvbnN0cmFpbmVkLiBGb3IgaW5zdGFuY2UsIHlvdSBjb3VsZCBzZWUgaXQgdXNlZCB0bzpcblxuKiAgICoqRmxhZyBhIHJlZ2lzdGVyIGZvciBhIG1vcmUgaW4tZGVwdGggYW5hbHlzaXMgbGF0ZXI6KiogdGhlIFwiaW1wcmVjaXNlXCIgbWFya2luZyBjb3VsZCB0cmlnZ2VyIG1vcmUgc29waGlzdGljYXRlZCBzeW1ib2xpYyBleGVjdXRpb24gaWYgZW5hYmxlZFxuKiAgICoqUHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb246KiogVGhpcyBtaWdodCBtZWFuIGxpbWl0aW5nIHdoYXQgb3BlcmF0aW9ucyB0aGF0IHJlZ2lzdGVyIGNhbiB0YWtlIHBhcnQgaW4gZHVyaW5nIGEgc2FmZXR5IGNoZWNrLCBwcmV2ZW50aW5nIGludmFsaWQgbWVtb3J5IGFjY2Vzcywgb3IgYXJpdGhtZXRpYyBvdmVyZmxvd3MuXG4qICAgKipFc3RhYmxpc2ggYSBib3VuZGFyeSBmb3IgdmFsdWUgcmFuZ2VzOioqIFRoaXMgcHJldmVudHMgdW5leHBlY3RlZCBiZWhhdmlvciwgYW5kIGFsbG93cyBmdXJ0aGVyIG9wZXJhdGlvbnMgb24gdGhlIHJlZ2lzdGVyIHdpdGggcmVhc29uYWJsZSBjb25zdHJhaW50c1xuKiAgICoqRW5mb3JjZSBzYWZldHkgY29uc3RyYWludHM6KiogUHJldmVudHMgbWFsaWNpb3VzIGlucHV0cyB0byB0aGUgQlBGIG1hY2hpbmUuXG5cbk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgY2FsbGVkIGZyb20gd2l0aGluIEJQRiB2ZXJpZmllci4gVGhlIHZlcmlmaWVyIGhhcyB0byBiZSBleHRyZW1lbHkgY2F1dGlvdXMgYW5kIGVyciBvbiB0aGUgc2lkZSBvZiBzYWZldHkgaW4gdGhlIGZhY2Ugb2YgdW5jZXJ0YWludHkuIFRoYXQncyBpdHMgam9iISBTbywgYGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZWAgaXMgYSBzbWFsbCBidXQgY3JpdGljYWwgY29nIGluIHRoYXQgbWFjaGluZS4gSXQgcHJvdmlkZXMgYSBtZWFucyB0byBhY2NvdW50IGZvciBhbWJpZ3VpdHkgd2hpbGUgc3RpbGwgbWFpbnRhaW5pbmcgY29udHJvbCBvdmVyIHRoZSBwcm9ncmFtJ3MgZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM2OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTU6MzcuMDU3MzcxMjk3WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjczNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxODU6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjE4NjpcXHRcXHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xcbjIxODc6XFx0XFx0cmV0dXJuIDA7XFxuMjE4ODpcXHR9XFxuMjE4OTpcXHRcXG4yMTkwOlxcdC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovXFxuMjE5MTpcXHR2b2lkIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbjIxOTI6XFx0e1xcbjIxOTM6XFx0XFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcXG4yMTk0OlxcdFxcdHJlZy1cXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcXG4yMTk1OlxcdFxcdHJlZy1cXHUwMDNldmFyX29mZiA9IHRudW1fdW5rbm93bjtcXG4yMTk2OlxcdFxcdF9fbWFya19yZWdfdW5ib3VuZGVkKHJlZyk7XFxuMjE5NzpcXHR9XFxuMjE5ODpcXHRcXG4yMTk5OlxcdC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUsXFxuMjIwMDpcXHQgKiBpbml0aWFsaXplIC5wcmVjaXNlIGFzIHRydWUgd2hlbiBub3QgYnBmIGNhcGFibGUuXFxuMjIwMTpcXHQgKi9cXG4yMjAyOlxcdHN0YXRpYyB2b2lkIF9fbWFya19yZWdfdW5rbm93bihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyMDM6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuMjIwNDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjM3LjA1OTM0MjY2N1oiLCJTZXEiOjcxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NTM0OTc0NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJQRiBWZXJpZmllciBQYXRjaCBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgZXZlcnkgYGJwZl9yZWdfc3RhdGVgIHN0YXJ0cyB6ZXJvZWQgb3V0LCBzbyBgZnJhbWVub2AgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZC4gSSBzZWUgdGhhdCBgc3RhdGVzX21heWJlX2xvb3BpbmdgIGhhcyBhIGBtZW1jbXBgIHVwIHRvIGBmcmFtZW5vYCwgd2hpY2ggc2VlbXMgcmVsZXZhbnQuIEFuZCBJIG5vdGljZSB0aGF0IGByZWdzX2V4YWN0YCBpcyBzdXBwb3NlZCB0byBjaGVjayBpZiB0d28gcmVnaXN0ZXJzIGFyZSBleGFjdGx5IHRoZSBzYW1lLiBCZWZvcmUgdGhlIHBhdGNoLCBpdCBvbmx5IGNoZWNrZWQgdXAgdG8gdGhlIGBpZGAgZmllbGQuIEl0IHNraXBwZWQgY29tcGFyaW5nIGBmcmFtZW5vYCBpbiBzb21lIGtleSBzaXR1YXRpb25zLiBGb3IgZXhhbXBsZSwgaW4gYHJlZ3NhZmVgIGZvciBgUFRSX1RPX1NUQUNLYCwgYW5kIHdoZW4gYGV4YWN0ID09IEVYQUNUYCBkdXJpbmcgbG9vcCBkZXRlY3Rpb24uIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQhIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGFkZHJlc3MgdGhlIGZhY3QgdGhhdCB0aGUgdmVyaWZpZXIgd2FzIG1pc3NpbmcgdGhlIGNoZWNrIGZvciBgZnJhbWVub2AgaW4gYHJlZ3NfZXhhY3RgLiBOb3csIGl0IGVuc3VyZXMgdGhhdCBzdGFjayBmcmFtZSBkaWZmZXJlbmNlcyBhcmUgY2F1Z2h0IGNvcnJlY3RseS5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNvdWxkIHRoaXMgYnVnIG9yIHRoZSBmaXggZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBrZXJuZWw/IFdoYXQgd2FzIHRoZSBidWcgZG9pbmc/IFdlbGwsIHRoZSB0ZXN0IGNhc2UgcHJvdmlkZWQgc2hvd3MgYSBzY2VuYXJpbyB3aGVyZSBhIGxvb3AgbW9kaWZpZXMgdGhlIHN0YWNrIGZyYW1lIG9mIGEgcG9pbnRlci4gVGhlIHZlcmlmaWVyIHdhcyBpbmNvcnJlY3RseSB0aGlua2luZyB0aGUgc3RhdGVzIHdlcmUgZXF1YWwgb3IgYW4gaW5maW5pdGUgbG9vcCB3aGVuIHRoZXkgd2VyZW4ndC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIHZlcmlmaWVyIGdvdCB0aGlzIGNvbXBsZXRlbHkgd3JvbmcuIEl0IGNvdWxkIGhhdmUgZWl0aGVyIHJlamVjdGVkIHRoZSBjb2RlIGluY29ycmVjdGx5IG9yIGxldCBhIGxvb3AgcnVuIGZvcmV2ZXIgYnkgbWlzc2luZyB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uLiBCdXQgZG9lcyBpdCBsZWFrIGluZm8gb3IgZXhwb3NlIHVuaW5pdCBtZW0/XG5cbkxldCdzIGNhcmVmdWxseSBjaGVjayB0aGUgS01TQU4gZ3VpZGVsaW5lcy4gRG9lcyB0aGUgcGF0Y2guLi5cbjEuICBJbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8sIHRoZSBjb2RlIGlzIGludGVybmFsIHRvIHRoZSB2ZXJpZmllci5cbjIuICBJbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYmVjYXVzZSBgZnJhbWVub2AgaXMgYWx3YXlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHN0cnVjdHMgYXJlIGNyZWF0ZWQuXG4zLiAgQWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOby5cbjQuICBNb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby5cblxuQWgsIG5vLCB0aGF0IGlzbid0IHRoZSBjYXNlIGhlcmUuIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IGZpeGluZyBhIGxvZ2ljYWwgZXJyb3IsIG5vdCBpbnRyb2R1Y2luZyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBJdOKAmXMgYWJvdXQgZW5zdXJpbmcgdGhlICpjb3JyZWN0bmVzcyogb2YgY29tcGFyaXNvbnMsIG5vdCBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdHRlcm5zLiBUaGUgY29tcGFyaXNvbiBub3cgaW5jbHVkZXMgYHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm9gLCB0aGVzZSByZWdpc3RlcnMgYXJlIGFsbCB6ZXJvLWluaXRpYWxpemVkIGFuZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHRpbWUgdGhlIGNvbXBhcmlzb25zIGFyZSBtYWRlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGp1c3QgaW1wcm92ZXMgdGhlIGxvb3AgZGV0ZWN0aW9uIGxvZ2ljLCB3aGljaCB1c2VzIGFscmVhZHktaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGl0J3MgYWxsIGJhc2VkIG9uIHplcm8taW5pdGlhbGl6ZWQgc3RydWN0dXJlcy4gVGhlIHBhdGNoIHNpbXBseSBlbnN1cmVzIHRoYXQgYGZyYW1lbm9gIGlzIGFjY291bnRlZCBmb3Igd2hlbiBjaGVja2luZyBpZiBzdGF0ZXMgYXJlIGlkZW50aWNhbC4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3Rpb24sIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGV0Yy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNzUsIk91dHB1dFRva2VucyI6MjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjQ2LjU5NDMyMjc5MloiLCJTZXEiOjcyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLiBTcGVjaWZpY2FsbHksIGl0IG1vdmVzIHRoZSBmcmFtZSBudW1iZXIgY2hlY2sgKHJvbGQtXFx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cXHUwMDNlZnJhbWVubykgaW50byByZWdzX2V4YWN0KCksIGVuc3VyaW5nIHRoYXQgZXhhY3QgcmVnaXN0ZXIgc3RhdGUgY29tcGFyaXNvbnMgKHN1Y2ggYXMgZHVyaW5nIGxvb3AgZGV0ZWN0aW9uIGFuZCBzcGlsbGVkIHN0YWNrIHBvaW50ZXIgY29tcGFyaXNvbikgY29ycmVjdGx5IGRpc3Rpbmd1aXNoIHN0YWNrIHBvaW50ZXJzIGZyb20gZGlmZmVyZW50IGNhbGwgZnJhbWVzLlxcblxcblRoZSB0b3VjaGVkIGZpZWxkcyAocm9sZC1cXHUwMDNlZnJhbWVubyBhbmQgcmN1ci1cXHUwMDNlZnJhbWVubykgaW4gc3RydWN0IGJwZl9yZWdfc3RhdGUgYXJlIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVycyBhbmQgZnVuYyBzdGF0ZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKHZpYSBtZW1zZXQoKSBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoKSBhbmQgaW5pdF9mdW5jX3N0YXRlKCkpLiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLiBTcGVjaWZpY2FsbHksIGl0IG1vdmVzIHRoZSBmcmFtZSBudW1iZXIgY2hlY2sgKHJvbGQtXFx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cXHUwMDNlZnJhbWVubykgaW50byByZWdzX2V4YWN0KCksIGVuc3VyaW5nIHRoYXQgZXhhY3QgcmVnaXN0ZXIgc3RhdGUgY29tcGFyaXNvbnMgKHN1Y2ggYXMgZHVyaW5nIGxvb3AgZGV0ZWN0aW9uIGFuZCBzcGlsbGVkIHN0YWNrIHBvaW50ZXIgY29tcGFyaXNvbikgY29ycmVjdGx5IGRpc3Rpbmd1aXNoIHN0YWNrIHBvaW50ZXJzIGZyb20gZGlmZmVyZW50IGNhbGwgZnJhbWVzLlxcblxcblRoZSB0b3VjaGVkIGZpZWxkcyAocm9sZC1cXHUwMDNlZnJhbWVubyBhbmQgcmN1ci1cXHUwMDNlZnJhbWVubykgaW4gc3RydWN0IGJwZl9yZWdfc3RhdGUgYXJlIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVycyBhbmQgZnVuYyBzdGF0ZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKHZpYSBtZW1zZXQoKSBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoKSBhbmQgaW5pdF9mdW5jX3N0YXRlKCkpLiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdmqd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 19:51:06 +0000 UTC FinishedAt: 2026-09-14 19:55:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "33eff1bc-49da-4860-8fda-913b092bb2d1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "regs_exact", "regsafe", "states_equal", "bpf_is_state_visited" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "ee363e055895364039bf28348ff13c615afad4ba", "base_tree": "bpf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnc19leGFjdCYjMzQ7LAogICAgJiMzNDtyZWdzYWZlJiMzNDssCiAgICAmIzM0O3N0YXRlc19lcXVhbCYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMgaW4ga2VybmVsL2JwZi9zdGF0ZXMuYy4gU3BlY2lmaWNhbGx5LCBpdCBtb3ZlcyB0aGUgZnJhbWUgbnVtYmVyIGNoZWNrIChyb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vKSBpbnRvIHJlZ3NfZXhhY3QoKSwgZW5zdXJpbmcgdGhhdCBleGFjdCByZWdpc3RlciBzdGF0ZSBjb21wYXJpc29ucyAoc3VjaCBhcyBkdXJpbmcgbG9vcCBkZXRlY3Rpb24gYW5kIHNwaWxsZWQgc3RhY2sgcG9pbnRlciBjb21wYXJpc29uKSBjb3JyZWN0bHkgZGlzdGluZ3Vpc2ggc3RhY2sgcG9pbnRlcnMgZnJvbSBkaWZmZXJlbnQgY2FsbCBmcmFtZXMuXG5cblRoZSB0b3VjaGVkIGZpZWxkcyAocm9sZC1cdTAwM2VmcmFtZW5vIGFuZCByY3VyLVx1MDAzZWZyYW1lbm8pIGluIHN0cnVjdCBicGZfcmVnX3N0YXRlIGFyZSBhbHdheXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiByZWdpc3RlcnMgYW5kIGZ1bmMgc3RhdGVzIGFyZSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkICh2aWEgbWVtc2V0KCkgaW4gYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKCkgYW5kIGluaXRfZnVuY19zdGF0ZSgpKS4gVGhlIHBhdGNoIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgYWxsb2NhdGlvbiBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMgaW4ga2VybmVsL2JwZi9zdGF0ZXMuYywgbW92aW5nIHRoZSBmcmFtZW5vIGVxdWFsaXR5IGNoZWNrIGludG8gcmVnc19leGFjdCgpLiBUaGlzIGFmZmVjdHMgc3RhdGUgY29tcGFyaXNvbiBmb3IgUFRSX1RPX1NUQUNLIHJlZ2lzdGVycyAoaW5jbHVkaW5nIHNwaWxsZWQgcmVnaXN0ZXJzIGR1cmluZyBsb29wIHN0YXRlIHBydW5pbmcpLiBGdXp6aW5nIHZpYSB0aGUgYnBmIHN5c2NhbGwgaXMgY3JpdGljYWwgdG8gdmVyaWZ5IHNvdW5kbmVzcyBhbmQgZW5zdXJlIG5vIHZlcmlmaWVyIHJlZ3Jlc3Npb25zIG9yIGluZmluaXRlIGxvb3BzL3NhZmV0eSBieXBhc3NlcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc4ZjBiNGEyOTE5YzFjYWZlNTYxYjcyMDE1NGFhN2M3OTU4NTg5ZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxOTo1MjoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuaW5kZXggNjZmYjExYjZjNmE3Ni4uODI3MDM4ZWMxOGI3YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbkBAIC00OTEsNyAmIzQzOzQ5MSw4IEBAIHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4ge1xuIFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApO1xuJiM0MztcdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VwYXJlbnRfaWQsIHJjdXItXHUwMDNlcGFyZW50X2lkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm87XG4gfVxuIFxuIGVudW0gZXhhY3RfbGV2ZWwge1xuQEAgLTYzOSwxMCAmIzQzOzY0MCw3IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gXHRcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgICB0bnVtX2luKHJvbGQtXHUwMDNldmFyX29mZiwgcmN1ci1cdTAwM2V2YXJfb2ZmKTtcbiBcdGNhc2UgUFRSX1RPX1NUQUNLOlxuLVx0XHQvKiB0d28gc3RhY2sgcG9pbnRlcnMgYXJlIGVxdWFsIG9ubHkgaWYgdGhleSYjMzk7cmUgcG9pbnRpbmcgdG9cbi1cdFx0ICogdGhlIHNhbWUgc3RhY2sgZnJhbWUsIHNpbmNlIGZwLTggaW4gZm9vICE9IGZwLTggaW4gYmFyXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCkgXHUwMDI2XHUwMDI2IHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm87XG4mIzQzO1x0XHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XG4gXHRjYXNlIFBUUl9UT19BUkVOQTpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIFBUUl9UT19JTlNOOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuaW5kZXggZDI0OGNlODc3ZjE0ZS4uZjhiN2JhMWJmNmI4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXG5AQCAtMzAzLDQgJiM0MzszMDMsNzAgQEAgX19uYWtlZCB2b2lkIG1heWJlX2V4aXRfc2NjX2J1ZzEodm9pZClcbiBcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBsb29wIHJlYWRzIHplcm8gZnJvbSB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrIG9uIGl0cyBmaXJzdCBpdGVyYXRpb24gYW5kXG4mIzQzOyAqIG9uZSBmcm9tIHRoZSBjYWxsZWUmIzM5O3Mgc3RhY2sgb24gaXRzIHNlY29uZCBpdGVyYXRpb24uIEF0IHRoZSBsb29wIGhlYWRlcixcbiYjNDM7ICogb25seSB0aGUgZnJhbWUgbnVtYmVyIG9mIHRoZSBwb2ludGVyIGluIHIxIGNoYW5nZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuJiM0Mzt2b2lkIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDsqKHU2NCAqKShyMTAgLSA4KSA9IDE7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7MTogcjAgPSAqKHU2NCAqKShyMSAmIzQzOyAwKTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtpZiByMCAhPSAwIGdvdG8gMmY7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjEgPSByMTA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjEgJiM0Mzs9IC04O1wmIzM0O1xuJiM0MztcdFwmIzM0O2dvdG8gMWI7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7MjogZXhpdDtcJiMzNDtcbiYjNDM7XHQ6OjogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7Ym91bmRlZCBsb29wIGNoYW5naW5nIHN0YWNrIGZyYW1lIGluIGEgcmVnaXN0ZXJcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgxKVxuJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuJiM0MztfX25ha2VkIHZvaWQgYm91bmRlZF9sb29wX3N0YWNrX2ZyYW1lc19yZWcodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxID0gcjEwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxICYjNDM7PSAtODtcJiMzNDtcbiYjNDM7XHRcJiMzNDtjYWxsIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZztcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRXhlcmNpc2UgdGhlIHNhbWUgZnJhbWUgY2hhbmdlIHRocm91Z2ggYSBzcGlsbGVkIHBvaW50ZXIuIEFsbCByZWdpc3RlcnNcbiYjNDM7ICogYXQgdGhlIGxvb3AgaGVhZGVyIGFyZSBpZGVudGljYWwsIHdoaWxlIGZwLTE2IHBvaW50cyB0byBhIGRpZmZlcmVudCBmcmFtZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkXG4mIzQzO3ZvaWQgbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSAxO1wmIzM0O1xuJiM0MztcdFwmIzM0OyoodTY0ICopKHIxMCAtIDE2KSA9IHIxO1wmIzM0O1xuJiM0MztcdFwmIzM0OzE6IHIxID0gKih1NjQgKikocjEwIC0gMTYpO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IwID0gKih1NjQgKikocjEgJiM0MzsgMCk7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7aWYgcjAgIT0gMCBnb3RvIDJmO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxID0gcjEwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxICYjNDM7PSAtODtcJiMzNDtcbiYjNDM7XHRcJiMzNDsqKHU2NCAqKShyMTAgLSAxNikgPSByMTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtnb3RvIDFiO1wmIzM0O1xuJiM0MztcdFwmIzM0OzI6IGV4aXQ7XCYjMzQ7XG4mIzQzO1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2JvdW5kZWQgbG9vcCBjaGFuZ2luZyBzdGFjayBmcmFtZSBpbiBhIHNwaWxsXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMSlcbiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiYjNDM7X19uYWtlZCB2b2lkIGJvdW5kZWRfbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxID0gcjEwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IxICYjNDM7PSAtODtcJiMzNDtcbiYjNDM7XHRcJiMzNDtjYWxsIGxvb3Bfc3RhY2tfZnJhbWVzX3NwaWxsO1wmIzM0O1xuJiM0MztcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdzX2V4YWN0JiMzNDssCiAgICAmIzM0O3JlZ3NhZmUmIzM0OywKICAgICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssCiAgICAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLCBtb3ZpbmcgdGhlIGZyYW1lbm8gZXF1YWxpdHkgY2hlY2sgaW50byByZWdzX2V4YWN0KCkuIFRoaXMgYWZmZWN0cyBzdGF0ZSBjb21wYXJpc29uIGZvciBQVFJfVE9fU1RBQ0sgcmVnaXN0ZXJzIChpbmNsdWRpbmcgc3BpbGxlZCByZWdpc3RlcnMgZHVyaW5nIGxvb3Agc3RhdGUgcHJ1bmluZykuIEZ1enppbmcgdmlhIHRoZSBicGYgc3lzY2FsbCBpcyBjcml0aWNhbCB0byB2ZXJpZnkgc291bmRuZXNzIGFuZCBlbnN1cmUgbm8gdmVyaWZpZXIgcmVncmVzc2lvbnMgb3IgaW5maW5pdGUgbG9vcHMvc2FmZXR5IGJ5cGFzc2VzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzhmMGI0YTI5MTljMWNhZmU1NjFiNzIwMTU0YWE3Yzc5NTg1ODllZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDE5OjUyOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKaW5kZXggNjZmYjExYjZjNmE3Ni4uODI3MDM4ZWMxOGI3YSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCkBAIC00OTEsNyAmIzQzOzQ5MSw4IEBAIHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiB7CiAJcmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwICZhbXA7JmFtcDsKIAkgICAgICAgY2hlY2tfaWRzKHJvbGQtJmd0O2lkLCByY3VyLSZndDtpZCwgaWRtYXApICZhbXA7JmFtcDsKLQkgICAgICAgY2hlY2tfaWRzKHJvbGQtJmd0O3BhcmVudF9pZCwgcmN1ci0mZ3Q7cGFyZW50X2lkLCBpZG1hcCk7CiYjNDM7CSAgICAgICBjaGVja19pZHMocm9sZC0mZ3Q7cGFyZW50X2lkLCByY3VyLSZndDtwYXJlbnRfaWQsIGlkbWFwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICByb2xkLSZndDtmcmFtZW5vID09IHJjdXItJmd0O2ZyYW1lbm87CiB9CiAKIGVudW0gZXhhY3RfbGV2ZWwgewpAQCAtNjM5LDEwICYjNDM7NjQwLDcgQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCwKIAkJcmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSAmYW1wOyZhbXA7CiAJCSAgICAgICB0bnVtX2luKHJvbGQtJmd0O3Zhcl9vZmYsIHJjdXItJmd0O3Zhcl9vZmYpOwogCWNhc2UgUFRSX1RPX1NUQUNLOgotCQkvKiB0d28gc3RhY2sgcG9pbnRlcnMgYXJlIGVxdWFsIG9ubHkgaWYgdGhleSYjMzk7cmUgcG9pbnRpbmcgdG8KLQkJICogdGhlIHNhbWUgc3RhY2sgZnJhbWUsIHNpbmNlIGZwLTggaW4gZm9vICE9IGZwLTggaW4gYmFyCi0JCSAqLwotCQlyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCkgJmFtcDsmYW1wOyByb2xkLSZndDtmcmFtZW5vID09IHJjdXItJmd0O2ZyYW1lbm87CiYjNDM7CQlyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7CiAJY2FzZSBQVFJfVE9fQVJFTkE6CiAJCXJldHVybiB0cnVlOwogCWNhc2UgUFRSX1RPX0lOU046CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMKaW5kZXggZDI0OGNlODc3ZjE0ZS4uZjhiN2JhMWJmNmI4NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYwpAQCAtMzAzLDQgJiM0MzszMDMsNzAgQEAgX19uYWtlZCB2b2lkIG1heWJlX2V4aXRfc2NjX2J1ZzEodm9pZCkKIAk6OjogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBsb29wIHJlYWRzIHplcm8gZnJvbSB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrIG9uIGl0cyBmaXJzdCBpdGVyYXRpb24gYW5kCiYjNDM7ICogb25lIGZyb20gdGhlIGNhbGxlZSYjMzk7cyBzdGFjayBvbiBpdHMgc2Vjb25kIGl0ZXJhdGlvbi4gQXQgdGhlIGxvb3AgaGVhZGVyLAomIzQzOyAqIG9ubHkgdGhlIGZyYW1lIG51bWJlciBvZiB0aGUgcG9pbnRlciBpbiByMSBjaGFuZ2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkCiYjNDM7dm9pZCBsb29wX3N0YWNrX2ZyYW1lc19yZWcodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsqKHU2NCAqKShyMTAgLSA4KSA9IDE7JiMzNDsKJiM0MzsJJiMzNDsxOiByMCA9ICoodTY0ICopKHIxICYjNDM7IDApOyYjMzQ7CiYjNDM7CSYjMzQ7aWYgcjAgIT0gMCBnb3RvIDJmOyYjMzQ7CiYjNDM7CSYjMzQ7cjEgPSByMTA7JiMzNDsKJiM0MzsJJiMzNDtyMSAmIzQzOz0gLTg7JiMzNDsKJiM0MzsJJiMzNDtnb3RvIDFiOyYjMzQ7CiYjNDM7CSYjMzQ7MjogZXhpdDsmIzM0OwomIzQzOwk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtib3VuZGVkIGxvb3AgY2hhbmdpbmcgc3RhY2sgZnJhbWUgaW4gYSByZWdpc3RlciYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgxKQomIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiYjNDM7X19uYWtlZCB2b2lkIGJvdW5kZWRfbG9vcF9zdGFja19mcmFtZXNfcmVnKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7cjEgPSByMTA7JiMzNDsKJiM0MzsJJiMzNDtyMSAmIzQzOz0gLTg7JiMzNDsKJiM0MzsJJiMzNDtjYWxsIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZzsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEV4ZXJjaXNlIHRoZSBzYW1lIGZyYW1lIGNoYW5nZSB0aHJvdWdoIGEgc3BpbGxlZCBwb2ludGVyLiBBbGwgcmVnaXN0ZXJzCiYjNDM7ICogYXQgdGhlIGxvb3AgaGVhZGVyIGFyZSBpZGVudGljYWwsIHdoaWxlIGZwLTE2IHBvaW50cyB0byBhIGRpZmZlcmVudCBmcmFtZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZAomIzQzO3ZvaWQgbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsqKHU2NCAqKShyMTAgLSA4KSA9IDE7JiMzNDsKJiM0MzsJJiMzNDsqKHU2NCAqKShyMTAgLSAxNikgPSByMTsmIzM0OwomIzQzOwkmIzM0OzE6IHIxID0gKih1NjQgKikocjEwIC0gMTYpOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAqKHU2NCAqKShyMSAmIzQzOyAwKTsmIzM0OwomIzQzOwkmIzM0O2lmIHIwICE9IDAgZ290byAyZjsmIzM0OwomIzQzOwkmIzM0O3IxID0gcjEwOyYjMzQ7CiYjNDM7CSYjMzQ7cjEgJiM0Mzs9IC04OyYjMzQ7CiYjNDM7CSYjMzQ7Kih1NjQgKikocjEwIC0gMTYpID0gcjE7JiMzNDsKJiM0MzsJJiMzNDtnb3RvIDFiOyYjMzQ7CiYjNDM7CSYjMzQ7MjogZXhpdDsmIzM0OwomIzQzOwk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtib3VuZGVkIGxvb3AgY2hhbmdpbmcgc3RhY2sgZnJhbWUgaW4gYSBzcGlsbCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgxKQomIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiYjNDM7X19uYWtlZCB2b2lkIGJvdW5kZWRfbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsqKHU2NCAqKShyMTAgLSA4KSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMSA9IHIxMDsmIzM0OwomIzQzOwkmIzM0O3IxICYjNDM7PSAtODsmIzM0OwomIzQzOwkmIzM0O2NhbGwgbG9vcF9zdGFja19mcmFtZXNfc3BpbGw7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCByZXZpZXcgcmVxdWVzdC4gRmlyc3QsIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhbmQgYWRkaW5nIHNvbWUgdGVzdHMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY2AuIFRoYXQmIzM5O3MgZ29vZCwgc2VlaW5nIHRlc3QgYWRkaXRpb25zIGFsd2F5cyBtYWtlcyBtZSBoYXBweS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gYHN0YXRlcy5jYCwgc28gbGV0JiMzOTtzIGluc3BlY3QgdGhlIGRpZmYgZGlyZWN0bHkuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGEgc3VidGxlIGNoYW5nZSB3aXRoaW4gYHJlZ3NfZXhhY3RgIGFuZCBpdHMgdXNhZ2UgaW4gdGhlIGByZWdzYWZlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBhIGByb2xkLSZndDtmcmFtZW5vID09IHJjdXItJmd0O2ZyYW1lbm9gIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBgcmVnc19leGFjdGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb21tZW50IHNlZW1zIHRvIGltcGx5IHRoYXQgdGhlIGZyYW1lIG51bWJlciBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHR3byBzdGFjayBwb2ludGVycyBhcmUgY29uc2lkZXJlZCBlcXVhbC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSByaWdodCBhcHByb2FjaC4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCBtb3JlIGNvbnRleHQuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSByZWxldmFudCBzZWN0aW9ucyBvZiBga2VybmVsL2JwZi9zdGF0ZXMuY2AgYXJvdW5kIHRoZXNlIGxpbmVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGByZWdzX2V4YWN0YCBpcyBpbnRlbmRlZCB0byBkbywgd2hlcmUgaXQmIzM5O3MgdXNlZCBpbiB0aGUgdmVyaWZpZXImIzM5O3MgbG9naWMsIGFuZCBob3cgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBpcyBzdHJ1Y3R1cmVkLiBLbm93aW5nIHRoZSBmaWVsZHMgb2YgYGJwZl9yZWdfc3RhdGVgIHdpbGwgY2xhcmlmeSB3aHkgYGZyYW1lbm9gIGlzIHNpZ25pZmljYW50IGluIHRoaXMgY29tcGFyaXNvbi4gSXMgaXQgcmVsYXRlZCB0byB0aGUgc3RhY2sgZnJhbWUgdHJhY2tpbmc/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgYXNwZWN0cyBvZiByZWdpc3RlciBzdGF0ZSB0cmFja2luZz8KCkkgd2FudCB0byBzZWUgd2hhdCBpcyBoYXBwZW5pbmcgdG8gdGhlIHN0YWNrIHBvaW50ZXIgcmVnaXN0ZXIgaGVyZS4gVGhlIGNoZWNrIGZvciBgUFRSX1RPX1NUQUNLYCB0eXBlIGlzIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IGl0IGhhbmRsZXMgdGhlIHN0YWNrIHBvaW50ZXIuIEkgYWxzbyB3YW50IHRvIGNoZWNrIHRoZSB1c2Ugb2YgYGlkbWFwYCB3aGljaCBpcyB1c2VkIGZvciBJRCBtYXBwaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDgwOlx0XHRcdHUzMiBpcCA9IGJwZl9mcmFtZV9pbnNuX2lkeChzdCwgaSk7XG4gNDgxOlx0XHRcdHUxNiBsaXZlX3JlZ3MgPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpcF0ubGl2ZV9yZWdzX2JlZm9yZTtcbiA0ODI6XHRcbiA0ODM6XHRcdFx0X19jbGVhbl9mdW5jX3N0YXRlKGVudiwgc3QtXHUwMDNlZnJhbWVbaV0sIGxpdmVfcmVncywgaSk7XG4gNDg0Olx0XHR9XG4gNDg1Olx0XHRyZXR1cm4gMDtcbiA0ODY6XHR9XG4gNDg3Olx0XG4gNDg4Olx0c3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiA0ODk6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxuIDQ5MDpcdFx0XHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gNDkxOlx0e1xuIDQ5MjpcdFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxuIDQ5MzpcdFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG4gNDk0Olx0XHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApIFx1MDAyNlx1MDAyNlxuIDQ5NTpcdFx0ICAgICAgIHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm87XG4gNDk2Olx0fVxuIDQ5NzpcdFxuIDQ5ODpcdGVudW0gZXhhY3RfbGV2ZWwge1xuIDQ5OTpcdFx0Tk9UX0VYQUNULFxuIDUwMDpcdFx0RVhBQ1QsXG4gNTAxOlx0XHRSQU5HRV9XSVRISU5cbiA1MDI6XHR9O1xuIDUwMzpcdFxuIDUwNDpcdC8qIFJldHVybnMgdHJ1ZSBpZiAocm9sZCBzYWZlIGltcGxpZXMgcmN1ciBzYWZlKSAqL1xuIDUwNTpcdHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gNTA2Olx0XHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG4gNTA3Olx0XHRcdCAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuIDUwODpcdHtcbiA1MDk6XHRcdGlmIChleGFjdCA9PSBFWEFDVClcbiA1MTA6XHRcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuIDUxMTpcdFxuIDUxMjpcdFx0aWYgKHJvbGQtXHUwMDNldHlwZSA9PSBOT1RfSU5JVClcbiA1MTM6XHRcdFx0LyogZXhwbG9yZWQgc3RhdGUgY2FuJiMzOTt0IGhhdmUgdXNlZCB0aGlzICovXG4gNTE0Olx0XHRcdHJldHVybiB0cnVlO1xuIDUxNTpcdFxuIDUxNjpcdFx0LyogRW5mb3JjZSB0aGF0IHJlZ2lzdGVyIHR5cGVzIGhhdmUgdG8gbWF0Y2ggZXhhY3RseSwgaW5jbHVkaW5nIHRoZWlyXG4gNTE3Olx0XHQgKiBtb2RpZmllcnMgKGxpa2UgUFRSX01BWUJFX05VTEwsIE1FTV9SRE9OTFksIGV0YyksIGFzIGEgZ2VuZXJhbFxuIDUxODpcdFx0ICogcnVsZS5cbiA1MTk6XHRcdCAqXG4gNTIwOlx0XHQgKiBPbmUgY2FuIG1ha2UgYSBwb2ludCB0aGF0IHVzaW5nIGEgcG9pbnRlciByZWdpc3RlciBhcyB1bmJvdW5kZWRcbiA1MjE6XHRcdCAqIFNDQUxBUiB3b3VsZCBiZSB0ZWNobmljYWxseSBhY2NlcHRhYmxlLCBidXQgdGhpcyBjb3VsZCBsZWFkIHRvXG4gNTIyOlx0XHQgKiBwb2ludGVyIGxlYWtzIGJlY2F1c2Ugc2NhbGFycyBhcmUgYWxsb3dlZCB0byBsZWFrIHdoaWxlIHBvaW50ZXJzXG4gNTIzOlx0XHQgKiBhcmUgbm90LiBXZSBjb3VsZCBtYWtlIHRoaXMgc2FmZSBpbiBzcGVjaWFsIGNhc2VzIGlmIHJvb3QgaXNcbiA1MjQ6XHRcdCAqIGNhbGxpbmcgdXMsIGJ1dCBpdCYjMzk7cyBwcm9iYWJseSBub3Qgd29ydGggdGhlIGhhc3NsZS5cbiA1MjU6XHRcdCAqXG4gNTI2Olx0XHQgKiBBbHNvLCByZWdpc3RlciB0eXBlcyB0aGF0IGFyZSAqbm90KiBNQVlCRV9OVUxMIGNvdWxkIHRlY2huaWNhbGx5IGJlXG4gNTI3Olx0XHQgKiBzYWZlIHRvIHVzZSBhcyB0aGVpciBNQVlCRV9OVUxMIHZhcmlhbnRzIChlLmcuLCBQVFJfVE9fTUFQX1ZBTFVFXG4gNTI4Olx0XHQgKiBpcyBzYWZlIHRvIGJlIHVzZWQgYXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMLCBwcm92aWRlZCBib3RoIHBvaW50XG4gNTI5Olx0XHQgKiB0byB0aGUgc2FtZSBtYXApLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NjYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUcmFjaW5nIHRoZSBVc2Ugb2YgYHJlZ3NfZXhhY3RgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHJlZ3NfZXhhY3RgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBCUEYgc3RhdGUgbWFuYWdlbWVudCBjb2RlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpjYWxsZWQqIHdpdGhpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdXJyb3VuZGluZyBsb2dpYy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGNvbnRleHQgaXQgb3BlcmF0ZXMgaW4hIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGZvdW5kYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBtb2RpZmljYXRpb25zIG9yIG9wdGltaXphdGlvbnMgSSBtaWdodCBiZSBjb25zaWRlcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdzX2V4YWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTQ3MT1zdGF0aWMgaW50IGNsZWFuX3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODctXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ4ODpzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODktXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTUwNT1zdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA5LVx0aWYgKGV4YWN0ID09IEVYQUNUKVxua2VybmVsL2JwZi9zdGF0ZXMuYzo1MTA6XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTExLVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQyLVx0Y2FzZSBQVFJfVE9fU1RBQ0s6XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY0MzpcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02NDQtXHRjYXNlIFBUUl9UT19BUkVOQTpcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0OS1cdGRlZmF1bHQ6XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY1MDpcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02NTEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQzMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFBhdGggb2YgYHJlZ3NfZXhhY3RgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbiBgcmVnc19leGFjdGAuIE15IGluaXRpYWwgcG9pbnQgb2YgaW50ZXJlc3QgaXMgdGhlIGNhbGwgc2l0ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgaW52b2tlZC4gQWgsIGhlcmUgaXQgaXMsIG9uIGxpbmUgNTA5OgoKYGBgYwoJaWYgKGV4YWN0ID09IEVYQUNUKQoJCXJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTsKYGBgCgpSaWdodCwgYSBjb25kaXRpb25hbCBjYWxsLiBOb3csIHRoZSBrZXkgaXMgdW5kZXJzdGFuZGluZyAqd2hlbiogYGV4YWN0YCBpcyBlcXVhbCB0byBgRVhBQ1RgLiAgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50LiBXaGVyZSBlbHNlIGRvZXMgdGhpcyBgcmVnc2FmZWAgZnVuY3Rpb24gd2l0aCB0aGF0IGNvbmRpdGlvbiBjb21lIGludG8gcGxheT8gSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxzIHRvIGByZWdzYWZlKC4uLiwgZXhhY3QgPT0gRVhBQ1QpYCB0byBmdWxseSBncmFzcCB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBgcmVnc19leGFjdGAgYmVpbmcgZXhlY3V0ZWQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdzYWZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTQ5OD1lbnVtIGV4YWN0X2xldmVsIHtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUwNC0vKiBSZXR1cm5zIHRydWUgaWYgKHJvbGQgc2FmZSBpbXBsaWVzIHJjdXIgc2FmZSkgKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6NTA1OnN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUwNi1cdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTY5Nz1zdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDQtXHRcdCAqIENvbnN0cnVjdCBhIGZha2UgcmVnaXN0ZXIgZm9yIHN1Y2ggc3RhY2sgYW5kIGNhbGxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NzQ1Olx0XHQgKiByZWdzYWZlKCkgdG8gZW5zdXJlIHNjYWxhciBpZHMgYXJlIGNvbXBhcmVkLlxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDYtXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNzUwLVx0XHRcdGlmIChvbGRfcmVnIFx1MDAyNlx1MDAyNiBjdXJfcmVnKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc1MTpcdFx0XHRcdGlmICghcmVnc2FmZShlbnYsIG9sZF9yZWcsIGN1cl9yZWcsIGlkbWFwLCBleGFjdCkpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc1Mi1cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNzg3LVx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo3ODg6XHRcdFx0aWYgKCFyZWdzYWZlKGVudiwgXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc4OS1cdFx0XHRcdCAgICAgXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIGlkbWFwLCBleGFjdCkpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz04NDI9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy04NTYtXHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlc3RhY2tfYXJnX3JlZ3NbaV0gOiBcdTAwMjZub3RfaW5pdDtcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODU3Olx0XHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfYXJnLCBjdXJfYXJnLCBpZG1hcCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy04NTgtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9OTQwPXN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtOTUzLVx0XHRpZiAoKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgbGl2ZV9yZWdzKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTU0Olx0XHQgICAgIXJlZ3NhZmUoZW52LCBcdTAwMjZvbGQtXHUwMDNlcmVnc1tpXSwgXHUwMDI2Y3VyLVx1MDAzZXJlZ3NbaV0sXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk1NS1cdFx0XHQgICAgIFx1MDAyNmVudi1cdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9yZWdfc3RhdGVgIHN0cnVjdHVyZSBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGBmcmFtZW5vYCBmaWVsZCBpcyBsb2NhdGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxheW91dCBvZiB0aGlzIHRoaW5nLiBMZXQgbWUgcXVpY2tseSBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBicGZfcmVnX3N0YXRlIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0zMj1lbnVtIGJwZl9pdGVyX3N0YXRlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTM3LVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDozODpzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTM5LVx0LyogT3JkZXJpbmcgb2YgZmllbGRzIG1hdHRlcnMuICBTZWUgc3RhdGVzX2VxdWFsKCkgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgaW50ZXJuYWxzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSAzOC4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgc29tZSBjb3JlIGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGJ1aWxkaW5nIGJsb2NrcyBvciBlbnRyeSBwb2ludHMgdGhlcmUuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdldCBtZSBiYWNrIHVwIHRvIHNwZWVkIHF1aWNrbHkgb24gdGhlIGtleSBjb25jZXB0cyBJIG5lZWQgdG8gZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzg6XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG4gIDM5Olx0XHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xuICA0MDpcdFx0ZW51bSBicGZfcmVnX3R5cGUgdHlwZTtcbiAgNDE6XHRcdC8qXG4gIDQyOlx0XHQgKiBDb25zdGFudCBkZWx0YSBiZXR3ZWVuIFwmIzM0O2xpbmtlZFwmIzM0OyBzY2FsYXJzIHdpdGggdGhlIHNhbWUgSUQuXG4gIDQzOlx0XHQgKi9cbiAgNDQ6XHRcdHMzMiBkZWx0YTtcbiAgNDU6XHRcdHVuaW9uIHtcbiAgNDY6XHRcdFx0LyogdmFsaWQgd2hlbiB0eXBlID09IFBUUl9UT19QQUNLRVQgKi9cbiAgNDc6XHRcdFx0aW50IHJhbmdlO1xuICA0ODpcdFxuICA0OTpcdFx0XHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxuICA1MDpcdFx0XHQgKiAgIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTFxuICA1MTpcdFx0XHQgKi9cbiAgNTI6XHRcdFx0c3RydWN0IHtcbiAgNTM6XHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcbiAgNTQ6XHRcdFx0XHQvKiBUbyBkaXN0aW5ndWlzaCBtYXAgbG9va3VwcyBmcm9tIG91dGVyIG1hcFxuICA1NTpcdFx0XHRcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcbiAgNTY6XHRcdFx0XHQgKiBwb2ludGluZyB0byBpbm5lciBtYXBzLlxuICA1NzpcdFx0XHRcdCAqL1xuICA1ODpcdFx0XHRcdHUzMiBtYXBfdWlkO1xuICA1OTpcdFx0XHR9O1xuICA2MDpcdFxuICA2MTpcdFx0XHQvKiBmb3IgUFRSX1RPX0JURl9JRCAqL1xuICA2MjpcdFx0XHRzdHJ1Y3Qge1xuICA2MzpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgNjQ6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA2NTpcdFx0XHR9O1xuICA2NjpcdFxuICA2NzpcdFx0XHRzdHJ1Y3QgeyAvKiBmb3IgUFRSX1RPX01FTSB8IFBUUl9UT19NRU1fT1JfTlVMTCAqL1xuICA2ODpcdFx0XHRcdHUzMiBtZW1fc2l6ZTtcbiAgNjk6XHRcdFx0fTtcbiAgNzA6XHRcbiAgNzE6XHRcdFx0LyogRm9yIGR5bnB0ciBzdGFjayBzbG90cyAqL1xuICA3MjpcdFx0XHRzdHJ1Y3Qge1xuICA3MzpcdFx0XHRcdGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGU7XG4gIDc0Olx0XHRcdFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cbiAgNzU6XHRcdFx0XHQgKiBXZSBuZWVkIHRvIHRyYWNrIHdoaWNoIHNsb3QgaXMgdGhlIGZpcnN0IHNsb3RcbiAgNzY6XHRcdFx0XHQgKiB0byBwcm90ZWN0IGFnYWluc3QgY2FzZXMgd2hlcmUgdGhlIHVzZXIgbWF5IHRyeSB0b1xuICA3NzpcdFx0XHRcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXG4gIDc4Olx0XHRcdFx0ICogZHlucHRyLlxuICA3OTpcdFx0XHRcdCAqL1xuICA4MDpcdFx0XHRcdGJvb2wgZmlyc3Rfc2xvdDtcbiAgODE6XHRcdFx0fSBkeW5wdHI7XG4gIDgyOlx0XG4gIDgzOlx0XHRcdC8qIEZvciBicGZfaXRlciBzdGFjayBzbG90cyAqL1xuICA4NDpcdFx0XHRzdHJ1Y3Qge1xuICA4NTpcdFx0XHRcdC8qIEJURiBjb250YWluZXIgYW5kIEJURiB0eXBlIElEIGRlc2NyaWJpbmdcbiAgODY6XHRcdFx0XHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXHUwMDNjdHlwZVx1MDAzZSBvZiBhbiBpdGVyYXRvciBzdGF0ZVxuICA4NzpcdFx0XHRcdCAqL1xuICA4ODpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgODk6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA5MDpcdFx0XHRcdC8qIHBhY2tpbmcgZm9sbG93aW5nIHR3byBmaWVsZHMgdG8gZml0IGl0ZXIgc3RhdGUgaW50byAxNiBieXRlcyAqL1xuICA5MTpcdFx0XHRcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcbiAgOTI6XHRcdFx0XHRpbnQgZGVwdGg6MzA7XG4gIDkzOlx0XHRcdH0gaXRlcjtcbiAgOTQ6XHRcbiAgOTU6XHRcdFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xuICA5NjpcdFx0XHRzdHJ1Y3Qge1xuICA5NzpcdFx0XHRcdGVudW0ge1xuICA5ODpcdFx0XHRcdFx0SVJRX05BVElWRV9LRlVOQyxcbiAgOTk6XHRcdFx0XHRcdElSUV9MT0NLX0tGVU5DLFxuIDEwMDpcdFx0XHRcdH0ga2Z1bmNfY2xhc3M7XG4gMTAxOlx0XHRcdH0gaXJxO1xuIDEwMjpcdFxuIDEwMzpcdFx0XHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXG4gMTA0Olx0XHRcdHN0cnVjdCB7XG4gMTA1Olx0XHRcdFx0dW5zaWduZWQgbG9uZyByYXcxO1xuIDEwNjpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmF3MjtcbiAxMDc6XHRcdFx0fSByYXc7XG4gMTA4Olx0XG4gMTA5Olx0XHRcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xuIDExMDpcdFx0fTtcbiAxMTE6XHRcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXG4gMTEyOlx0XHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxuIDExMzpcdFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XG4gMTE0Olx0XHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xuIDExNTpcdFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cbiAxMTY6XHRcdCAqL1xuIDExNzpcdFx0c3RydWN0IHRudW0gdmFyX29mZjtcbiAxMTg6XHRcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxuIDExOTpcdFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cbiAxMjA6XHRcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXG4gMTIxOlx0XHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXG4gMTIyOlx0XHQgKi9cbiAxMjM6XHRcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXG4gMTI0Olx0XHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xuIDEyNTpcdFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXG4gMTI2Olx0XHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cbiAxMjc6XHRcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDkwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIgSGVhZGVyKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSBkaXJlY3RseSBpbnRvIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGRlZmluaXRpb24gbGlrZWx5IHJlc2lkZXMsIGFuZCB3aGVyZSBJIG5lZWQgdG8gYmUgZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHJpZ2h0IG5vdy4gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgaW50ZXJuYWwgY29uc3RhbnRzIGRlZmluZWQgaGVyZSBpcyBjcnVjaWFsIGZvciB0aGlzIGludmVzdGlnYXRpb24uIFRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJ1bGVzIGFuZCBsb2dpYyB0aGUga2VybmVsIGVtcGxveXMgdG8ga2VlcCBCUEYgcHJvZ3JhbXMgc2FmZSBhbmQgdmFsaWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHZlcmlmaWVyJiMzOTtzIGludGVybmFsIG1lY2hhbmlzbXMsIGFuZCB0aGlzIGhlYWRlciBpcyB0aGUgbW9zdCBlZmZpY2llbnQgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI4Olx0XHQgKiBjYW1lIGZyb20sIHdoZW4gb25lIGlzIHRlc3RlZCBmb3IgIT0gTlVMTC5cbiAxMjk6XHRcdCAqIEZvciBQVFJfVE9fTUVNX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IG1lbW9yeSBhbGxvY2F0aW9uXG4gMTMwOlx0XHQgKiBmb3IgdGhlIHB1cnBvc2Ugb2YgdHJhY2tpbmcgdGhhdCBpdCYjMzk7cyBmcmVlZC5cbiAxMzE6XHRcdCAqIEZvciBQVFJfVE9fU09DS0VUIHRoaXMgaXMgdXNlZCB0byBzaGFyZSB3aGljaCBwb2ludGVycyByZXRhaW4gdGhlXG4gMTMyOlx0XHQgKiBzYW1lIHJlZmVyZW5jZSB0byB0aGUgc29ja2V0LCB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxuIDEzMzpcdFx0ICogRm9yIHN0YWNrIHNsb3RzIHRoYXQgYXJlIGR5bnB0cnMsIHRoaXMgaXMgdXNlZCB0byB0cmFjayByZWZlcmVuY2VzIHRvXG4gMTM0Olx0XHQgKiB0aGUgZHlucHRyIHRvIGRldGVybWluZSBwcm9wZXIgcmVmZXJlbmNlIGZyZWVpbmcuXG4gMTM1Olx0XHQgKiBTaW1pbGFybHkgdG8gZHlucHRycywgd2UgdXNlIElEIHRvIHRyYWNrIFwmIzM0O2JlbG9uZ2luZ1wmIzM0OyBvZiBhIHJlZmVyZW5jZVxuIDEzNjpcdFx0ICogdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiBicGZfaXRlci5cbiAxMzc6XHRcdCAqL1xuIDEzODpcdFx0LypcbiAxMzk6XHRcdCAqIFVwcGVyIGJpdCBvZiBJRCBpcyB1c2VkIHRvIHJlbWVtYmVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFwmIzM0O2xpbmtlZFwmIzM0O1xuIDE0MDpcdFx0ICogcmVnaXN0ZXJzLiBFeGFtcGxlOlxuIDE0MTpcdFx0ICogcjEgPSByMjsgICAgYm90aCB3aWxsIGhhdmUgcjEtXHUwMDNlaWQgPT0gcjItXHUwMDNlaWQgPT0gTlxuIDE0MjpcdFx0ICogcjEgJiM0Mzs9IDEwOyAgIHIxLVx1MDAzZWlkID09IE4gfCBCUEZfQUREX0NPTlNUIGFuZCByMS1cdTAwM2VkZWx0YSA9PSAxMFxuIDE0MzpcdFx0ICogcjMgPSByMjsgICAgYm90aCB3aWxsIGhhdmUgcjMtXHUwMDNlaWQgPT0gcjItXHUwMDNlaWQgPT0gTlxuIDE0NDpcdFx0ICogdzMgJiM0Mzs9IDEwOyAgIHIzLVx1MDAzZWlkID09IE4gfCBCUEZfQUREX0NPTlNUMzIgYW5kIHIzLVx1MDAzZWRlbHRhID09IDEwXG4gMTQ1Olx0XHQgKi9cbiAxNDY6XHQjZGVmaW5lIEJQRl9BRERfQ09OU1Q2NCAoMVUgXHUwMDNjXHUwMDNjIDMxKVxuIDE0NzpcdCNkZWZpbmUgQlBGX0FERF9DT05TVDMyICgxVSBcdTAwM2NcdTAwM2MgMzApXG4gMTQ4Olx0I2RlZmluZSBCUEZfQUREX0NPTlNUIChCUEZfQUREX0NPTlNUNjQgfCBCUEZfQUREX0NPTlNUMzIpXG4gMTQ5Olx0XHR1MzIgaWQ7XG4gMTUwOlx0XHQvKlxuIDE1MTpcdFx0ICogVHJhY2tzIHRoZSBwYXJlbnQgb2JqZWN0IHRoaXMgcmVnaXN0ZXIgd2FzIGRlcml2ZWQgZnJvbS5cbiAxNTI6XHRcdCAqIFVzZWQgZm9yIGNhc2NhZGluZyBpbnZhbGlkYXRpb246IHdoZW4gdGhlIHBhcmVudCBvYmplY3QgaXNcbiAxNTM6XHRcdCAqIHJlbGVhc2VkIG9yIGludmFsaWRhdGVkLCBhbGwgcmVnaXN0ZXJzIHdpdGggbWF0Y2hpbmcgcGFyZW50X2lkXG4gMTU0Olx0XHQgKiBhcmUgYWxzbyBpbnZhbGlkYXRlZC4gRm9yIGV4YW1wbGUsIGEgc2xpY2UgZnJvbSBicGZfZHlucHRyX2RhdGEoKVxuIDE1NTpcdFx0ICogZ2V0cyBwYXJlbnRfaWQgc2V0IHRvIHRoZSBkeW5wdHImIzM5O3MgaWQuXG4gMTU2Olx0XHQgKi9cbiAxNTc6XHRcdHUzMiBwYXJlbnRfaWQ7XG4gMTU4Olx0XHQvKiBJbnNpZGUgdGhlIGNhbGxlZSB0d28gcmVnaXN0ZXJzIGNhbiBiZSBib3RoIFBUUl9UT19TVEFDSyBsaWtlXG4gMTU5Olx0XHQgKiBSMT1mcC04IGFuZCBSMj1mcC04LCBidXQgb25lIG9mIHRoZW0gcG9pbnRzIHRvIHRoaXMgZnVuY3Rpb24gc3RhY2tcbiAxNjA6XHRcdCAqIHdoaWxlIGFub3RoZXIgdG8gdGhlIGNhbGxlciYjMzk7cyBzdGFjay4gVG8gZGlmZmVyZW50aWF0ZSB0aGVtICYjMzk7ZnJhbWVubyYjMzk7XG4gMTYxOlx0XHQgKiBpcyB1c2VkIHdoaWNoIGlzIGFuIGluZGV4IGluIGJwZl92ZXJpZmllcl9zdGF0ZS1cdTAwM2VmcmFtZVtdIGFycmF5XG4gMTYyOlx0XHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cbiAxNjM6XHRcdCAqL1xuIDE2NDpcdFx0dTMyIGZyYW1lbm87XG4gMTY1Olx0XHQvKiBpZiAoIXByZWNpc2UgXHUwMDI2XHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbiYjMzk7dCBhZmZlY3Qgc2FmZXR5ICovXG4gMTY2Olx0XHRib29sIHByZWNpc2U7XG4gMTY3Olx0fTtcbiAxNjg6XHRcbiAxNjk6XHRzdGF0aWMgaW5saW5lIHM2NCByZWdfc21pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIDE3MDpcdHtcbiAxNzE6XHRcdHJldHVybiBjbnVtNjRfc21pbihyZWctXHUwMDNlcjY0KTtcbiAxNzI6XHR9XG4gMTczOlx0XG4gMTc0Olx0c3RhdGljIGlubGluZSBzNjQgcmVnX3NtYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiAxNzU6XHR7XG4gMTc2Olx0XHRyZXR1cm4gY251bTY0X3NtYXgocmVnLVx1MDAzZXI2NCk7XG4gMTc3Olx0fVxuIDE3ODpcdFxuIDE3OTpcdHN0YXRpYyBpbmxpbmUgdTY0IHJlZ191bWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4gMTgwOlx0e1xuIDE4MTpcdFx0cmV0dXJuIGNudW02NF91bWluKHJlZy1cdTAwM2VyNjQpO1xuIDE4MjpcdH1cbiAxODM6XHRcbiAxODQ6XHRzdGF0aWMgaW5saW5lIHU2NCByZWdfdW1heChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIDE4NTpcdHtcbiAxODY6XHRcdHJldHVybiBjbnVtNjRfdW1heChyZWctXHUwMDNlcjY0KTtcbiAxODc6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDE5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgU3RhdGUgRXF1aXZhbGVuY2UgYW5kIGBmcmFtZW5vYCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBUaGUgYHJlZ3NfZXhhY3RgIGZ1bmN0aW9uIGNhdWdodCBteSBleWUsIGFuZCBJIHNlZSBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGlzc3VlLiBJbml0aWFsbHksIGByZWdzX2V4YWN0YCB3YXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdHdvIEJQRiByZWdpc3RlciBzdGF0ZXMgd2VyZSBpZGVudGljYWwuIExvb2tpbmcgYXQgdGhlIGNvZGU6CgpgYGBjCnN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCgkJICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLAoJCSAgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKewoJcmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwICZhbXA7JmFtcDsKCSAgICAgICBjaGVja19pZHMocm9sZC0mZ3Q7aWQsIHJjdXItJmd0O2lkLCBpZG1hcCkgJmFtcDsmYW1wOwoJICAgICAgIGNoZWNrX2lkcyhyb2xkLSZndDtwYXJlbnRfaWQsIHJjdXItJmd0O3BhcmVudF9pZCwgaWRtYXApICZhbXA7JmFtcDsKCSAgICAgICByb2xkLSZndDtmcmFtZW5vID09IHJjdXItJmd0O2ZyYW1lbm87Cn0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIG1pc3NpbmcgYSBwYXJ0IG9mIHRoZSBjaGVjaywgd2hpY2ggaXMgYHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AuIFNwZWNpZmljYWxseSwgYG1lbWNtcGAgb25seSBjb21wYXJlZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgIHVwIHRvIGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpYC4gIEZpZWxkcyBsaWtlIGBpZGAgYW5kIGBwYXJlbnRfaWRgIHdlcmUgY2hlY2tlZCBzZXBhcmF0ZWx5LCBhbmQsIGNyaXRpY2FsbHksIGBmcmFtZW5vYCBjb21lcyAqYWZ0ZXIqIHRob3NlIGZpZWxkcyBpbiB0aGUgc3RydWN0LiBUaGVyZWZvcmUsIGBtZW1jbXBgIGRpZCAqbm90KiBjaGVjayBgZnJhbWVub2AuCgpJIHRoZW4gbG9va2VkIGF0IGhvdyBgcmVnc19leGFjdGAgd2FzIHVzZWQsIGVzcGVjaWFsbHkgaW4gYHJlZ3NhZmUoKWAgYW5kIHNwZWNpZmljYWxseSB3aGVuIHRoZSBgZXhhY3QgPT0gRVhBQ1RgIGNvbmRpdGlvbiB3YXMgbWV0LiBJbiB0aGF0IGNhc2UsIGFuZCBpbiBvdGhlciBzY2VuYXJpb3Mgd2hlcmUgZXhhY3Qgc3RhdGUgbWF0Y2hpbmcgd2FzIG5lZWRlZCwgaXQgKm9ubHkqIGNhbGxlZCBgcmVnc19leGFjdGAuIFRoaXMgbWVhbnQgYGZyYW1lbm9gIHdhc24mIzM5O3QgYmVpbmcgY2hlY2tlZCBmb3IgZXF1YWxpdHkgZXZlbiB3aGVuIHdlIGV4cGxpY2l0bHkgd2FudGVkIGV4YWN0IG1hdGNoaW5nISAgVGhpcyBhbHNvIGhlbGQgdHJ1ZSB3aGVuIGxvb2tpbmcgYXQgdGhlIGNvbXBhcmlzb24gb2Ygc3BpbGxlZCByZWdpc3RlcnMgaW4gYHN0YWNrc2FmZSgpYC4KCkNvbnNpZGVyIHRoZSB0ZXN0IGNhc2UgaW4gYHZlcmlmaWVyX2xvb3BzMS5jYC4gSW1hZ2luZSBhIHN0YWNrIHBvaW50ZXIgd2l0aCBhICpkaWZmZXJlbnQqIGBmcmFtZW5vYCB3YXMgc3BpbGxlZCB0byB0aGUgc3RhY2suICBJZiB3ZSB0aGVuIGNvbXBhcmVkIHRoaXMgc3BpbGxlZCByZWdpc3RlciB3aXRoIGFuICYjMzQ7ZXhhY3QmIzM0OyBtYXRjaCB1c2luZyBgcmVnc19leGFjdGAsIHRoZSBjb21wYXJpc29uIHdvdWxkIHJldHVybiBgdHJ1ZWAgZXZlbiB0aG91Z2ggYGZyYW1lbm9gIGRpZmZlcmVkLCB3aGljaCBpcyBvYnZpb3VzbHkgd3JvbmcuCgpUaGUgZml4LCBtb3ZpbmcgdGhlIGNvbXBhcmlzb24gb2YgYGZyYW1lbm9gIGludG8gYHJlZ3NfZXhhY3RgLCBzb2x2ZXMgdGhpcyBpc3N1ZS4gIE5vdywgYm90aCBkaXJlY3QgY2hlY2tzIGluIGByZWdzYWZlKClgIGFuZCBgcmVnc19leGFjdGAgY2hlY2tzLCBpbmNsdWRpbmcgdGhvc2UgaW52b2x2aW5nIHNwaWxsZWQgcG9pbnRlcnMsIHdpbGwgcHJvcGVybHkgY29uc2lkZXIgYGZyYW1lbm9gIGluIGRldGVybWluaW5nIHJlZ2lzdGVyIHN0YXRlIGVxdWl2YWxlbmNlLgoKTm93LCBjb25zaWRlcmluZyB0aGUgY3JpdGVyaWEgZm9yIHRoaXMgY2hhbmdlOgoKKiAgICoqU3Vic3lzdGVtOioqIEJQRiAoa2VybmVsL2JwZi9zdGF0ZXMuYykgLSAqQ29uZmlybWVkLioKKiAgICoqUmVhY2hhYmlsaXR5OioqIEJQRiBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyLiBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgIGlzIGEgcHJpbWFyeSBzeXprYWxsZXIgdGFyZ2V0LiAtICpDb25maXJtZWQuKgoqICAgKipNb2RpZmllZCBSZWFjaGFibGUgS2VybmVsIENvZGU6KiogWWVzLCBga2VybmVsL2JwZi9zdGF0ZXMuY2AgaXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja2luZyBjb2RlLCBzbyB0aGlzIGNoYW5nZSBtb2RpZmllcyByZWFjaGFibGUgY29kZS4gLSAqQ29uZmlybWVkLioKKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogQlBGIC0gKkNvbmZpcm1lZC4qCiogICAqKlR5cGUgb2YgQ2hhbmdlOioqICYjMzQ7UmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzJiMzNDsgZml0cyB3ZWxsLCBhcyB0aGlzIGlzIGEgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgZXF1aXZhbGVuY2UgY2hlY2suIC0gKkNvbmZpcm1lZC4qCiogICAqKldvcnRoRnV6emluZz10cnVlIGFuZCBGb2N1c1N5bWJvbHM6KiogSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGlkZW50aWZ5IGFueSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VmdWwgZm9yIGEgZnV6emVyLiAgYHJlZ3NfZXhhY3RgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gSXQmIzM5O3MgY2xlYXJseSBpbXBvcnRhbnQgZm9yIHN0YXRlIGNvbXBhcmlzb24uIFdlIG5lZWQgdG8gY2hlY2sgaWYgYHJlZ3NfZXhhY3RgLCBgcmVnc2FmZWAsIGBmdW5jX3N0YXRlc19lcXVhbGAsIGFuZCBgc3RhdGVzX2VxdWFsYCBhcmUgaW5saW5lZCBvciBjb21waWxlZCBzdGF0aWNhbGx5IHRvIHNlZSB3aGVyZSB0aGV5IGV4aXN0LiAgSSYjMzk7bGwgY2hlY2sgdGhlIGBNYWtlZmlsZWAgYW5kIHRoZWlyIGRlZmluaXRpb25zIGluIGBzdGF0ZXMuY2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlaXIgdmlzaWJpbGl0eSBhbmQgY29tcGlsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlc1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTUtb2JqLSR7Q09ORklHX0JQRl9MU019XHQgICYjNDM7PSBicGZfaW5vZGVfc3RvcmFnZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTMwCgkJCQkJCQlvdXRwdXQ6IDYwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIGBzdGF0ZXMub2AgYW5kIEJQRiBTeXNjYWxscyoqCgpBbHJpZ2h0LCBzbyBgc3RhdGVzLm9gIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLCB3aGljaCBpcyBhIGtleSBkZXBlbmRlbmN5LiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFzIGl0IHdpbGwgaGVscCB0byB0cmFjayB3aGVyZSB0aGluZ3MgZ28gd3Jvbmcgd2l0aCBCUEYuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgaW50byBga2VybmVsL2JwZi9zdGF0ZXMuY2Agbm93IHRvIHVuZGVyc3RhbmQgdGhlIGxheW91dCBhbmQgdXNhZ2Ugb2YgdGhlIEJQRiBzdGF0ZSBtYW5hZ2VtZW50IGNvZGUuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgcHVibGljbHkgYWNjZXNzaWJsZSAobm9uLXN0YXRpYykgb3Igc2VydmUgYXMgZW50cnkgcG9pbnRzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgY3JpdGljYWwgaW50ZXJmYWNlcyBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBmb3IgdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIGlzIHRoZSBjb3JuZXJzdG9uZSBmb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFwqPyBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz0yNTk9c3RhdGljIGJvb2wgaW5jb21wbGV0ZV9yZWFkX21hcmtzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0yNzItXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjI3MzppbnQgYnBmX3VwZGF0ZV9icmFuY2hfY291bnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxua2VybmVsL2JwZi9zdGF0ZXMuYy0yNzQte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIwOT1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzMtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzQ6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDM1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqRGlnZ2luZyBpbnRvIHRoZSBCUEYgU3RhdGUgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgZnVuY3Rpb24gaW4gYHN0YXRlcy5jYC4gU2VlbXMgbGlrZSB0aGUgbGlrZWx5IGVudHJ5IHBvaW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgY2FsbHMgdGhhdCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgdXNlLCBhcyB3ZWxsIGFzIHdoZXJlIGByZWdzYWZlYCwgYHN0YXRlc19lcXVhbGAsIGFuZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgdXNlZCwgYWxsIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvc3RhdGVzLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIGRlcGVuZGVuY2llcywgYW5kIGhvdyBhbGwgdGhlc2UgaW5kaXZpZHVhbCBjb21wb25lbnRzIGZpdCBpbnRvIHRoZSBsYXJnZXIgc3RhdGUgbWFuYWdlbWVudCBwaWN0dXJlLiBHb3R0YSBidWlsZCBhIG1lbnRhbCBtb2RlbCBoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlc19lcXVhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz04NjQ9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkzOS0gKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQwOnN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDEtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk2Nz1zdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzQtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk3NTpzdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc2LVx0XHRcdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA2LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwNzpcdFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cdTAwM2VmcmFtZVtpXSwgY3VyLVx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA4LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzQ9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMjctXHRcdFx0aWYgKGlzX2l0ZXJfbmV4dF9pbnNuKGVudiwgaW5zbl9pZHgpKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMjg6XHRcdFx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzI5LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1cl9mcmFtZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzctXHRcdFx0XHRcdGl0ZXJfcmVnID0gXHUwMDI2Y3VyX2ZyYW1lLVx1MDAzZXJlZ3NbQlBGX1JFR18xXTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTMzODpcdFx0XHRcdFx0LyogY3VycmVudCBzdGF0ZSBpcyB2YWxpZCBkdWUgdG8gc3RhdGVzX2VxdWFsKCksXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzktXHRcdFx0XHRcdCAqIHNvIHdlIGNhbiBhc3N1bWUgdmFsaWQgaXRlciBhbmQgcmVnIHN0YXRlLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1Mi1cdFx0XHRcdGlmIChzbC1cdTAwM2VzdGF0ZS5tYXlfZ290b19kZXB0aCAhPSBjdXItXHUwMDNlbWF5X2dvdG9fZGVwdGggXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNTM6XHRcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU0LVx0XHRcdFx0XHRsb29wID0gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNTgtXHRcdFx0aWYgKGJwZl9jYWxsc19jYWxsYmFjayhlbnYsIGluc25faWR4KSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzU5Olx0XHRcdFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2MC1cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY2LVx0XHRcdGlmIChzdGF0ZXNfbWF5YmVfbG9vcGluZyhcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2NzpcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgRVhBQ1QpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY4LVx0XHRcdCAgICAhaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTktXHRcdGxvb3AgPSBpbmNvbXBsZXRlX3JlYWRfbWFya3MoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0MDA6XHRcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyLCBsb29wID8gUkFOR0VfV0lUSElOIDogTk9UX0VYQUNUKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDAxLWhpdDpcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MzktXHRcdFx0ICpcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ0MDpcdFx0XHQgKiAtIFdoZW4gYSB2ZXJpZmljYXRpb24gcGF0aCBlbmNvdW50ZXJzIGEgYHN0YXRlc19lcXVhbCguLi4sXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDEtXHRcdFx0ICogICBSQU5HRV9XSVRISU4pYCBjb25kaXRpb24sIHRoZXJlIGV4aXN0cyBhIGNhbGwgY2hhaW4gZGVzY3JpYmluZyB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMDYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFN0YXRlIENvbXBhcmlzb24gRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHNldmVyYWwgQlBGIHN0YXRlIGNvbXBhcmlzb24gZnVuY3Rpb25zOiBgcmVnc19leGFjdGAsIGByZWdzYWZlYCwgYHN0YWNrc2FmZWAsIGBmdW5jX3N0YXRlc19lcXVhbGAsIGBzdGF0ZXNfZXF1YWxgLCBhbmQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBpbmxpbmluZy4gQXJlIGFueSBvZiB0aGVzZSBtYXJrZWQgYG5vaW5saW5lYCBvciBkZWNsYXJlZCBhcyBgc3RhdGljYD8gVGhhdCB3b3VsZCBoYXZlIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgdGhlIGNvbXBpbGVyIG9wdGltaXplcyBjYWxscyB0byB0aGVtLiBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGxpbmtlciBpcyBkb2luZy4KClRoZSBkZWNsYXJhdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgc28gSSYjMzk7bGwgaGVhZCBvdmVyIHRoZXJlIHRvIGNoZWNrLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgSSBuZWVkIHRvIGtub3cgYWJvdXQgZnVuY3Rpb24gdmlzaWJpbGl0eSBhbmQgdGhlIGNvbXBpbGVyJiMzOTtzIGlubGluaW5nIGRlY2lzaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBjYWxscyB0byB0aGVzZSBhcmUgaW5saW5lZCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhyZWdzYWZlfHN0YWNrc2FmZXxyZWdzX2V4YWN0fHN0YXRlc19lcXVhbCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9NDcxPXN0YXRpYyBpbnQgY2xlYW5fdmVyaWZpZXJfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ4Ny1cbmtlcm5lbC9icGYvc3RhdGVzLmM6NDg4OnN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ4OS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NDk4PWVudW0gZXhhY3RfbGV2ZWwge1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA0LS8qIFJldHVybnMgdHJ1ZSBpZiAocm9sZCBzYWZlIGltcGxpZXMgcmN1ciBzYWZlKSAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo1MDU6c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA2LVx0XHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA5LVx0aWYgKGV4YWN0ID09IEVYQUNUKVxua2VybmVsL2JwZi9zdGF0ZXMuYzo1MTA6XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTExLVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQyLVx0Y2FzZSBQVFJfVE9fU1RBQ0s6XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY0MzpcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02NDQtXHRjYXNlIFBUUl9UT19BUkVOQTpcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0OS1cdGRlZmF1bHQ6XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY1MDpcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02NTEtXHR9XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz02ODU9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzY2FsYXJfcmVnX2Zvcl9zdGFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNjk2LVxua2VybmVsL2JwZi9zdGF0ZXMuYzo2OTc6c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy02OTgtXHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc0NC1cdFx0ICogQ29uc3RydWN0IGEgZmFrZSByZWdpc3RlciBmb3Igc3VjaCBzdGFjayBhbmQgY2FsbFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3NDU6XHRcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc0Ni1cdFx0ICovXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy03NTAtXHRcdFx0aWYgKG9sZF9yZWcgXHUwMDI2XHUwMDI2IGN1cl9yZWcpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmM6NzUxOlx0XHRcdFx0aWYgKCFyZWdzYWZlKGVudiwgb2xkX3JlZywgY3VyX3JlZywgaWRtYXAsIGV4YWN0KSlcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzUyLVx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy03ODctXHRcdFx0ICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc4ODpcdFx0XHRpZiAoIXJlZ3NhZmUoZW52LCBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzg5LVx0XHRcdFx0ICAgICBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTg0Mj1zdGF0aWMgYm9vbCBzdGFja19hcmdfc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTg1Ni1cdFx0XHQgIFx1MDAyNmN1ci1cdTAwM2VzdGFja19hcmdfcmVnc1tpXSA6IFx1MDAyNm5vdF9pbml0O1xua2VybmVsL2JwZi9zdGF0ZXMuYzo4NTc6XHRcdGlmICghcmVnc2FmZShlbnYsIG9sZF9hcmcsIGN1cl9hcmcsIGlkbWFwLCBleGFjdCkpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTg1OC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz04NjQ9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkzOS0gKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQwOnN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDEtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk1My1cdFx0aWYgKCgoMSBcdTAwM2NcdTAwM2MgaSkgXHUwMDI2IGxpdmVfcmVncykgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk1NDpcdFx0ICAgICFyZWdzYWZlKGVudiwgXHUwMDI2b2xkLVx1MDAzZXJlZ3NbaV0sIFx1MDAyNmN1ci1cdTAwM2VyZWdzW2ldLFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NTUtXHRcdFx0ICAgICBcdTAwMjZlbnYtXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtOTU3LVxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NTg6XHRpZiAoIXN0YWNrc2FmZShlbnYsIG9sZCwgY3VyLCBcdTAwMjZlbnYtXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NTktXHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk2Nz1zdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzQtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk3NTpzdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc2LVx0XHRcdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA2LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwNzpcdFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cdTAwM2VmcmFtZVtpXSwgY3VyLVx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA4LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzQ9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMjctXHRcdFx0aWYgKGlzX2l0ZXJfbmV4dF9pbnNuKGVudiwgaW5zbl9pZHgpKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMjg6XHRcdFx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzI5LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1cl9mcmFtZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzctXHRcdFx0XHRcdGl0ZXJfcmVnID0gXHUwMDI2Y3VyX2ZyYW1lLVx1MDAzZXJlZ3NbQlBGX1JFR18xXTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTMzODpcdFx0XHRcdFx0LyogY3VycmVudCBzdGF0ZSBpcyB2YWxpZCBkdWUgdG8gc3RhdGVzX2VxdWFsKCksXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzktXHRcdFx0XHRcdCAqIHNvIHdlIGNhbiBhc3N1bWUgdmFsaWQgaXRlciBhbmQgcmVnIHN0YXRlLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1Mi1cdFx0XHRcdGlmIChzbC1cdTAwM2VzdGF0ZS5tYXlfZ290b19kZXB0aCAhPSBjdXItXHUwMDNlbWF5X2dvdG9fZGVwdGggXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNTM6XHRcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU0LVx0XHRcdFx0XHRsb29wID0gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNTgtXHRcdFx0aWYgKGJwZl9jYWxsc19jYWxsYmFjayhlbnYsIGluc25faWR4KSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzU5Olx0XHRcdFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2MC1cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY2LVx0XHRcdGlmIChzdGF0ZXNfbWF5YmVfbG9vcGluZyhcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2NzpcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgRVhBQ1QpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY4LVx0XHRcdCAgICAhaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTktXHRcdGxvb3AgPSBpbmNvbXBsZXRlX3JlYWRfbWFya3MoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0MDA6XHRcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyLCBsb29wID8gUkFOR0VfV0lUSElOIDogTk9UX0VYQUNUKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDAxLWhpdDpcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MzktXHRcdFx0ICpcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ0MDpcdFx0XHQgKiAtIFdoZW4gYSB2ZXJpZmljYXRpb24gcGF0aCBlbmNvdW50ZXJzIGEgYHN0YXRlc19lcXVhbCguLi4sXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDEtXHRcdFx0ICogICBSQU5HRV9XSVRISU4pYCBjb25kaXRpb24sIHRoZXJlIGV4aXN0cyBhIGNhbGwgY2hhaW4gZGVzY3JpYmluZyB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGZ1bmN0aW9uIGlzIHdvcmtpbmcuIEZpcnN0LCBJIHJlbWVtYmVyIGl0JiMzOTtzIHRoZSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbiBJJiMzOTttIGRlYWxpbmcgd2l0aC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlIHRoYXQgZXhwb3J0cyB0aG9zZSBCUEYgdmVyaWZpZXIgZnVuY3Rpb25zLCB3aGljaCBpcyBsaWtlbHkgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBUaGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBJIG5lZWQsIHBhcnRpY3VsYXJseSB0aG9zZSBmcm9tIGBzdGF0ZXMuY2AsIHNvIEkgY2FuIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGJlaGluZCB0aGUgc2NlbmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTIxMD1pbnQgbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTIxMS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTIxMjppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTIxMy1pbnQgYnBmX3VwZGF0ZV9icmFuY2hfY291bnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlciBvZiBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgKioKCkFscmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpcywgKndobyogaXMgY2FsbGluZyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgPyBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uIGNhbGwgZ3JhcGggdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgc3RhdGUgY2hlY2suIEl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIEkmIzM5O20ga2VlbiB0byBkaXNzZWN0IHRoZSBzdXJyb3VuZGluZyBsb2dpYy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHByZWNpc2VseSB3aGF0JiMzOTtzIGludm9raW5nIGl0LiBUaW1lIHRvIGZpcmUgdXAgdGhlIHNvdXJjZSBjb2RlIGJyb3dzZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTEyMDk9c3RhdGljIHZvaWQgbWFya19hbGxfc2NhbGFyc19pbXByZWNpc2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjMzLVxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMjM0OmludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzUte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODM2Mz1zdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NDIzLVx0XHRpZiAoYnBmX2lzX3BydW5lX3BvaW50KGVudiwgZW52LVx1MDAzZWluc25faWR4KSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NDI0Olx0XHRcdGVyciA9IGJwZl9pc19zdGF0ZV92aXNpdGVkKGVudiwgZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODQyNS1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYwMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFZlcmlmaWNhdGlvbiBhbmQgU3ltYm9sIENvdmVyYWdlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgdGhlIGBkb19jaGVja2AgcGhhc2UsIGFuZCBJIHNlZSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGJlaW5nIGNhbGxlZC4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBga2VybmVsL2JwZi9zdGF0ZXMuY2AgZmlsZSDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHJlZ3NfZXhhY3RgIGFuZCBgcmVnc2FmZWAsIHdoaWNoIG1lYW5zIHRoZXNlIGFyZSBrZXkgYXJlYXMgdG8gZXhhbWluZS4KCk5vdywgdGhlIHN5bWJvbCBjb3ZlcmFnZSBxdWVzdGlvbiBwb3BzIHVwLiBDYW4gc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGVzZSBgLmNgIGZpbGVzIGJlIGluY2x1ZGVkIGluIG15IGFuYWx5c2lzLCBvciBhcmUgdGhleSBpbmxpbmVkPyBJIHJlbWVtYmVyIHRoYXQgYmx1cmIgYWJvdXQgaGFuZGxpbmcgc3RhdGljIGlubGluZSBmdW5jdGlvbnM6IGJhc2ljYWxseSwgdGhlIGNvbXBpbGVyIGNhbiBvcHRpbWl6ZSB0aGVtIGF3YXksIG1ha2luZyB0aGVtIGludmlzaWJsZSB0byBzeW1ib2wgZmlsdGVycy4gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgY2FsbGVyIGZ1bmN0aW9ucyB0aGF0ICp1c2UqIHRoZXNlIHN0YXRpYyBoZWxwZXJzIOKAkyB0aGlzIGhlbHBzIHRvIGNhcHR1cmUgdGhlbS4KClRoaW5raW5nIGFib3V0IGl0LCBpbiB0aGUgY29udGV4dCBvZiBgLmNgIGZpbGVzLCB0aGUgc3RhdGljIGZ1bmN0aW9ucyAqc2hvdWxkKiBoYXZlIHN5bWJvbHMgaW4gYGthbGxzeW1zYCwgbGlrZSBgcmVnc2FmZWAsIGByZWdzX2V4YWN0YCwgYW5kIGBzdGF0ZXNfZXF1YWxgLiBCdXQsIHRoZSBrZXkgaXMgdGhlIHNpemUgb2YgdGhlIGZ1bmN0aW9uLiBMdWNraWx5LCBgcmVnc2FmZWAgYW5kIGBzdGF0ZXNfZXF1YWxgIGFyZSBsYXJnZSwgc28gdGhleSBhcmUgcHJvYmFibHkgbm90IGZ1bGx5IGlubGluZWQuIEV2ZW4gYmV0dGVyLCBpbmNsdWRpbmcgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBhbG9uZyB3aXRoIGByZWdzYWZlYCwgYHJlZ3NfZXhhY3RgLCBgc3RhdGVzX2VxdWFsYCBhbmQgYHN0YWNrc2FmZWAgaXMgZ3JlYXQhIFNpbmNlIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgZ3VhcmFudGVlZCB0byBiZSBhIGRpc3RpbmN0LCBub24tc3RhdGljIHN5bWJvbC4KClNob3VsZCBJIGV4cGFuZCB0aGUgbmV0IGFuZCBsb29rIGF0IGBicGZfY2hlY2tgPyBPciBmb2N1cyBtb3JlIG9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGA/IEFoLCB3YWl0LCBubywgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyAqc3BlY2lmaWMqIHRvIHRoZSBCUEYgdmVyaWZpZXIuIEl0JiMzOTtzIG5vdCBzb21lIHViaXF1aXRvdXMgdXRpbGl0eSBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIGV4YWN0IHN0YXRlIGNvbXBhcmlzb24gZW50cnkgcG9pbnQgZm9yIHZlcmlmaWVyIHBydW5pbmcuIGBicGZfcHJvZ19sb2FkYCBpcyByZWxhdGVkIHRvIEJQRiwgYnV0IGl0JiMzOTtzIGEgYnJvYWRlciBhcmVhLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTGV0IG1lIGxvb2sgYXQgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCDigJMgSSBzZWUgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vYC4gTm93LCBJIG5lZWQgdG8gZmluZCB3aGVyZSBgQlBGX1NZU0NBTExgIGlzIGRlZmluZWQsIGxpa2VseSBpbiBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY1NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgQlBGX1NZU0NBTEwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIGFwcHJvYWNoIGlzIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIHByZXByb2Nlc3NvciBzeW1ib2wgaXMgZGVjbGFyZWQuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24sIG15IGh1bmNoIGlzIHRoYXQgaXQmIzM5O2xsIGJlIGluIG9uZSBvZiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFRoZSBjaGFsbGVuZ2UgaXMgbmFycm93aW5nIGRvd24gKndoaWNoKiBLY29uZmlnIGZpbGUuIEkmIzM5O2xsIGxpa2VseSBzdGFydCB3aXRoIGEgYGZpbmRgIG9yIGBncmVwYCBzZWFyY2ggd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHBvc3NpYmx5IGxpbWl0aW5nIHRoZSBzZWFyY2ggdG8gdGhlIGBLY29uZmlnYCBvciBgQ29uZmlnLmluYCBmaWxlcyB0byByZWR1Y2Ugbm9pc2UuIEkmIzM5O2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgZGVwZW5kZW5jaWVzLCBhcyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG1pZ2h0IGJlIG5lc3RlZCB1bmRlciBvdGhlciBjb25maWd1cmF0aW9ucyBvciBoYXZlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IGluZmx1ZW5jZSBpdHMgcHJlc2VuY2UuIE15IGFpbSBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBmaWxlIGFuZCBzcGVjaWZpYyBzZWN0aW9uIHdoZXJlIGBCUEZfU1lTQ0FMTGAgaXMgZGVjbGFyZWQgYW5kIHBvdGVudGlhbGx5IHNlZSBpdHMgZGVmYXVsdCB2YWx1ZSwgaGVscCB0ZXh0LCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGltcGFjdCBvbiB0aGUga2VybmVsIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBhcm91bmQgbGluZSAyNy4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgcHJvdmlkZSB0aGUgaW5pdGlhbCBjb250ZXh0IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBwZXJmZWN0IHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzAyCgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDk2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgVmVyaWZpZXIgU3RhdGUgRXF1aXZhbGVuY2UgRml4IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLCBhcyBpdCBwdWxscyBpbiBhbGwgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQlBGIGNvZGUuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBtYWRlIHRvIGByZWdzX2V4YWN0KClgLiAgVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgc3VidGxlIGZsYXc6IHdoZW4gY29tcGFyaW5nIHN0YWNrIHBvaW50ZXJzIGluIHRoZSB2ZXJpZmllciwgaXQgd2FzbiYjMzk7dCBjb25zaXN0ZW50bHkgY2hlY2tpbmcgYGZyYW1lbm9gLiAgUHJldmlvdXNseSwgYHJlZ3NhZmUoKWAgaGFuZGxlZCB0aGUgZnJhbWUgY2hlY2sgZm9yIGBQVFJfVE9fU1RBQ0tgIGNhc2VzLCBidXQgYHJlZ3NfZXhhY3QoKWAgd2FzIGRpcmVjdGx5IGNhbGxlZCBpbiBzb21lIHNjZW5hcmlvcyB3aXRob3V0IHRoaXMgY2hlY2ssIHNwZWNpZmljYWxseSB3aGVuIGBleGFjdCA9PSBFWEFDVGAgb3IgZm9yIHNwaWxsZWQgc3RhY2sgcmVnaXN0ZXJzLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHBydW5pbmcgb2YgdmVyaWZpY2F0aW9uIHBhdGhzLCBjb25zaWRlcmluZyBzdGFjayByZWdpc3RlcnMgZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFzIGlkZW50aWNhbCwgd2hpY2ggaXMgYSBzZXJpb3VzIGJ1Zy4KClRoZSBCUEYgdmVyaWZpZXIgaXMsIGFzIHdlIGJvdGgga25vdywgYSBjcml0aWNhbCBwaWVjZTsgaXRzIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNrcyAoYHN0YXRlc19lcXVhbGAsIGByZWdzYWZlYCwgYHJlZ3NfZXhhY3RgKSBhcmUgZnVuZGFtZW50YWwgdG8gaXRzIHNvdW5kbmVzcyBhbmQgdGVybWluYXRpb24gcHJvcGVydGllcy4gR2l2ZW4gdGhhdCwgdGhpcyBjaGFuZ2UgaXMgYSBjbGVhciBjYW5kaWRhdGUgZm9yIHRhcmdldGVkIGZ1enppbmcuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGZ1enppbmcgdGhvc2UgZnVuY3Rpb25zIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciYjMzk7cyBjb3JyZWN0bmVzcy4gU3l6a2FsbGVyJiMzOTtzIEJQRiBmdXp6aW5nIGNhcGFiaWxpdGllcyBzaG91bGQgYmUgYnJvdWdodCB0byBiZWFyIGhlcmUuCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGltcGFjdGVkOiBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBgc3RhdGVzX2VxdWFsYCwgYHJlZ3NhZmVgLCBgcmVnc19leGFjdGAgYW5kIGBzdGFja3NhZmVgLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkaXJlY3RseSByZWxldmFudCBzeW1ib2xzLCBsaWtlIGBmdW5jX3N0YXRlc19lcXVhbGAsIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4KCkkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIGFsbCB0aGUgcmVxdWlyZW1lbnRzLiBTbywgaGVyZSYjMzk7cyB0aGUgZnV6emluZyBwbGFuOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRSVUUgKGJlY2F1c2UgdGhlIGlzc3VlIGlzIGluIGEgY3JpdGljYWwgc2FmZXR5IGFyZWEgYW5kIGl0IGltcGFjdHMgdmVyaWZpZXIgYmVoYXZpb3IpCiogICAqKlJlYXNvbmluZzoqKiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSBmdXp6aW5nIHZlcmRpY3QuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFsmIzM0O0JQRl9TWVNDQUxMJiMzNDtdYAoqICAgKipGb2N1c1N5bWJvbHM6KiogYFsmIzM0O3JlZ3NfZXhhY3QmIzM0OywgJiMzNDtyZWdzYWZlJiMzNDssICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0O11gCgpMb29rcyBnb29kOyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnc19leGFjdCYjMzQ7LAogICAgJiMzNDtyZWdzYWZlJiMzNDssCiAgICAmIzM0O3N0YXRlc19lcXVhbCYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMgaW4ga2VybmVsL2JwZi9zdGF0ZXMuYywgbW92aW5nIHRoZSBmcmFtZW5vIGVxdWFsaXR5IGNoZWNrIGludG8gcmVnc19leGFjdCgpLiBUaGlzIGFmZmVjdHMgc3RhdGUgY29tcGFyaXNvbiBmb3IgUFRSX1RPX1NUQUNLIHJlZ2lzdGVycyAoaW5jbHVkaW5nIHNwaWxsZWQgcmVnaXN0ZXJzIGR1cmluZyBsb29wIHN0YXRlIHBydW5pbmcpLiBGdXp6aW5nIHZpYSB0aGUgYnBmIHN5c2NhbGwgaXMgY3JpdGljYWwgdG8gdmVyaWZ5IHNvdW5kbmVzcyBhbmQgZW5zdXJlIG5vIHZlcmlmaWVyIHJlZ3Jlc3Npb25zIG9yIGluZmluaXRlIGxvb3BzL3NhZmV0eSBieXBhc3NlcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdzX2V4YWN0JiMzNDssCiAgICAmIzM0O3JlZ3NhZmUmIzM0OywKICAgICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssCiAgICAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLCBtb3ZpbmcgdGhlIGZyYW1lbm8gZXF1YWxpdHkgY2hlY2sgaW50byByZWdzX2V4YWN0KCkuIFRoaXMgYWZmZWN0cyBzdGF0ZSBjb21wYXJpc29uIGZvciBQVFJfVE9fU1RBQ0sgcmVnaXN0ZXJzIChpbmNsdWRpbmcgc3BpbGxlZCByZWdpc3RlcnMgZHVyaW5nIGxvb3Agc3RhdGUgcHJ1bmluZykuIEZ1enppbmcgdmlhIHRoZSBicGYgc3lzY2FsbCBpcyBjcml0aWNhbCB0byB2ZXJpZnkgc291bmRuZXNzIGFuZCBlbnN1cmUgbm8gdmVyaWZpZXIgcmVncmVzc2lvbnMgb3IgaW5maW5pdGUgbG9vcHMvc2FmZXR5IGJ5cGFzc2VzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLiBTcGVjaWZpY2FsbHksIGl0IG1vdmVzIHRoZSBmcmFtZSBudW1iZXIgY2hlY2sgKHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm8pIGludG8gcmVnc19leGFjdCgpLCBlbnN1cmluZyB0aGF0IGV4YWN0IHJlZ2lzdGVyIHN0YXRlIGNvbXBhcmlzb25zIChzdWNoIGFzIGR1cmluZyBsb29wIGRldGVjdGlvbiBhbmQgc3BpbGxlZCBzdGFjayBwb2ludGVyIGNvbXBhcmlzb24pIGNvcnJlY3RseSBkaXN0aW5ndWlzaCBzdGFjayBwb2ludGVycyBmcm9tIGRpZmZlcmVudCBjYWxsIGZyYW1lcy5cblxuVGhlIHRvdWNoZWQgZmllbGRzIChyb2xkLVx1MDAzZWZyYW1lbm8gYW5kIHJjdXItXHUwMDNlZnJhbWVubykgaW4gc3RydWN0IGJwZl9yZWdfc3RhdGUgYXJlIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVycyBhbmQgZnVuYyBzdGF0ZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKHZpYSBtZW1zZXQoKSBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoKSBhbmQgaW5pdF9mdW5jX3N0YXRlKCkpLiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OGYwYjRhMjkxOWMxY2FmZTU2MWI3MjAxNTRhYTdjNzk1ODU4OWVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMTk6NTI6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuYwppbmRleCA2NmZiMTFiNmM2YTc2Li44MjcwMzhlYzE4YjdhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKQEAgLTQ5MSw3ICYjNDM7NDkxLDggQEAgc3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCwKIHsKIAlyZXR1cm4gbWVtY21wKHJvbGQsIHJjdXIsIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZCkpID09IDAgJmFtcDsmYW1wOwogCSAgICAgICBjaGVja19pZHMocm9sZC0mZ3Q7aWQsIHJjdXItJmd0O2lkLCBpZG1hcCkgJmFtcDsmYW1wOwotCSAgICAgICBjaGVja19pZHMocm9sZC0mZ3Q7cGFyZW50X2lkLCByY3VyLSZndDtwYXJlbnRfaWQsIGlkbWFwKTsKJiM0MzsJICAgICAgIGNoZWNrX2lkcyhyb2xkLSZndDtwYXJlbnRfaWQsIHJjdXItJmd0O3BhcmVudF9pZCwgaWRtYXApICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVubzsKIH0KIAogZW51bSBleGFjdF9sZXZlbCB7CkBAIC02MzksMTAgJiM0Mzs2NDAsNyBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLAogCQlyZXR1cm4gcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpICZhbXA7JmFtcDsKIAkJICAgICAgIHRudW1faW4ocm9sZC0mZ3Q7dmFyX29mZiwgcmN1ci0mZ3Q7dmFyX29mZik7CiAJY2FzZSBQVFJfVE9fU1RBQ0s6Ci0JCS8qIHR3byBzdGFjayBwb2ludGVycyBhcmUgZXF1YWwgb25seSBpZiB0aGV5JiMzOTtyZSBwb2ludGluZyB0bwotCQkgKiB0aGUgc2FtZSBzdGFjayBmcmFtZSwgc2luY2UgZnAtOCBpbiBmb28gIT0gZnAtOCBpbiBiYXIKLQkJICovCi0JCXJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKSAmYW1wOyZhbXA7IHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVubzsKJiM0MzsJCXJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTsKIAljYXNlIFBUUl9UT19BUkVOQToKIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBQVFJfVE9fSU5TTjoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYwppbmRleCBkMjQ4Y2U4NzdmMTRlLi5mOGI3YmExYmY2Yjg0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jCkBAIC0zMDMsNCAmIzQzOzMwMyw3MCBAQCBfX25ha2VkIHZvaWQgbWF5YmVfZXhpdF9zY2NfYnVnMSh2b2lkKQogCTo6OiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhlIGxvb3AgcmVhZHMgemVybyBmcm9tIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2sgb24gaXRzIGZpcnN0IGl0ZXJhdGlvbiBhbmQKJiM0MzsgKiBvbmUgZnJvbSB0aGUgY2FsbGVlJiMzOTtzIHN0YWNrIG9uIGl0cyBzZWNvbmQgaXRlcmF0aW9uLiBBdCB0aGUgbG9vcCBoZWFkZXIsCiYjNDM7ICogb25seSB0aGUgZnJhbWUgbnVtYmVyIG9mIHRoZSBwb2ludGVyIGluIHIxIGNoYW5nZXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWQKJiM0Mzt2b2lkIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZyh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OyoodTY0ICopKHIxMCAtIDgpID0gMTsmIzM0OwomIzQzOwkmIzM0OzE6IHIwID0gKih1NjQgKikocjEgJiM0MzsgMCk7JiMzNDsKJiM0MzsJJiMzNDtpZiByMCAhPSAwIGdvdG8gMmY7JiMzNDsKJiM0MzsJJiMzNDtyMSA9IHIxMDsmIzM0OwomIzQzOwkmIzM0O3IxICYjNDM7PSAtODsmIzM0OwomIzQzOwkmIzM0O2dvdG8gMWI7JiMzNDsKJiM0MzsJJiMzNDsyOiBleGl0OyYjMzQ7CiYjNDM7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2JvdW5kZWQgbG9vcCBjaGFuZ2luZyBzdGFjayBmcmFtZSBpbiBhIHJlZ2lzdGVyJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDEpCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSkKJiM0MztfX25ha2VkIHZvaWQgYm91bmRlZF9sb29wX3N0YWNrX2ZyYW1lc19yZWcodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsqKHU2NCAqKShyMTAgLSA4KSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMSA9IHIxMDsmIzM0OwomIzQzOwkmIzM0O3IxICYjNDM7PSAtODsmIzM0OwomIzQzOwkmIzM0O2NhbGwgbG9vcF9zdGFja19mcmFtZXNfcmVnOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRXhlcmNpc2UgdGhlIHNhbWUgZnJhbWUgY2hhbmdlIHRocm91Z2ggYSBzcGlsbGVkIHBvaW50ZXIuIEFsbCByZWdpc3RlcnMKJiM0MzsgKiBhdCB0aGUgbG9vcCBoZWFkZXIgYXJlIGlkZW50aWNhbCwgd2hpbGUgZnAtMTYgcG9pbnRzIHRvIGEgZGlmZmVyZW50IGZyYW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkCiYjNDM7dm9pZCBsb29wX3N0YWNrX2ZyYW1lc19zcGlsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OyoodTY0ICopKHIxMCAtIDgpID0gMTsmIzM0OwomIzQzOwkmIzM0OyoodTY0ICopKHIxMCAtIDE2KSA9IHIxOyYjMzQ7CiYjNDM7CSYjMzQ7MTogcjEgPSAqKHU2NCAqKShyMTAgLSAxNik7JiMzNDsKJiM0MzsJJiMzNDtyMCA9ICoodTY0ICopKHIxICYjNDM7IDApOyYjMzQ7CiYjNDM7CSYjMzQ7aWYgcjAgIT0gMCBnb3RvIDJmOyYjMzQ7CiYjNDM7CSYjMzQ7cjEgPSByMTA7JiMzNDsKJiM0MzsJJiMzNDtyMSAmIzQzOz0gLTg7JiMzNDsKJiM0MzsJJiMzNDsqKHU2NCAqKShyMTAgLSAxNikgPSByMTsmIzM0OwomIzQzOwkmIzM0O2dvdG8gMWI7JiMzNDsKJiM0MzsJJiMzNDsyOiBleGl0OyYjMzQ7CiYjNDM7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2JvdW5kZWQgbG9vcCBjaGFuZ2luZyBzdGFjayBmcmFtZSBpbiBhIHNwaWxsJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDEpCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSkKJiM0MztfX25ha2VkIHZvaWQgYm91bmRlZF9sb29wX3N0YWNrX2ZyYW1lc19zcGlsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OyoodTY0ICopKHIxMCAtIDgpID0gMDsmIzM0OwomIzQzOwkmIzM0O3IxID0gcjEwOyYjMzQ7CiYjNDM7CSYjMzQ7cjEgJiM0Mzs9IC04OyYjMzQ7CiYjNDM7CSYjMzQ7Y2FsbCBsb29wX3N0YWNrX2ZyYW1lc19zcGlsbDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuIGluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIHdlJiMzOTtyZSBhbHJlYWR5IGRvaW5nLiBMZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoIHN5c3RlbWF0aWNhbGx5LCBsaWtlIGFueSBnb29kIGtlcm5lbCBkZXZlbG9wZXIuCgpGaXJzdCwgdGhlIHNhZmV0eSBjaGVjazogVGhpcyBpcyBjbGVhcmx5IGRlZmVuc2l2ZSB3b3JrIOKAkyBrZXJuZWwgYXVkaXRpbmcsIGJ1ZyBkZXRlY3Rpb24sIHRoZSB1c3VhbC4gTm8gbWFsaWNpb3VzIGludGVudCBvciBleHBsb2l0IGdlbmVyYXRpb24gaGVyZSwgc28gd2UmIzM5O3JlIG9wZXJhdGluZyBpbiBhIGJlbmlnbiBlbnZpcm9ubWVudC4gU2V2ZXJpdHkgaXMgbG93OyB3ZSBjYW4gcHJvY2VlZCB3aXRob3V0IHVuZHVlIGNvbmNlcm4uCgpOb3csIHRoZSBwYXRjaCBpdHNlbGYuIEl0IHRvdWNoZXMgYGtlcm5lbC9icGYvc3RhdGVzLmNgIGFuZCBhZGRzIHRlc3RzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNgLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIFRoZSBjb2RlIHNuaXBwZXQgcHJvdmlkZWQgaGlnaGxpZ2h0cyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSA0OTEsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgYHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AgaW4gYSBmZXcgcGxhY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBgZnJhbWVub2AgY29tcGFyaXNvbiBhbmQgaXRzIGNvbnRleHQuIFdoYXQmIzM5O3MgaXQgZG9pbmc/IElzIGl0IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IEtBU0FOIG1pZ2h0IG1pc3M/CgpJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlIG9mIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhbmQgaG93IGByZWdzX2V4YWN0YCBpcyBiZWluZyB1c2VkLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBmaWxlIGFuZCB0aGUgbGluZXMgaW4gcXVlc3Rpb24sIHVzaW5nIGdyZXBwZXIgb3IgcmVhZC1maWxlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4MDpcdFx0XHR1MzIgaXAgPSBicGZfZnJhbWVfaW5zbl9pZHgoc3QsIGkpO1xuIDQ4MTpcdFx0XHR1MTYgbGl2ZV9yZWdzID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaXBdLmxpdmVfcmVnc19iZWZvcmU7XG4gNDgyOlx0XG4gNDgzOlx0XHRcdF9fY2xlYW5fZnVuY19zdGF0ZShlbnYsIHN0LVx1MDAzZWZyYW1lW2ldLCBsaXZlX3JlZ3MsIGkpO1xuIDQ4NDpcdFx0fVxuIDQ4NTpcdFx0cmV0dXJuIDA7XG4gNDg2Olx0fVxuIDQ4NzpcdFxuIDQ4ODpcdHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gNDg5Olx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcbiA0OTA6XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuIDQ5MTpcdHtcbiA0OTI6XHRcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcdTAwMjZcdTAwMjZcbiA0OTM6XHRcdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VpZCwgcmN1ci1cdTAwM2VpZCwgaWRtYXApIFx1MDAyNlx1MDAyNlxuIDQ5NDpcdFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZXBhcmVudF9pZCwgcmN1ci1cdTAwM2VwYXJlbnRfaWQsIGlkbWFwKSBcdTAwMjZcdTAwMjZcbiA0OTU6XHRcdCAgICAgICByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vO1xuIDQ5NjpcdH1cbiA0OTc6XHRcbiA0OTg6XHRlbnVtIGV4YWN0X2xldmVsIHtcbiA0OTk6XHRcdE5PVF9FWEFDVCxcbiA1MDA6XHRcdEVYQUNULFxuIDUwMTpcdFx0UkFOR0VfV0lUSElOXG4gNTAyOlx0fTtcbiA1MDM6XHRcbiA1MDQ6XHQvKiBSZXR1cm5zIHRydWUgaWYgKHJvbGQgc2FmZSBpbXBsaWVzIHJjdXIgc2FmZSkgKi9cbiA1MDU6XHRzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIDUwNjpcdFx0XHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxuIDUwNzpcdFx0XHQgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbiA1MDg6XHR7XG4gNTA5Olx0XHRpZiAoZXhhY3QgPT0gRVhBQ1QpXG4gNTEwOlx0XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbiA1MTE6XHRcbiA1MTI6XHRcdGlmIChyb2xkLVx1MDAzZXR5cGUgPT0gTk9UX0lOSVQpXG4gNTEzOlx0XHRcdC8qIGV4cGxvcmVkIHN0YXRlIGNhbiYjMzk7dCBoYXZlIHVzZWQgdGhpcyAqL1xuIDUxNDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA1MTU6XHRcbiA1MTY6XHRcdC8qIEVuZm9yY2UgdGhhdCByZWdpc3RlciB0eXBlcyBoYXZlIHRvIG1hdGNoIGV4YWN0bHksIGluY2x1ZGluZyB0aGVpclxuIDUxNzpcdFx0ICogbW9kaWZpZXJzIChsaWtlIFBUUl9NQVlCRV9OVUxMLCBNRU1fUkRPTkxZLCBldGMpLCBhcyBhIGdlbmVyYWxcbiA1MTg6XHRcdCAqIHJ1bGUuXG4gNTE5Olx0XHQgKlxuIDUyMDpcdFx0ICogT25lIGNhbiBtYWtlIGEgcG9pbnQgdGhhdCB1c2luZyBhIHBvaW50ZXIgcmVnaXN0ZXIgYXMgdW5ib3VuZGVkXG4gNTIxOlx0XHQgKiBTQ0FMQVIgd291bGQgYmUgdGVjaG5pY2FsbHkgYWNjZXB0YWJsZSwgYnV0IHRoaXMgY291bGQgbGVhZCB0b1xuIDUyMjpcdFx0ICogcG9pbnRlciBsZWFrcyBiZWNhdXNlIHNjYWxhcnMgYXJlIGFsbG93ZWQgdG8gbGVhayB3aGlsZSBwb2ludGVyc1xuIDUyMzpcdFx0ICogYXJlIG5vdC4gV2UgY291bGQgbWFrZSB0aGlzIHNhZmUgaW4gc3BlY2lhbCBjYXNlcyBpZiByb290IGlzXG4gNTI0Olx0XHQgKiBjYWxsaW5nIHVzLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBoYXNzbGUuXG4gNTI1Olx0XHQgKlxuIDUyNjpcdFx0ICogQWxzbywgcmVnaXN0ZXIgdHlwZXMgdGhhdCBhcmUgKm5vdCogTUFZQkVfTlVMTCBjb3VsZCB0ZWNobmljYWxseSBiZVxuIDUyNzpcdFx0ICogc2FmZSB0byB1c2UgYXMgdGhlaXIgTUFZQkVfTlVMTCB2YXJpYW50cyAoZS5nLiwgUFRSX1RPX01BUF9WQUxVRVxuIDUyODpcdFx0ICogaXMgc2FmZSB0byBiZSB1c2VkIGFzIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTCwgcHJvdmlkZWQgYm90aCBwb2ludFxuIDUyOTpcdFx0ICogdG8gdGhlIHNhbWUgbWFwKS5cbiA1MzA6XHRcdCAqIEhvd2V2ZXIsIGlmIHRoZSBvbGQgTUFZQkVfTlVMTCByZWdpc3RlciB0aGVuIGdvdCBOVUxMIGNoZWNrZWQsXG4gNTMxOlx0XHQgKiBkb2luZyBzbyBjb3VsZCBoYXZlIGFmZmVjdGVkIG90aGVycyB3aXRoIHRoZSBzYW1lIGlkLCBhbmQgd2UgY2FuJiMzOTt0XG4gNTMyOlx0XHQgKiBjaGVjayBmb3IgdGhhdCBiZWNhdXNlIHdlIGxvc3QgdGhlIGlkIHdoZW4gd2UgY29udmVydGVkIHRvXG4gNTMzOlx0XHQgKiBhIG5vbi1NQVlCRV9OVUxMIHZhcmlhbnQuXG4gNTM0Olx0XHQgKiBTbywgYXMgYSBnZW5lcmFsIHJ1bGUgd2UgZG9uJiMzOTt0IGFsbG93IG1peGluZyBNQVlCRV9OVUxMIGFuZFxuIDUzNTpcdFx0ICogbm9uLU1BWUJFX05VTEwgcmVnaXN0ZXJzIGFzIHdlbGwuXG4gNTM2Olx0XHQgKi9cbiA1Mzc6XHRcdGlmIChyb2xkLVx1MDAzZXR5cGUgIT0gcmN1ci1cdTAwM2V0eXBlKVxuIDUzODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcmVnc19leGFjdGAgYW5kIGBicGZfcmVnX3N0YXRlYCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGByZWdzX2V4YWN0YCBpbiB0aGlzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBBbmQsIHdoaWxlIEkmIzM5O20gYXQgaXQsIEkgc2hvdWxkIHZlcmlmeSB3aGF0IHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgIGxvb2tzIGxpa2UuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgcmVnaXN0ZXIgc3RhdGUgaXMgYmVpbmcgdHJhY2tlZCBhbmQgbW9kaWZpZWQgYXJvdW5kIHRoZSBmdW5jdGlvbiBjYWxsLiBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZSYjMzk7cyBmaWVsZHMgYW5kIHRoZWlyIHB1cnBvc2Ugd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgdW5kZXJzdGFuZGluZy4gVGhpcyB3aWxsIGhlbHAgbWUgdG8gZGVkdWNlLCBhdCBhIGdsYW5jZSwgd2hhdCB0aGUgZnVuY3Rpb24gKnNob3VsZCogYmUgZG9pbmcgdG8gdGhlIHJlZ2lzdGVyIHN0YXRlLiBBbnkgdW5leHBlY3RlZCBiZWhhdmlvciB3aWxsIGJlIHF1aWNrbHkgbm90aWNlZC4gSSYjMzk7bGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIHJlZ2lzdGVyIHN0YXRlJiMzOTtzIG1vZGlmaWNhdGlvbiB3aXRoIHRoZSBuYXR1cmUgb2YgdGhlIEJQRiBwcm9ncmFtIGJlaW5nIGFuYWx5emVkLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQlBGIHZlcmlmaWVyIG9yIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBhIGRlZXBlciBkaXZlLCBhbmQgSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgZm91bmRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDA6XHRcdHN3aXRjaCAoYmFzZV90eXBlKHJvbGQtXHUwMDNldHlwZSkpIHtcbiA1NDE6XHRcdGNhc2UgU0NBTEFSX1ZBTFVFOlxuIDU0MjpcdFx0XHRpZiAoZW52LVx1MDAzZWV4cGxvcmVfYWx1X2xpbWl0cykge1xuIDU0MzpcdFx0XHRcdC8qIGV4cGxvcmVfYWx1X2xpbWl0cyBkaXNhYmxlcyB0bnVtX2luKCkgYW5kIHJhbmdlX3dpdGhpbigpXG4gNTQ0Olx0XHRcdFx0ICogbG9naWMgYW5kIHJlcXVpcmVzIGV2ZXJ5dGhpbmcgdG8gYmUgc3RyaWN0XG4gNTQ1Olx0XHRcdFx0ICovXG4gNTQ2Olx0XHRcdFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxuIDU0NzpcdFx0XHRcdCAgICAgICBjaGVja19zY2FsYXJfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKTtcbiA1NDg6XHRcdFx0fVxuIDU0OTpcdFx0XHRpZiAoIXJvbGQtXHUwMDNlcHJlY2lzZSBcdTAwMjZcdTAwMjYgZXhhY3QgPT0gTk9UX0VYQUNUKVxuIDU1MDpcdFx0XHRcdHJldHVybiB0cnVlO1xuIDU1MTpcdFx0XHQvKlxuIDU1MjpcdFx0XHQgKiBMaW5rZWQgcmVnaXN0ZXIgdHJhY2tpbmcgdXNlcyByb2xkLVx1MDAzZWlkIHRvIGRldGVjdCByZWxhdGlvbnNoaXBzLlxuIDU1MzpcdFx0XHQgKiBXaGVuIHJvbGQtXHUwMDNlaWQgPT0gMCwgdGhlIHJlZ2lzdGVyIGlzIGluZGVwZW5kZW50IGFuZCBhbnkgbGlua2luZ1xuIDU1NDpcdFx0XHQgKiBpbiByY3VyIG9ubHkgYWRkcyBjb25zdHJhaW50cy4gV2hlbiByb2xkLVx1MDAzZWlkICE9IDAsIHdlIG11c3QgdmVyaWZ5XG4gNTU1Olx0XHRcdCAqIGlkIG1hcHBpbmcgYW5kIChmb3IgQlBGX0FERF9DT05TVCkgb2Zmc2V0IGNvbnNpc3RlbmN5LlxuIDU1NjpcdFx0XHQgKlxuIDU1NzpcdFx0XHQgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MztcbiA1NTg6XHRcdFx0ICogfCAgICAgICAgICAgICAgICAgIHwgcm9sZC1cdTAwM2VpZCAgfCByb2xkICYjNDM7IEFERF9DT05TVCB8IHJvbGQtXHUwMDNlaWQgPT0gMCB8XG4gNTU5Olx0XHRcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLXxcbiA1NjA6XHRcdFx0ICogfCByY3VyLVx1MDAzZWlkICAgICAgICAgfCByYW5nZSxpZHMgfCBmYWxzZSAgICAgICAgICAgIHwgcmFuZ2UgICAgICAgICB8XG4gNTYxOlx0XHRcdCAqIHwgcmN1ciAmIzQzOyBBRERfQ09OU1QgfCBmYWxzZSAgICAgfCByYW5nZSxpZHMsb2ZmICAgIHwgcmFuZ2UgICAgICAgICB8XG4gNTYyOlx0XHRcdCAqIHwgcmN1ci1cdTAwM2VpZCA9PSAwICAgIHwgcmFuZ2UsaWRzIHwgZmFsc2UgICAgICAgICAgICB8IHJhbmdlICAgICAgICAgfFxuIDU2MzpcdFx0XHQgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MztcbiA1NjQ6XHRcdFx0ICpcbiA1NjU6XHRcdFx0ICogV2h5IGNoZWNrX2lkcygpIGZvciBzY2FsYXIgcmVnaXN0ZXJzP1xuIDU2NjpcdFx0XHQgKlxuIDU2NzpcdFx0XHQgKiBDb25zaWRlciB0aGUgZm9sbG93aW5nIEJQRiBjb2RlOlxuIDU2ODpcdFx0XHQgKiAgIDE6IHI2ID0gLi4uIHVuYm91bmQgc2NhbGFyLCBJRD1hIC4uLlxuIDU2OTpcdFx0XHQgKiAgIDI6IHI3ID0gLi4uIHVuYm91bmQgc2NhbGFyLCBJRD1iIC4uLlxuIDU3MDpcdFx0XHQgKiAgIDM6IGlmIChyNiBcdTAwM2UgcjcpIGdvdG8gJiM0MzsxXG4gNTcxOlx0XHRcdCAqICAgNDogcjYgPSByN1xuIDU3MjpcdFx0XHQgKiAgIDU6IGlmIChyNiBcdTAwM2UgWCkgZ290byAuLi5cbiA1NzM6XHRcdFx0ICogICA2OiAuLi4gbWVtb3J5IG9wZXJhdGlvbiB1c2luZyByNyAuLi5cbiA1NzQ6XHRcdFx0ICpcbiA1NzU6XHRcdFx0ICogRmlyc3QgdmVyaWZpY2F0aW9uIHBhdGggaXMgWzEtNl06XG4gNTc2Olx0XHRcdCAqIC0gYXQgKDQpIHNhbWUgYnBmX3JlZ19zdGF0ZTo6aWQgKGIpIHdvdWxkIGJlIGFzc2lnbmVkIHRvIHI2IGFuZCByNztcbiA1Nzc6XHRcdFx0ICogLSBhdCAoNSkgcjYgd291bGQgYmUgbWFya2VkIFx1MDAzYz0gWCwgc3luY19saW5rZWRfcmVncygpIHdvdWxkIGFsc28gbWFya1xuIDU3ODpcdFx0XHQgKiAgIHI3IFx1MDAzYz0gWCwgYmVjYXVzZSByNiBhbmQgcjcgc2hhcmUgc2FtZSBpZC5cbiA1Nzk6XHRcdFx0ICogTmV4dCB2ZXJpZmljYXRpb24gcGF0aCBpcyBbMS00LCA2XS5cbiA1ODA6XHRcdFx0ICpcbiA1ODE6XHRcdFx0ICogSW5zdHJ1Y3Rpb24gKDYpIHdvdWxkIGJlIHJlYWNoZWQgaW4gdHdvIHN0YXRlczpcbiA1ODI6XHRcdFx0ICogICBJLiAgcjZ7LmlkPWJ9LCByN3suaWQ9Yn0gdmlhIHBhdGggMS02O1xuIDU4MzpcdFx0XHQgKiAgIElJLiByNnsuaWQ9YX0sIHI3ey5pZD1ifSB2aWEgcGF0aCAxLTQsIDYuXG4gNTg0Olx0XHRcdCAqXG4gNTg1Olx0XHRcdCAqIFVzZSBjaGVja19pZHMoKSB0byBkaXN0aW5ndWlzaCB0aGVzZSBzdGF0ZXMuXG4gNTg2Olx0XHRcdCAqIC0tLVxuIDU4NzpcdFx0XHQgKiBBbHNvIHZlcmlmeSB0aGF0IG5ldyB2YWx1ZSBzYXRpc2ZpZXMgb2xkIHZhbHVlIHJhbmdlIGtub3dsZWRnZS5cbiA1ODg6XHRcdFx0ICovXG4gNTg5Olx0XG4gNTkwOlx0XHRcdC8qXG4gNTkxOlx0XHRcdCAqIEFERF9DT05TVCBmbGFncyBtdXN0IG1hdGNoIGV4YWN0bHk6IEJQRl9BRERfQ09OU1QzMiBhbmRcbiA1OTI6XHRcdFx0ICogQlBGX0FERF9DT05TVDY0IGhhdmUgZGlmZmVyZW50IGxpbmtpbmcgc2VtYW50aWNzIGluXG4gNTkzOlx0XHRcdCAqIHN5bmNfbGlua2VkX3JlZ3MoKSAoYWx1MzIgemVyby1leHRlbmRzLCBhbHU2NCBkb2VzIG5vdCksXG4gNTk0Olx0XHRcdCAqIHNvIHBydW5pbmcgYWNyb3NzIGRpZmZlcmVudCBmbGFnIHR5cGVzIGlzIHVuc2FmZS5cbiA1OTU6XHRcdFx0ICovXG4gNTk2Olx0XHRcdGlmIChyb2xkLVx1MDAzZWlkIFx1MDAyNlx1MDAyNlxuIDU5NzpcdFx0XHQgICAgKHJvbGQtXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpICE9IChyY3VyLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSlcbiA1OTg6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBzZWN0aW9uIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBmcm9tIGxpbmVzIDYwMCB0byA2NjAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIEJQRiBzdGF0ZSBtYW5hZ2VtZW50IGlzIGhhbmRsZWQgdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgaG93IHByb2dyYW0gc3RhdGVzIGFyZSB0cmFja2VkLCBwb3RlbnRpYWxseSBjb250ZXh0IHN3aXRjaGluZywgb3IgcG9zc2libHkgc29tZSBhc3BlY3RzIG9mIGhvdyB0aGUgQlBGIHZpcnR1YWwgbWFjaGluZSBpbnRlcmFjdHMgd2l0aCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhpcyBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHRoZSBpbnRlcm5hbCBtZWNoYW5pY3MsIG1heWJlIHJlbGF0ZWQgdG8gcmVnaXN0ZXJzLCBzdGFjayBmcmFtZXMsIG9yIHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBmb3IgQlBGIHByb2dyYW1zLiBJJiMzOTttIGhvcGluZyBJIGNhbiBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGludm9sdmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGluIHRoZSBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljLCBiZWNhdXNlIGtub3dpbmcgd2hlcmUgdGhlIGluZWZmaWNpZW5jaWVzIG1pZ2h0IGJlIGlzIGtleSB0byBvcHRpbWl6aW5nIHRoaXMga2luZCBvZiBjb2RlLiBJIGFudGljaXBhdGUgSSYjMzk7bGwgcHJvYmFibHkgYmUgaW50ZXJlc3RlZCBpbiBob3cgdGhlIHZhcmlvdXMga2VybmVsIGNvbXBvbmVudHMgaW50ZXJhY3QgYXMgdGhlIHByb2dyYW0gbW92ZXMgdGhyb3VnaCBkaWZmZXJlbnQgc3RhdGVzLiBSaWdodCwgbGV0JiMzOTtzIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFx0XHQvKiBCb3RoIGhhdmUgb2Zmc2V0IGxpbmthZ2U6IG9mZnNldHMgbXVzdCBtYXRjaCAqL1xuIDYwMTpcdFx0XHRpZiAoKHJvbGQtXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpIFx1MDAyNlx1MDAyNiByb2xkLVx1MDAzZWRlbHRhICE9IHJjdXItXHUwMDNlZGVsdGEpXG4gNjAyOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDYwMzpcdFxuIDYwNDpcdFx0XHRpZiAoIWNoZWNrX3NjYWxhcl9pZHMocm9sZC1cdTAwM2VpZCwgcmN1ci1cdTAwM2VpZCwgaWRtYXApKVxuIDYwNTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA2MDY6XHRcbiA2MDc6XHRcdFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcdTAwMjZcdTAwMjYgdG51bV9pbihyb2xkLVx1MDAzZXZhcl9vZmYsIHJjdXItXHUwMDNldmFyX29mZik7XG4gNjA4Olx0XHRjYXNlIFBUUl9UT19NQVBfS0VZOlxuIDYwOTpcdFx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxuIDYxMDpcdFx0Y2FzZSBQVFJfVE9fTUVNOlxuIDYxMTpcdFx0Y2FzZSBQVFJfVE9fQlVGOlxuIDYxMjpcdFx0Y2FzZSBQVFJfVE9fVFBfQlVGRkVSOlxuIDYxMzpcdFx0XHQvKiBJZiB0aGUgbmV3IG1pbi9tYXgvdmFyX29mZiBzYXRpc2Z5IHRoZSBvbGQgb25lcyBhbmRcbiA2MTQ6XHRcdFx0ICogZXZlcnl0aGluZyBlbHNlIG1hdGNoZXMsIHdlIGFyZSBPSy5cbiA2MTU6XHRcdFx0ICovXG4gNjE2Olx0XHRcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIHZhcl9vZmYpKSA9PSAwIFx1MDAyNlx1MDAyNlxuIDYxNzpcdFx0XHQgICAgICAgcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpIFx1MDAyNlx1MDAyNlxuIDYxODpcdFx0XHQgICAgICAgdG51bV9pbihyb2xkLVx1MDAzZXZhcl9vZmYsIHJjdXItXHUwMDNldmFyX29mZikgXHUwMDI2XHUwMDI2XG4gNjE5Olx0XHRcdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VpZCwgcmN1ci1cdTAwM2VpZCwgaWRtYXApIFx1MDAyNlx1MDAyNlxuIDYyMDpcdFx0XHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApO1xuIDYyMTpcdFx0Y2FzZSBQVFJfVE9fUEFDS0VUX01FVEE6XG4gNjIyOlx0XHRjYXNlIFBUUl9UT19QQUNLRVQ6XG4gNjIzOlx0XHRcdC8qIFdlIG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtdWNoIHJhbmdlIGFzIHRoZSBvbGQgcHRyXG4gNjI0Olx0XHRcdCAqIGRpZCwgc28gdGhhdCBhbnkgYWNjZXNzZXMgd2hpY2ggd2VyZSBzYWZlIGJlZm9yZSBhcmVcbiA2MjU6XHRcdFx0ICogc3RpbGwgc2FmZS4gIFRoaXMgaXMgdHJ1ZSBldmVuIGlmIG9sZCByYW5nZSBcdTAwM2Mgb2xkIG9mZixcbiA2MjY6XHRcdFx0ICogc2luY2Ugc29tZW9uZSBjb3VsZCBoYXZlIGFjY2Vzc2VkIHRocm91Z2ggKHB0ciAtIGspLCBvclxuIDYyNzpcdFx0XHQgKiBldmVuIGRvbmUgcHRyIC09IGsgaW4gYSByZWdpc3RlciwgdG8gZ2V0IGEgc2FmZSBhY2Nlc3MuXG4gNjI4Olx0XHRcdCAqL1xuIDYyOTpcdFx0XHRpZiAocm9sZC1cdTAwM2VyYW5nZSBcdTAwM2MgMCB8fCByY3VyLVx1MDAzZXJhbmdlIFx1MDAzYyAwKSB7XG4gNjMwOlx0XHRcdFx0Lyogc3BlY2lhbCBjYXNlIGZvciBbQkVZT05EfEFUXV9QS1RfRU5EICovXG4gNjMxOlx0XHRcdFx0aWYgKHJvbGQtXHUwMDNlcmFuZ2UgIT0gcmN1ci1cdTAwM2VyYW5nZSlcbiA2MzI6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA2MzM6XHRcdFx0fSBlbHNlIGlmIChyb2xkLVx1MDAzZXJhbmdlIFx1MDAzZSByY3VyLVx1MDAzZXJhbmdlKSB7XG4gNjM0Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDYzNTpcdFx0XHR9XG4gNjM2Olx0XHRcdC8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqL1xuIDYzNzpcdFx0XHRpZiAoIWNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkpXG4gNjM4Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDYzOTpcdFx0XHQvKiBuZXcgdmFsIG11c3Qgc2F0aXNmeSBvbGQgdmFsIGtub3dsZWRnZSAqL1xuIDY0MDpcdFx0XHRyZXR1cm4gcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpIFx1MDAyNlx1MDAyNlxuIDY0MTpcdFx0XHQgICAgICAgdG51bV9pbihyb2xkLVx1MDAzZXZhcl9vZmYsIHJjdXItXHUwMDNldmFyX29mZik7XG4gNjQyOlx0XHRjYXNlIFBUUl9UT19TVEFDSzpcbiA2NDM6XHRcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuIDY0NDpcdFx0Y2FzZSBQVFJfVE9fQVJFTkE6XG4gNjQ1Olx0XHRcdHJldHVybiB0cnVlO1xuIDY0NjpcdFx0Y2FzZSBQVFJfVE9fSU5TTjpcbiA2NDc6XHRcdFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgdmFyX29mZikpID09IDAgXHUwMDI2XHUwMDI2XG4gNjQ4Olx0XHRcdCAgICAgICByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2IHRudW1faW4ocm9sZC1cdTAwM2V2YXJfb2ZmLCByY3VyLVx1MDAzZXZhcl9vZmYpO1xuIDY0OTpcdFx0ZGVmYXVsdDpcbiA2NTA6XHRcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuIDY1MTpcdFx0fVxuIDY1MjpcdH1cbiA2NTM6XHRcbiA2NTQ6XHRzdGF0aWMgc3RydWN0IGJwZl9yZWdfc3RhdGUgdW5ib3VuZF9yZWc7XG4gNjU1Olx0XG4gNjU2Olx0c3RhdGljIF9faW5pdCBpbnQgdW5ib3VuZF9yZWdfaW5pdCh2b2lkKVxuIDY1NzpcdHtcbiA2NTg6XHRcdGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShcdTAwMjZ1bmJvdW5kX3JlZyk7XG4gNjU5Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGByZWdzX2V4YWN0YCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIHNlZWluZyBgcmVnc19leGFjdGAgYmVpbmcgY2FsbGVkIGluIGEgY291cGxlIG9mIHBsYWNlcywgc3BlY2lmaWNhbGx5IGxpbmUgNTEwIGFuZCBsaW5lIDY1MC4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgY29uZGl0aW9uYWwgbG9naWMgYXJvdW5kIHRoZSBmaXJzdCBjYWxsOiBgaWYgKGV4YWN0ID09IEVYQUNUKSByZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7YC4gVGhhdCBpbXBsaWVzIGEgZmxhZywgYGV4YWN0YCwgd2hpY2ggY29udHJvbHMgd2hldGhlciBvciBub3QgYHJlZ3NfZXhhY3RgIGlzIGludm9rZWQgZGlyZWN0bHkuIFRoZSBvdGhlciBjYWxsIGlzIHRoZSBkZWZhdWx0IHJldHVybiwgc28gSSB3b25kZXIgd2hhdCB2YWx1ZSBpcyBiZWluZyBwYXNzZWQgaGVyZT8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIGhvdyBgZXhhY3RgIGdldHMgc2V0IHRvIGBFWEFDVGAuICBJIHNob3VsZCBwcm9iYWJseSBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBib3RoIGByZWdzX2V4YWN0YCBhbmQgYGV4YWN0YCB0aHJvdWdob3V0IHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGhvdyBhbmQgd2hlcmUgYHJlZ3NfZXhhY3RgIGlzIGFjdHVhbGx5IHVzZWQgYW5kIHdoeSBgZXhhY3RgIGlzIGJlaW5nIHNldCBvciBub3Qgc2V0LiBHb3R0YSB0cmFjZSBiYWNrIHRoZSBkZWZpbml0aW9uIGFuZCB0aGUgYXNzaWdubWVudHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdzX2V4YWN0fGV4YWN0X2xldmVsfEVYQUNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTQ3MT1zdGF0aWMgaW50IGNsZWFuX3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODctXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ4ODpzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODktXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ5Ny1cbmtlcm5lbC9icGYvc3RhdGVzLmM6NDk4OmVudW0gZXhhY3RfbGV2ZWwge1xua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTk6XHROT1RfRVhBQ1QsXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUwMDpcdEVYQUNULFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MDEtXHRSQU5HRV9XSVRISU5cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTUwNT1zdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MDYtXHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUwNzpcdFx0ICAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUwOC17XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUwOTpcdGlmIChleGFjdCA9PSBFWEFDVClcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTEwOlx0XHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUxMS1cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0OC1cdFx0fVxua2VybmVsL2JwZi9zdGF0ZXMuYzo1NDk6XHRcdGlmICghcm9sZC1cdTAwM2VwcmVjaXNlIFx1MDAyNlx1MDAyNiBleGFjdCA9PSBOT1RfRVhBQ1QpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU1MC1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0Mi1cdGNhc2UgUFRSX1RPX1NUQUNLOlxua2VybmVsL2JwZi9zdGF0ZXMuYzo2NDM6XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQ0LVx0Y2FzZSBQVFJfVE9fQVJFTkE6XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy02NDktXHRkZWZhdWx0Olxua2VybmVsL2JwZi9zdGF0ZXMuYzo2NTA6XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjUxLVx0fVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9Njk3PXN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjk4LVx0XHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY5OTpcdFx0ICAgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzAwLXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTcxMi1cbmtlcm5lbC9icGYvc3RhdGVzLmM6NzEzOlx0XHRpZiAoZXhhY3QgPT0gRVhBQ1QpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzE0LVx0XHRcdHU4IG9sZF90eXBlID0gb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9ODQyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NDMtXHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4NDQ6XHRcdFx0ICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbmtlcm5lbC9icGYvc3RhdGVzLmMtODQ1LXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk0MD1zdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQxOlx0XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCB1MzIgaW5zbl9pZHgsIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0Mi17XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz05NzU9c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzctXHRcdFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTc4Olx0XHRcdCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxua2VybmVsL2JwZi9zdGF0ZXMuYy05Nzkte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzND1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2Ni1cdFx0XHRpZiAoc3RhdGVzX21heWJlX2xvb3BpbmcoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNjc6XHRcdFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIEVYQUNUKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2OC1cdFx0XHQgICAgIWl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzk5LVx0XHRsb29wID0gaW5jb21wbGV0ZV9yZWFkX21hcmtzKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUpO1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDAwOlx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgbG9vcCA/IFJBTkdFX1dJVEhJTiA6IE5PVF9FWEFDVCkpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwMS1oaXQ6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc4NTY9c3RhdGljIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmZpbmRfcHJldl9lbnRyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODgxLSAqIENoZWNrIGlmIHNjYWxhciByZWdpc3RlcnMgYXJlIGV4YWN0IGZvciB0aGUgcHVycG9zZSBvZiBub3Qgd2lkZW5pbmcuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Nzg4MjogKiBNb3JlIGxlbmllbnQgdGhhbiByZWdzX2V4YWN0KClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODgzLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODI4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFN0YWNrIFNhZmV0eSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWgsIGBzdGFja3NhZmVgISYjMzQ7IFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIGtub3cgd2hhdCB0aGF0IGtleXdvcmQvZmVhdHVyZSBpcyBhYm91dC4gIE5vdyBJIHdhbnQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIGltcGxlbWVudGF0aW9uIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpdHMgd29ya2luZywgYW5kIGdldCBpbnRvIHRoZSBuaXR0eSBncml0dHkuIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGFjdHVhbGx5ICpkb25lKiBpdC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyA3MTIgdG8gNzgwLiBUaGF0IGNodW5rIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldyBvZiB0aGUgY29yZSBsb2dpYywgb3IgYXQgbGVhc3QgYSByZXByZXNlbnRhdGl2ZSBzYW1wbGUgb2YgaG93IHRoZSBzdGFjayBzYWZldHkgbWVjaGFuaXNtIGlzIHJlYWxpemVkIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXRhaWxzLCB0aGUgc3BlY2lmaWMgdGVjaG5pcXVlcywgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBvcHRpbWl6YXRpb24gb3Igc3VidGxlIGZsYXdzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGFuZCB3aGVyZSBJIGNhbiBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRyYWRlLW9mZnMgdGhleSYjMzk7dmUgbWFkZS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHR7XG4gNzAxOlx0XHRpbnQgaSwgc3BpO1xuIDcwMjpcdFxuIDcwMzpcdFx0Lyogd2FsayBzbG90cyBvZiB0aGUgZXhwbG9yZWQgc3RhY2sgYW5kIGlnbm9yZSBhbnkgYWRkaXRpb25hbFxuIDcwNDpcdFx0ICogc2xvdHMgaW4gdGhlIGN1cnJlbnQgc3RhY2ssIHNpbmNlIGV4cGxvcmVkKHNhZmUpIHN0YXRlXG4gNzA1Olx0XHQgKiBkaWRuJiMzOTt0IHVzZSB0aGVtXG4gNzA2Olx0XHQgKi9cbiA3MDc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9sZC1cdTAwM2VhbGxvY2F0ZWRfc3RhY2s7IGkmIzQzOyYjNDM7KSB7XG4gNzA4Olx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGRfcmVnLCAqY3VyX3JlZztcbiA3MDk6XHRcdFx0aW50IGltID0gaSAlIEJQRl9SRUdfU0laRTtcbiA3MTA6XHRcbiA3MTE6XHRcdFx0c3BpID0gaSAvIEJQRl9SRUdfU0laRTtcbiA3MTI6XHRcbiA3MTM6XHRcdFx0aWYgKGV4YWN0ID09IEVYQUNUKSB7XG4gNzE0Olx0XHRcdFx0dTggb2xkX3R5cGUgPSBvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV07XG4gNzE1Olx0XHRcdFx0dTggY3VyX3R5cGUgPSBpIFx1MDAzYyBjdXItXHUwMDNlYWxsb2NhdGVkX3N0YWNrID9cbiA3MTY6XHRcdFx0XHRcdCAgICAgIGN1ci1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA6IFNUQUNLX0lOVkFMSUQ7XG4gNzE3Olx0XG4gNzE4Olx0XHRcdFx0LyogU1RBQ0tfSU5WQUxJRCBhbmQgU1RBQ0tfUE9JU09OIGFyZSBlcXVpdmFsZW50IGZvciBwcnVuaW5nICovXG4gNzE5Olx0XHRcdFx0aWYgKG9sZF90eXBlID09IFNUQUNLX1BPSVNPTilcbiA3MjA6XHRcdFx0XHRcdG9sZF90eXBlID0gU1RBQ0tfSU5WQUxJRDtcbiA3MjE6XHRcdFx0XHRpZiAoY3VyX3R5cGUgPT0gU1RBQ0tfUE9JU09OKVxuIDcyMjpcdFx0XHRcdFx0Y3VyX3R5cGUgPSBTVEFDS19JTlZBTElEO1xuIDcyMzpcdFx0XHRcdGlmIChpIFx1MDAzZT0gY3VyLVx1MDAzZWFsbG9jYXRlZF9zdGFjayB8fCBvbGRfdHlwZSAhPSBjdXJfdHlwZSlcbiA3MjQ6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA3MjU6XHRcdFx0fVxuIDcyNjpcdFxuIDcyNzpcdFx0XHRpZiAob2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX0lOVkFMSUQgfHxcbiA3Mjg6XHRcdFx0ICAgIG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19QT0lTT04pXG4gNzI5Olx0XHRcdFx0Y29udGludWU7XG4gNzMwOlx0XG4gNzMxOlx0XHRcdGlmIChlbnYtXHUwMDNlYWxsb3dfdW5pbml0X3N0YWNrIFx1MDAyNlx1MDAyNlxuIDczMjpcdFx0XHQgICAgb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX01JU0MpXG4gNzMzOlx0XHRcdFx0Y29udGludWU7XG4gNzM0Olx0XG4gNzM1Olx0XHRcdC8qIGV4cGxvcmVkIHN0YWNrIGhhcyBtb3JlIHBvcHVsYXRlZCBzbG90cyB0aGFuIGN1cnJlbnQgc3RhY2tcbiA3MzY6XHRcdFx0ICogYW5kIHRoZXNlIHNsb3RzIHdlcmUgdXNlZFxuIDczNzpcdFx0XHQgKi9cbiA3Mzg6XHRcdFx0aWYgKGkgXHUwMDNlPSBjdXItXHUwMDNlYWxsb2NhdGVkX3N0YWNrKVxuIDczOTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA3NDA6XHRcbiA3NDE6XHRcdFx0LypcbiA3NDI6XHRcdFx0ICogNjQgYW5kIDMyLWJpdCBzY2FsYXIgc3BpbGxzIHZzIE1JU0MvSU5WQUxJRCBzbG90cyBhbmQgdmljZSB2ZXJzYS5cbiA3NDM6XHRcdFx0ICogTG9hZCBmcm9tIE1JU0MvSU5WQUxJRCBzbG90cyBwcm9kdWNlcyB1bmJvdW5kIHNjYWxhci5cbiA3NDQ6XHRcdFx0ICogQ29uc3RydWN0IGEgZmFrZSByZWdpc3RlciBmb3Igc3VjaCBzdGFjayBhbmQgY2FsbFxuIDc0NTpcdFx0XHQgKiByZWdzYWZlKCkgdG8gZW5zdXJlIHNjYWxhciBpZHMgYXJlIGNvbXBhcmVkLlxuIDc0NjpcdFx0XHQgKi9cbiA3NDc6XHRcdFx0aWYgKGltID09IDAgfHwgaW0gPT0gNCkge1xuIDc0ODpcdFx0XHRcdG9sZF9yZWcgPSBzY2FsYXJfcmVnX2Zvcl9zdGFjayhlbnYsIFx1MDAyNm9sZC1cdTAwM2VzdGFja1tzcGldLCBpbSk7XG4gNzQ5Olx0XHRcdFx0Y3VyX3JlZyA9IHNjYWxhcl9yZWdfZm9yX3N0YWNrKGVudiwgXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0sIGltKTtcbiA3NTA6XHRcdFx0XHRpZiAob2xkX3JlZyBcdTAwMjZcdTAwMjYgY3VyX3JlZykge1xuIDc1MTpcdFx0XHRcdFx0aWYgKCFyZWdzYWZlKGVudiwgb2xkX3JlZywgY3VyX3JlZywgaWRtYXAsIGV4YWN0KSlcbiA3NTI6XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDc1MzpcdFx0XHRcdFx0aSAmIzQzOz0gKGltID09IDAgPyBCUEZfUkVHX1NJWkUgLSAxIDogMyk7XG4gNzU0Olx0XHRcdFx0XHRjb250aW51ZTtcbiA3NTU6XHRcdFx0XHR9XG4gNzU2Olx0XHRcdH1cbiA3NTc6XHRcbiA3NTg6XHRcdFx0LyogaWYgb2xkIHN0YXRlIHdhcyBzYWZlIHdpdGggbWlzYyBkYXRhIGluIHRoZSBzdGFja1xuIDc1OTpcdFx0XHQgKiBpdCB3aWxsIGJlIHNhZmUgd2l0aCB6ZXJvLWluaXRpYWxpemVkIHN0YWNrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN0YWNrc2FmZWAgZm9yIERlZXBlciBJbnNpZ2h0KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgYHN0YWNrc2FmZWAgbGlicmFyeS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgbGluZXMgNzYwIHRocm91Z2ggODAwLiBJJiMzOTttIGhvcGluZyB0aGF0IGFyZWEgY292ZXJzIHRoZSBwYXJ0IEkmIzM5O20gc3RydWdnbGluZyB3aXRoIGFuZCB3aWxsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IG9uIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjcml0aWNhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9yIHBlcmhhcHMgYSBwYXJ0aWN1bGFybHkgY2xldmVyIHVzZSBvZiBzb21lIGNvbmN1cnJlbmN5IHByaW1pdGl2ZXMuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSB2YWx1YWJsZSBjb250ZXh0IGZvciB0aGUgcHJvYmxlbSBJJiMzOTttIHdvcmtpbmcgb24gYW5kIHNob3VsZCBob3BlZnVsbHkgaGVscCBtZSB0byByZXNvbHZlIGl0LiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjA6XHRcdFx0ICogVGhlIG9wcG9zaXRlIGlzIG5vdCB0cnVlXG4gNzYxOlx0XHRcdCAqL1xuIDc2MjpcdFx0XHRpZiAob2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX01JU0MgXHUwMDI2XHUwMDI2XG4gNzYzOlx0XHRcdCAgICBjdXItXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gPT0gU1RBQ0tfWkVSTylcbiA3NjQ6XHRcdFx0XHRjb250aW51ZTtcbiA3NjU6XHRcdFx0aWYgKG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPVxuIDc2NjpcdFx0XHQgICAgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdKVxuIDc2NzpcdFx0XHRcdC8qIEV4OiBvbGQgZXhwbG9yZWQgKHNhZmUpIHN0YXRlIGhhcyBTVEFDS19TUElMTCBpblxuIDc2ODpcdFx0XHRcdCAqIHRoaXMgc3RhY2sgc2xvdCwgYnV0IGN1cnJlbnQgaGFzIFNUQUNLX01JU0MgLVx1MDAzZVxuIDc2OTpcdFx0XHRcdCAqIHRoaXMgdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudCxcbiA3NzA6XHRcdFx0XHQgKiByZXR1cm4gZmFsc2UgdG8gY29udGludWUgdmVyaWZpY2F0aW9uIG9mIHRoaXMgcGF0aFxuIDc3MTpcdFx0XHRcdCAqL1xuIDc3MjpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA3NzM6XHRcdFx0aWYgKGkgJSBCUEZfUkVHX1NJWkUgIT0gQlBGX1JFR19TSVpFIC0gMSlcbiA3NzQ6XHRcdFx0XHRjb250aW51ZTtcbiA3NzU6XHRcdFx0LyogQm90aCBvbGQgYW5kIGN1ciBhcmUgaGF2aW5nIHNhbWUgc2xvdF90eXBlICovXG4gNzc2Olx0XHRcdHN3aXRjaCAob2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW0JQRl9SRUdfU0laRSAtIDFdKSB7XG4gNzc3Olx0XHRcdGNhc2UgU1RBQ0tfU1BJTEw6XG4gNzc4Olx0XHRcdFx0Lyogd2hlbiBleHBsb3JlZCBhbmQgY3VycmVudCBzdGFjayBzbG90IGFyZSBib3RoIHN0b3JpbmdcbiA3Nzk6XHRcdFx0XHQgKiBzcGlsbGVkIHJlZ2lzdGVycywgY2hlY2sgdGhhdCBzdG9yZWQgcG9pbnRlcnMgdHlwZXNcbiA3ODA6XHRcdFx0XHQgKiBhcmUgdGhlIHNhbWUgYXMgd2VsbC5cbiA3ODE6XHRcdFx0XHQgKiBFeDogZXhwbG9yZWQgc2FmZSBwYXRoIGNvdWxkIGhhdmUgc3RvcmVkXG4gNzgyOlx0XHRcdFx0ICogKGJwZl9yZWdfc3RhdGUpIHsudHlwZSA9IFBUUl9UT19TVEFDSywgLm9mZiA9IC04fVxuIDc4MzpcdFx0XHRcdCAqIGJ1dCBjdXJyZW50IHBhdGggaGFzIHN0b3JlZDpcbiA3ODQ6XHRcdFx0XHQgKiAoYnBmX3JlZ19zdGF0ZSkgey50eXBlID0gUFRSX1RPX1NUQUNLLCAub2ZmID0gLTE2fVxuIDc4NTpcdFx0XHRcdCAqIHN1Y2ggdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudC5cbiA3ODY6XHRcdFx0XHQgKiByZXR1cm4gZmFsc2UgdG8gY29udGludWUgdmVyaWZpY2F0aW9uIG9mIHRoaXMgcGF0aFxuIDc4NzpcdFx0XHRcdCAqL1xuIDc4ODpcdFx0XHRcdGlmICghcmVnc2FmZShlbnYsIFx1MDAyNm9sZC1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLFxuIDc4OTpcdFx0XHRcdFx0ICAgICBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcbiA3OTA6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA3OTE6XHRcdFx0XHRicmVhaztcbiA3OTI6XHRcdFx0Y2FzZSBTVEFDS19EWU5QVFI6XG4gNzkzOlx0XHRcdFx0b2xkX3JlZyA9IFx1MDAyNm9sZC1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuIDc5NDpcdFx0XHRcdGN1cl9yZWcgPSBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA3OTU6XHRcdFx0XHRpZiAob2xkX3JlZy1cdTAwM2VkeW5wdHIudHlwZSAhPSBjdXJfcmVnLVx1MDAzZWR5bnB0ci50eXBlIHx8XG4gNzk2Olx0XHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgIT0gY3VyX3JlZy1cdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxuIDc5NzpcdFx0XHRcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXHUwMDNlaWQsIGN1cl9yZWctXHUwMDNlaWQsIGlkbWFwKSB8fFxuIDc5ODpcdFx0XHRcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXHUwMDNlcGFyZW50X2lkLCBjdXJfcmVnLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApKVxuIDc5OTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgwMDpcdFx0XHRcdGJyZWFrO1xuIDgwMTpcdFx0XHRjYXNlIFNUQUNLX0lURVI6XG4gODAyOlx0XHRcdFx0b2xkX3JlZyA9IFx1MDAyNm9sZC1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuIDgwMzpcdFx0XHRcdGN1cl9yZWcgPSBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA4MDQ6XHRcdFx0XHQvKiBpdGVyLmRlcHRoIGlzIG5vdCBjb21wYXJlZCBiZXR3ZWVuIHN0YXRlcyBhcyBpdFxuIDgwNTpcdFx0XHRcdCAqIGRvZXNuJiMzOTt0IG1hdHRlciBmb3IgY29ycmVjdG5lc3MgYW5kIHdvdWxkIG90aGVyd2lzZVxuIDgwNjpcdFx0XHRcdCAqIHByZXZlbnQgY29udmVyZ2VuY2U7IHdlIG1haW50YWluIGl0IG9ubHkgdG8gcHJldmVudFxuIDgwNzpcdFx0XHRcdCAqIGluZmluaXRlIGxvb3AgY2hlY2sgdHJpZ2dlcmluZywgc2VlXG4gODA4Olx0XHRcdFx0ICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpXG4gODA5Olx0XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjgwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGJwZl9yZWdfc3RhdGVgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBzb21lIHN1YnRsZXRpZXMgaW4gaG93IHdlJiMzOTtyZSB0cmFja2luZyByZWdpc3RlciBzdGF0ZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgc3RhY2sgcG9pbnRlcnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byBzdGFjayBmcmFtZXMgd2l0aGluIHRoZSBCUEYgY29udGV4dC4KCkxvb2tpbmcgYXQgdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbiwgdGhlIGFkZGVkIGByb2xkLSZndDtmcmFtZW5vID09IHJjdXItJmd0O2ZyYW1lbm9gIGNoZWNrIHNlZW1zIHNpZ25pZmljYW50LiBQcmV2aW91c2x5LCB3ZSBvbmx5IGNvbnNpZGVyZWQgd2hldGhlciB0aGUgcmVnaXN0ZXIgc3RhdGVzIHdlcmUgaWRlbnRpY2FsIGJhc2VkIG9uIGEgYG1lbWNtcGAgdXAgdG8gdGhlIGBpZGAgZmllbGQgYW5kIHRoZSBvdXRjb21lIG9mIHRoZSBgY2hlY2tfaWRzYCBmdW5jdGlvbiBmb3IgYGlkYCBhbmQgYHBhcmVudF9pZGAuIE5vdywgd2UmIzM5O3JlIGV4cGxpY2l0bHkgY29tcGFyaW5nIHRoZSBgZnJhbWVub2AgZmllbGQgYXMgd2VsbC4gVGhlIGltcGxpY2F0aW9ucyBhcmUsIHRoaXMgYWRkaXRpb24gaXMgbGlrZWx5IGludGVuZGVkIHRvIGVuc3VyZSB0aGF0IHR3byByZWdpc3RlciBzdGF0ZXMgYXJlIGNvbnNpZGVyZWQgdHJ1bHkgZXF1YWwgb25seSBpZiB0aGV5IGFyZSBib3RoIHBvaW50aW5nIHRvIHRoZSBzYW1lIHN0YWNrIGZyYW1lLgoKVGhlIGNoYW5nZSBpbiBgcmVnc2FmZWAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBQVFJfVE9fU1RBQ0tgIGNhc2UsIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGlzIGludGVycHJldGF0aW9uLiBUaGUgb3JpZ2luYWwgY29tbWVudCBoaW50ZWQgYXQgdGhlIG5lZWQgZm9yIGZyYW1lLXNwZWNpZmljIGVxdWFsaXR5IHdoZW4gZGVhbGluZyB3aXRoIHN0YWNrIHBvaW50ZXJzLiBUaGUgcmVtb3ZhbCBvZiB0aGUgYHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AgY2hlY2sgdGhlcmUsICphZnRlciogdGhlIGFkZGl0aW9uIG9mIGl0IHRvIGByZWdzX2V4YWN0YCwgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IG5vdywgd2l0aCBgcmVnc19leGFjdGAgdXBkYXRlZCwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gcmUtY2hlY2sgdGhlIGZyYW1lIG51bWJlciBpbiB0aGUgUFRSX1RPX1NUQUNLIGNhc2Ugc2VwYXJhdGVseS4gYHJlZ3NfZXhhY3RgIG5vdyBoYW5kbGVzIGl0LiBUaGF0IGlzIHRoZSBjcml0aWNhbCBjaGFuZ2UuCgpNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZGVsdmUgaW50byB0aGUgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBkZWZpbml0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBmcmFtZW5vYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGNvbmZpcm0gaXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgc3RydWN0dXJlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXRzIG1lYW5pbmcgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIEJQRiByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZSBgZnJhbWVub2AgZmllbGQgcmVwcmVzZW50cyB0aGUgYWN0dWFsIGZyYW1lIG51bWJlciBvciBhIGtpbmQgb2YgZnJhbWUgaWRlbnRpZmllci4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIHNvbGlkaWZ5IHRoZSBvdmVyYWxsIGVmZmVjdCBvZiB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJwZl9yZWdfc3RhdGUgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTMyPWVudW0gYnBmX2l0ZXJfc3RhdGUge1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzctXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjM4OnN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzktXHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgaW50ZXJuYWxzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAzOCwgYXNzdW1pbmcgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBjb3JlIGRlZmluaXRpb25zLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgeW91JiMzOTtsbCBmaW5kIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zLCBpbXBvcnRhbnQgbWFjcm9zLCBhbmQgcG90ZW50aWFsbHkgc29tZSBvZiB0aGUga2V5IGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBzZXQgdGhlIHN0YWdlIGZvciBob3cgdGhlIHZlcmlmaWVyIG9wZXJhdGVzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBsaWtlbHkgYnJhbmNoIG91dCBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIGJ1dCB0aGF0JiMzOTtzIHRoZSBpbml0aWFsIHRhcmdldC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5lYXJ0aGVkLiBJJiMzOTttIGFudGljaXBhdGluZyBmaW5kaW5nIHRoZSBidWlsZGluZyBibG9ja3MgZm9yIHRoZSBjb250cm9sIGZsb3cgZ3JhcGggYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLCBwZXJoYXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM4Olx0c3RydWN0IGJwZl9yZWdfc3RhdGUge1xuICAzOTpcdFx0LyogT3JkZXJpbmcgb2YgZmllbGRzIG1hdHRlcnMuICBTZWUgc3RhdGVzX2VxdWFsKCkgKi9cbiAgNDA6XHRcdGVudW0gYnBmX3JlZ190eXBlIHR5cGU7XG4gIDQxOlx0XHQvKlxuICA0MjpcdFx0ICogQ29uc3RhbnQgZGVsdGEgYmV0d2VlbiBcJiMzNDtsaW5rZWRcJiMzNDsgc2NhbGFycyB3aXRoIHRoZSBzYW1lIElELlxuICA0MzpcdFx0ICovXG4gIDQ0Olx0XHRzMzIgZGVsdGE7XG4gIDQ1Olx0XHR1bmlvbiB7XG4gIDQ2Olx0XHRcdC8qIHZhbGlkIHdoZW4gdHlwZSA9PSBQVFJfVE9fUEFDS0VUICovXG4gIDQ3Olx0XHRcdGludCByYW5nZTtcbiAgNDg6XHRcbiAgNDk6XHRcdFx0LyogdmFsaWQgd2hlbiB0eXBlID09IENPTlNUX1BUUl9UT19NQVAgfCBQVFJfVE9fTUFQX1ZBTFVFIHxcbiAgNTA6XHRcdFx0ICogICBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTExcbiAgNTE6XHRcdFx0ICovXG4gIDUyOlx0XHRcdHN0cnVjdCB7XG4gIDUzOlx0XHRcdFx0c3RydWN0IGJwZl9tYXAgKm1hcF9wdHI7XG4gIDU0Olx0XHRcdFx0LyogVG8gZGlzdGluZ3Vpc2ggbWFwIGxvb2t1cHMgZnJvbSBvdXRlciBtYXBcbiAgNTU6XHRcdFx0XHQgKiB0aGUgbWFwX3VpZCBpcyBub24temVybyBmb3IgcmVnaXN0ZXJzXG4gIDU2Olx0XHRcdFx0ICogcG9pbnRpbmcgdG8gaW5uZXIgbWFwcy5cbiAgNTc6XHRcdFx0XHQgKi9cbiAgNTg6XHRcdFx0XHR1MzIgbWFwX3VpZDtcbiAgNTk6XHRcdFx0fTtcbiAgNjA6XHRcbiAgNjE6XHRcdFx0LyogZm9yIFBUUl9UT19CVEZfSUQgKi9cbiAgNjI6XHRcdFx0c3RydWN0IHtcbiAgNjM6XHRcdFx0XHRzdHJ1Y3QgYnRmICpidGY7XG4gIDY0Olx0XHRcdFx0dTMyIGJ0Zl9pZDtcbiAgNjU6XHRcdFx0fTtcbiAgNjY6XHRcbiAgNjc6XHRcdFx0c3RydWN0IHsgLyogZm9yIFBUUl9UT19NRU0gfCBQVFJfVE9fTUVNX09SX05VTEwgKi9cbiAgNjg6XHRcdFx0XHR1MzIgbWVtX3NpemU7XG4gIDY5Olx0XHRcdH07XG4gIDcwOlx0XG4gIDcxOlx0XHRcdC8qIEZvciBkeW5wdHIgc3RhY2sgc2xvdHMgKi9cbiAgNzI6XHRcdFx0c3RydWN0IHtcbiAgNzM6XHRcdFx0XHRlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlO1xuICA3NDpcdFx0XHRcdC8qIEEgZHlucHRyIGlzIDE2IGJ5dGVzIHNvIGl0IHRha2VzIHVwIDIgc3RhY2sgc2xvdHMuXG4gIDc1Olx0XHRcdFx0ICogV2UgbmVlZCB0byB0cmFjayB3aGljaCBzbG90IGlzIHRoZSBmaXJzdCBzbG90XG4gIDc2Olx0XHRcdFx0ICogdG8gcHJvdGVjdCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHRoZSB1c2VyIG1heSB0cnkgdG9cbiAgNzc6XHRcdFx0XHQgKiBwYXNzIGluIGFuIGFkZHJlc3Mgc3RhcnRpbmcgYXQgdGhlIHNlY29uZCBzbG90IG9mIHRoZVxuICA3ODpcdFx0XHRcdCAqIGR5bnB0ci5cbiAgNzk6XHRcdFx0XHQgKi9cbiAgODA6XHRcdFx0XHRib29sIGZpcnN0X3Nsb3Q7XG4gIDgxOlx0XHRcdH0gZHlucHRyO1xuICA4MjpcdFxuICA4MzpcdFx0XHQvKiBGb3IgYnBmX2l0ZXIgc3RhY2sgc2xvdHMgKi9cbiAgODQ6XHRcdFx0c3RydWN0IHtcbiAgODU6XHRcdFx0XHQvKiBCVEYgY29udGFpbmVyIGFuZCBCVEYgdHlwZSBJRCBkZXNjcmliaW5nXG4gIDg2Olx0XHRcdFx0ICogc3RydWN0IGJwZl9pdGVyX1x1MDAzY3R5cGVcdTAwM2Ugb2YgYW4gaXRlcmF0b3Igc3RhdGVcbiAgODc6XHRcdFx0XHQgKi9cbiAgODg6XHRcdFx0XHRzdHJ1Y3QgYnRmICpidGY7XG4gIDg5Olx0XHRcdFx0dTMyIGJ0Zl9pZDtcbiAgOTA6XHRcdFx0XHQvKiBwYWNraW5nIGZvbGxvd2luZyB0d28gZmllbGRzIHRvIGZpdCBpdGVyIHN0YXRlIGludG8gMTYgYnl0ZXMgKi9cbiAgOTE6XHRcdFx0XHRlbnVtIGJwZl9pdGVyX3N0YXRlIHN0YXRlOjI7XG4gIDkyOlx0XHRcdFx0aW50IGRlcHRoOjMwO1xuICA5MzpcdFx0XHR9IGl0ZXI7XG4gIDk0Olx0XG4gIDk1Olx0XHRcdC8qIEZvciBpcnEgc3RhY2sgc2xvdHMgKi9cbiAgOTY6XHRcdFx0c3RydWN0IHtcbiAgOTc6XHRcdFx0XHRlbnVtIHtcbiAgOTg6XHRcdFx0XHRcdElSUV9OQVRJVkVfS0ZVTkMsXG4gIDk5Olx0XHRcdFx0XHRJUlFfTE9DS19LRlVOQyxcbiAxMDA6XHRcdFx0XHR9IGtmdW5jX2NsYXNzO1xuIDEwMTpcdFx0XHR9IGlycTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0LyogTWF4IHNpemUgZnJvbSBhbnkgb2YgdGhlIGFib3ZlLiAqL1xuIDEwNDpcdFx0XHRzdHJ1Y3Qge1xuIDEwNTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmF3MTtcbiAxMDY6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHJhdzI7XG4gMTA3Olx0XHRcdH0gcmF3O1xuIDEwODpcdFxuIDEwOTpcdFx0XHR1MzIgc3VicHJvZ25vOyAvKiBmb3IgUFRSX1RPX0ZVTkMgKi9cbiAxMTA6XHRcdH07XG4gMTExOlx0XHQvKiBGb3Igc2NhbGFyIHR5cGVzIChTQ0FMQVJfVkFMVUUpLCB0aGlzIHJlcHJlc2VudHMgb3VyIGtub3dsZWRnZSBvZlxuIDExMjpcdFx0ICogdGhlIGFjdHVhbCB2YWx1ZS5cbiAxMTM6XHRcdCAqIEZvciBwb2ludGVyIHR5cGVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIHZhcmlhYmxlIHBhcnQgb2YgdGhlIG9mZnNldFxuIDExNDpcdFx0ICogZnJvbSB0aGUgcG9pbnRlZC10byBvYmplY3QsIGFuZCBpcyBzaGFyZWQgd2l0aCBhbGwgYnBmX3JlZ19zdGF0ZXNcbiAxMTU6XHRcdCAqIHdpdGggdGhlIHNhbWUgaWQgYXMgdXMuXG4gMTE2Olx0XHQgKi9cbiAxMTc6XHRcdHN0cnVjdCB0bnVtIHZhcl9vZmY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDYyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYHN0cnVjdCBicGZfcmVnX3N0YXRlYCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYWxyZWFkeSBsb29rZWQgYXQgc29tZSBhc3BlY3RzIG9mIHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgLiBOb3csIEkgbmVlZCB0byBnZXQgYSBmdWxsIGhhbmRsZSBvbiB0aGUgcmVzdCBvZiBpdC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgZmFtaWxpYXIgd2l0aCBldmVyeSBzaW5nbGUgZmllbGQgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gVGhlcmUmIzM5O3MgYSBsb3Qgb2YgaW1wb3J0YW50IG1ldGFkYXRhIHdyYXBwZWQgdXAgaW4gdGhhdCBzdHJ1Y3QsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlIGlzIGNyaXRpY2FsIGZvciB0aGUgb25nb2luZyB3b3JrLiBObyBzdG9uZSBjYW4gYmUgbGVmdCB1bnR1cm5lZCBoZXJlLCBvciBJJiMzOTttIG1pc3Npbmcgb3Bwb3J0dW5pdGllcyB0byByZWZpbmUsIG9wdGltaXplLCBhbmQgcG90ZW50aWFsbHkgZmluZCBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgSSBrbm93ICpldmVyeXRoaW5nKiBhYm91dCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTg6XHRcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxuIDExOTpcdFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cbiAxMjA6XHRcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXG4gMTIxOlx0XHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXG4gMTIyOlx0XHQgKi9cbiAxMjM6XHRcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXG4gMTI0Olx0XHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xuIDEyNTpcdFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXG4gMTI2Olx0XHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cbiAxMjc6XHRcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxuIDEyODpcdFx0ICogY2FtZSBmcm9tLCB3aGVuIG9uZSBpcyB0ZXN0ZWQgZm9yICE9IE5VTEwuXG4gMTI5Olx0XHQgKiBGb3IgUFRSX1RPX01FTV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBtZW1vcnkgYWxsb2NhdGlvblxuIDEzMDpcdFx0ICogZm9yIHRoZSBwdXJwb3NlIG9mIHRyYWNraW5nIHRoYXQgaXQmIzM5O3MgZnJlZWQuXG4gMTMxOlx0XHQgKiBGb3IgUFRSX1RPX1NPQ0tFVCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggcG9pbnRlcnMgcmV0YWluIHRoZVxuIDEzMjpcdFx0ICogc2FtZSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCwgdG8gZGV0ZXJtaW5lIHByb3BlciByZWZlcmVuY2UgZnJlZWluZy5cbiAxMzM6XHRcdCAqIEZvciBzdGFjayBzbG90cyB0aGF0IGFyZSBkeW5wdHJzLCB0aGlzIGlzIHVzZWQgdG8gdHJhY2sgcmVmZXJlbmNlcyB0b1xuIDEzNDpcdFx0ICogdGhlIGR5bnB0ciB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxuIDEzNTpcdFx0ICogU2ltaWxhcmx5IHRvIGR5bnB0cnMsIHdlIHVzZSBJRCB0byB0cmFjayBcJiMzNDtiZWxvbmdpbmdcJiMzNDsgb2YgYSByZWZlcmVuY2VcbiAxMzY6XHRcdCAqIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgYnBmX2l0ZXIuXG4gMTM3Olx0XHQgKi9cbiAxMzg6XHRcdC8qXG4gMTM5Olx0XHQgKiBVcHBlciBiaXQgb2YgSUQgaXMgdXNlZCB0byByZW1lbWJlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBcJiMzNDtsaW5rZWRcJiMzNDtcbiAxNDA6XHRcdCAqIHJlZ2lzdGVycy4gRXhhbXBsZTpcbiAxNDE6XHRcdCAqIHIxID0gcjI7ICAgIGJvdGggd2lsbCBoYXZlIHIxLVx1MDAzZWlkID09IHIyLVx1MDAzZWlkID09IE5cbiAxNDI6XHRcdCAqIHIxICYjNDM7PSAxMDsgICByMS1cdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVCBhbmQgcjEtXHUwMDNlZGVsdGEgPT0gMTBcbiAxNDM6XHRcdCAqIHIzID0gcjI7ICAgIGJvdGggd2lsbCBoYXZlIHIzLVx1MDAzZWlkID09IHIyLVx1MDAzZWlkID09IE5cbiAxNDQ6XHRcdCAqIHczICYjNDM7PSAxMDsgICByMy1cdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVDMyIGFuZCByMy1cdTAwM2VkZWx0YSA9PSAxMFxuIDE0NTpcdFx0ICovXG4gMTQ2Olx0I2RlZmluZSBCUEZfQUREX0NPTlNUNjQgKDFVIFx1MDAzY1x1MDAzYyAzMSlcbiAxNDc6XHQjZGVmaW5lIEJQRl9BRERfQ09OU1QzMiAoMVUgXHUwMDNjXHUwMDNjIDMwKVxuIDE0ODpcdCNkZWZpbmUgQlBGX0FERF9DT05TVCAoQlBGX0FERF9DT05TVDY0IHwgQlBGX0FERF9DT05TVDMyKVxuIDE0OTpcdFx0dTMyIGlkO1xuIDE1MDpcdFx0LypcbiAxNTE6XHRcdCAqIFRyYWNrcyB0aGUgcGFyZW50IG9iamVjdCB0aGlzIHJlZ2lzdGVyIHdhcyBkZXJpdmVkIGZyb20uXG4gMTUyOlx0XHQgKiBVc2VkIGZvciBjYXNjYWRpbmcgaW52YWxpZGF0aW9uOiB3aGVuIHRoZSBwYXJlbnQgb2JqZWN0IGlzXG4gMTUzOlx0XHQgKiByZWxlYXNlZCBvciBpbnZhbGlkYXRlZCwgYWxsIHJlZ2lzdGVycyB3aXRoIG1hdGNoaW5nIHBhcmVudF9pZFxuIDE1NDpcdFx0ICogYXJlIGFsc28gaW52YWxpZGF0ZWQuIEZvciBleGFtcGxlLCBhIHNsaWNlIGZyb20gYnBmX2R5bnB0cl9kYXRhKClcbiAxNTU6XHRcdCAqIGdldHMgcGFyZW50X2lkIHNldCB0byB0aGUgZHlucHRyJiMzOTtzIGlkLlxuIDE1NjpcdFx0ICovXG4gMTU3Olx0XHR1MzIgcGFyZW50X2lkO1xuIDE1ODpcdFx0LyogSW5zaWRlIHRoZSBjYWxsZWUgdHdvIHJlZ2lzdGVycyBjYW4gYmUgYm90aCBQVFJfVE9fU1RBQ0sgbGlrZVxuIDE1OTpcdFx0ICogUjE9ZnAtOCBhbmQgUjI9ZnAtOCwgYnV0IG9uZSBvZiB0aGVtIHBvaW50cyB0byB0aGlzIGZ1bmN0aW9uIHN0YWNrXG4gMTYwOlx0XHQgKiB3aGlsZSBhbm90aGVyIHRvIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2suIFRvIGRpZmZlcmVudGlhdGUgdGhlbSAmIzM5O2ZyYW1lbm8mIzM5O1xuIDE2MTpcdFx0ICogaXMgdXNlZCB3aGljaCBpcyBhbiBpbmRleCBpbiBicGZfdmVyaWZpZXJfc3RhdGUtXHUwMDNlZnJhbWVbXSBhcnJheVxuIDE2MjpcdFx0ICogcG9pbnRpbmcgdG8gYnBmX2Z1bmNfc3RhdGUuXG4gMTYzOlx0XHQgKi9cbiAxNjQ6XHRcdHUzMiBmcmFtZW5vO1xuIDE2NTpcdFx0LyogaWYgKCFwcmVjaXNlIFx1MDAyNlx1MDAyNiBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24mIzM5O3QgYWZmZWN0IHNhZmV0eSAqL1xuIDE2NjpcdFx0Ym9vbCBwcmVjaXNlO1xuIDE2NzpcdH07XG4gMTY4Olx0XG4gMTY5Olx0c3RhdGljIGlubGluZSBzNjQgcmVnX3NtaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiAxNzA6XHR7XG4gMTcxOlx0XHRyZXR1cm4gY251bTY0X3NtaW4ocmVnLVx1MDAzZXI2NCk7XG4gMTcyOlx0fVxuIDE3MzpcdFxuIDE3NDpcdHN0YXRpYyBpbmxpbmUgczY0IHJlZ19zbWF4KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4gMTc1Olx0e1xuIDE3NjpcdFx0cmV0dXJuIGNudW02NF9zbWF4KHJlZy1cdTAwM2VyNjQpO1xuIDE3NzpcdH1cbiAxNzg6XHRcbiAxNzk6XHRzdGF0aWMgaW5saW5lIHU2NCByZWdfdW1pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIDE4MDpcdHtcbiAxODE6XHRcdHJldHVybiBjbnVtNjRfdW1pbihyZWctXHUwMDNlcjY0KTtcbiAxODI6XHR9XG4gMTgzOlx0XG4gMTg0Olx0c3RhdGljIGlubGluZSB1NjQgcmVnX3VtYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiAxODU6XHR7XG4gMTg2Olx0XHRyZXR1cm4gY251bTY0X3VtYXgocmVnLVx1MDAzZXI2NCk7XG4gMTg3Olx0fVxuIDE4ODpcdFxuIDE4OTpcdHN0YXRpYyBpbmxpbmUgczMyIHJlZ19zMzJfbWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4gMTkwOlx0e1xuIDE5MTpcdFx0cmV0dXJuIGNudW0zMl9zbWluKHJlZy1cdTAwM2VyMzIpO1xuIDE5MjpcdH1cbiAxOTM6XHRcbiAxOTQ6XHRzdGF0aWMgaW5saW5lIHMzMiByZWdfczMyX21heChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIDE5NTpcdHtcbiAxOTY6XHRcdHJldHVybiBjbnVtMzJfc21heChyZWctXHUwMDNlcjMyKTtcbiAxOTc6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTMyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBCUEYgdmVyaWZpZXIgcGVyc3BlY3RpdmUuKiogSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBmb3VuZC4KCkluaXRpYWxseSwgSSBsb29rZWQgYXQgdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgZGVmaW5pdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5vdGVkIHRoZSBmaWVsZCBvcmRlcjogYGlkYCwgYHBhcmVudF9pZGAsIGBmcmFtZW5vYCwgYW5kIGBwcmVjaXNlYC4gVGhlIGV4aXN0aW5nIGByZWdzX2V4YWN0YCBmdW5jdGlvbiwgYXMgaXQgd2FzICpiZWZvcmUqIHRoZSBwYXRjaCwgd2FzIGZsYXdlZC4gSXQgdXNlZCBgbWVtY21wYCB1cCB0byBgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKWAgdG8gY29tcGFyZSByZWdpc3RlciBzdGF0ZXMsIHRoZW4gc2VwYXJhdGVseSBjaGVja2VkIGBpZGAgYW5kIGBwYXJlbnRfaWRgIHdpdGggYGNoZWNrX2lkc2AuIFRoaXMgbWVhbnQgYGZyYW1lbm9gIHdhcyAqZW50aXJlbHkqIHNraXBwZWQgZHVyaW5nIHRoZSBjb21wYXJpc29uLiBUaGUgZnVuY3Rpb24gZXNzZW50aWFsbHkgcmV0dXJuZWQgdHJ1ZSBpZiBhbGwgdGhlIGZpZWxkcyAqYmVmb3JlKiBgZnJhbWVub2Agd2VyZSB0aGUgc2FtZS4KClRoZSBwcm9ibGVtIHF1aWNrbHkgYmVjYW1lIGNsZWFyLiAgYFBUUl9UT19TVEFDS2Agc3BlY2lmaWNhbGx5IGNoZWNrZWQgYHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AsIGJ1dCBvdGhlciBwYXRocywgc3VjaCBhcyB3aGVuIGBleGFjdCA9PSBFWEFDVGAsIGNhbGxlZCBgcmVnc19leGFjdGAgZGlyZWN0bHksIHRodXMgYnlwYXNzaW5nIHRoZSBjaGVjayBvZiBmcmFtZW5vLiAgVGhpcyBvbWlzc2lvbiBhbGxvd2VkIHJlZ2lzdGVycyBwb2ludGluZyB0byAqZGlmZmVyZW50KiBzdGFjayBmcmFtZXMgKGUuZy4sIGNhbGxlciB2cy4gY2FsbGVlKSB0byBiZSBjb25zaWRlcmVkIGlkZW50aWNhbCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBidWcgaW4gdGhlIGFuYWx5c2lzLiBGdXJ0aGVybW9yZSwgc3BpbGxlZCByZWdpc3RlcnMgb24gdGhlIHN0YWNrIHdvdWxkIGFsc28gYnlwYXNzIHRoZSBleHBsaWNpdCBgZnJhbWVub2AgY2hlY2sgaW4gdGhlIGBQVFJfVE9fU1RBQ0tgIGNhc2Ugd2hlbiBgZXhhY3QgPT0gRVhBQ1RgLCBsZWFkaW5nIHRvIHRoZSBzYW1lIGluY29ycmVjdCBjb21wYXJpc29uLiBUaGUgc2VsZnRlc3QgZGVtb25zdHJhdGVkIHRoaXMgdmVyeSBwcm9ibGVtLCB1c2luZyBhIHNwaWxsZWQgcG9pbnRlciB0byBjb21wYXJlIGRpZmZlcmVudCBmcmFtZXMsIHdoaWNoIHRoZSBicm9rZW4gbG9naWMgd291bGQgaW5jb3JyZWN0bHkgZGVlbSBlcXVhbC4KClRoZSBwYXRjaCYjMzk7cyBmaXgsIG1vdmluZyBgcm9sZC0mZ3Q7ZnJhbWVubyA9PSByY3VyLSZndDtmcmFtZW5vYCBpbnRvIGByZWdzX2V4YWN0YCwgY29ycmVjdGx5IGFkZHJlc3NlZCB0aGlzIG9taXNzaW9uLCBlbnN1cmluZyAqYWxsKiBmaWVsZHMgYXJlIGNvbXBhcmVkIHdoZW4gYGV4YWN0ID09IEVYQUNUYC4KCk5vdywgSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIHRoZSBwYXRjaCYjMzk7cyBwb3RlbnRpYWwgaW1wYWN0LiBUaGUgY3JpdGljYWwgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPwoKSSBuZWVkIHRvIGFwcGx5IHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyB0aGlzIHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLCBvciBtb2RpZnkgYm91bmRzIGNoZWNrcyB0byBhbGxvdyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/CgpBbmQgYSBrZXkgcG9pbnQganVzdCBoaXQgbWU6IEkgbmVlZCB0byB2ZXJpZnkgaG93IGBmcmFtZW5vYCBpdHNlbGYgaXMgKmluaXRpYWxpemVkKiB3aXRoaW4gYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBkdXJpbmcgQlBGIHZlcmlmaWVyIG9wZXJhdGlvbnMuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZyYW1lbm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz00Nz1zdHJ1Y3QgYnBmX2RpYWdfbW9kX3RhcmdldCB7XG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTU3LVx0fTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzo1ODpcdHU4IGZyYW1lbm87XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNTktXHR1OCBraW5kO1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy02MS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzo2MjpzdGF0aWMgc3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgZGlhZ19yZWdfdGFyZ2V0KHUzMiBmcmFtZV9pZCwgdTggZnJhbWVubywgdTggcmVnbm8pXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjMte1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy02NS1cdFx0LmZyYW1lX2lkID0gZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NjY6XHRcdC5mcmFtZW5vID0gZnJhbWVubyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy02Ny1cdFx0LmtpbmQgPSBCUEZfRElBR19NT0RfVEFSR0VUX1JFRyxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNzEtXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NzI6c3RhdGljIHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0IGRpYWdfc3RhY2tfYXJnX3RhcmdldCh1MzIgZnJhbWVfaWQsIHU4IGZyYW1lbm8sIHU4IHNsb3QpXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNzMte1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy03NS1cdFx0LmZyYW1lX2lkID0gZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NzY6XHRcdC5mcmFtZW5vID0gZnJhbWVubyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy03Ny1cdFx0LmtpbmQgPSBCUEZfRElBR19NT0RfVEFSR0VUX1NUQUNLX0FSRyxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtODEtXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6ODI6c3RhdGljIHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0IGRpYWdfc3RhY2tfc2xvdF90YXJnZXQodTMyIGZyYW1lX2lkLCB1OCBmcmFtZW5vLCB1MTYgc3BpKVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTgzLXtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtODUtXHRcdC5mcmFtZV9pZCA9IGZyYW1lX2lkLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjg2Olx0XHQuZnJhbWVubyA9IGZyYW1lbm8sXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtODctXHRcdC5raW5kID0gQlBGX0RJQUdfTU9EX1RBUkdFVF9TVEFDS19TTE9ULFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy05MS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzo5MjpzdGF0aWMgc3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgZGlhZ19zdGFja19yYW5nZV90YXJnZXQodTMyIGZyYW1lX2lkLCB1OCBmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTkzLVx0XHRcdFx0XHRcdFx0ICBzMTYgbWluX29mZiwgczE2IG1heF9vZmYpXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk2LVx0XHQuZnJhbWVfaWQgPSBmcmFtZV9pZCxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzo5NzpcdFx0LmZyYW1lbm8gPSBmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk4LVx0XHQua2luZCA9IEJQRl9ESUFHX01PRF9UQVJHRVRfU1RBQ0tfUkFOR0UsXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1ND1zdHJ1Y3QgYnBmX2RpYWdfaGlzdG9yeV9vcHRzIHtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU2LVx0dTMyIGZyYW1lX2lkO1xua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE1NzpcdHUzMiBmcmFtZW5vO1xua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1OC1cdGludCByZWdubztcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9OTA2PXZvaWQgYnBmX2RpYWdfcmVnaXN0ZXJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCByZWdubyxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtOTEyLVx0XHQuZnJhbWVfaWQgPSBmcmFtZS1cdTAwM2VkaWFnX2ZyYW1lX2lkLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjkxMzpcdFx0LmZyYW1lbm8gPSBmcmFtZS1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTkxNC1cdFx0LnJlZ25vID0gcmVnbm8sXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTk5NT12b2lkIGJwZl9kaWFnX2NhbGxfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCBhcmdubywgaW50IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMDAxLVx0XHQuZnJhbWVfaWQgPSBmcmFtZS1cdTAwM2VkaWFnX2ZyYW1lX2lkLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjEwMDI6XHRcdC5mcmFtZW5vID0gZnJhbWUtXHUwMDNlZnJhbWVubyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMDAzLVx0fTtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTIzMj12b2lkIGJwZl9kaWFnX2ludmFsaWRfZGVyZWYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgcmVnbm8sXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEyMzktXHRcdC5mcmFtZV9pZCA9IGZyYW1lLVx1MDAzZWRpYWdfZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTI0MDpcdFx0LmZyYW1lbm8gPSBmcmFtZS1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEyNDEtXHRcdC5yZWdubyA9IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xMjk5PXZvaWQgYnBmX2RpYWdfdW5yZWFkYWJsZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgcmVnbm8pXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzMDQtXHRcdC5mcmFtZV9pZCA9IGZyYW1lLVx1MDAzZWRpYWdfZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTMwNTpcdFx0LmZyYW1lbm8gPSBmcmFtZS1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzMDYtXHRcdC5yZWdubyA9IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMzEyLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjEzMTM6XHR0YXJnZXQgPSBkaWFnX3JlZ190YXJnZXQob3B0cy5mcmFtZV9pZCwgb3B0cy5mcmFtZW5vLCByZWdubyk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTMxNC1cdGZvciAoaSA9IGxvZyA/IGxvZy1cdTAwM2VjbnQgOiAwOyBpIFx1MDAzZSAwOyBpLS0pIHtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTM3Nz12b2lkIGJwZl9kaWFnX3N0YWNrX2FyZ191bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgbmFyZ3MsXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzODQtXHRcdC5mcmFtZV9pZCA9IGZyYW1lLVx1MDAzZWRpYWdfZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTM4NTpcdFx0LmZyYW1lbm8gPSBmcmFtZS1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzODYtXHRcdC5zdGFja19hcmdfc2xvdCA9IHN0YWNrX2FyZ19zbG90LFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNDU1PXN0YXRpYyBib29sIGRpYWdfbW9kX2luc25fb3JpZ2luKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTQ2NC1cdCAgICBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTU9WIFx1MDAyNlx1MDAyNiBCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNDY1Olx0XHQqb3JpZ2luID0gZGlhZ19yZWdfdGFyZ2V0KHRhcmdldC1cdTAwM2VmcmFtZV9pZCwgdGFyZ2V0LVx1MDAzZWZyYW1lbm8sIGluc24tXHUwMDNlc3JjX3JlZyk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTQ2Ni1cdFx0cmV0dXJuIHRydWU7XG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE0NzQtXHRzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlZnJhbWVbZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VjdXJmcmFtZV07XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTQ3NTpcdCpvcmlnaW4gPSBkaWFnX3JlZ190YXJnZXQoc3RhdGUtXHUwMDNlZGlhZ19mcmFtZV9pZCwgc3RhdGUtXHUwMDNlZnJhbWVubywgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNDc2LVx0cmV0dXJuIHRydWU7XG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1NDg9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICp0YXJnZXRfdG9fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1NTMtXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTU1NDpcdHN0YXRlID0gdGFyZ2V0LVx1MDAzZWZyYW1lbm8gXHUwMDNjPSB2c3RhdGUtXHUwMDNlY3VyZnJhbWUgPyB2c3RhdGUtXHUwMDNlZnJhbWVbdGFyZ2V0LVx1MDAzZWZyYW1lbm9dIDogTlVMTDtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNTU1LVxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNTc5PXN0YXRpYyBib29sIHJlZ190b190YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU5NC1cdFx0aWYgKGFkZHIgXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2MgZW5kKSB7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTU5NTpcdFx0XHQqdGFyZ2V0ID0gZGlhZ19yZWdfdGFyZ2V0KHN0YXRlLVx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVx1MDAzZWZyYW1lbm8sXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU5Ni1cdFx0XHRcdFx0XHQgIHJlZyAtIHN0YXRlLVx1MDAzZXJlZ3MpO1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjAyLVx0XHRpZiAoc3RhdGUtXHUwMDNlb3V0X3N0YWNrX2FyZ19jbnQgXHUwMDI2XHUwMDI2IGFkZHIgXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2MgZW5kKSB7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTYwMzpcdFx0XHQqdGFyZ2V0ID0gZGlhZ19zdGFja19hcmdfdGFyZ2V0KHN0YXRlLVx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVx1MDAzZWZyYW1lbm8sXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYwNC1cdFx0XHRcdFx0XHRcdHJlZyAtIHN0YXRlLVx1MDAzZXN0YWNrX2FyZ19yZWdzKTtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYxMi1cdFx0XHQgICAgICBzaXplb2YoKnN0YXRlLVx1MDAzZXN0YWNrKTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNjEzOlx0XHRcdCp0YXJnZXQgPSBkaWFnX3N0YWNrX3Nsb3RfdGFyZ2V0KHN0YXRlLVx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVx1MDAzZWZyYW1lbm8sIHNwaSk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYxNC1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTY2Nj12b2lkIGJwZl9kaWFnX3JlY29yZF9zY3J1Yl9zdGFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjcwLVx0ZGlhZ19yZWNvcmRfbW9kKGVudiwgZW52LVx1MDAzZWluc25faWR4LFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2NzE6XHRcdFx0ZGlhZ19zdGFja19yYW5nZV90YXJnZXQoc3RhdGUtXHUwMDNlZGlhZ19mcmFtZV9pZCwgc3RhdGUtXHUwMDNlZnJhbWVubywgbWluX29mZiwgbWF4X29mZiksXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTY3Mi1cdFx0XHRyZWFzb24sIE5VTEwsIE5VTEwsIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNzUwPXN0YXRpYyBib29sIGRpYWdfdGFyZ2V0X21hdGNoZXMoY29uc3Qgc3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgKmV2ZW50X3RhcmdldCxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTc1NC1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNzU1Olx0aWYgKGV2ZW50X3RhcmdldC1cdTAwM2VmcmFtZV9pZCAhPSB0YXJnZXQtXHUwMDNlZnJhbWVfaWQgfHwgZXZlbnRfdGFyZ2V0LVx1MDAzZWZyYW1lbm8gIT0gdGFyZ2V0LVx1MDAzZWZyYW1lbm8pXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTc1Ni1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNzgwPXN0YXRpYyB2b2lkIGRpYWdfYnVpbGRfbGluZWFnZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2RpYWdfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE3OTAtXHRpZiAob3B0cy1cdTAwM2VzY29wZSA9PSBCUEZfRElBR19ISVNUT1JZX1NDT1BFX1JFRylcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNzkxOlx0XHR0YXJnZXQgPSBkaWFnX3JlZ190YXJnZXQob3B0cy1cdTAwM2VmcmFtZV9pZCwgb3B0cy1cdTAwM2VmcmFtZW5vLCBvcHRzLVx1MDAzZXJlZ25vKTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNzkyLVx0ZWxzZSBpZiAob3B0cy1cdTAwM2VzY29wZSA9PSBCUEZfRElBR19ISVNUT1JZX1NDT1BFX1NUQUNLX0FSRylcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNzkzOlx0XHR0YXJnZXQgPSBkaWFnX3N0YWNrX2FyZ190YXJnZXQob3B0cy1cdTAwM2VmcmFtZV9pZCwgb3B0cy1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE3OTQtXHRcdFx0XHRcdCAgICAgICBvcHRzLVx1MDAzZXN0YWNrX2FyZ19zbG90KTtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTk1Mj12b2lkIGJwZl9kaWFnX21lbV9ib3VuZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgcmVnbm8sXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE5NTktXHRcdC5mcmFtZV9pZCA9IGZyYW1lLVx1MDAzZWRpYWdfZnJhbWVfaWQsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTk2MDpcdFx0LmZyYW1lbm8gPSBmcmFtZS1cdTAwM2VmcmFtZW5vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE5NjEtXHRcdC5yZWdubyA9IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMDE9c3RhdGljIHN0cnVjdCBmdW5jX2luc3RhbmNlICpsb29rdXBfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDItXHRcdFx0XHRcdCAgICAgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAzOlx0XHRcdFx0XHQgICAgIHUzMiBmcmFtZW5vKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwOC1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDk6XHRzdWJwcm9nX3N0YXJ0ID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdC1cdTAwM2VmcmFtZVtmcmFtZW5vXS1cdTAwM2VzdWJwcm9nbm9dLnN0YXJ0O1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMDpcdGNhbGxzaXRlID0gZnJhbWVubyBcdTAwM2UgMCA/IHN0LVx1MDAzZWZyYW1lW2ZyYW1lbm9dLVx1MDAzZWNhbGxzaXRlIDogc3VicHJvZ19zdGFydDtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTEtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTEyOlx0Zm9yIChkZXB0aCA9IGZyYW1lbm87IDsgZGVwdGgtLSkge1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMy1cdFx0a2V5ID0gZGVwdGggXHUwMDNlIDAgPyBjYWxsc2l0ZSA6IHN1YnByb2dfc3RhcnQ7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTMwNj1zdGF0aWMgdm9pZCB1cGRhdGVfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlKVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zMjktXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MzMwOnN0YXRpYyBib29sIGlzX2xpdmVfYmVmb3JlKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGluc25faWR4LCB1MzIgZnJhbWVubywgdTMyIGhhbGZfc3BpKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzMS17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzMy1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozMzQ6XHRtYXNrcyA9IGdldF9mcmFtZV9tYXNrcyhpbnN0YW5jZSwgZnJhbWVubywgaW5zbl9pZHgpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzNS1cdHJldHVybiBtYXNrcyBcdTAwMjZcdTAwMjYgc3Bpc190ZXN0X2JpdChtYXNrcy1cdTAwM2VsaXZlX2JlZm9yZSwgaGFsZl9zcGkpO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0zMzg9aW50IGJwZl9saXZlX3N0YWNrX3F1ZXJ5X2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM1OC1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozNTk6Ym9vbCBicGZfc3RhY2tfc2xvdF9hbGl2ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnJhbWVubywgdTMyIGhhbGZfc3BpKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM2MC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM3Ni1cdGN1cl9kZWx0YSA9IChpbnQpY3VyZnJhbWVfaW5zdGFuY2UtXHUwMDNlZGVwdGggLSAoaW50KXEtXHUwMDNlY3VyZnJhbWU7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6Mzc3Olx0cmVsID0gZnJhbWVubyAmIzQzOyBjdXJfZGVsdGE7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzc4LVx0aWYgKHJlbCBcdTAwM2M9IGN1cmZyYW1lX2luc3RhbmNlLVx1MDAzZWRlcHRoKVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zODMtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6Mzg0Olx0Zm9yIChpID0gZnJhbWVubzsgaSBcdTAwM2MgcS1cdTAwM2VjdXJmcmFtZTsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zODUtXHRcdGluc3RhbmNlID0gcS1cdTAwM2VpbnN0YW5jZXNbaV07XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM4Ny1cdFx0XHRyZXR1cm4gdHJ1ZTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozODg6XHRcdC8qIE1hcCBhY3R1YWwgZnJhbWVubyB0byBmcmFtZSBpbmRleCB3aXRoaW4gdGhpcyBpbnN0YW5jZSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTM4OS1cdFx0ZGVsdGEgPSAoaW50KWluc3RhbmNlLVx1MDAzZWRlcHRoIC0gKGludClpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjM5MDpcdFx0cmVsID0gZnJhbWVubyAmIzQzOyBkZWx0YTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zOTEtXHRcdGlmIChyZWwgXHUwMDNlIGluc3RhbmNlLVx1MDAzZWRlcHRoKVxuLS1cbmtlcm5lbC9icGYvbG9nLmM9NjI0PXN0YXRpYyB2b2lkIHByaW50X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvbG9nLmMtNjQyLVx0aWYgKHQgPT0gUFRSX1RPX1NUQUNLKSB7XG5rZXJuZWwvYnBmL2xvZy5jOjY0MzpcdFx0aWYgKHN0YXRlLVx1MDAzZWZyYW1lbm8gIT0gcmVnLVx1MDAzZWZyYW1lbm8pXG5rZXJuZWwvYnBmL2xvZy5jOjY0NDpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7WyVkXVwmIzM0OywgcmVnLVx1MDAzZWZyYW1lbm8pO1xua2VybmVsL2JwZi9sb2cuYy02NDUtXHRcdGlmICh0bnVtX2lzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmKSkge1xuLS1cbmtlcm5lbC9icGYvbG9nLmM9NzAwPXZvaWQgcHJpbnRfdmVyaWZpZXJfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxua2VybmVsL2JwZi9sb2cuYzo3MDE6XHRcdFx0ICB1MzIgZnJhbWVubywgYm9vbCBwcmludF9hbGwpXG5rZXJuZWwvYnBmL2xvZy5jLTcwMi17XG5rZXJuZWwvYnBmL2xvZy5jOjcwMzpcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSB2c3RhdGUtXHUwMDNlZnJhbWVbZnJhbWVub107XG5rZXJuZWwvYnBmL2xvZy5jLTcwNC1cdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4tLVxua2VybmVsL2JwZi9sb2cuYy03MDYtXG5rZXJuZWwvYnBmL2xvZy5jOjcwNzpcdGlmIChzdGF0ZS1cdTAwM2VmcmFtZW5vKVxua2VybmVsL2JwZi9sb2cuYzo3MDg6XHRcdHZlcmJvc2UoZW52LCBcJiMzNDsgZnJhbWUlZDpcJiMzNDssIHN0YXRlLVx1MDAzZWZyYW1lbm8pO1xua2VybmVsL2JwZi9sb2cuYy03MDktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfQlBGX1JFRzsgaSYjNDM7JiM0MzspIHtcbi0tXG5rZXJuZWwvYnBmL2xvZy5jPTgwMz12b2lkIHByaW50X2luc25fc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxua2VybmVsL2JwZi9sb2cuYzo4MDQ6XHRcdCAgICAgIHUzMiBmcmFtZW5vKVxua2VybmVsL2JwZi9sb2cuYy04MDUte1xuLS1cbmtlcm5lbC9icGYvbG9nLmMtODEyLVx0fVxua2VybmVsL2JwZi9sb2cuYzo4MTM6XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHZzdGF0ZSwgZnJhbWVubywgZmFsc2UpO1xua2VybmVsL2JwZi9sb2cuYy04MTQtfVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NDg4PXN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00OTQtXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTU6XHQgICAgICAgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVubztcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDk2LX1cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTExMDk9c3RhdGljIGJvb2wgc3RhdGVzX21heWJlX2xvb3Bpbmcoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTEyMS1cdFx0aWYgKG1lbWNtcChcdTAwMjZmb2xkLVx1MDAzZXJlZ3NbaV0sIFx1MDAyNmZjdXItXHUwMDNlcmVnc1tpXSxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTEyMjpcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgZnJhbWVubykpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTIzLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjI3MT1zdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjgzLVx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfRlApO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIyODQ6XHRyZWdzW0JQRl9SRUdfRlBdLmZyYW1lbm8gPSBzdGF0ZS1cdTAwM2VmcmFtZW5vO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIyODUtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMjk2PXN0YXRpYyB2b2lkIGluaXRfZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyOTctXHRcdFx0ICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjI5ODpcdFx0XHQgICAgaW50IGNhbGxzaXRlLCBpbnQgZnJhbWVubywgaW50IHN1YnByb2dubylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjk5LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMzAwLVx0c3RhdGUtXHUwMDNlY2FsbHNpdGUgPSBjYWxsc2l0ZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMzAxOlx0c3RhdGUtXHUwMDNlZnJhbWVubyA9IGZyYW1lbm87XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjMwMi1cdGJwZl9kaWFnX2luaXRfZnJhbWUoZW52LCBzdGF0ZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIzMTA9c3RhdGljIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnB1c2hfYXN5bmNfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjM0NS1cdFx0XHRCUEZfTUFJTl9GVU5DIC8qIGNhbGxzaXRlICovLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIzNDY6XHRcdFx0MCAvKiBmcmFtZW5vIHdpdGhpbiB0aGlzIGNhbGxjaGFpbiAqLyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMzQ3LVx0XHRcdHN1YnByb2cgLyogc3VicHJvZyBudW1iZXIgd2l0aGluIHRoaXMgcHJvZyAqLyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMyNDg9c3RydWN0IGxpbmtlZF9yZWcge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMyNDk6XHR1OCBmcmFtZW5vO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNTAtXHR1bmlvbiB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMyNjI9c3RhdGljIHN0cnVjdCBsaW5rZWRfcmVnICpsaW5rZWRfcmVnc19wdXNoKHN0cnVjdCBsaW5rZWRfcmVncyAqcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI3My0gKiBQYWNrIG9uZSBoaXN0b3J5IGVudHJ5IGZvciBsaW5rZWQgcmVnaXN0ZXJzIGFzIDExIGJpdHMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzI3NDogKiAtIDQtYml0cyBmcmFtZW5vXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI3NS0gKiAtIDYtYml0cyBzcGlfb3JfcmVnXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMyNzg9c3RhdGljIHU2NCBsaW5rZWRfcmVnc19wYWNrKHN0cnVjdCBsaW5rZWRfcmVncyAqcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI4Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjg3Olx0XHR0bXAgfD0gZS1cdTAwM2VmcmFtZW5vO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTMyODgtXHRcdHRtcCB8PSBlLVx1MDAzZXNwaSBcdTAwM2NcdTAwM2MgTFJfU1BJX09GRjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzI5OT1zdGF0aWMgdm9pZCBsaW5rZWRfcmVnc191bnBhY2sodTY0IHZhbCwgc3RydWN0IGxpbmtlZF9yZWdzICpzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzA4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzMDk6XHRcdGUtXHUwMDNlZnJhbWVubyA9ICB2YWwgXHUwMDI2IExSX0ZSQU1FTk9fTUFTSztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzEwLVx0XHRlLVx1MDAzZXNwaSAgICAgPSAodmFsIFx1MDAzZVx1MDAzZSBMUl9TUElfT0ZGKSBcdTAwMjYgTFJfU1BJX01BU0s7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMzNDg9dm9pZCBicGZfYnRfc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgc3RydWN0IGJwZl9qbXBfaGlzdG9yeV9lbnRyeSAqaGlzdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM2MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMzYxOlx0XHRpZiAoKGUtXHUwMDNlaXNfcmVnIFx1MDAyNlx1MDAyNiBidF9pc19mcmFtZV9yZWdfc2V0KGJ0LCBlLVx1MDAzZWZyYW1lbm8sIGUtXHUwMDNlcmVnbm8pKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzNjI6XHRcdCAgICAoIWUtXHUwMDNlaXNfcmVnIFx1MDAyNlx1MDAyNiBidF9pc19mcmFtZV9zbG90X3NldChidCwgZS1cdTAwM2VmcmFtZW5vLCBlLVx1MDAzZXNwaSkpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM2My1cdFx0XHRzb21lX3ByZWNpc2UgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzc0LVx0XHRpZiAoZS1cdTAwM2Vpc19yZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzM3NTpcdFx0XHRicGZfYnRfc2V0X2ZyYW1lX3JlZyhidCwgZS1cdTAwM2VmcmFtZW5vLCBlLVx1MDAzZXJlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzc2LVx0XHRlbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzM3NzpcdFx0XHRicGZfYnRfc2V0X2ZyYW1lX3Nsb3QoYnQsIGUtXHUwMDNlZnJhbWVubywgZS1cdTAwM2VzcGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTMzNzgtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1MTk9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzUyOS1cdGludCBpbnNuX2ZsYWdzID0gSU5TTl9GX1NUQUNLX0FDQ0VTUztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTMwOlx0aW50IGhpc3Rfc3BpID0gc3BpLCBoaXN0X2ZyYW1lID0gc3RhdGUtXHUwMDNlZnJhbWVubztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTMxLVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNzk0PXN0YXRpYyBpbnQgbWFya19yZWdfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zODI4LVx0XHRpZiAoemVyb19zcGlsbF9tYXNrKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzgyOTpcdFx0XHRicGZfYnRfc2V0X2ZyYW1lX3Nsb3RfbWFzayhcdTAwMjZlbnYtXHUwMDNlYnQsIHB0cl9zdGF0ZS1cdTAwM2VmcmFtZW5vLCB6ZXJvX3NwaWxsX21hc2spO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM4MzAtXHRcdFx0cmV0dXJuIG1hcmtfY2hhaW5fcHJlY2lzaW9uX2JhdGNoKGVudiwgZW52LVx1MDAzZWN1cl9zdGF0ZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM4NjQ9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zODc1LVx0aW50IGluc25fZmxhZ3MgPSBJTlNOX0ZfU1RBQ0tfQUNDRVNTO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM4NzY6XHRpbnQgaGlzdF9zcGkgPSBzcGksIGhpc3RfZnJhbWUgPSByZWdfc3RhdGUtXHUwMDNlZnJhbWVubztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zODc3LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00MjQzPXN0YXRpYyBpbnQgbWFya19zdGFja19hcmdfcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBhcmdfaWR4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MjQ3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyNDg6XHRidF9zZXRfZnJhbWVfc3RhY2tfYXJnX3Nsb3QoXHUwMDI2ZW52LVx1MDAzZWJ0LCBjYWxsZXItXHUwMDNlZnJhbWVubywgc3BpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MjQ5LVx0cmV0dXJuIG1hcmtfY2hhaW5fcHJlY2lzaW9uX2JhdGNoKGVudiwgZW52LVx1MDAzZWN1cl9zdGF0ZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc3NDY9c3RhdGljIGludCBwcm9jZXNzX2l0ZXJfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sIGludCBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgzOS1cdFx0bWV0YS1cdTAwM2VpdGVyLnNwaSA9IHNwaTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODQwOlx0XHRtZXRhLVx1MDAzZWl0ZXIuZnJhbWVubyA9IHJlZy1cdTAwM2VmcmFtZW5vO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTc4NDEtXHRcdHVwZGF0ZV9yZWZfb2JqKFx1MDAyNm1ldGEtXHUwMDNlcmVmX29iaiwgXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc5MzM9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpnZXRfaXRlcl9mcm9tX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cl9zdCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzkzNS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzkzNjpcdGludCBpdGVyX2ZyYW1lbm8gPSBtZXRhLVx1MDAzZWl0ZXIuZnJhbWVubztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM3LVx0aW50IGl0ZXJfc3BpID0gbWV0YS1cdTAwM2VpdGVyLnNwaTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5Mzk6XHRyZXR1cm4gXHUwMDI2Y3VyX3N0LVx1MDAzZWZyYW1lW2l0ZXJfZnJhbWVub10tXHUwMDNlc3RhY2tbaXRlcl9zcGldLnNwaWxsZWRfcHRyO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTc5NDAtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04NjM2PXN0YXRpYyBpbnQgZ2V0X2NvbnN0YW50X21hcF9rZXkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODY4Ni1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjg2ODc6XHRicGZfYnRfc2V0X2ZyYW1lX3Nsb3QoXHUwMDI2ZW52LVx1MDAzZWJ0LCBrZXktXHUwMDNlZnJhbWVubywgc3BpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04Njg4LVx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb25fYmF0Y2goZW52LCBlbnYtXHUwMDNlY3VyX3N0YXRlKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTYzMj1zdGF0aWMgaW50IHNldHVwX2Z1bmNfZW50cnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2csIGludCBjYWxsc2l0ZSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTY2Mi1cdFx0XHRjYWxsc2l0ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NjYzOlx0XHRcdHN0YXRlLVx1MDAzZWN1cmZyYW1lICYjNDM7IDEgLyogZnJhbWVubyB3aXRoaW4gdGhpcyBjYWxsY2hhaW4gKi8sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTY2NC1cdFx0XHRzdWJwcm9nIC8qIHN1YnByb2cgbnVtYmVyIHdpdGhpbiB0aGlzIHByb2cgKi8pO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTE0PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwMjItXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYWxsZXI6XFxuXCYjMzQ7KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDAyMzpcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDI0LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGVlOlxcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzQ2PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MDgtXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtyZXR1cm5pbmcgZnJvbSBjYWxsZWU6XFxuXCYjMzQ7KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQwOTpcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVlLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDEwLVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7dG8gY2FsbGVyIGF0ICVkOlxcblwmIzM0OywgKmluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQxMTpcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDEyLVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDU3OD1zdGF0aWMgaW50IGNoZWNrX3JlZmVyZW5jZV9sZWFrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgZXhjZXB0aW9uX2V4aXQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNTg1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNTg2Olx0aWYgKCFleGNlcHRpb25fZXhpdCBcdTAwMjZcdTAwMjYgY3VyX2Z1bmMoZW52KS1cdTAwM2VmcmFtZW5vKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNTg3LVx0XHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY4MTI9c3RhdGljIHZvaWQgX19jb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBsaW5rZWRfcmVncyAqcmVnX3NldCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgxMzpcdFx0XHRcdCAgdTMyIGlkLCB1MzIgZnJhbWVubywgdTMyIHNwaV9vcl9yZWcsIGJvb2wgaXNfcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODE0LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MjEtXHRpZiAoZSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODIyOlx0XHRlLVx1MDAzZWZyYW1lbm8gPSBmcmFtZW5vO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODIzLVx0XHRlLVx1MDAzZWlzX3JlZyA9IGlzX3JlZztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY4Njc9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODc2LVx0XHRlID0gXHUwMDI2bGlua2VkX3JlZ3MtXHUwMDNlZW50cmllc1tpXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjg3NzpcdFx0cmVnID0gZS1cdTAwM2Vpc19yZWcgPyBcdTAwMjZ2c3RhdGUtXHUwMDNlZnJhbWVbZS1cdTAwM2VmcmFtZW5vXS1cdTAwM2VyZWdzW2UtXHUwMDNlcmVnbm9dXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY4Nzg6XHRcdFx0XHQ6IFx1MDAyNnZzdGF0ZS1cdTAwM2VmcmFtZVtlLVx1MDAzZWZyYW1lbm9dLVx1MDAzZXN0YWNrW2UtXHUwMDNlc3BpXS5zcGlsbGVkX3B0cjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjg3OS1cdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSB8fCByZWcgPT0ga25vd25fcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTQ1MD1zdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NzctXHRcdFx0QlBGX01BSU5fRlVOQyAvKiBjYWxsc2l0ZSAqLyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTQ3ODpcdFx0XHQwIC8qIGZyYW1lbm8gKi8sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NzktXHRcdFx0c3VicHJvZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzQyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZlcmlmaWVyIEJ1ZyBhbmQgaXRzIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aHJvdWdoIHRoZSBsb2dpYyBvZiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyByZWdpc3RlciBzdGF0ZSBjb21wYXJpc29ucy4gYHJlZ3NfZXhhY3RgIGlzIGEga2V5IGZ1bmN0aW9uIHVzZWQgd2hlbiB0aGUgdmVyaWZpZXIgbmVlZHMgdG8gZGV0ZXJtaW5lIGlmIHR3byByZWdpc3RlciBzdGF0ZXMgYXJlIGlkZW50aWNhbC4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGByZWdzX2V4YWN0YCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGl0IGNoZWNrcyBmb3IgZXF1YWxpdHkgb2YgdGhlIG1lbW9yeSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIgc3RhdGUgc3RydWN0cyB1cCB0byBhIGNlcnRhaW4gcG9pbnQgYW5kIHRoZW4gY2FsbHMgaGVscGVyIGZ1bmN0aW9ucyB0byBjaGVjayBJRHMuIFRoZSBpc3N1ZSBsaWVzIGluIGhvdyBgcmVnc19leGFjdGAgaXMgKnVzZWQqLgoKVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGFkZHJlc3NlcyBhIGNyaXRpY2FsIGJ1ZyBpbiBgcmVnc2FmZSgpYCByZWxhdGVkIHRvIHN0YWNrIHBvaW50ZXIgY29tcGFyaXNvbnMsIGVzcGVjaWFsbHkgd2hlbiBgZXhhY3RgIGlzIHNldCB0byBgRVhBQ1RgLiAgUHJldmlvdXNseSwgd2hlbiB0aGUgcmVnaXN0ZXIgcG9pbnRlZCB0byB0aGUgc3RhY2sgKGBQVFJfVE9fU1RBQ0tgKSwgYHJlZ3NhZmUoKWAgKnNob3VsZCogaGF2ZSBiZWVuIGNoZWNraW5nIHRoZSBgZnJhbWVub2AgZmllbGQgYXMgcGFydCBvZiB0aGUgZXF1YWxpdHkgY29tcGFyaXNvbi4gSG93ZXZlciwgd2hlbiBgZXhhY3RgIHdhcyBzZXQgdG8gYEVYQUNUYCwgc3VjaCBhcyBkdXJpbmcgbG9vcCBkZXRlY3Rpb24sIGl0IHdhcyBieXBhc3NpbmcgdGhlIGNoZWNrLCBsZWFkaW5nIHRvIGEgZmFsc2UgcG9zaXRpdmUuIFRoZSB2ZXJpZmllciB3YXMgaW5jb3JyZWN0bHkgY29uY2x1ZGluZyB0aGF0IHR3byByZWdpc3RlciBzdGF0ZXMgd2VyZSBlcXVpdmFsZW50IGV2ZW4gaWYgdGhleSBwb2ludGVkIHRvIGRpZmZlcmVudCBzdGFjayBmcmFtZXMgKGUuZy4sIGNhbGxlciB2cy4gY2FsbGVlIGZyYW1lcykuIFRoZSBzYW1lIGlzc3VlIHdhcyBoYXBwZW5pbmcgd2l0aCBzcGlsbGVkIHN0YWNrIHBvaW50ZXJzIChgU1RBQ0tfU1BJTExgKSwgYW5kIHRoZSBidWcgd2FzIHBlcm1pdHRpbmcgdGhlIHZlcmlmaWVyIHRvIHRyZWF0IGEgbG9vcCB3aXRoIGEgc3BpbGxlZCBzdGFjayBwb2ludGVyIHBvaW50aW5nIHRvIGEgZGlmZmVyZW50IGZyYW1lIGFzIGVxdWl2YWxlbnQgdG8gYW5vdGhlciBzdGF0ZSwgbGVhZGluZyB0byBpbmNvcnJlY3Qgc3RhdGUgcHJ1bmluZyBhbmQgbG9vcCBkZXRlY3Rpb24uCgpTbywgdGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCByZS1pbnRyb2R1Y2VzIHRoZSBtaXNzaW5nIGBmcmFtZW5vYCBjaGVjayB3aXRoaW4gdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbiBhbmQgcmVzdG9yZXMgdGhlIGAmYW1wOyZhbXA7IHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AgY2hlY2sgaW4gdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbi4gIEl0ICpzaG91bGQqIGhhdmUgYmVlbiB0aGVyZSBhbGwgYWxvbmcuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyAgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGByb2xkLSZndDtmcmFtZW5vYCBhbmQgYHJjdXItJmd0O2ZyYW1lbm9gIGFyZSBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGByZWdzX2V4YWN0YCBpcyBjYWxsZWQuIExvb2tpbmcgaW50byB3aGVyZSBgYnBmX3JlZ19zdGF0ZWAgc3RydWN0cyAod2hpY2ggY29udGFpbiB0aGUgYGZyYW1lbm9gIGZpZWxkKSBhcmUgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZXkgYXJlIGVpdGhlciBwYXJ0cyBvZiBgYnBmX2Z1bmNfc3RhdGVgIChmb3VuZCBpbiB0aGUgYHJlZ3NbTUFYX0JQRl9SRUddYCBhcnJheSBvciB0aGUgc3RhY2sgc2xvdHMsIGBzdGFja1tNQVhfQlBGX1NUQUNLIC8gQlBGX1JFR19TSVpFXS5zcGlsbGVkX3B0cmAgb3IgYHN0YWNrX2FyZ19yZWdzYCkuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIGBicGZfcmVnX3N0YXRlYCBpbnN0YW5jZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGluaXRpYWxpemF0aW9uIG9yIGNsZWFyaW5nIHBhdHRlcm5zIGZvciB0aGVzZSBzdHJ1Y3RzIHRvIHZlcmlmeSB0aGF0IHRoZSBgZnJhbWVub2AgZmllbGQgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGFjY2Vzc2VkLiAgSSYjMzk7bGwgc3RhcnQgZ3JlcHBpbmcgZm9yIGhvdyBgZnJhbWVub2AgaXMgaW5pdGlhbGl6ZWQgb3IgaG93IGBicGZfcmVnX3N0YXRlYCBpcyBjbGVhcmVkL2luaXRpYWxpemVkIHdpdGhpbiB0aGUgdmVyaWZpZXIgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ3NcXFtCUEZfUkVHX0ZQXFxdXFwuZnJhbWVubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTIyNzE9c3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjI4My1cdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHX0ZQKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMjg0Olx0cmVnc1tCUEZfUkVHX0ZQXS5mcmFtZW5vID0gc3RhdGUtXHUwMDNlZnJhbWVubztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjg1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczMTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBJbml0aWFsIFN0YXRlcyoqCgpPa2F5LCBzbyBiZWZvcmUgZGl2aW5nIGRlZXBlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbmFsIHN0YXRlcyBhcmUgc2V0IGNvcnJlY3RseS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgcm91dGluZSwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaW5pdF9mdW5jX3N0YXRlYCBhbmQgYGluaXRfcmVnX3N0YXRlYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEFyZSB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgc3RhdGUgYW5kIHRoZSByZWdpc3RlciB2YWx1ZXMgc2V0IHRvIHdoYXQgSSBleHBlY3QgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHBhcnRpY3VsYXIgb3BlcmF0aW9uPyBJdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgc3Vic2VxdWVudCBsb2dpYyB0byB3b3JrIGFzIGludGVuZGVkLCBhbmQgYW55IGVycm9ycyBoZXJlIHdpbGwgcmlwcGxlIHRocm91Z2ggdGhlIGV4ZWN1dGlvbi4gSXQmIzM5O3MgYSBxdWljayBzYW5pdHkgY2hlY2sgYnV0IGFuIGltcG9ydGFudCBvbmUgdG8gYXZvaWQgd2FzdGVkIHRpbWUgdHJhY2tpbmcgZG93biBkb3duc3RyZWFtIGlzc3Vlcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVzZSBpbml0aWFsaXphdGlvbiBzdGVwcyBhcmUgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjcwOlx0XG4yMjcxOlx0c3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjIyNzI6XHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKVxuMjI3MzpcdHtcbjIyNzQ6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gc3RhdGUtXHUwMDNlcmVncztcbjIyNzU6XHRcdGludCBpO1xuMjI3NjpcdFxuMjI3NzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9SRUc7IGkmIzQzOyYjNDM7KSB7XG4yMjc4Olx0XHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbaV0pO1xuMjI3OTpcdFx0fVxuMjI4MDpcdFxuMjI4MTpcdFx0LyogZnJhbWUgcG9pbnRlciAqL1xuMjI4MjpcdFx0cmVnc1tCUEZfUkVHX0ZQXS50eXBlID0gUFRSX1RPX1NUQUNLO1xuMjI4MzpcdFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfRlApO1xuMjI4NDpcdFx0cmVnc1tCUEZfUkVHX0ZQXS5mcmFtZW5vID0gc3RhdGUtXHUwMDNlZnJhbWVubztcbjIyODU6XHR9XG4yMjg2Olx0XG4yMjg3Olx0c3RhdGljIHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJldHZhbF9yYW5nZShzMzIgbWludmFsLCBzMzIgbWF4dmFsKVxuMjI4ODpcdHtcbjIyODk6XHRcdC8qXG4yMjkwOlx0XHQgKiByZXR1cm5fMzJiaXQgaXMgc2V0IHRvIGZhbHNlIGJ5IGRlZmF1bHQgYW5kIHNldCBleHBsaWNpdGx5XG4yMjkxOlx0XHQgKiBieSB0aGUgY2FsbGVyIHdoZW4gbmVjZXNzYXJ5LlxuMjI5MjpcdFx0ICovXG4yMjkzOlx0XHRyZXR1cm4gKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlKXsgbWludmFsLCBtYXh2YWwsIGZhbHNlIH07XG4yMjk0Olx0fVxuMjI5NTpcdFxuMjI5NjpcdHN0YXRpYyB2b2lkIGluaXRfZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjI5NzpcdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLFxuMjI5ODpcdFx0XHRcdCAgICBpbnQgY2FsbHNpdGUsIGludCBmcmFtZW5vLCBpbnQgc3VicHJvZ25vKVxuMjI5OTpcdHtcbjIzMDA6XHRcdHN0YXRlLVx1MDAzZWNhbGxzaXRlID0gY2FsbHNpdGU7XG4yMzAxOlx0XHRzdGF0ZS1cdTAwM2VmcmFtZW5vID0gZnJhbWVubztcbjIzMDI6XHRcdGJwZl9kaWFnX2luaXRfZnJhbWUoZW52LCBzdGF0ZSk7XG4yMzAzOlx0XHRzdGF0ZS1cdTAwM2VzdWJwcm9nbm8gPSBzdWJwcm9nbm87XG4yMzA0Olx0XHRzdGF0ZS1cdTAwM2VjYWxsYmFja19yZXRfcmFuZ2UgPSByZXR2YWxfcmFuZ2UoMCwgMCk7XG4yMzA1Olx0XHRpbml0X3JlZ19zdGF0ZShlbnYsIHN0YXRlKTtcbjIzMDY6XHRcdG1hcmtfdmVyaWZpZXJfc3RhdGVfc2NyYXRjaGVkKGVudik7XG4yMzA3Olx0fVxuMjMwODpcdFxuMjMwOTpcdC8qIFNpbWlsYXIgdG8gcHVzaF9zdGFjaygpLCBidXQgZm9yIGFzeW5jIGNhbGxiYWNrcyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE1NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGVjb2RpbmcgYGJwZl9tYXJrX3JlZ19ub3RfaW5pdGAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIGBicGZfbWFya19yZWdfbm90X2luaXRgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLCBsaWtlbHkgZUJQRiwgYW5kIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgc29ydCBvZiBpbml0aWFsaXphdGlvbiBvciByZWdpc3RlciB0cmFja2luZyBpc3N1ZS4gVGhlICYjMzQ7bm90IGluaXQmIzM0OyBwYXJ0IGlzIHRoZSBrZXkuIEl0IHNpZ25pZmllcyBhIHN0YXRlIHdoZXJlIGEgcGFydGljdWxhciBCUEYgcmVnaXN0ZXIgaGFzbiYjMzk7dCBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLiBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIGZvciB1bmRlZmluZWQgYmVoYXZpb3IgYW5kLCBmcmFua2x5LCBjcmFzaGVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSBzY2VuYXJpb3MuIElzIHRoaXMgcmVsYXRlZCB0byBhIHNwZWNpZmljIEJQRiBoZWxwZXIgZnVuY3Rpb24/IE9yIHBlcmhhcHMgYSBnZW5lcmFsIGlzc3VlIGluIHRoZSB2ZXJpZmllciB3aGVyZSBpdCYjMzk7cyBub3QgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCByZWdpc3RlciB1c2FnZSBlYXJseSBlbm91Z2g/IEkgaGF2ZSB0byByZW1lbWJlciB0aGUgdmVyaWZpZXIgaXMgKnN1cHBvc2VkKiB0byBjYXRjaCB0aGVzZSwgc28gdGhpcyBjb3VsZCBtZWFuOgoKKiAgICoqQSB2ZXJpZmllciBidWc6KiogQSBmbGF3IGluIHRoZSBzdGF0aWMgYW5hbHlzaXMgb2YgdGhlIEJQRiB2ZXJpZmllciBhbGxvd3MgdGhlIHByb2dyYW0gdG8gcGFzcyB2YWxpZGF0aW9uIHdpdGggdW5pbml0aWFsaXplZCByZWdpc3RlcnMuIFRoaXMgaXMgYmFkLCAqdmVyeSogYmFkLiBJdCBjb3VsZCBsZWFkIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBpZiBleHBsb2l0ZWQuCiogICAqKkVkZ2UgY2FzZXM6KiogUGVyaGFwcyBhIGNvbXBsZXggY29udHJvbCBmbG93IHBhdGggdGhhdCYjMzk7cyBieXBhc3NpbmcgdGhlIHZlcmlmaWVyJiMzOTtzIGNoZWNrcy4gVGhlIHZlcmlmaWVyIG1pZ2h0IHN0cnVnZ2xlIHdpdGggaW50cmljYXRlIGxvb3BzIG9yIGNvbmRpdGlvbmFsIGp1bXBzLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNhc2VzIGFyZSBoYW5kbGVkIGJ5IHRoZSB2ZXJpZmllciYjMzk7cyBhbmFseXNpcywgYW5kIHdoZXRoZXIgd2UmIzM5O3JlIHVzaW5nIGFueSB0cmlja3MgdGhhdCBtaWdodCB0aHJvdyBpdCBvZmYuCiogICAqKkNvbXBpbGVyIE9wdGltaXphdGlvbjoqKiBNaWdodCBhIGNlcnRhaW4gY29tcGlsZXIgb3B0aW1pemF0aW9uIGJlIGludHJvZHVjaW5nIHRoaXMgYnVnPyBUaGlzIGlzIGEgbGl0dGxlIGxlc3MgY29tbW9uLCBidXQgaXQmIzM5O3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlLgoqICAgKipEb2N1bWVudGF0aW9uIG9yIEFzc3VtcHRpb25zOioqIENvdWxkIHRoZXJlIGJlIHNvbWUgaW5jb3JyZWN0IGRvY3VtZW50YXRpb24sIG9yIGFuIHVud3JpdHRlbiBhc3N1bXB0aW9uIGluIHRoZSBjb2RlIHRoYXQmIzM5O3MgbGVhZCB0byB0aGUgYnVnPwoqICAgKipVc2VyIEVycm9yOioqIEluIGEgdXNlci1wcm92aWRlZCBCUEYgcHJvZ3JhbSwgc29tZSBiYWQgcHJvZ3JhbSBtaWdodCBiZSBnZW5lcmF0aW5nIHRoaXMgaXNzdWUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZSBpc3N1ZS4KCkkmIzM5O20gbm93IHRoaW5raW5nIGFib3V0IHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBBcmUgdGhlcmUgYW55IGNsdWVzIGluIHRoZSBzdGFjayB0cmFjZSwgb3IgYW55IHJlbGF0ZWQgZXJyb3IgbWVzc2FnZXM/IFdoYXQgQlBGIHByb2dyYW0gaXMgdHJpZ2dlcmluZyB0aGlzPyBVbmRlcnN0YW5kaW5nIHRoZSBwcm9ncmFtJiMzOTtzIHN0cnVjdHVyZSBhbmQgdGhlIHNwZWNpZmljIGluc3RydWN0aW9uIHNlcXVlbmNlIHdoZXJlIHRoaXMgZmFpbHVyZSBvY2N1cnMgaXMgY3J1Y2lhbC4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGRpZyBkZWVwIGludG8gdGhlIHZlcmlmaWVyJiMzOTtzIGNvZGUsIG9yIGEgZGlzYXNzZW1ibGVyIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgdGhpcy4gSSYjMzk7bSBsaWtlbHkgZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHJlZ2lzdGVyIHVzYWdlLCBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIHRoZSBmbG93IG9mIGRhdGEgd2l0aGluIHRoZSBCUEYgcHJvZ3JhbS4KCk92ZXJhbGwsIGBicGZfbWFya19yZWdfbm90X2luaXRgIGlzIGEgcmVkIGZsYWcuIEl0IHBvaW50cyB0byBhIGNyaXRpY2FsIGVycm9yLCBhbmQgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBuZWVkcyBpbW1lZGlhdGUgYW5kIGNhcmVmdWwgYXR0ZW50aW9uLiBJIG5lZWQgdG8gcmVwcm9kdWNlIHRoZSBpc3N1ZSwgYW5hbHl6ZSB0aGUgZmFpbGluZyBCUEYgcHJvZ3JhbSwgYW5kIHRoZW4gZmlndXJlIG91dCAqd2h5KiB0aGUgdmVyaWZpZXIgaXMgbGV0dGluZyB0aGlzIHNsaXAgdGhyb3VnaC4gVGhlbiwgdGltZSB0byBhcHBseSB0aGUgZml4IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGJwZl9tYXJrX3JlZ19ub3RfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTIyMTU9c3RhdGljIGludCBfX21hcmtfcmVnX3MzMl9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjM0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIyMzU6dm9pZCBicGZfbWFya19yZWdfbm90X2luaXQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjM2LVx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTU2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYnBmX21hcmtfcmVnX25vdF9pbml0YCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiByZWdpc3RlcnMgYXJlIGhhbmRsZWQgYW5kIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSBpbW1lZGlhdGVseSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byB0aGUgcHJldmVudGlvbiBvZiB1c2luZyB1bmluaXRpYWxpemVkIHJlZ2lzdGVycy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBhbmQgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgYW55IHJvYnVzdCBCUEYgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBhbmQgc2FmZXR5IG9mIHRoZSBwcm9ncmFtcyBydW5uaW5nIGluIHRoZSBCUEYgVk0uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiBpdHMgdXNlLCBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIG9wZXJhdGluZyBvbi4gSXMgaXQgY2hlY2tpbmcgcmVnaXN0ZXJzIGFmdGVyIHNwZWNpZmljIG9wZXJhdGlvbnM/IElzIGl0IGNhbGxlZCBkdXJpbmcgcHJvZ3JhbSBsb2FkaW5nIG9yIHZlcmlmaWNhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIHRyaWdnZXJlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBhbmQgc3RhcnQgbWFwcGluZyBpdCBvdXQgaW4gbXkgaGVhZCwgdGhpbmtpbmcgYWJvdXQgcG9zc2libGUgZWRnZSBjYXNlcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMzU6XHR2b2lkIGJwZl9tYXJrX3JlZ19ub3RfaW5pdChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjIzNjpcdFx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4yMjM3Olx0e1xuMjIzODpcdFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcbjIyMzk6XHRcdHJlZy1cdTAwM2V0eXBlID0gTk9UX0lOSVQ7XG4yMjQwOlx0fVxuMjI0MTpcdFxuMjI0MjpcdHN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4yMjQzOlx0XHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubyxcbjIyNDQ6XHRcdFx0XHQgICBlbnVtIGJwZl9yZWdfdHlwZSByZWdfdHlwZSxcbjIyNDU6XHRcdFx0XHQgICBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQsXG4yMjQ2Olx0XHRcdFx0ICAgZW51bSBicGZfdHlwZV9mbGFnIGZsYWcpXG4yMjQ3Olx0e1xuMjI0ODpcdFx0c3dpdGNoIChyZWdfdHlwZSkge1xuMjI0OTpcdFx0Y2FzZSBTQ0FMQVJfVkFMVUU6XG4yMjUwOlx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZWdubyk7XG4yMjUxOlx0XHRcdHJldHVybiAwO1xuMjI1MjpcdFx0Y2FzZSBQVFJfVE9fQlRGX0lEOlxuMjI1MzpcdFx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgcmVnbm8pO1xuMjI1NDpcdFx0XHRyZWdzW3JlZ25vXS50eXBlID0gUFRSX1RPX0JURl9JRCB8IGZsYWc7XG4yMjU1Olx0XHRcdHJlZ3NbcmVnbm9dLmJ0ZiA9IGJ0ZjtcbjIyNTY6XHRcdFx0cmVnc1tyZWdub10uYnRmX2lkID0gYnRmX2lkO1xuMjI1NzpcdFx0XHRpZiAodHlwZV9tYXlfYmVfbnVsbChmbGFnKSlcbjIyNTg6XHRcdFx0XHRyZWdzW3JlZ25vXS5pZCA9ICYjNDM7JiM0MztlbnYtXHUwMDNlaWRfZ2VuO1xuMjI1OTpcdFx0XHRyZXR1cm4gMDtcbjIyNjA6XHRcdGNhc2UgUFRSX1RPX01FTTpcbjIyNjE6XHRcdFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIHJlZ25vKTtcbjIyNjI6XHRcdFx0cmVnc1tyZWdub10udHlwZSA9IFBUUl9UT19NRU0gfCBmbGFnO1xuMjI2MzpcdFx0XHRyZWdzW3JlZ25vXS5tZW1fc2l6ZSA9IDA7XG4yMjY0Olx0XHRcdHJldHVybiAwO1xuMjI2NTpcdFx0ZGVmYXVsdDpcbjIyNjY6XHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCYjMzQ7dW5leHBlY3RlZCByZWdfdHlwZSAlZCBpbiAlc1xcblwmIzM0OywgcmVnX3R5cGUsIF9fZnVuY19fKTtcbjIyNjc6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yMjY4Olx0XHR9XG4yMjY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTgxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBfX21hcmtfcmVnX3Vua25vd25gIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgX19tYXJrX3JlZ191bmtub3duYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBTZWVpbmcgdGhpcyBuYW1lLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGl0cyByb2xlIGluIHJlZ2lzdGVyIG1hbmFnZW1lbnQgb3IgdHJhY2tpbmcuIFRoZSAmIzM0O3Vua25vd24mIzM0OyBwYXJ0IGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgYSBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHJlZ2lzdGVycyB3aG9zZSBzdGF0ZSBpc24mIzM5O3QgcHJlY2lzZWx5IGRlZmluZWQgYXQgYSBjZXJ0YWluIHBvaW50LCBvciBwZXJoYXBzIGluaXRpYWxpemF0aW9uLCBvciB3aXRoaW4gYSBzcGVjaWZpYyBjb250cm9sIGZsb3cuCgpJJiMzOTttIHRoaW5raW5nLCB0aGlzIGlzIHByb2JhYmx5IGltcGxlbWVudGVkIGF0IGEgZmFpcmx5IGxvdyBsZXZlbC4gV2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggdGhpbmdzIGxpa2Ugb3B0aW1pemluZyBjb21waWxlciBwYXNzZXMsIG9yIHBlcmhhcHMgZXZlbiBpbiB0aGUgY29yZSBvZiBhbiBlbXVsYXRvciBvciB2aXJ0dWFsIG1hY2hpbmUuIEdpdmVuIHRoZSBlbXBoYXNpcyBvbiAmIzM0O21hcmssJiMzNDsgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGZsYWcgb3IgYml0bWFzayB0byBiZSBtYW5pcHVsYXRlZCwgaW5kaWNhdGluZyB0aGF0IHRoZSByZWdpc3RlciYjMzk7cyBjb250ZW50cyBhcmUgaW5kZXRlcm1pbmF0ZSBvciBpbnZhbGlkIGZvciBhIHBhcnRpY3VsYXIgb3BlcmF0aW9uLgoKVGhlIGtleSBxdWVzdGlvbnMgaW1tZWRpYXRlbHkgZm9ybWluZyBpbiBteSBoZWFkIGFyZTogV2hhdCB0cmlnZ2VycyB0aGlzIG1hcmtpbmc/IElzIGl0IGR1ZSB0byBjb250cm9sIGZsb3cgcGF0aHMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBwZXJoYXBzIHJlZ2lzdGVyIGFsaWFzaW5nIHRoYXQgaXNuJiMzOTt0IGNsZWFubHkgaGFuZGxlZD8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciByZWdpc3RlciBhbmFseXNpcyB0ZWNobmlxdWVzIGxpa2UgbGl2ZW5lc3MgYW5hbHlzaXMgb3IgcmVnaXN0ZXIgYWxsb2NhdGlvbj8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgb2Z0ZW4sIGlzIGl0IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gQXJlIHRoZXJlIG90aGVyIHJlbGF0ZWQgcm91dGluZXMsIGUuZy4gYF9fdW5tYXJrX3JlZ19rbm93bmA/IElzIHRoZXJlIGEgY29udGV4dCBzd2l0Y2gsIG9yIGZ1bmN0aW9uIGNhbGwgaGVyZT8gSG93IGFyZSB0aGVzZSByZWdpc3RlcnMgbGF0ZXIgYmVpbmcgdXNlZD8gQXJlIHRoZXJlIHJ1bnRpbWUgY2hlY2tzPyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgZ2VuZXJhdGUgY29tcGlsZSB0aW1lIGVycm9ycz8gSXMgaXQgZ2VuZXJhdGluZyBhIHdhcm5pbmc/IFRoaXMgbXVzdCBiZSBpbXBvcnRhbnQuCgpJbiBzaG9ydCwgbXkgbWluZCBpcyBhbHJlYWR5IGZvcm11bGF0aW5nIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgYWNjdXJhY3ksIGFuZCBob3cgdGhpcyBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoYXRldmVyIHN5c3RlbSBvciB0b29sIHdlJiMzOTtyZSBleGFtaW5pbmcuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBlZGdlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIF9fbWFya19yZWdfdW5rbm93biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTc1Mz1zdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzcyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc3MzpzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzQtXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTkxPXZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyMDEtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjIwMjpzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjAzLVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUxMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyB6ZXJvIGluIG9uIHRob3NlIGNydWNpYWwgbGluZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGxpbmVzIDIyMDAtMjIzMC4gQmFzZWQgb24gcHJldmlvdXMgZGVidWdnaW5nIHNlc3Npb25zLCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBsb2dpYyByZXNwb25zaWJsZSBmb3IgWyoqKkluc2VydCBZb3VyIEtub3dsZWRnZSBvZiB3aGF0IHRob3NlIGxpbmVzIGxpa2VseSByZWxhdGUgdG8gaGVyZSwgZS5nLiwgcmVnaXN0ZXIgdmFsaWRhdGlvbiwgbG9vcCBkZXRlY3Rpb24sIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGhhbmRsaW5nLCBvciBhIHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24gcGF0dGVybioqKl0uIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMgYW5kIGNvZGUgZmxvdy4gSSB3YW50IHRvIGNoZWNrIGZvciBlZGdlIGNhc2VzLCBwb3RlbnRpYWwgZmxhd3MsIG9yIGV2ZW4ganVzdCBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gd29ya3Mgd2l0aGluIHRoZSB2ZXJpZmllciYjMzk7cyBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlIGltcGxlbWVudGF0aW9uIGFjY291bnRzIGZvciBhbGwgcmVsZXZhbnQgc2NlbmFyaW9zIGFuZCBwb3RlbnRpYWxseSBsb29rIHRvIG9wdGltaXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIwMDpcdCAqIGluaXRpYWxpemUgLnByZWNpc2UgYXMgdHJ1ZSB3aGVuIG5vdCBicGYgY2FwYWJsZS5cbjIyMDE6XHQgKi9cbjIyMDI6XHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjIyMDM6XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbjIyMDQ6XHR7XG4yMjA1Olx0XHRicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UocmVnKTtcbjIyMDY6XHRcdHJlZy1cdTAwM2VwcmVjaXNlID0gIWVudi1cdTAwM2VicGZfY2FwYWJsZTtcbjIyMDc6XHR9XG4yMjA4Olx0XG4yMjA5Olx0c3RhdGljIHZvaWQgbWFya19yZWdfdW5rbm93bihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjIxMDpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubylcbjIyMTE6XHR7XG4yMjEyOlx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWdzICYjNDM7IHJlZ25vKTtcbjIyMTM6XHR9XG4yMjE0Olx0XG4yMjE1Olx0c3RhdGljIGludCBfX21hcmtfcmVnX3MzMl9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjIxNjpcdFx0XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXG4yMjE3Olx0XHRcdFx0XHR1MzIgcmVnbm8sXG4yMjE4Olx0XHRcdFx0XHRzMzIgczMyX21pbixcbjIyMTk6XHRcdFx0XHRcdHMzMiBzMzJfbWF4KVxuMjIyMDpcdHtcbjIyMjE6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSByZWdzICYjNDM7IHJlZ25vO1xuMjIyMjpcdFxuMjIyMzpcdFx0cmVnX3NldF9zcmFuZ2UzMihyZWcsXG4yMjI0Olx0XHRcdFx0IG1heF90KHMzMiwgcmVnX3MzMl9taW4ocmVnKSwgczMyX21pbiksXG4yMjI1Olx0XHRcdFx0IG1pbl90KHMzMiwgcmVnX3MzMl9tYXgocmVnKSwgczMyX21heCkpO1xuMjIyNjpcdFx0cmVnX3NldF9zcmFuZ2U2NChyZWcsXG4yMjI3Olx0XHRcdFx0IG1heF90KHM2NCwgcmVnX3NtaW4ocmVnKSwgczMyX21pbiksXG4yMjI4Olx0XHRcdFx0IG1pbl90KHM2NCwgcmVnX3NtYXgocmVnKSwgczMyX21heCkpO1xuMjIyOTpcdFxuMjIzMDpcdFx0cmVnX2JvdW5kc19zeW5jKHJlZyk7XG4yMjMxOlx0XG4yMjMyOlx0XHRyZXR1cm4gcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soZW52LCByZWcsIFwmIzM0O3MzMl9yYW5nZVwmIzM0Oyk7XG4yMjMzOlx0fVxuMjIzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTM2OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlYCwgc3VtbWFyaXplZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqTXkgUGVyc3BlY3RpdmUgb24gYGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZWAqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2VgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgY29yZSBvZiBCUEYgcHJvZ3JhbSBhbmFseXNpcy4gVGhpcyBmdW5jdGlvbiwgb3Igd2hhdGV2ZXIgaXQgaXMsIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBjcnVjaWFsIGNvbXBvbmVudCBpbiBoYW5kbGluZyAqdW5jZXJ0YWludHkqIGR1cmluZyByZWdpc3RlciBzdGF0ZSB0cmFja2luZywgYSBwbGFjZSB3aGVyZSB0aGluZ3MgYXJlbiYjMzk7dCBwZXJmZWN0bHkgcHJlZGljdGFibGUuICBUaGUgJiMzNDt1bmtub3duJiMzNDsgcGFydCBpcyBjbGVhciDigJMgd2UmIzM5O3ZlIGVuY291bnRlcmVkIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBleGFjdCB2YWx1ZSBvZiBhIHJlZ2lzdGVyIGNhbiYjMzk7dCBiZSBwaW5uZWQgZG93biBkZWZpbml0aXZlbHkuIFRoaXMgY291bGQgYmUgZHVlIHRvIGEgY29tcGxleCBjb25kaXRpb25hbCBwYXRoLCBhbiBleHRlcm5hbCBpbnB1dCwgb3IgZXZlbiBqdXN0IHNvbWUgZGVsaWJlcmF0ZSBvYmZ1c2NhdGlvbiB3aXRoaW4gdGhlIHByb2dyYW0uCgpUaGUgJiMzNDtpbXByZWNpc2UmIzM0OyBsYWJlbCBpcyBhbHNvIHZlcnkgdGVsbGluZy4gSXQgc3VnZ2VzdHMgd2UgYXJlbiYjMzk7dCB0aHJvd2luZyBvdXIgaGFuZHMgdXAgaW4gdGhlIGFpciBhbmQgZ2l2aW5nIHVwIG9uIHRyYWNraW5nIHRoaXMgcmVnaXN0ZXIgZW50aXJlbHkuIEluc3RlYWQsIHdlJiMzOTtyZSBsaWtlbHkgYWRvcHRpbmcgYSBjb25zZXJ2YXRpdmUsIG92ZXItYXBwcm94aW1hdGluZyBzdHJhdGVneS4gIFdlJiMzOTtyZSBhY2tub3dsZWRnaW5nIHRoZSBhbWJpZ3VpdHksIHllcywgYnV0IHdlJiMzOTtyZSB0cnlpbmcgdG8gY29udGFpbiBpdC4gVGhlIHByb2dyYW0gbWlnaHQgY29udGludWUgdG8gb3BlcmF0ZSBvbiB0aGUgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkIHRvIHByb3ZpZGUgYSB2YWx1ZSBvciBjb25zdHJhaW50IGZvciBpdCwgZXZlbiBpZiB0aGF0IHZhbHVlIGlzIGV4dHJlbWVseSBicm9hZC4KCkZyb20gYSBwcmFjdGljYWwgYW5nbGUsIEkmIzM5O2QgYmV0IHRoaXMgZnVuY3Rpb24gaXMgZXNzZW50aWFsIGZvciBzYWZldHkgYW5kIGNvcnJlY3RuZXNzLiBUaGUgZ29hbCBpc24mIzM5O3QgbmVjZXNzYXJpbHkgdG8gKnNvbHZlKiBmb3IgdGhlIGV4YWN0IHJlZ2lzdGVyIHZhbHVlLCBidXQgdG8gcHJldmVudCBkYW5nZXJvdXMgYmVoYXZpb3IgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGxlYXZpbmcgdGhlIHZhbHVlIHVuaW5pdGlhbGl6ZWQgb3IgaW1wcm9wZXJseSBjb25zdHJhaW5lZC4gRm9yIGluc3RhbmNlLCB5b3UgY291bGQgc2VlIGl0IHVzZWQgdG86CgoqICAgKipGbGFnIGEgcmVnaXN0ZXIgZm9yIGEgbW9yZSBpbi1kZXB0aCBhbmFseXNpcyBsYXRlcjoqKiB0aGUgJiMzNDtpbXByZWNpc2UmIzM0OyBtYXJraW5nIGNvdWxkIHRyaWdnZXIgbW9yZSBzb3BoaXN0aWNhdGVkIHN5bWJvbGljIGV4ZWN1dGlvbiBpZiBlbmFibGVkCiogICAqKlByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uOioqIFRoaXMgbWlnaHQgbWVhbiBsaW1pdGluZyB3aGF0IG9wZXJhdGlvbnMgdGhhdCByZWdpc3RlciBjYW4gdGFrZSBwYXJ0IGluIGR1cmluZyBhIHNhZmV0eSBjaGVjaywgcHJldmVudGluZyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MsIG9yIGFyaXRobWV0aWMgb3ZlcmZsb3dzLgoqICAgKipFc3RhYmxpc2ggYSBib3VuZGFyeSBmb3IgdmFsdWUgcmFuZ2VzOioqIFRoaXMgcHJldmVudHMgdW5leHBlY3RlZCBiZWhhdmlvciwgYW5kIGFsbG93cyBmdXJ0aGVyIG9wZXJhdGlvbnMgb24gdGhlIHJlZ2lzdGVyIHdpdGggcmVhc29uYWJsZSBjb25zdHJhaW50cwoqICAgKipFbmZvcmNlIHNhZmV0eSBjb25zdHJhaW50czoqKiBQcmV2ZW50cyBtYWxpY2lvdXMgaW5wdXRzIHRvIHRoZSBCUEYgbWFjaGluZS4KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgY2FsbGVkIGZyb20gd2l0aGluIEJQRiB2ZXJpZmllci4gVGhlIHZlcmlmaWVyIGhhcyB0byBiZSBleHRyZW1lbHkgY2F1dGlvdXMgYW5kIGVyciBvbiB0aGUgc2lkZSBvZiBzYWZldHkgaW4gdGhlIGZhY2Ugb2YgdW5jZXJ0YWludHkuIFRoYXQmIzM5O3MgaXRzIGpvYiEgU28sIGBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2VgIGlzIGEgc21hbGwgYnV0IGNyaXRpY2FsIGNvZyBpbiB0aGF0IG1hY2hpbmUuIEl0IHByb3ZpZGVzIGEgbWVhbnMgdG8gYWNjb3VudCBmb3IgYW1iaWd1aXR5IHdoaWxlIHN0aWxsIG1haW50YWluaW5nIGNvbnRyb2wgb3ZlciB0aGUgcHJvZ3JhbSYjMzk7cyBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTg1Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjE4NjpcdFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcbjIxODc6XHRcdHJldHVybiAwO1xuMjE4ODpcdH1cbjIxODk6XHRcbjIxOTA6XHQvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xuMjE5MTpcdHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4yMTkyOlx0e1xuMjE5MzpcdFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcbjIxOTQ6XHRcdHJlZy1cdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xuMjE5NTpcdFx0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XG4yMTk2Olx0XHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xuMjE5NzpcdH1cbjIxOTg6XHRcbjIxOTk6XHQvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLFxuMjIwMDpcdCAqIGluaXRpYWxpemUgLnByZWNpc2UgYXMgdHJ1ZSB3aGVuIG5vdCBicGYgY2FwYWJsZS5cbjIyMDE6XHQgKi9cbjIyMDI6XHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjIyMDM6XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbjIyMDQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjc1CgkJCQkJCQlvdXRwdXQ6IDIyMwoJCQkJCQkJdGhvdWdodHM6IDE5NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQlBGIFZlcmlmaWVyIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGV2ZXJ5IGBicGZfcmVnX3N0YXRlYCBzdGFydHMgemVyb2VkIG91dCwgc28gYGZyYW1lbm9gIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQuIEkgc2VlIHRoYXQgYHN0YXRlc19tYXliZV9sb29waW5nYCBoYXMgYSBgbWVtY21wYCB1cCB0byBgZnJhbWVub2AsIHdoaWNoIHNlZW1zIHJlbGV2YW50LiBBbmQgSSBub3RpY2UgdGhhdCBgcmVnc19leGFjdGAgaXMgc3VwcG9zZWQgdG8gY2hlY2sgaWYgdHdvIHJlZ2lzdGVycyBhcmUgZXhhY3RseSB0aGUgc2FtZS4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgb25seSBjaGVja2VkIHVwIHRvIHRoZSBgaWRgIGZpZWxkLiBJdCBza2lwcGVkIGNvbXBhcmluZyBgZnJhbWVub2AgaW4gc29tZSBrZXkgc2l0dWF0aW9ucy4gRm9yIGV4YW1wbGUsIGluIGByZWdzYWZlYCBmb3IgYFBUUl9UT19TVEFDS2AsIGFuZCB3aGVuIGBleGFjdCA9PSBFWEFDVGAgZHVyaW5nIGxvb3AgZGV0ZWN0aW9uLiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50ISBUaGUgcGF0Y2ggYXBwZWFycyB0byBhZGRyZXNzIHRoZSBmYWN0IHRoYXQgdGhlIHZlcmlmaWVyIHdhcyBtaXNzaW5nIHRoZSBjaGVjayBmb3IgYGZyYW1lbm9gIGluIGByZWdzX2V4YWN0YC4gTm93LCBpdCBlbnN1cmVzIHRoYXQgc3RhY2sgZnJhbWUgZGlmZmVyZW5jZXMgYXJlIGNhdWdodCBjb3JyZWN0bHkuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgY291bGQgdGhpcyBidWcgb3IgdGhlIGZpeCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGtlcm5lbD8gV2hhdCB3YXMgdGhlIGJ1ZyBkb2luZz8gV2VsbCwgdGhlIHRlc3QgY2FzZSBwcm92aWRlZCBzaG93cyBhIHNjZW5hcmlvIHdoZXJlIGEgbG9vcCBtb2RpZmllcyB0aGUgc3RhY2sgZnJhbWUgb2YgYSBwb2ludGVyLiBUaGUgdmVyaWZpZXIgd2FzIGluY29ycmVjdGx5IHRoaW5raW5nIHRoZSBzdGF0ZXMgd2VyZSBlcXVhbCBvciBhbiBpbmZpbml0ZSBsb29wIHdoZW4gdGhleSB3ZXJlbiYjMzk7dC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIHZlcmlmaWVyIGdvdCB0aGlzIGNvbXBsZXRlbHkgd3JvbmcuIEl0IGNvdWxkIGhhdmUgZWl0aGVyIHJlamVjdGVkIHRoZSBjb2RlIGluY29ycmVjdGx5IG9yIGxldCBhIGxvb3AgcnVuIGZvcmV2ZXIgYnkgbWlzc2luZyB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uLiBCdXQgZG9lcyBpdCBsZWFrIGluZm8gb3IgZXhwb3NlIHVuaW5pdCBtZW0/CgpMZXQmIzM5O3MgY2FyZWZ1bGx5IGNoZWNrIHRoZSBLTVNBTiBndWlkZWxpbmVzLiBEb2VzIHRoZSBwYXRjaC4uLgoxLiAgSW50cm9kdWNlIGtlcm5lbCBzdHJ1Y3RzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vLCB0aGUgY29kZSBpcyBpbnRlcm5hbCB0byB0aGUgdmVyaWZpZXIuCjIuICBJbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYmVjYXVzZSBgZnJhbWVub2AgaXMgYWx3YXlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHN0cnVjdHMgYXJlIGNyZWF0ZWQuCjMuICBBbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vLgo0LiAgTW9kaWZ5IGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8gTm8uCgpBaCwgbm8sIHRoYXQgaXNuJiMzOTt0IHRoZSBjYXNlIGhlcmUuIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IGZpeGluZyBhIGxvZ2ljYWwgZXJyb3IsIG5vdCBpbnRyb2R1Y2luZyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBJdOKAmXMgYWJvdXQgZW5zdXJpbmcgdGhlICpjb3JyZWN0bmVzcyogb2YgY29tcGFyaXNvbnMsIG5vdCBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdHRlcm5zLiBUaGUgY29tcGFyaXNvbiBub3cgaW5jbHVkZXMgYHJvbGQtJmd0O2ZyYW1lbm8gPT0gcmN1ci0mZ3Q7ZnJhbWVub2AsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYWxsIHplcm8taW5pdGlhbGl6ZWQgYW5kIGFyZSBmdWxseSBpbml0aWFsaXplZCBhdCB0aGUgdGltZSB0aGUgY29tcGFyaXNvbnMgYXJlIG1hZGUuCgpUaGUgcGF0Y2ggaXRzZWxmIGp1c3QgaW1wcm92ZXMgdGhlIGxvb3AgZGV0ZWN0aW9uIGxvZ2ljLCB3aGljaCB1c2VzIGFscmVhZHktaW5pdGlhbGl6ZWQgZGF0YS4KClRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgaXQmIzM5O3MgYWxsIGJhc2VkIG9uIHplcm8taW5pdGlhbGl6ZWQgc3RydWN0dXJlcy4gVGhlIHBhdGNoIHNpbXBseSBlbnN1cmVzIHRoYXQgYGZyYW1lbm9gIGlzIGFjY291bnRlZCBmb3Igd2hlbiBjaGVja2luZyBpZiBzdGF0ZXMgYXJlIGlkZW50aWNhbC4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3Rpb24sIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGV0Yy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLiBTcGVjaWZpY2FsbHksIGl0IG1vdmVzIHRoZSBmcmFtZSBudW1iZXIgY2hlY2sgKHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm8pIGludG8gcmVnc19leGFjdCgpLCBlbnN1cmluZyB0aGF0IGV4YWN0IHJlZ2lzdGVyIHN0YXRlIGNvbXBhcmlzb25zIChzdWNoIGFzIGR1cmluZyBsb29wIGRldGVjdGlvbiBhbmQgc3BpbGxlZCBzdGFjayBwb2ludGVyIGNvbXBhcmlzb24pIGNvcnJlY3RseSBkaXN0aW5ndWlzaCBzdGFjayBwb2ludGVycyBmcm9tIGRpZmZlcmVudCBjYWxsIGZyYW1lcy5cblxuVGhlIHRvdWNoZWQgZmllbGRzIChyb2xkLVx1MDAzZWZyYW1lbm8gYW5kIHJjdXItXHUwMDNlZnJhbWVubykgaW4gc3RydWN0IGJwZl9yZWdfc3RhdGUgYXJlIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVycyBhbmQgZnVuYyBzdGF0ZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKHZpYSBtZW1zZXQoKSBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoKSBhbmQgaW5pdF9mdW5jX3N0YXRlKCkpLiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIGluIGtlcm5lbC9icGYvc3RhdGVzLmMuIFNwZWNpZmljYWxseSwgaXQgbW92ZXMgdGhlIGZyYW1lIG51bWJlciBjaGVjayAocm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVubykgaW50byByZWdzX2V4YWN0KCksIGVuc3VyaW5nIHRoYXQgZXhhY3QgcmVnaXN0ZXIgc3RhdGUgY29tcGFyaXNvbnMgKHN1Y2ggYXMgZHVyaW5nIGxvb3AgZGV0ZWN0aW9uIGFuZCBzcGlsbGVkIHN0YWNrIHBvaW50ZXIgY29tcGFyaXNvbikgY29ycmVjdGx5IGRpc3Rpbmd1aXNoIHN0YWNrIHBvaW50ZXJzIGZyb20gZGlmZmVyZW50IGNhbGwgZnJhbWVzLlxuXG5UaGUgdG91Y2hlZCBmaWVsZHMgKHJvbGQtXHUwMDNlZnJhbWVubyBhbmQgcmN1ci1cdTAwM2VmcmFtZW5vKSBpbiBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBhcmUgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gcmVnaXN0ZXJzIGFuZCBmdW5jIHN0YXRlcyBhcmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAodmlhIG1lbXNldCgpIGluIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZSgpIGFuZCBpbml0X2Z1bmNfc3RhdGUoKSkuIFRoZSBwYXRjaCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGFsbG9jYXRpb24gaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6MTUuMjk2NDI0NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEyOTc5NTE2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdzX2V4YWN0XCIsXG4gICAgXCJyZWdzYWZlXCIsXG4gICAgXCJzdGF0ZXNfZXF1YWxcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIGluIGtlcm5lbC9icGYvc3RhdGVzLmMuIFNwZWNpZmljYWxseSwgaXQgbW92ZXMgdGhlIGZyYW1lIG51bWJlciBjaGVjayAocm9sZC1cXHUwMDNlZnJhbWVubyA9PSByY3VyLVxcdTAwM2VmcmFtZW5vKSBpbnRvIHJlZ3NfZXhhY3QoKSwgZW5zdXJpbmcgdGhhdCBleGFjdCByZWdpc3RlciBzdGF0ZSBjb21wYXJpc29ucyAoc3VjaCBhcyBkdXJpbmcgbG9vcCBkZXRlY3Rpb24gYW5kIHNwaWxsZWQgc3RhY2sgcG9pbnRlciBjb21wYXJpc29uKSBjb3JyZWN0bHkgZGlzdGluZ3Vpc2ggc3RhY2sgcG9pbnRlcnMgZnJvbSBkaWZmZXJlbnQgY2FsbCBmcmFtZXMuXFxuXFxuVGhlIHRvdWNoZWQgZmllbGRzIChyb2xkLVxcdTAwM2VmcmFtZW5vIGFuZCByY3VyLVxcdTAwM2VmcmFtZW5vKSBpbiBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBhcmUgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gcmVnaXN0ZXJzIGFuZCBmdW5jIHN0YXRlcyBhcmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAodmlhIG1lbXNldCgpIGluIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZSgpIGFuZCBpbml0X2Z1bmNfc3RhdGUoKSkuIFRoZSBwYXRjaCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGFsbG9jYXRpb24gaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMgaW4ga2VybmVsL2JwZi9zdGF0ZXMuYywgbW92aW5nIHRoZSBmcmFtZW5vIGVxdWFsaXR5IGNoZWNrIGludG8gcmVnc19leGFjdCgpLiBUaGlzIGFmZmVjdHMgc3RhdGUgY29tcGFyaXNvbiBmb3IgUFRSX1RPX1NUQUNLIHJlZ2lzdGVycyAoaW5jbHVkaW5nIHNwaWxsZWQgcmVnaXN0ZXJzIGR1cmluZyBsb29wIHN0YXRlIHBydW5pbmcpLiBGdXp6aW5nIHZpYSB0aGUgYnBmIHN5c2NhbGwgaXMgY3JpdGljYWwgdG8gdmVyaWZ5IHNvdW5kbmVzcyBhbmQgZW5zdXJlIG5vIHZlcmlmaWVyIHJlZ3Jlc3Npb25zIG9yIGluZmluaXRlIGxvb3BzL3NhZmV0eSBieXBhc3NlcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6MTUuMjk2NDI5MzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTk2OTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc4ZjBiNGEyOTE5YzFjYWZlNTYxYjcyMDE1NGFhN2M3OTU4NTg5ZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTk6NTI6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcXG5pbmRleCA2NmZiMTFiNmM2YTc2Li44MjcwMzhlYzE4YjdhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXFxuQEAgLTQ5MSw3ICs0OTEsOCBAQCBzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbiB7XFxuIFxcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXFx1MDAzZWlkLCByY3VyLVxcdTAwM2VpZCwgaWRtYXApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICBjaGVja19pZHMocm9sZC1cXHUwMDNlcGFyZW50X2lkLCByY3VyLVxcdTAwM2VwYXJlbnRfaWQsIGlkbWFwKTtcXG4rXFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVxcdTAwM2VwYXJlbnRfaWQsIHJjdXItXFx1MDAzZXBhcmVudF9pZCwgaWRtYXApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICByb2xkLVxcdTAwM2VmcmFtZW5vID09IHJjdXItXFx1MDAzZWZyYW1lbm87XFxuIH1cXG4gXFxuIGVudW0gZXhhY3RfbGV2ZWwge1xcbkBAIC02MzksMTAgKzY0MCw3IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxuIFxcdFxcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAgIHRudW1faW4ocm9sZC1cXHUwMDNldmFyX29mZiwgcmN1ci1cXHUwMDNldmFyX29mZik7XFxuIFxcdGNhc2UgUFRSX1RPX1NUQUNLOlxcbi1cXHRcXHQvKiB0d28gc3RhY2sgcG9pbnRlcnMgYXJlIGVxdWFsIG9ubHkgaWYgdGhleSdyZSBwb2ludGluZyB0b1xcbi1cXHRcXHQgKiB0aGUgc2FtZSBzdGFjayBmcmFtZSwgc2luY2UgZnAtOCBpbiBmb28gIT0gZnAtOCBpbiBiYXJcXG4tXFx0XFx0ICovXFxuLVxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKSBcXHUwMDI2XFx1MDAyNiByb2xkLVxcdTAwM2VmcmFtZW5vID09IHJjdXItXFx1MDAzZWZyYW1lbm87XFxuK1xcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG4gXFx0Y2FzZSBQVFJfVE9fQVJFTkE6XFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRjYXNlIFBUUl9UT19JTlNOOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNcXG5pbmRleCBkMjQ4Y2U4NzdmMTRlLi5mOGI3YmExYmY2Yjg0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xcbkBAIC0zMDMsNCArMzAzLDcwIEBAIF9fbmFrZWQgdm9pZCBtYXliZV9leGl0X3NjY19idWcxKHZvaWQpXFxuIFxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIGxvb3AgcmVhZHMgemVybyBmcm9tIHRoZSBjYWxsZXIncyBzdGFjayBvbiBpdHMgZmlyc3QgaXRlcmF0aW9uIGFuZFxcbisgKiBvbmUgZnJvbSB0aGUgY2FsbGVlJ3Mgc3RhY2sgb24gaXRzIHNlY29uZCBpdGVyYXRpb24uIEF0IHRoZSBsb29wIGhlYWRlcixcXG4rICogb25seSB0aGUgZnJhbWUgbnVtYmVyIG9mIHRoZSBwb2ludGVyIGluIHIxIGNoYW5nZXMuXFxuKyAqL1xcbitzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxcbit2b2lkIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZyh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIioodTY0ICopKHIxMCAtIDgpID0gMTtcXFwiXFxuK1xcdFxcXCIxOiByMCA9ICoodTY0ICopKHIxICsgMCk7XFxcIlxcbitcXHRcXFwiaWYgcjAgIT0gMCBnb3RvIDJmO1xcXCJcXG4rXFx0XFxcInIxID0gcjEwO1xcXCJcXG4rXFx0XFxcInIxICs9IC04O1xcXCJcXG4rXFx0XFxcImdvdG8gMWI7XFxcIlxcbitcXHRcXFwiMjogZXhpdDtcXFwiXFxuK1xcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ4ZHBcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJib3VuZGVkIGxvb3AgY2hhbmdpbmcgc3RhY2sgZnJhbWUgaW4gYSByZWdpc3RlclxcXCIpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgxKVxcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxcbitfX25ha2VkIHZvaWQgYm91bmRlZF9sb29wX3N0YWNrX2ZyYW1lc19yZWcodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCIqKHU2NCAqKShyMTAgLSA4KSA9IDA7XFxcIlxcbitcXHRcXFwicjEgPSByMTA7XFxcIlxcbitcXHRcXFwicjEgKz0gLTg7XFxcIlxcbitcXHRcXFwiY2FsbCBsb29wX3N0YWNrX2ZyYW1lc19yZWc7XFxcIlxcbitcXHRcXFwiZXhpdDtcXFwiXFxuK1xcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogRXhlcmNpc2UgdGhlIHNhbWUgZnJhbWUgY2hhbmdlIHRocm91Z2ggYSBzcGlsbGVkIHBvaW50ZXIuIEFsbCByZWdpc3RlcnNcXG4rICogYXQgdGhlIGxvb3AgaGVhZGVyIGFyZSBpZGVudGljYWwsIHdoaWxlIGZwLTE2IHBvaW50cyB0byBhIGRpZmZlcmVudCBmcmFtZS5cXG4rICovXFxuK3N0YXRpYyBfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkXFxuK3ZvaWQgbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCIqKHU2NCAqKShyMTAgLSA4KSA9IDE7XFxcIlxcbitcXHRcXFwiKih1NjQgKikocjEwIC0gMTYpID0gcjE7XFxcIlxcbitcXHRcXFwiMTogcjEgPSAqKHU2NCAqKShyMTAgLSAxNik7XFxcIlxcbitcXHRcXFwicjAgPSAqKHU2NCAqKShyMSArIDApO1xcXCJcXG4rXFx0XFxcImlmIHIwICE9IDAgZ290byAyZjtcXFwiXFxuK1xcdFxcXCJyMSA9IHIxMDtcXFwiXFxuK1xcdFxcXCJyMSArPSAtODtcXFwiXFxuK1xcdFxcXCIqKHU2NCAqKShyMTAgLSAxNikgPSByMTtcXFwiXFxuK1xcdFxcXCJnb3RvIDFiO1xcXCJcXG4rXFx0XFxcIjI6IGV4aXQ7XFxcIlxcbitcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwiYm91bmRlZCBsb29wIGNoYW5naW5nIHN0YWNrIGZyYW1lIGluIGEgc3BpbGxcXFwiKVxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMSlcXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcXG4rX19uYWtlZCB2b2lkIGJvdW5kZWRfbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCIqKHU2NCAqKShyMTAgLSA4KSA9IDA7XFxcIlxcbitcXHRcXFwicjEgPSByMTA7XFxcIlxcbitcXHRcXFwicjEgKz0gLTg7XFxcIlxcbitcXHRcXFwiY2FsbCBsb29wX3N0YWNrX2ZyYW1lc19zcGlsbDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6MTUuNzgyOTk2NTkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5MDU0Njk0NDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ3NfZXhhY3RcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcInN0YXRlc19lcXVhbFwiLFxuICAgIFwiYnBmX2lzX3N0YXRlX3Zpc2l0ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMgaW4ga2VybmVsL2JwZi9zdGF0ZXMuYywgbW92aW5nIHRoZSBmcmFtZW5vIGVxdWFsaXR5IGNoZWNrIGludG8gcmVnc19leGFjdCgpLiBUaGlzIGFmZmVjdHMgc3RhdGUgY29tcGFyaXNvbiBmb3IgUFRSX1RPX1NUQUNLIHJlZ2lzdGVycyAoaW5jbHVkaW5nIHNwaWxsZWQgcmVnaXN0ZXJzIGR1cmluZyBsb29wIHN0YXRlIHBydW5pbmcpLiBGdXp6aW5nIHZpYSB0aGUgYnBmIHN5c2NhbGwgaXMgY3JpdGljYWwgdG8gdmVyaWZ5IHNvdW5kbmVzcyBhbmQgZW5zdXJlIG5vIHZlcmlmaWVyIHJlZ3Jlc3Npb25zIG9yIGluZmluaXRlIGxvb3BzL3NhZmV0eSBieXBhc3NlcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OGYwYjRhMjkxOWMxY2FmZTU2MWI3MjAxNTRhYTdjNzk1ODU4OWVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTk6NTI6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuaW5kZXggNjZmYjExYjZjNmE3Ni4uODI3MDM4ZWMxOGI3YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmNcbisrKyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbkBAIC00OTEsNyArNDkxLDggQEAgc3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiB7XG4gXHRyZXR1cm4gbWVtY21wKHJvbGQsIHJjdXIsIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZCkpID09IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VwYXJlbnRfaWQsIHJjdXItXHUwMDNlcGFyZW50X2lkLCBpZG1hcCk7XG4rXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm87XG4gfVxuIFxuIGVudW0gZXhhY3RfbGV2ZWwge1xuQEAgLTYzOSwxMCArNjQwLDcgQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiBcdFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAgIHRudW1faW4ocm9sZC1cdTAwM2V2YXJfb2ZmLCByY3VyLVx1MDAzZXZhcl9vZmYpO1xuIFx0Y2FzZSBQVFJfVE9fU1RBQ0s6XG4tXHRcdC8qIHR3byBzdGFjayBwb2ludGVycyBhcmUgZXF1YWwgb25seSBpZiB0aGV5J3JlIHBvaW50aW5nIHRvXG4tXHRcdCAqIHRoZSBzYW1lIHN0YWNrIGZyYW1lLCBzaW5jZSBmcC04IGluIGZvbyAhPSBmcC04IGluIGJhclxuLVx0XHQgKi9cbi1cdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApIFx1MDAyNlx1MDAyNiByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vO1xuK1x0XHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XG4gXHRjYXNlIFBUUl9UT19BUkVOQTpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIFBUUl9UT19JTlNOOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuaW5kZXggZDI0OGNlODc3ZjE0ZS4uZjhiN2JhMWJmNmI4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXG5AQCAtMzAzLDQgKzMwMyw3MCBAQCBfX25ha2VkIHZvaWQgbWF5YmVfZXhpdF9zY2NfYnVnMSh2b2lkKVxuIFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbisvKlxuKyAqIFRoZSBsb29wIHJlYWRzIHplcm8gZnJvbSB0aGUgY2FsbGVyJ3Mgc3RhY2sgb24gaXRzIGZpcnN0IGl0ZXJhdGlvbiBhbmRcbisgKiBvbmUgZnJvbSB0aGUgY2FsbGVlJ3Mgc3RhY2sgb24gaXRzIHNlY29uZCBpdGVyYXRpb24uIEF0IHRoZSBsb29wIGhlYWRlcixcbisgKiBvbmx5IHRoZSBmcmFtZSBudW1iZXIgb2YgdGhlIHBvaW50ZXIgaW4gcjEgY2hhbmdlcy5cbisgKi9cbitzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3ZvaWQgbG9vcF9zdGFja19mcmFtZXNfcmVnKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIioodTY0ICopKHIxMCAtIDgpID0gMTtcIlxuK1x0XCIxOiByMCA9ICoodTY0ICopKHIxICsgMCk7XCJcbitcdFwiaWYgcjAgIT0gMCBnb3RvIDJmO1wiXG4rXHRcInIxID0gcjEwO1wiXG4rXHRcInIxICs9IC04O1wiXG4rXHRcImdvdG8gMWI7XCJcbitcdFwiMjogZXhpdDtcIlxuK1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJ4ZHBcIilcbitfX2Rlc2NyaXB0aW9uKFwiYm91bmRlZCBsb29wIGNoYW5naW5nIHN0YWNrIGZyYW1lIGluIGEgcmVnaXN0ZXJcIilcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMSlcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK19fbmFrZWQgdm9pZCBib3VuZGVkX2xvb3Bfc3RhY2tfZnJhbWVzX3JlZyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCIqKHU2NCAqKShyMTAgLSA4KSA9IDA7XCJcbitcdFwicjEgPSByMTA7XCJcbitcdFwicjEgKz0gLTg7XCJcbitcdFwiY2FsbCBsb29wX3N0YWNrX2ZyYW1lc19yZWc7XCJcbitcdFwiZXhpdDtcIlxuK1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIEV4ZXJjaXNlIHRoZSBzYW1lIGZyYW1lIGNoYW5nZSB0aHJvdWdoIGEgc3BpbGxlZCBwb2ludGVyLiBBbGwgcmVnaXN0ZXJzXG4rICogYXQgdGhlIGxvb3AgaGVhZGVyIGFyZSBpZGVudGljYWwsIHdoaWxlIGZwLTE2IHBvaW50cyB0byBhIGRpZmZlcmVudCBmcmFtZS5cbisgKi9cbitzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3ZvaWQgbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiKih1NjQgKikocjEwIC0gOCkgPSAxO1wiXG4rXHRcIioodTY0ICopKHIxMCAtIDE2KSA9IHIxO1wiXG4rXHRcIjE6IHIxID0gKih1NjQgKikocjEwIC0gMTYpO1wiXG4rXHRcInIwID0gKih1NjQgKikocjEgKyAwKTtcIlxuK1x0XCJpZiByMCAhPSAwIGdvdG8gMmY7XCJcbitcdFwicjEgPSByMTA7XCJcbitcdFwicjEgKz0gLTg7XCJcbitcdFwiKih1NjQgKikocjEwIC0gMTYpID0gcjE7XCJcbitcdFwiZ290byAxYjtcIlxuK1x0XCIyOiBleGl0O1wiXG4rXHQ6OjogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInhkcFwiKVxuK19fZGVzY3JpcHRpb24oXCJib3VuZGVkIGxvb3AgY2hhbmdpbmcgc3RhY2sgZnJhbWUgaW4gYSBzcGlsbFwiKVxuK19fc3VjY2VzcyBfX3JldHZhbCgxKVxuK19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXG4rX19uYWtlZCB2b2lkIGJvdW5kZWRfbG9vcF9zdGFja19mcmFtZXNfc3BpbGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiKih1NjQgKikocjEwIC0gOCkgPSAwO1wiXG4rXHRcInIxID0gcjEwO1wiXG4rXHRcInIxICs9IC04O1wiXG4rXHRcImNhbGwgbG9vcF9zdGFja19mcmFtZXNfc3BpbGw7XCJcbitcdFwiZXhpdDtcIlxuK1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjoxNS43ODI5OTgzMzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5Mjg5MTc1MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHJldmlldyByZXF1ZXN0LiBGaXJzdCwgSSBzZWUgaXQncyB0b3VjaGluZyBga2VybmVsL2JwZi9zdGF0ZXMuY2AgYW5kIGFkZGluZyBzb21lIHRlc3RzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNgLiBUaGF0J3MgZ29vZCwgc2VlaW5nIHRlc3QgYWRkaXRpb25zIGFsd2F5cyBtYWtlcyBtZSBoYXBweS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gYHN0YXRlcy5jYCwgc28gbGV0J3MgaW5zcGVjdCB0aGUgZGlmZiBkaXJlY3RseS5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBhIHN1YnRsZSBjaGFuZ2Ugd2l0aGluIGByZWdzX2V4YWN0YCBhbmQgaXRzIHVzYWdlIGluIHRoZSBgcmVnc2FmZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgYSBgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVub2AgY2hlY2sgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvbW1lbnQgc2VlbXMgdG8gaW1wbHkgdGhhdCB0aGUgZnJhbWUgbnVtYmVyIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gdHdvIHN0YWNrIHBvaW50ZXJzIGFyZSBjb25zaWRlcmVkIGVxdWFsLiBMZXQncyBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgcmlnaHQgYXBwcm9hY2guXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCBtb3JlIGNvbnRleHQuIEknbGwgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhcm91bmQgdGhlc2UgbGluZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHJlZ3NfZXhhY3RgIGlzIGludGVuZGVkIHRvIGRvLCB3aGVyZSBpdCdzIHVzZWQgaW4gdGhlIHZlcmlmaWVyJ3MgbG9naWMsIGFuZCBob3cgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBpcyBzdHJ1Y3R1cmVkLiBLbm93aW5nIHRoZSBmaWVsZHMgb2YgYGJwZl9yZWdfc3RhdGVgIHdpbGwgY2xhcmlmeSB3aHkgYGZyYW1lbm9gIGlzIHNpZ25pZmljYW50IGluIHRoaXMgY29tcGFyaXNvbi4gSXMgaXQgcmVsYXRlZCB0byB0aGUgc3RhY2sgZnJhbWUgdHJhY2tpbmc/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgYXNwZWN0cyBvZiByZWdpc3RlciBzdGF0ZSB0cmFja2luZz9cblxuSSB3YW50IHRvIHNlZSB3aGF0IGlzIGhhcHBlbmluZyB0byB0aGUgc3RhY2sgcG9pbnRlciByZWdpc3RlciBoZXJlLiBUaGUgY2hlY2sgZm9yIGBQVFJfVE9fU1RBQ0tgIHR5cGUgaXMgY3JpdGljYWwgaW4gdW5kZXJzdGFuZGluZyBob3cgaXQgaGFuZGxlcyB0aGUgc3RhY2sgcG9pbnRlci4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgdGhlIHVzZSBvZiBgaWRtYXBgIHdoaWNoIGlzIHVzZWQgZm9yIElEIG1hcHBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjoyNS4wNzIxNzY3MDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODA6XFx0XFx0XFx0dTMyIGlwID0gYnBmX2ZyYW1lX2luc25faWR4KHN0LCBpKTtcXG4gNDgxOlxcdFxcdFxcdHUxNiBsaXZlX3JlZ3MgPSBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaXBdLmxpdmVfcmVnc19iZWZvcmU7XFxuIDQ4MjpcXHRcXG4gNDgzOlxcdFxcdFxcdF9fY2xlYW5fZnVuY19zdGF0ZShlbnYsIHN0LVxcdTAwM2VmcmFtZVtpXSwgbGl2ZV9yZWdzLCBpKTtcXG4gNDg0OlxcdFxcdH1cXG4gNDg1OlxcdFxcdHJldHVybiAwO1xcbiA0ODY6XFx0fVxcbiA0ODc6XFx0XFxuIDQ4ODpcXHRzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbiA0ODk6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxcbiA0OTA6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbiA0OTE6XFx0e1xcbiA0OTI6XFx0XFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuIDQ5MzpcXHRcXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXFx1MDAzZWlkLCByY3VyLVxcdTAwM2VpZCwgaWRtYXApIFxcdTAwMjZcXHUwMDI2XFxuIDQ5NDpcXHRcXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXFx1MDAzZXBhcmVudF9pZCwgcmN1ci1cXHUwMDNlcGFyZW50X2lkLCBpZG1hcCkgXFx1MDAyNlxcdTAwMjZcXG4gNDk1OlxcdFxcdCAgICAgICByb2xkLVxcdTAwM2VmcmFtZW5vID09IHJjdXItXFx1MDAzZWZyYW1lbm87XFxuIDQ5NjpcXHR9XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdGVudW0gZXhhY3RfbGV2ZWwge1xcbiA0OTk6XFx0XFx0Tk9UX0VYQUNULFxcbiA1MDA6XFx0XFx0RVhBQ1QsXFxuIDUwMTpcXHRcXHRSQU5HRV9XSVRISU5cXG4gNTAyOlxcdH07XFxuIDUwMzpcXHRcXG4gNTA0OlxcdC8qIFJldHVybnMgdHJ1ZSBpZiAocm9sZCBzYWZlIGltcGxpZXMgcmN1ciBzYWZlKSAqL1xcbiA1MDU6XFx0c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG4gNTA2OlxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXFxuIDUwNzpcXHRcXHRcXHQgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4gNTA4OlxcdHtcXG4gNTA5OlxcdFxcdGlmIChleGFjdCA9PSBFWEFDVClcXG4gNTEwOlxcdFxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG4gNTExOlxcdFxcbiA1MTI6XFx0XFx0aWYgKHJvbGQtXFx1MDAzZXR5cGUgPT0gTk9UX0lOSVQpXFxuIDUxMzpcXHRcXHRcXHQvKiBleHBsb3JlZCBzdGF0ZSBjYW4ndCBoYXZlIHVzZWQgdGhpcyAqL1xcbiA1MTQ6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUxNTpcXHRcXG4gNTE2OlxcdFxcdC8qIEVuZm9yY2UgdGhhdCByZWdpc3RlciB0eXBlcyBoYXZlIHRvIG1hdGNoIGV4YWN0bHksIGluY2x1ZGluZyB0aGVpclxcbiA1MTc6XFx0XFx0ICogbW9kaWZpZXJzIChsaWtlIFBUUl9NQVlCRV9OVUxMLCBNRU1fUkRPTkxZLCBldGMpLCBhcyBhIGdlbmVyYWxcXG4gNTE4OlxcdFxcdCAqIHJ1bGUuXFxuIDUxOTpcXHRcXHQgKlxcbiA1MjA6XFx0XFx0ICogT25lIGNhbiBtYWtlIGEgcG9pbnQgdGhhdCB1c2luZyBhIHBvaW50ZXIgcmVnaXN0ZXIgYXMgdW5ib3VuZGVkXFxuIDUyMTpcXHRcXHQgKiBTQ0FMQVIgd291bGQgYmUgdGVjaG5pY2FsbHkgYWNjZXB0YWJsZSwgYnV0IHRoaXMgY291bGQgbGVhZCB0b1xcbiA1MjI6XFx0XFx0ICogcG9pbnRlciBsZWFrcyBiZWNhdXNlIHNjYWxhcnMgYXJlIGFsbG93ZWQgdG8gbGVhayB3aGlsZSBwb2ludGVyc1xcbiA1MjM6XFx0XFx0ICogYXJlIG5vdC4gV2UgY291bGQgbWFrZSB0aGlzIHNhZmUgaW4gc3BlY2lhbCBjYXNlcyBpZiByb290IGlzXFxuIDUyNDpcXHRcXHQgKiBjYWxsaW5nIHVzLCBidXQgaXQncyBwcm9iYWJseSBub3Qgd29ydGggdGhlIGhhc3NsZS5cXG4gNTI1OlxcdFxcdCAqXFxuIDUyNjpcXHRcXHQgKiBBbHNvLCByZWdpc3RlciB0eXBlcyB0aGF0IGFyZSAqbm90KiBNQVlCRV9OVUxMIGNvdWxkIHRlY2huaWNhbGx5IGJlXFxuIDUyNzpcXHRcXHQgKiBzYWZlIHRvIHVzZSBhcyB0aGVpciBNQVlCRV9OVUxMIHZhcmlhbnRzIChlLmcuLCBQVFJfVE9fTUFQX1ZBTFVFXFxuIDUyODpcXHRcXHQgKiBpcyBzYWZlIHRvIGJlIHVzZWQgYXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMLCBwcm92aWRlZCBib3RoIHBvaW50XFxuIDUyOTpcXHRcXHQgKiB0byB0aGUgc2FtZSBtYXApLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjoyNS4wNzIyOTA4MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDY4NzcwNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUcmFjaW5nIHRoZSBVc2Ugb2YgYHJlZ3NfZXhhY3RgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcmVnc19leGFjdGAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIEJQRiBzdGF0ZSBtYW5hZ2VtZW50IGNvZGUuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmNhbGxlZCogd2l0aGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhhdCdzIHdoZXJlIEkgY2FuIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBjb250ZXh0IGl0IG9wZXJhdGVzIGluISBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBmb3VuZGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgbW9kaWZpY2F0aW9ucyBvciBvcHRpbWl6YXRpb25zIEkgbWlnaHQgYmUgY29uc2lkZXJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjI4LjU0MTA2MzU4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ0MTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdzX2V4YWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz00NzE9c3RhdGljIGludCBjbGVhbl92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODctXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0ODg6c3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ4OS1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTUwNT1zdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MDktXFx0aWYgKGV4YWN0ID09IEVYQUNUKVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTEwOlxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUxMS1cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQyLVxcdGNhc2UgUFRSX1RPX1NUQUNLOlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NjQzOlxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0NC1cXHRjYXNlIFBUUl9UT19BUkVOQTpcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQ5LVxcdGRlZmF1bHQ6XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo2NTA6XFx0XFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjUxLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6MjguNTg3NTE1MDE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE5MDU3OTIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBQYXRoIG9mIGByZWdzX2V4YWN0YCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGByZWdzX2V4YWN0YC4gTXkgaW5pdGlhbCBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGUgY2FsbCBzaXRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIGludm9rZWQuIEFoLCBoZXJlIGl0IGlzLCBvbiBsaW5lIDUwOTpcblxuYGBgY1xuXHRpZiAoZXhhY3QgPT0gRVhBQ1QpXG5cdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuYGBgXG5cblJpZ2h0LCBhIGNvbmRpdGlvbmFsIGNhbGwuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nICp3aGVuKiBgZXhhY3RgIGlzIGVxdWFsIHRvIGBFWEFDVGAuICBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgcG9pbnQuIFdoZXJlIGVsc2UgZG9lcyB0aGlzIGByZWdzYWZlYCBmdW5jdGlvbiB3aXRoIHRoYXQgY29uZGl0aW9uIGNvbWUgaW50byBwbGF5PyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbHMgdG8gYHJlZ3NhZmUoLi4uLCBleGFjdCA9PSBFWEFDVClgIHRvIGZ1bGx5IGdyYXNwIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGByZWdzX2V4YWN0YCBiZWluZyBleGVjdXRlZC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjozMC43NzgwOTYzOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0OTI2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnc2FmZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9NDk4PWVudW0gZXhhY3RfbGV2ZWwge1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MDQtLyogUmV0dXJucyB0cnVlIGlmIChyb2xkIHNhZmUgaW1wbGllcyByY3VyIHNhZmUpICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1MDU6c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUwNi1cXHRcXHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz02OTc9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDQtXFx0XFx0ICogQ29uc3RydWN0IGEgZmFrZSByZWdpc3RlciBmb3Igc3VjaCBzdGFjayBhbmQgY2FsbFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NzQ1OlxcdFxcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDYtXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc1MC1cXHRcXHRcXHRpZiAob2xkX3JlZyBcXHUwMDI2XFx1MDAyNiBjdXJfcmVnKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3NTE6XFx0XFx0XFx0XFx0aWYgKCFyZWdzYWZlKGVudiwgb2xkX3JlZywgY3VyX3JlZywgaWRtYXAsIGV4YWN0KSlcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc1Mi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc4Ny1cXHRcXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc4ODpcXHRcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzg5LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9ODQyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NTYtXFx0XFx0XFx0ICBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja19hcmdfcmVnc1tpXSA6IFxcdTAwMjZub3RfaW5pdDtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjg1NzpcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfYXJnLCBjdXJfYXJnLCBpZG1hcCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODU4LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9OTQwPXN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NTMtXFx0XFx0aWYgKCgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IGxpdmVfcmVncykgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk1NDpcXHRcXHQgICAgIXJlZ3NhZmUoZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VyZWdzW2ldLCBcXHUwMDI2Y3VyLVxcdTAwM2VyZWdzW2ldLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTU1LVxcdFxcdFxcdCAgICAgXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjozMC44MjQ1OTU3MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjM0NTE4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX3JlZ19zdGF0ZWAgc3RydWN0dXJlIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYGZyYW1lbm9gIGZpZWxkIGlzIGxvY2F0ZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbGF5b3V0IG9mIHRoaXMgdGhpbmcuIExldCBtZSBxdWlja2x5IGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBicGZfcmVnX3N0YXRlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjM1LjQ1OTExNjg2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNjIxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGJwZl9yZWdfc3RhdGUgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTMyPWVudW0gYnBmX2l0ZXJfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zNy1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjM4OnN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTM5LVxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjM1LjUwNjM4Mjk5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjcwNTY0ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIEJQRiB2ZXJpZmllcidzIGludGVybmFscy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDM4LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBzb21lIGNvcmUgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBidWlsZGluZyBibG9ja3Mgb3IgZW50cnkgcG9pbnRzIHRoZXJlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgYmFjayB1cCB0byBzcGVlZCBxdWlja2x5IG9uIHRoZSBrZXkgY29uY2VwdHMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6MzcuMTc2OTQ5ODE3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4LFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG4gIDM5OlxcdFxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuICA0MDpcXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xcbiAgNDE6XFx0XFx0LypcXG4gIDQyOlxcdFxcdCAqIENvbnN0YW50IGRlbHRhIGJldHdlZW4gXFxcImxpbmtlZFxcXCIgc2NhbGFycyB3aXRoIHRoZSBzYW1lIElELlxcbiAgNDM6XFx0XFx0ICovXFxuICA0NDpcXHRcXHRzMzIgZGVsdGE7XFxuICA0NTpcXHRcXHR1bmlvbiB7XFxuICA0NjpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gUFRSX1RPX1BBQ0tFVCAqL1xcbiAgNDc6XFx0XFx0XFx0aW50IHJhbmdlO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxcbiAgNTA6XFx0XFx0XFx0ICogICBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTExcXG4gIDUxOlxcdFxcdFxcdCAqL1xcbiAgNTI6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDUzOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXBfcHRyO1xcbiAgNTQ6XFx0XFx0XFx0XFx0LyogVG8gZGlzdGluZ3Vpc2ggbWFwIGxvb2t1cHMgZnJvbSBvdXRlciBtYXBcXG4gIDU1OlxcdFxcdFxcdFxcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcXG4gIDU2OlxcdFxcdFxcdFxcdCAqIHBvaW50aW5nIHRvIGlubmVyIG1hcHMuXFxuICA1NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDU4OlxcdFxcdFxcdFxcdHUzMiBtYXBfdWlkO1xcbiAgNTk6XFx0XFx0XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0XFx0LyogZm9yIFBUUl9UT19CVEZfSUQgKi9cXG4gIDYyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA2MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnRmICpidGY7XFxuICA2NDpcXHRcXHRcXHRcXHR1MzIgYnRmX2lkO1xcbiAgNjU6XFx0XFx0XFx0fTtcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0XFx0c3RydWN0IHsgLyogZm9yIFBUUl9UT19NRU0gfCBQVFJfVE9fTUVNX09SX05VTEwgKi9cXG4gIDY4OlxcdFxcdFxcdFxcdHUzMiBtZW1fc2l6ZTtcXG4gIDY5OlxcdFxcdFxcdH07XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC8qIEZvciBkeW5wdHIgc3RhY2sgc2xvdHMgKi9cXG4gIDcyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA3MzpcXHRcXHRcXHRcXHRlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlO1xcbiAgNzQ6XFx0XFx0XFx0XFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cXG4gIDc1OlxcdFxcdFxcdFxcdCAqIFdlIG5lZWQgdG8gdHJhY2sgd2hpY2ggc2xvdCBpcyB0aGUgZmlyc3Qgc2xvdFxcbiAgNzY6XFx0XFx0XFx0XFx0ICogdG8gcHJvdGVjdCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHRoZSB1c2VyIG1heSB0cnkgdG9cXG4gIDc3OlxcdFxcdFxcdFxcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXFxuICA3ODpcXHRcXHRcXHRcXHQgKiBkeW5wdHIuXFxuICA3OTpcXHRcXHRcXHRcXHQgKi9cXG4gIDgwOlxcdFxcdFxcdFxcdGJvb2wgZmlyc3Rfc2xvdDtcXG4gIDgxOlxcdFxcdFxcdH0gZHlucHRyO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRcXHQvKiBGb3IgYnBmX2l0ZXIgc3RhY2sgc2xvdHMgKi9cXG4gIDg0OlxcdFxcdFxcdHN0cnVjdCB7XFxuICA4NTpcXHRcXHRcXHRcXHQvKiBCVEYgY29udGFpbmVyIGFuZCBCVEYgdHlwZSBJRCBkZXNjcmliaW5nXFxuICA4NjpcXHRcXHRcXHRcXHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXFx1MDAzY3R5cGVcXHUwMDNlIG9mIGFuIGl0ZXJhdG9yIHN0YXRlXFxuICA4NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDg4OlxcdFxcdFxcdFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gIDg5OlxcdFxcdFxcdFxcdHUzMiBidGZfaWQ7XFxuICA5MDpcXHRcXHRcXHRcXHQvKiBwYWNraW5nIGZvbGxvd2luZyB0d28gZmllbGRzIHRvIGZpdCBpdGVyIHN0YXRlIGludG8gMTYgYnl0ZXMgKi9cXG4gIDkxOlxcdFxcdFxcdFxcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcXG4gIDkyOlxcdFxcdFxcdFxcdGludCBkZXB0aDozMDtcXG4gIDkzOlxcdFxcdFxcdH0gaXRlcjtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0XFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xcbiAgOTY6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDk3OlxcdFxcdFxcdFxcdGVudW0ge1xcbiAgOTg6XFx0XFx0XFx0XFx0XFx0SVJRX05BVElWRV9LRlVOQyxcXG4gIDk5OlxcdFxcdFxcdFxcdFxcdElSUV9MT0NLX0tGVU5DLFxcbiAxMDA6XFx0XFx0XFx0XFx0fSBrZnVuY19jbGFzcztcXG4gMTAxOlxcdFxcdFxcdH0gaXJxO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXFxuIDEwNDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAxMDU6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcxO1xcbiAxMDY6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcyO1xcbiAxMDc6XFx0XFx0XFx0fSByYXc7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdFxcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xcbiAxMTA6XFx0XFx0fTtcXG4gMTExOlxcdFxcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXFxuIDExMjpcXHRcXHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxcbiAxMTM6XFx0XFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XFxuIDExNDpcXHRcXHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xcbiAxMTU6XFx0XFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cXG4gMTE2OlxcdFxcdCAqL1xcbiAxMTc6XFx0XFx0c3RydWN0IHRudW0gdmFyX29mZjtcXG4gMTE4OlxcdFxcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxcbiAxMTk6XFx0XFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cXG4gMTIwOlxcdFxcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXFxuIDEyMTpcXHRcXHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXFxuIDEyMjpcXHRcXHQgKi9cXG4gMTIzOlxcdFxcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXFxuIDEyNDpcXHRcXHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xcbiAxMjU6XFx0XFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXFxuIDEyNjpcXHRcXHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cXG4gMTI3OlxcdFxcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjozNy4xNzcxMjc5MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYyODIzODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIgSGVhZGVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgaW50byBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIEJQRiB2ZXJpZmllcidzIGRlZmluaXRpb24gbGlrZWx5IHJlc2lkZXMsIGFuZCB3aGVyZSBJIG5lZWQgdG8gYmUgZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHJpZ2h0IG5vdy4gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgaW50ZXJuYWwgY29uc3RhbnRzIGRlZmluZWQgaGVyZSBpcyBjcnVjaWFsIGZvciB0aGlzIGludmVzdGlnYXRpb24uIFRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJ1bGVzIGFuZCBsb2dpYyB0aGUga2VybmVsIGVtcGxveXMgdG8ga2VlcCBCUEYgcHJvZ3JhbXMgc2FmZSBhbmQgdmFsaWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHZlcmlmaWVyJ3MgaW50ZXJuYWwgbWVjaGFuaXNtcywgYW5kIHRoaXMgaGVhZGVyIGlzIHRoZSBtb3N0IGVmZmljaWVudCBzdGFydGluZyBwb2ludC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDkwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MjozOS44MDUzNjkyODdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI4OlxcdFxcdCAqIGNhbWUgZnJvbSwgd2hlbiBvbmUgaXMgdGVzdGVkIGZvciAhPSBOVUxMLlxcbiAxMjk6XFx0XFx0ICogRm9yIFBUUl9UT19NRU1fT1JfTlVMTCB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgbWVtb3J5IGFsbG9jYXRpb25cXG4gMTMwOlxcdFxcdCAqIGZvciB0aGUgcHVycG9zZSBvZiB0cmFja2luZyB0aGF0IGl0J3MgZnJlZWQuXFxuIDEzMTpcXHRcXHQgKiBGb3IgUFRSX1RPX1NPQ0tFVCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggcG9pbnRlcnMgcmV0YWluIHRoZVxcbiAxMzI6XFx0XFx0ICogc2FtZSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCwgdG8gZGV0ZXJtaW5lIHByb3BlciByZWZlcmVuY2UgZnJlZWluZy5cXG4gMTMzOlxcdFxcdCAqIEZvciBzdGFjayBzbG90cyB0aGF0IGFyZSBkeW5wdHJzLCB0aGlzIGlzIHVzZWQgdG8gdHJhY2sgcmVmZXJlbmNlcyB0b1xcbiAxMzQ6XFx0XFx0ICogdGhlIGR5bnB0ciB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxcbiAxMzU6XFx0XFx0ICogU2ltaWxhcmx5IHRvIGR5bnB0cnMsIHdlIHVzZSBJRCB0byB0cmFjayBcXFwiYmVsb25naW5nXFxcIiBvZiBhIHJlZmVyZW5jZVxcbiAxMzY6XFx0XFx0ICogdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiBicGZfaXRlci5cXG4gMTM3OlxcdFxcdCAqL1xcbiAxMzg6XFx0XFx0LypcXG4gMTM5OlxcdFxcdCAqIFVwcGVyIGJpdCBvZiBJRCBpcyB1c2VkIHRvIHJlbWVtYmVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFxcXCJsaW5rZWRcXFwiXFxuIDE0MDpcXHRcXHQgKiByZWdpc3RlcnMuIEV4YW1wbGU6XFxuIDE0MTpcXHRcXHQgKiByMSA9IHIyOyAgICBib3RoIHdpbGwgaGF2ZSByMS1cXHUwMDNlaWQgPT0gcjItXFx1MDAzZWlkID09IE5cXG4gMTQyOlxcdFxcdCAqIHIxICs9IDEwOyAgIHIxLVxcdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVCBhbmQgcjEtXFx1MDAzZWRlbHRhID09IDEwXFxuIDE0MzpcXHRcXHQgKiByMyA9IHIyOyAgICBib3RoIHdpbGwgaGF2ZSByMy1cXHUwMDNlaWQgPT0gcjItXFx1MDAzZWlkID09IE5cXG4gMTQ0OlxcdFxcdCAqIHczICs9IDEwOyAgIHIzLVxcdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVDMyIGFuZCByMy1cXHUwMDNlZGVsdGEgPT0gMTBcXG4gMTQ1OlxcdFxcdCAqL1xcbiAxNDY6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUNjQgKDFVIFxcdTAwM2NcXHUwMDNjIDMxKVxcbiAxNDc6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUMzIgKDFVIFxcdTAwM2NcXHUwMDNjIDMwKVxcbiAxNDg6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUIChCUEZfQUREX0NPTlNUNjQgfCBCUEZfQUREX0NPTlNUMzIpXFxuIDE0OTpcXHRcXHR1MzIgaWQ7XFxuIDE1MDpcXHRcXHQvKlxcbiAxNTE6XFx0XFx0ICogVHJhY2tzIHRoZSBwYXJlbnQgb2JqZWN0IHRoaXMgcmVnaXN0ZXIgd2FzIGRlcml2ZWQgZnJvbS5cXG4gMTUyOlxcdFxcdCAqIFVzZWQgZm9yIGNhc2NhZGluZyBpbnZhbGlkYXRpb246IHdoZW4gdGhlIHBhcmVudCBvYmplY3QgaXNcXG4gMTUzOlxcdFxcdCAqIHJlbGVhc2VkIG9yIGludmFsaWRhdGVkLCBhbGwgcmVnaXN0ZXJzIHdpdGggbWF0Y2hpbmcgcGFyZW50X2lkXFxuIDE1NDpcXHRcXHQgKiBhcmUgYWxzbyBpbnZhbGlkYXRlZC4gRm9yIGV4YW1wbGUsIGEgc2xpY2UgZnJvbSBicGZfZHlucHRyX2RhdGEoKVxcbiAxNTU6XFx0XFx0ICogZ2V0cyBwYXJlbnRfaWQgc2V0IHRvIHRoZSBkeW5wdHIncyBpZC5cXG4gMTU2OlxcdFxcdCAqL1xcbiAxNTc6XFx0XFx0dTMyIHBhcmVudF9pZDtcXG4gMTU4OlxcdFxcdC8qIEluc2lkZSB0aGUgY2FsbGVlIHR3byByZWdpc3RlcnMgY2FuIGJlIGJvdGggUFRSX1RPX1NUQUNLIGxpa2VcXG4gMTU5OlxcdFxcdCAqIFIxPWZwLTggYW5kIFIyPWZwLTgsIGJ1dCBvbmUgb2YgdGhlbSBwb2ludHMgdG8gdGhpcyBmdW5jdGlvbiBzdGFja1xcbiAxNjA6XFx0XFx0ICogd2hpbGUgYW5vdGhlciB0byB0aGUgY2FsbGVyJ3Mgc3RhY2suIFRvIGRpZmZlcmVudGlhdGUgdGhlbSAnZnJhbWVubydcXG4gMTYxOlxcdFxcdCAqIGlzIHVzZWQgd2hpY2ggaXMgYW4gaW5kZXggaW4gYnBmX3ZlcmlmaWVyX3N0YXRlLVxcdTAwM2VmcmFtZVtdIGFycmF5XFxuIDE2MjpcXHRcXHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cXG4gMTYzOlxcdFxcdCAqL1xcbiAxNjQ6XFx0XFx0dTMyIGZyYW1lbm87XFxuIDE2NTpcXHRcXHQvKiBpZiAoIXByZWNpc2UgXFx1MDAyNlxcdTAwMjYgU0NBTEFSX1ZBTFVFKSBtaW4vbWF4L3RudW0gZG9uJ3QgYWZmZWN0IHNhZmV0eSAqL1xcbiAxNjY6XFx0XFx0Ym9vbCBwcmVjaXNlO1xcbiAxNjc6XFx0fTtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0c3RhdGljIGlubGluZSBzNjQgcmVnX3NtaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdHJldHVybiBjbnVtNjRfc21pbihyZWctXFx1MDAzZXI2NCk7XFxuIDE3MjpcXHR9XFxuIDE3MzpcXHRcXG4gMTc0OlxcdHN0YXRpYyBpbmxpbmUgczY0IHJlZ19zbWF4KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIDE3NTpcXHR7XFxuIDE3NjpcXHRcXHRyZXR1cm4gY251bTY0X3NtYXgocmVnLVxcdTAwM2VyNjQpO1xcbiAxNzc6XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRzdGF0aWMgaW5saW5lIHU2NCByZWdfdW1pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiAxODA6XFx0e1xcbiAxODE6XFx0XFx0cmV0dXJuIGNudW02NF91bWluKHJlZy1cXHUwMDNlcjY0KTtcXG4gMTgyOlxcdH1cXG4gMTgzOlxcdFxcbiAxODQ6XFx0c3RhdGljIGlubGluZSB1NjQgcmVnX3VtYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gMTg1OlxcdHtcXG4gMTg2OlxcdFxcdHJldHVybiBjbnVtNjRfdW1heChyZWctXFx1MDAzZXI2NCk7XFxuIDE4NzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjM5LjgwNTQ4NzA2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTAzMTA1MDI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgU3RhdGUgRXF1aXZhbGVuY2UgYW5kIGBmcmFtZW5vYCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbiBjYXVnaHQgbXkgZXllLCBhbmQgSSBzZWUgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBpc3N1ZS4gSW5pdGlhbGx5LCBgcmVnc19leGFjdGAgd2FzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHR3byBCUEYgcmVnaXN0ZXIgc3RhdGVzIHdlcmUgaWRlbnRpY2FsLiBMb29raW5nIGF0IHRoZSBjb2RlOlxuXG5gYGBjXG5zdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcblx0XHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG57XG5cdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcdTAwMjZcdTAwMjZcblx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG5cdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VwYXJlbnRfaWQsIHJjdXItXHUwMDNlcGFyZW50X2lkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG5cdCAgICAgICByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vO1xufVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3YXMgbWlzc2luZyBhIHBhcnQgb2YgdGhlIGNoZWNrLCB3aGljaCBpcyBgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVub2AuIFNwZWNpZmljYWxseSwgYG1lbWNtcGAgb25seSBjb21wYXJlZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgIHVwIHRvIGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpYC4gIEZpZWxkcyBsaWtlIGBpZGAgYW5kIGBwYXJlbnRfaWRgIHdlcmUgY2hlY2tlZCBzZXBhcmF0ZWx5LCBhbmQsIGNyaXRpY2FsbHksIGBmcmFtZW5vYCBjb21lcyAqYWZ0ZXIqIHRob3NlIGZpZWxkcyBpbiB0aGUgc3RydWN0LiBUaGVyZWZvcmUsIGBtZW1jbXBgIGRpZCAqbm90KiBjaGVjayBgZnJhbWVub2AuXG5cbkkgdGhlbiBsb29rZWQgYXQgaG93IGByZWdzX2V4YWN0YCB3YXMgdXNlZCwgZXNwZWNpYWxseSBpbiBgcmVnc2FmZSgpYCBhbmQgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGBleGFjdCA9PSBFWEFDVGAgY29uZGl0aW9uIHdhcyBtZXQuIEluIHRoYXQgY2FzZSwgYW5kIGluIG90aGVyIHNjZW5hcmlvcyB3aGVyZSBleGFjdCBzdGF0ZSBtYXRjaGluZyB3YXMgbmVlZGVkLCBpdCAqb25seSogY2FsbGVkIGByZWdzX2V4YWN0YC4gVGhpcyBtZWFudCBgZnJhbWVub2Agd2Fzbid0IGJlaW5nIGNoZWNrZWQgZm9yIGVxdWFsaXR5IGV2ZW4gd2hlbiB3ZSBleHBsaWNpdGx5IHdhbnRlZCBleGFjdCBtYXRjaGluZyEgIFRoaXMgYWxzbyBoZWxkIHRydWUgd2hlbiBsb29raW5nIGF0IHRoZSBjb21wYXJpc29uIG9mIHNwaWxsZWQgcmVnaXN0ZXJzIGluIGBzdGFja3NhZmUoKWAuXG5cbkNvbnNpZGVyIHRoZSB0ZXN0IGNhc2UgaW4gYHZlcmlmaWVyX2xvb3BzMS5jYC4gSW1hZ2luZSBhIHN0YWNrIHBvaW50ZXIgd2l0aCBhICpkaWZmZXJlbnQqIGBmcmFtZW5vYCB3YXMgc3BpbGxlZCB0byB0aGUgc3RhY2suICBJZiB3ZSB0aGVuIGNvbXBhcmVkIHRoaXMgc3BpbGxlZCByZWdpc3RlciB3aXRoIGFuIFwiZXhhY3RcIiBtYXRjaCB1c2luZyBgcmVnc19leGFjdGAsIHRoZSBjb21wYXJpc29uIHdvdWxkIHJldHVybiBgdHJ1ZWAgZXZlbiB0aG91Z2ggYGZyYW1lbm9gIGRpZmZlcmVkLCB3aGljaCBpcyBvYnZpb3VzbHkgd3JvbmcuXG5cblRoZSBmaXgsIG1vdmluZyB0aGUgY29tcGFyaXNvbiBvZiBgZnJhbWVub2AgaW50byBgcmVnc19leGFjdGAsIHNvbHZlcyB0aGlzIGlzc3VlLiAgTm93LCBib3RoIGRpcmVjdCBjaGVja3MgaW4gYHJlZ3NhZmUoKWAgYW5kIGByZWdzX2V4YWN0YCBjaGVja3MsIGluY2x1ZGluZyB0aG9zZSBpbnZvbHZpbmcgc3BpbGxlZCBwb2ludGVycywgd2lsbCBwcm9wZXJseSBjb25zaWRlciBgZnJhbWVub2AgaW4gZGV0ZXJtaW5pbmcgcmVnaXN0ZXIgc3RhdGUgZXF1aXZhbGVuY2UuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhIGZvciB0aGlzIGNoYW5nZTpcblxuKiAgICoqU3Vic3lzdGVtOioqIEJQRiAoa2VybmVsL2JwZi9zdGF0ZXMuYykgLSAqQ29uZmlybWVkLipcbiogICAqKlJlYWNoYWJpbGl0eToqKiBCUEYgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBRRU1VL3N5emthbGxlci4gYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYCBpcyBhIHByaW1hcnkgc3l6a2FsbGVyIHRhcmdldC4gLSAqQ29uZmlybWVkLipcbiogICAqKk1vZGlmaWVkIFJlYWNoYWJsZSBLZXJuZWwgQ29kZToqKiBZZXMsIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBpcyB0aGUgQlBGIHZlcmlmaWVyIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNraW5nIGNvZGUsIHNvIHRoaXMgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb2RlLiAtICpDb25maXJtZWQuKlxuKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogQlBGIC0gKkNvbmZpcm1lZC4qXG4qICAgKipUeXBlIG9mIENoYW5nZToqKiBcIlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwc1wiIGZpdHMgd2VsbCwgYXMgdGhpcyBpcyBhIHJlc3RydWN0dXJpbmcgb2YgdGhlIGVxdWl2YWxlbmNlIGNoZWNrLiAtICpDb25maXJtZWQuKlxuKiAgICoqV29ydGhGdXp6aW5nPXRydWUgYW5kIEZvY3VzU3ltYm9sczoqKiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaWRlbnRpZnkgYW55IHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBmb3IgYSBmdXp6ZXIuICBgcmVnc19leGFjdGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBJdCdzIGNsZWFybHkgaW1wb3J0YW50IGZvciBzdGF0ZSBjb21wYXJpc29uLiBXZSBuZWVkIHRvIGNoZWNrIGlmIGByZWdzX2V4YWN0YCwgYHJlZ3NhZmVgLCBgZnVuY19zdGF0ZXNfZXF1YWxgLCBhbmQgYHN0YXRlc19lcXVhbGAgYXJlIGlubGluZWQgb3IgY29tcGlsZWQgc3RhdGljYWxseSB0byBzZWUgd2hlcmUgdGhleSBleGlzdC4gIEknbGwgY2hlY2sgdGhlIGBNYWtlZmlsZWAgYW5kIHRoZWlyIGRlZmluaXRpb25zIGluIGBzdGF0ZXMuY2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlaXIgdmlzaWJpbGl0eSBhbmQgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDE5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjU0LjgzNjUzOTI3OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4OTczNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGVzXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTI6NTQuODg2NDQxMzY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0NTE0OTQ5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIGBzdGF0ZXMub2AgYW5kIEJQRiBTeXNjYWxscyoqXG5cbkFscmlnaHQsIHNvIGBzdGF0ZXMub2AgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEga2V5IGRlcGVuZGVuY3kuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgYXMgaXQgd2lsbCBoZWxwIHRvIHRyYWNrIHdoZXJlIHRoaW5ncyBnbyB3cm9uZyB3aXRoIEJQRi4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGludG8gYGtlcm5lbC9icGYvc3RhdGVzLmNgIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBsYXlvdXQgYW5kIHVzYWdlIG9mIHRoZSBCUEYgc3RhdGUgbWFuYWdlbWVudCBjb2RlLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIHB1YmxpY2x5IGFjY2Vzc2libGUgKG5vbi1zdGF0aWMpIG9yIHNlcnZlIGFzIGVudHJ5IHBvaW50cyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXQuIFRoaXMgd2lsbCByZXZlYWwgdGhlIGNyaXRpY2FsIGludGVyZmFjZXMgYW5kIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gZm9yIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyB0aGUgY29ybmVyc3RvbmUgZm9yIGRlYnVnZ2luZyBhbnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzMCwiT3V0cHV0VG9rZW5zIjo2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUyOjU5LjMzNzkzODIxOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMzA2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKj8gW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz0yNTk9c3RhdGljIGJvb2wgaW5jb21wbGV0ZV9yZWFkX21hcmtzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTI3Mi1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjI3MzppbnQgYnBmX3VwZGF0ZV9icmFuY2hfY291bnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMjc0LXtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIwOT1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzMy1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzQ6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1Mjo1OS4zODQ5NzU4MzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzM5Mzg0NTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBCUEYgU3RhdGUgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGZ1bmN0aW9uIGluIGBzdGF0ZXMuY2AuIFNlZW1zIGxpa2UgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gTGV0J3Mgc2VlIHdoYXQgY2FsbHMgdGhhdCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2UsIGFzIHdlbGwgYXMgd2hlcmUgYHJlZ3NhZmVgLCBgc3RhdGVzX2VxdWFsYCwgYW5kIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSB1c2VkLCBhbGwgd2l0aGluIHRoZSBga2VybmVsL2JwZi9zdGF0ZXMuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGFsbCB0aGVzZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgZml0IGludG8gdGhlIGxhcmdlciBzdGF0ZSBtYW5hZ2VtZW50IHBpY3R1cmUuIEdvdHRhIGJ1aWxkIGEgbWVudGFsIG1vZGVsIGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzowNi43Nzg4MjM2MjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTExMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlc19lcXVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9ODY0PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkzOS0gKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0MDpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0MS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgdTMyIGluc25faWR4LCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05Njc9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzQtXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NzU6c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzYtXFx0XFx0XFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAwNi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMDA3OlxcdFxcdGlmICghZnVuY19zdGF0ZXNfZXF1YWwoZW52LCBvbGQtXFx1MDAzZWZyYW1lW2ldLCBjdXItXFx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAwOC1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzQ9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMyNy1cXHRcXHRcXHRpZiAoaXNfaXRlcl9uZXh0X2luc24oZW52LCBpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMjg6XFx0XFx0XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMyOS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1cl9mcmFtZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMzNy1cXHRcXHRcXHRcXHRcXHRpdGVyX3JlZyA9IFxcdTAwMjZjdXJfZnJhbWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18xXTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMzg6XFx0XFx0XFx0XFx0XFx0LyogY3VycmVudCBzdGF0ZSBpcyB2YWxpZCBkdWUgdG8gc3RhdGVzX2VxdWFsKCksXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzM5LVxcdFxcdFxcdFxcdFxcdCAqIHNvIHdlIGNhbiBhc3N1bWUgdmFsaWQgaXRlciBhbmQgcmVnIHN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzUyLVxcdFxcdFxcdFxcdGlmIChzbC1cXHUwMDNlc3RhdGUubWF5X2dvdG9fZGVwdGggIT0gY3VyLVxcdTAwM2VtYXlfZ290b19kZXB0aCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM1MzpcXHRcXHRcXHRcXHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU0LVxcdFxcdFxcdFxcdFxcdGxvb3AgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU4LVxcdFxcdFxcdGlmIChicGZfY2FsbHNfY2FsbGJhY2soZW52LCBpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNTk6XFx0XFx0XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2MC1cXHRcXHRcXHRcXHRcXHRsb29wID0gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2Ni1cXHRcXHRcXHRpZiAoc3RhdGVzX21heWJlX2xvb3BpbmcoXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2NzpcXHRcXHRcXHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBFWEFDVCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjgtXFx0XFx0XFx0ICAgICFpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1cikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM5OS1cXHRcXHRsb29wID0gaW5jb21wbGV0ZV9yZWFkX21hcmtzKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDAwOlxcdFxcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIGxvb3AgPyBSQU5HRV9XSVRISU4gOiBOT1RfRVhBQ1QpKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDAxLWhpdDpcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQzOS1cXHRcXHRcXHQgKlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ0MDpcXHRcXHRcXHQgKiAtIFdoZW4gYSB2ZXJpZmljYXRpb24gcGF0aCBlbmNvdW50ZXJzIGEgYHN0YXRlc19lcXVhbCguLi4sXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDQxLVxcdFxcdFxcdCAqICAgUkFOR0VfV0lUSElOKWAgY29uZGl0aW9uLCB0aGVyZSBleGlzdHMgYSBjYWxsIGNoYWluIGRlc2NyaWJpbmcgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjA2LjgyNDM0MDU2NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTU5MDk3MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgU3RhdGUgQ29tcGFyaXNvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHNldmVyYWwgQlBGIHN0YXRlIGNvbXBhcmlzb24gZnVuY3Rpb25zOiBgcmVnc19leGFjdGAsIGByZWdzYWZlYCwgYHN0YWNrc2FmZWAsIGBmdW5jX3N0YXRlc19lcXVhbGAsIGBzdGF0ZXNfZXF1YWxgLCBhbmQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBpbmxpbmluZy4gQXJlIGFueSBvZiB0aGVzZSBtYXJrZWQgYG5vaW5saW5lYCBvciBkZWNsYXJlZCBhcyBgc3RhdGljYD8gVGhhdCB3b3VsZCBoYXZlIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgdGhlIGNvbXBpbGVyIG9wdGltaXplcyBjYWxscyB0byB0aGVtLiBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGxpbmtlciBpcyBkb2luZy5cblxuVGhlIGRlY2xhcmF0aW9ucyBhcmUgZ29pbmcgdG8gYmUgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLCBzbyBJJ2xsIGhlYWQgb3ZlciB0aGVyZSB0byBjaGVjay4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IEkgbmVlZCB0byBrbm93IGFib3V0IGZ1bmN0aW9uIHZpc2liaWxpdHkgYW5kIHRoZSBjb21waWxlcidzIGlubGluaW5nIGRlY2lzaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBjYWxscyB0byB0aGVzZSBhcmUgaW5saW5lZCBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzA2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTM6MDguOTgzNDQwNzEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgyMDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIocmVnc2FmZXxzdGFja3NhZmV8cmVnc19leGFjdHxzdGF0ZXNfZXF1YWwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz00NzE9c3RhdGljIGludCBjbGVhbl92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODctXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0ODg6c3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ4OS1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTQ5OD1lbnVtIGV4YWN0X2xldmVsIHtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA0LS8qIFJldHVybnMgdHJ1ZSBpZiAocm9sZCBzYWZlIGltcGxpZXMgcmN1ciBzYWZlKSAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTA1OnN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MDYtXFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA5LVxcdGlmIChleGFjdCA9PSBFWEFDVClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUxMDpcXHRcXHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MTEtXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0Mi1cXHRjYXNlIFBUUl9UT19TVEFDSzpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY0MzpcXHRcXHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy02NDQtXFx0Y2FzZSBQVFJfVE9fQVJFTkE6XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0OS1cXHRkZWZhdWx0Olxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NjUwOlxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY1MS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTY4NT1zdGF0aWMgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNjYWxhcl9yZWdfZm9yX3N0YWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY5Ni1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY5NzpzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy02OTgtXFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDQtXFx0XFx0ICogQ29uc3RydWN0IGEgZmFrZSByZWdpc3RlciBmb3Igc3VjaCBzdGFjayBhbmQgY2FsbFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NzQ1OlxcdFxcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03NDYtXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc1MC1cXHRcXHRcXHRpZiAob2xkX3JlZyBcXHUwMDI2XFx1MDAyNiBjdXJfcmVnKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3NTE6XFx0XFx0XFx0XFx0aWYgKCFyZWdzYWZlKGVudiwgb2xkX3JlZywgY3VyX3JlZywgaWRtYXAsIGV4YWN0KSlcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc1Mi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc4Ny1cXHRcXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc4ODpcXHRcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzg5LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9ODQyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NTYtXFx0XFx0XFx0ICBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja19hcmdfcmVnc1tpXSA6IFxcdTAwMjZub3RfaW5pdDtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjg1NzpcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfYXJnLCBjdXJfYXJnLCBpZG1hcCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODU4LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9ODY0PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkzOS0gKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0MDpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0MS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgdTMyIGluc25faWR4LCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NTMtXFx0XFx0aWYgKCgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IGxpdmVfcmVncykgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk1NDpcXHRcXHQgICAgIXJlZ3NhZmUoZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VyZWdzW2ldLCBcXHUwMDI2Y3VyLVxcdTAwM2VyZWdzW2ldLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTU1LVxcdFxcdFxcdCAgICAgXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NTctXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NTg6XFx0aWYgKCFzdGFja3NhZmUoZW52LCBvbGQsIGN1ciwgXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTU5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9OTY3PXN0YXRpYyB2b2lkIHJlc2V0X2lkbWFwX3NjcmF0Y2goc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc0LVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTc1OnN0YXRpYyBib29sIHN0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc2LVxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMDYtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwNzpcXHRcXHRpZiAoIWZ1bmNfc3RhdGVzX2VxdWFsKGVudiwgb2xkLVxcdTAwM2VmcmFtZVtpXSwgY3VyLVxcdTAwM2VmcmFtZVtpXSwgaW5zbl9pZHgsIGV4YWN0KSlcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMDgtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM0PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMjctXFx0XFx0XFx0aWYgKGlzX2l0ZXJfbmV4dF9pbnNuKGVudiwgaW5zbl9pZHgpKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzI4OlxcdFxcdFxcdFxcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMjktXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXJfZnJhbWU7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzctXFx0XFx0XFx0XFx0XFx0aXRlcl9yZWcgPSBcXHUwMDI2Y3VyX2ZyYW1lLVxcdTAwM2VyZWdzW0JQRl9SRUdfMV07XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzM4OlxcdFxcdFxcdFxcdFxcdC8qIGN1cnJlbnQgc3RhdGUgaXMgdmFsaWQgZHVlIHRvIHN0YXRlc19lcXVhbCgpLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMzOS1cXHRcXHRcXHRcXHRcXHQgKiBzbyB3ZSBjYW4gYXNzdW1lIHZhbGlkIGl0ZXIgYW5kIHJlZyBzdGF0ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1Mi1cXHRcXHRcXHRcXHRpZiAoc2wtXFx1MDAzZXN0YXRlLm1heV9nb3RvX2RlcHRoICE9IGN1ci1cXHUwMDNlbWF5X2dvdG9fZGVwdGggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNTM6XFx0XFx0XFx0XFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1NC1cXHRcXHRcXHRcXHRcXHRsb29wID0gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1OC1cXHRcXHRcXHRpZiAoYnBmX2NhbGxzX2NhbGxiYWNrKGVudiwgaW5zbl9pZHgpKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzU5OlxcdFxcdFxcdFxcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjAtXFx0XFx0XFx0XFx0XFx0bG9vcCA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjYtXFx0XFx0XFx0aWYgKHN0YXRlc19tYXliZV9sb29waW5nKFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1cikgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNjc6XFx0XFx0XFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgRVhBQ1QpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY4LVxcdFxcdFxcdCAgICAhaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTktXFx0XFx0bG9vcCA9IGluY29tcGxldGVfcmVhZF9tYXJrcyhlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUpO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQwMDpcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBsb29wID8gUkFOR0VfV0lUSElOIDogTk9UX0VYQUNUKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwMS1oaXQ6XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MzktXFx0XFx0XFx0ICpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0NDA6XFx0XFx0XFx0ICogLSBXaGVuIGEgdmVyaWZpY2F0aW9uIHBhdGggZW5jb3VudGVycyBhIGBzdGF0ZXNfZXF1YWwoLi4uLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ0MS1cXHRcXHRcXHQgKiAgIFJBTkdFX1dJVEhJTilgIGNvbmRpdGlvbiwgdGhlcmUgZXhpc3RzIGEgY2FsbCBjaGFpbiBkZXNjcmliaW5nIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzowOS4wMjkyNjYyMTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg5MDc4OTA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgZnVuY3Rpb24gaXMgd29ya2luZy4gRmlyc3QsIEkgcmVtZW1iZXIgaXQncyB0aGUgbm9uLXN0YXRpYywgZXhwb3J0ZWQgZnVuY3Rpb24gSSdtIGRlYWxpbmcgd2l0aC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlIHRoYXQgZXhwb3J0cyB0aG9zZSBCUEYgdmVyaWZpZXIgZnVuY3Rpb25zLCB3aGljaCBpcyBsaWtlbHkgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBUaGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBJIG5lZWQsIHBhcnRpY3VsYXJseSB0aG9zZSBmcm9tIGBzdGF0ZXMuY2AsIHNvIEkgY2FuIHNlZSB3aGF0J3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoxMC45MjAwNTg4MzNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODkwNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xMjEwPWludCBtYXJrX2NoYWluX3ByZWNpc2lvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8pO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTIxMS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEyMTI6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCk7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMjEzLWludCBicGZfdXBkYXRlX2JyYW5jaF9jb3VudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoxMC45NjU5NTQ5NzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTM2NjkxMTY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXIgb2YgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpcywgKndobyogaXMgY2FsbGluZyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgPyBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uIGNhbGwgZ3JhcGggdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgc3RhdGUgY2hlY2suIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgc28gSSdtIGtlZW4gdG8gZGlzc2VjdCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHByZWNpc2VseSB3aGF0J3MgaW52b2tpbmcgaXQuIFRpbWUgdG8gZmlyZSB1cCB0aGUgc291cmNlIGNvZGUgYnJvd3Nlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoyMC4zMzI4NjkxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMzI5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2lzX3N0YXRlX3Zpc2l0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTEyMDk9c3RhdGljIHZvaWQgbWFya19hbGxfc2NhbGFyc19pbXByZWNpc2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzMtXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMjM0OmludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjM1LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODM2Mz1zdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg0MjMtXFx0XFx0aWYgKGJwZl9pc19wcnVuZV9wb2ludChlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NDI0OlxcdFxcdFxcdGVyciA9IGJwZl9pc19zdGF0ZV92aXNpdGVkKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NDI1LVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoyMC4zODA5MDc5MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDY3Njc0MjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFZlcmlmaWNhdGlvbiBhbmQgU3ltYm9sIENvdmVyYWdlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHRoZSBgZG9fY2hlY2tgIHBoYXNlLCBhbmQgSSBzZWUgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBiZWluZyBjYWxsZWQuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgYGtlcm5lbC9icGYvc3RhdGVzLmNgIGZpbGUg4oCTIHRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHJlZ3NfZXhhY3RgIGFuZCBgcmVnc2FmZWAsIHdoaWNoIG1lYW5zIHRoZXNlIGFyZSBrZXkgYXJlYXMgdG8gZXhhbWluZS5cblxuTm93LCB0aGUgc3ltYm9sIGNvdmVyYWdlIHF1ZXN0aW9uIHBvcHMgdXAuIENhbiBzdGF0aWMgZnVuY3Rpb25zIGluIHRoZXNlIGAuY2AgZmlsZXMgYmUgaW5jbHVkZWQgaW4gbXkgYW5hbHlzaXMsIG9yIGFyZSB0aGV5IGlubGluZWQ/IEkgcmVtZW1iZXIgdGhhdCBibHVyYiBhYm91dCBoYW5kbGluZyBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uczogYmFzaWNhbGx5LCB0aGUgY29tcGlsZXIgY2FuIG9wdGltaXplIHRoZW0gYXdheSwgbWFraW5nIHRoZW0gaW52aXNpYmxlIHRvIHN5bWJvbCBmaWx0ZXJzLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgKnVzZSogdGhlc2Ugc3RhdGljIGhlbHBlcnMg4oCTIHRoaXMgaGVscHMgdG8gY2FwdHVyZSB0aGVtLlxuXG5UaGlua2luZyBhYm91dCBpdCwgaW4gdGhlIGNvbnRleHQgb2YgYC5jYCBmaWxlcywgdGhlIHN0YXRpYyBmdW5jdGlvbnMgKnNob3VsZCogaGF2ZSBzeW1ib2xzIGluIGBrYWxsc3ltc2AsIGxpa2UgYHJlZ3NhZmVgLCBgcmVnc19leGFjdGAsIGFuZCBgc3RhdGVzX2VxdWFsYC4gQnV0LCB0aGUga2V5IGlzIHRoZSBzaXplIG9mIHRoZSBmdW5jdGlvbi4gTHVja2lseSwgYHJlZ3NhZmVgIGFuZCBgc3RhdGVzX2VxdWFsYCBhcmUgbGFyZ2UsIHNvIHRoZXkgYXJlIHByb2JhYmx5IG5vdCBmdWxseSBpbmxpbmVkLiBFdmVuIGJldHRlciwgaW5jbHVkaW5nIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgYWxvbmcgd2l0aCBgcmVnc2FmZWAsIGByZWdzX2V4YWN0YCwgYHN0YXRlc19lcXVhbGAgYW5kIGBzdGFja3NhZmVgIGlzIGdyZWF0ISBTaW5jZSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBkaXN0aW5jdCwgbm9uLXN0YXRpYyBzeW1ib2wuXG5cblNob3VsZCBJIGV4cGFuZCB0aGUgbmV0IGFuZCBsb29rIGF0IGBicGZfY2hlY2tgPyBPciBmb2N1cyBtb3JlIG9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGA/IEFoLCB3YWl0LCBubywgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyAqc3BlY2lmaWMqIHRvIHRoZSBCUEYgdmVyaWZpZXIuIEl0J3Mgbm90IHNvbWUgdWJpcXVpdG91cyB1dGlsaXR5IGZ1bmN0aW9uLiBJdCdzIHRoZSBleGFjdCBzdGF0ZSBjb21wYXJpc29uIGVudHJ5IHBvaW50IGZvciB2ZXJpZmllciBwcnVuaW5nLiBgYnBmX3Byb2dfbG9hZGAgaXMgcmVsYXRlZCB0byBCUEYsIGJ1dCBpdCdzIGEgYnJvYWRlciBhcmVhLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMZXQgbWUgbG9vayBhdCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIOKAkyBJIHNlZSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub2AuIE5vdywgSSBuZWVkIHRvIGZpbmQgd2hlcmUgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbmVkLCBsaWtlbHkgaW4gYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjI1LjA1NzY1MzQxN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MDcxNjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjI1LjEwMzQ2ODU0N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDEzOTg2NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIEJQRl9TWVNDQUxMIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIGFwcHJvYWNoIGlzIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIHByZXByb2Nlc3NvciBzeW1ib2wgaXMgZGVjbGFyZWQuIEdpdmVuIHRoYXQgaXQncyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbXkgaHVuY2ggaXMgdGhhdCBpdCdsbCBiZSBpbiBvbmUgb2YgdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFRoZSBjaGFsbGVuZ2UgaXMgbmFycm93aW5nIGRvd24gKndoaWNoKiBLY29uZmlnIGZpbGUuIEknbGwgbGlrZWx5IHN0YXJ0IHdpdGggYSBgZmluZGAgb3IgYGdyZXBgIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgcG9zc2libHkgbGltaXRpbmcgdGhlIHNlYXJjaCB0byB0aGUgYEtjb25maWdgIG9yIGBDb25maWcuaW5gIGZpbGVzIHRvIHJlZHVjZSBub2lzZS4gSSdsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNyb3NzLXJlZmVyZW5jZXMgYW5kIGRlcGVuZGVuY2llcywgYXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBiZSBuZXN0ZWQgdW5kZXIgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgaGF2ZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBpbmZsdWVuY2UgaXRzIHByZXNlbmNlLiBNeSBhaW0gaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgZmlsZSBhbmQgc3BlY2lmaWMgc2VjdGlvbiB3aGVyZSBgQlBGX1NZU0NBTExgIGlzIGRlY2xhcmVkIGFuZCBwb3RlbnRpYWxseSBzZWUgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3Qgb24gdGhlIGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoyNy41MTc0NTcyMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzM1MjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1MzoyOS4xODA4MTU1MDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEwMjM5NzMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIGFyb3VuZCBsaW5lIDI3LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBpbml0aWFsIGNvbnRleHQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIHBlcmZlY3QgcGxhY2UgdG8gc3RhcnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjMxLjI4MzIxNTMwMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjMxLjI4MzI4NTA5M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDk2NjM5Njg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgVmVyaWZpZXIgU3RhdGUgRXF1aXZhbGVuY2UgRml4IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUsIGFzIGl0IHB1bGxzIGluIGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBmb3IgdGhpcyBCUEYgY29kZS4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBJJ20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgbWFkZSB0byBgcmVnc19leGFjdCgpYC4gIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHN1YnRsZSBmbGF3OiB3aGVuIGNvbXBhcmluZyBzdGFjayBwb2ludGVycyBpbiB0aGUgdmVyaWZpZXIsIGl0IHdhc24ndCBjb25zaXN0ZW50bHkgY2hlY2tpbmcgYGZyYW1lbm9gLiAgUHJldmlvdXNseSwgYHJlZ3NhZmUoKWAgaGFuZGxlZCB0aGUgZnJhbWUgY2hlY2sgZm9yIGBQVFJfVE9fU1RBQ0tgIGNhc2VzLCBidXQgYHJlZ3NfZXhhY3QoKWAgd2FzIGRpcmVjdGx5IGNhbGxlZCBpbiBzb21lIHNjZW5hcmlvcyB3aXRob3V0IHRoaXMgY2hlY2ssIHNwZWNpZmljYWxseSB3aGVuIGBleGFjdCA9PSBFWEFDVGAgb3IgZm9yIHNwaWxsZWQgc3RhY2sgcmVnaXN0ZXJzLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHBydW5pbmcgb2YgdmVyaWZpY2F0aW9uIHBhdGhzLCBjb25zaWRlcmluZyBzdGFjayByZWdpc3RlcnMgZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFzIGlkZW50aWNhbCwgd2hpY2ggaXMgYSBzZXJpb3VzIGJ1Zy5cblxuVGhlIEJQRiB2ZXJpZmllciBpcywgYXMgd2UgYm90aCBrbm93LCBhIGNyaXRpY2FsIHBpZWNlOyBpdHMgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tzIChgc3RhdGVzX2VxdWFsYCwgYHJlZ3NhZmVgLCBgcmVnc19leGFjdGApIGFyZSBmdW5kYW1lbnRhbCB0byBpdHMgc291bmRuZXNzIGFuZCB0ZXJtaW5hdGlvbiBwcm9wZXJ0aWVzLiBHaXZlbiB0aGF0LCB0aGlzIGNoYW5nZSBpcyBhIGNsZWFyIGNhbmRpZGF0ZSBmb3IgdGFyZ2V0ZWQgZnV6emluZy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBmdXp6aW5nIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIHRvIGVuc3VyZSB0aGUgdmVyaWZpZXIncyBjb3JyZWN0bmVzcy4gU3l6a2FsbGVyJ3MgQlBGIGZ1enppbmcgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBicm91Z2h0IHRvIGJlYXIgaGVyZS5cblxuSSd2ZSByZXZpZXdlZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGltcGFjdGVkOiBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBgc3RhdGVzX2VxdWFsYCwgYHJlZ3NhZmVgLCBgcmVnc19leGFjdGAgYW5kIGBzdGFja3NhZmVgLiBUaGVyZSBhcmVuJ3QgYW55IG90aGVyIGRpcmVjdGx5IHJlbGV2YW50IHN5bWJvbHMsIGxpa2UgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLlxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIGFsbCB0aGUgcmVxdWlyZW1lbnRzLiBTbywgaGVyZSdzIHRoZSBmdXp6aW5nIHBsYW46XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUUlVFIChiZWNhdXNlIHRoZSBpc3N1ZSBpcyBpbiBhIGNyaXRpY2FsIHNhZmV0eSBhcmVhIGFuZCBpdCBpbXBhY3RzIHZlcmlmaWVyIGJlaGF2aW9yKVxuKiAgICoqUmVhc29uaW5nOioqIENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIGZ1enppbmcgdmVyZGljdC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIkJQRl9TWVNDQUxMXCJdYFxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbXCJyZWdzX2V4YWN0XCIsIFwicmVnc2FmZVwiLCBcInN0YXRlc19lcXVhbFwiLCBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCJdYFxuXG5Mb29rcyBnb29kOyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MDIsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTM6NDYuMjQ5Njg0MDc1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyNTQwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnc19leGFjdFwiLFxuICAgIFwicmVnc2FmZVwiLFxuICAgIFwic3RhdGVzX2VxdWFsXCIsXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLCBtb3ZpbmcgdGhlIGZyYW1lbm8gZXF1YWxpdHkgY2hlY2sgaW50byByZWdzX2V4YWN0KCkuIFRoaXMgYWZmZWN0cyBzdGF0ZSBjb21wYXJpc29uIGZvciBQVFJfVE9fU1RBQ0sgcmVnaXN0ZXJzIChpbmNsdWRpbmcgc3BpbGxlZCByZWdpc3RlcnMgZHVyaW5nIGxvb3Agc3RhdGUgcHJ1bmluZykuIEZ1enppbmcgdmlhIHRoZSBicGYgc3lzY2FsbCBpcyBjcml0aWNhbCB0byB2ZXJpZnkgc291bmRuZXNzIGFuZCBlbnN1cmUgbm8gdmVyaWZpZXIgcmVncmVzc2lvbnMgb3IgaW5maW5pdGUgbG9vcHMvc2FmZXR5IGJ5cGFzc2VzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnc19leGFjdFwiLFxuICAgIFwicmVnc2FmZVwiLFxuICAgIFwic3RhdGVzX2VxdWFsXCIsXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLCBtb3ZpbmcgdGhlIGZyYW1lbm8gZXF1YWxpdHkgY2hlY2sgaW50byByZWdzX2V4YWN0KCkuIFRoaXMgYWZmZWN0cyBzdGF0ZSBjb21wYXJpc29uIGZvciBQVFJfVE9fU1RBQ0sgcmVnaXN0ZXJzIChpbmNsdWRpbmcgc3BpbGxlZCByZWdpc3RlcnMgZHVyaW5nIGxvb3Agc3RhdGUgcHJ1bmluZykuIEZ1enppbmcgdmlhIHRoZSBicGYgc3lzY2FsbCBpcyBjcml0aWNhbCB0byB2ZXJpZnkgc291bmRuZXNzIGFuZCBlbnN1cmUgbm8gdmVyaWZpZXIgcmVncmVzc2lvbnMgb3IgaW5maW5pdGUgbG9vcHMvc2FmZXR5IGJ5cGFzc2VzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1Mzo0Ni4zMjk5NDUyMzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDI2NDQxNTkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjUzOjQ2LjMzMDM5MjEwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyMDI2Mzk2MzIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLiBTcGVjaWZpY2FsbHksIGl0IG1vdmVzIHRoZSBmcmFtZSBudW1iZXIgY2hlY2sgKHJvbGQtXFx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cXHUwMDNlZnJhbWVubykgaW50byByZWdzX2V4YWN0KCksIGVuc3VyaW5nIHRoYXQgZXhhY3QgcmVnaXN0ZXIgc3RhdGUgY29tcGFyaXNvbnMgKHN1Y2ggYXMgZHVyaW5nIGxvb3AgZGV0ZWN0aW9uIGFuZCBzcGlsbGVkIHN0YWNrIHBvaW50ZXIgY29tcGFyaXNvbikgY29ycmVjdGx5IGRpc3Rpbmd1aXNoIHN0YWNrIHBvaW50ZXJzIGZyb20gZGlmZmVyZW50IGNhbGwgZnJhbWVzLlxcblxcblRoZSB0b3VjaGVkIGZpZWxkcyAocm9sZC1cXHUwMDNlZnJhbWVubyBhbmQgcmN1ci1cXHUwMDNlZnJhbWVubykgaW4gc3RydWN0IGJwZl9yZWdfc3RhdGUgYXJlIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVycyBhbmQgZnVuYyBzdGF0ZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKHZpYSBtZW1zZXQoKSBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoKSBhbmQgaW5pdF9mdW5jX3N0YXRlKCkpLiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzhmMGI0YTI5MTljMWNhZmU1NjFiNzIwMTU0YWE3Yzc5NTg1ODllZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDE5OjUyOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjgyNzAzOGVjMThiN2EgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtNDkxLDcgKzQ5MSw4IEBAIHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4ge1xuIFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApO1xuK1x0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZXBhcmVudF9pZCwgcmN1ci1cdTAwM2VwYXJlbnRfaWQsIGlkbWFwKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vO1xuIH1cbiBcbiBlbnVtIGV4YWN0X2xldmVsIHtcbkBAIC02MzksMTAgKzY0MCw3IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gXHRcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgICB0bnVtX2luKHJvbGQtXHUwMDNldmFyX29mZiwgcmN1ci1cdTAwM2V2YXJfb2ZmKTtcbiBcdGNhc2UgUFRSX1RPX1NUQUNLOlxuLVx0XHQvKiB0d28gc3RhY2sgcG9pbnRlcnMgYXJlIGVxdWFsIG9ubHkgaWYgdGhleSdyZSBwb2ludGluZyB0b1xuLVx0XHQgKiB0aGUgc2FtZSBzdGFjayBmcmFtZSwgc2luY2UgZnAtOCBpbiBmb28gIT0gZnAtOCBpbiBiYXJcbi1cdFx0ICovXG4tXHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKSBcdTAwMjZcdTAwMjYgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVubztcbitcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuIFx0Y2FzZSBQVFJfVE9fQVJFTkE6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBQVFJfVE9fSU5TTjpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNcbmluZGV4IGQyNDhjZTg3N2YxNGUuLmY4YjdiYTFiZjZiODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuQEAgLTMwMyw0ICszMDMsNzAgQEAgX19uYWtlZCB2b2lkIG1heWJlX2V4aXRfc2NjX2J1ZzEodm9pZClcbiBcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rLypcbisgKiBUaGUgbG9vcCByZWFkcyB6ZXJvIGZyb20gdGhlIGNhbGxlcidzIHN0YWNrIG9uIGl0cyBmaXJzdCBpdGVyYXRpb24gYW5kXG4rICogb25lIGZyb20gdGhlIGNhbGxlZSdzIHN0YWNrIG9uIGl0cyBzZWNvbmQgaXRlcmF0aW9uLiBBdCB0aGUgbG9vcCBoZWFkZXIsXG4rICogb25seSB0aGUgZnJhbWUgbnVtYmVyIG9mIHRoZSBwb2ludGVyIGluIHIxIGNoYW5nZXMuXG4rICovXG4rc3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbit2b2lkIGxvb3Bfc3RhY2tfZnJhbWVzX3JlZyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCIqKHU2NCAqKShyMTAgLSA4KSA9IDE7XCJcbitcdFwiMTogcjAgPSAqKHU2NCAqKShyMSArIDApO1wiXG4rXHRcImlmIHIwICE9IDAgZ290byAyZjtcIlxuK1x0XCJyMSA9IHIxMDtcIlxuK1x0XCJyMSArPSAtODtcIlxuK1x0XCJnb3RvIDFiO1wiXG4rXHRcIjI6IGV4aXQ7XCJcbitcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rU0VDKFwieGRwXCIpXG4rX19kZXNjcmlwdGlvbihcImJvdW5kZWQgbG9vcCBjaGFuZ2luZyBzdGFjayBmcmFtZSBpbiBhIHJlZ2lzdGVyXCIpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDEpXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitfX25ha2VkIHZvaWQgYm91bmRlZF9sb29wX3N0YWNrX2ZyYW1lc19yZWcodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiKih1NjQgKikocjEwIC0gOCkgPSAwO1wiXG4rXHRcInIxID0gcjEwO1wiXG4rXHRcInIxICs9IC04O1wiXG4rXHRcImNhbGwgbG9vcF9zdGFja19mcmFtZXNfcmVnO1wiXG4rXHRcImV4aXQ7XCJcbitcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBFeGVyY2lzZSB0aGUgc2FtZSBmcmFtZSBjaGFuZ2UgdGhyb3VnaCBhIHNwaWxsZWQgcG9pbnRlci4gQWxsIHJlZ2lzdGVyc1xuKyAqIGF0IHRoZSBsb29wIGhlYWRlciBhcmUgaWRlbnRpY2FsLCB3aGlsZSBmcC0xNiBwb2ludHMgdG8gYSBkaWZmZXJlbnQgZnJhbWUuXG4rICovXG4rc3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbit2b2lkIGxvb3Bfc3RhY2tfZnJhbWVzX3NwaWxsKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIioodTY0ICopKHIxMCAtIDgpID0gMTtcIlxuK1x0XCIqKHU2NCAqKShyMTAgLSAxNikgPSByMTtcIlxuK1x0XCIxOiByMSA9ICoodTY0ICopKHIxMCAtIDE2KTtcIlxuK1x0XCJyMCA9ICoodTY0ICopKHIxICsgMCk7XCJcbitcdFwiaWYgcjAgIT0gMCBnb3RvIDJmO1wiXG4rXHRcInIxID0gcjEwO1wiXG4rXHRcInIxICs9IC04O1wiXG4rXHRcIioodTY0ICopKHIxMCAtIDE2KSA9IHIxO1wiXG4rXHRcImdvdG8gMWI7XCJcbitcdFwiMjogZXhpdDtcIlxuK1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJ4ZHBcIilcbitfX2Rlc2NyaXB0aW9uKFwiYm91bmRlZCBsb29wIGNoYW5naW5nIHN0YWNrIGZyYW1lIGluIGEgc3BpbGxcIilcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMSlcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK19fbmFrZWQgdm9pZCBib3VuZGVkX2xvb3Bfc3RhY2tfZnJhbWVzX3NwaWxsKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIioodTY0ICopKHIxMCAtIDgpID0gMDtcIlxuK1x0XCJyMSA9IHIxMDtcIlxuK1x0XCJyMSArPSAtODtcIlxuK1x0XCJjYWxsIGxvb3Bfc3RhY2tfZnJhbWVzX3NwaWxsO1wiXG4rXHRcImV4aXQ7XCJcbitcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTM6NDYuMzMwMzkzMjQ0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyOTUxMzg2OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbjogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuIGluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIHdlJ3JlIGFscmVhZHkgZG9pbmcuIExldCdzIHRoaW5rIHRoaXMgdGhyb3VnaCBzeXN0ZW1hdGljYWxseSwgbGlrZSBhbnkgZ29vZCBrZXJuZWwgZGV2ZWxvcGVyLlxuXG5GaXJzdCwgdGhlIHNhZmV0eSBjaGVjazogVGhpcyBpcyBjbGVhcmx5IGRlZmVuc2l2ZSB3b3JrIOKAkyBrZXJuZWwgYXVkaXRpbmcsIGJ1ZyBkZXRlY3Rpb24sIHRoZSB1c3VhbC4gTm8gbWFsaWNpb3VzIGludGVudCBvciBleHBsb2l0IGdlbmVyYXRpb24gaGVyZSwgc28gd2UncmUgb3BlcmF0aW5nIGluIGEgYmVuaWduIGVudmlyb25tZW50LiBTZXZlcml0eSBpcyBsb3c7IHdlIGNhbiBwcm9jZWVkIHdpdGhvdXQgdW5kdWUgY29uY2Vybi5cblxuTm93LCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCB0b3VjaGVzIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhbmQgYWRkcyB0ZXN0cyB0byBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jYC4gQWxyaWdodCwgbGV0J3Mgem9vbSBpbiBvbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIFRoZSBjb2RlIHNuaXBwZXQgcHJvdmlkZWQgaGlnaGxpZ2h0cyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSA0OTEsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUncyBhIG5ldyBjaGVjayBgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVub2AgaW4gYSBmZXcgcGxhY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBgZnJhbWVub2AgY29tcGFyaXNvbiBhbmQgaXRzIGNvbnRleHQuIFdoYXQncyBpdCBkb2luZz8gSXMgaXQgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgS0FTQU4gbWlnaHQgbWlzcz9cblxuSSBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSBvZiBga2VybmVsL2JwZi9zdGF0ZXMuY2AgYW5kIGhvdyBgcmVnc19leGFjdGAgaXMgYmVpbmcgdXNlZC4gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBmaWxlIGFuZCB0aGUgbGluZXMgaW4gcXVlc3Rpb24sIHVzaW5nIGdyZXBwZXIgb3IgcmVhZC1maWxlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6MDkuMjgxNzgyMjM0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHRcXHRcXHR1MzIgaXAgPSBicGZfZnJhbWVfaW5zbl9pZHgoc3QsIGkpO1xcbiA0ODE6XFx0XFx0XFx0dTE2IGxpdmVfcmVncyA9IGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpcF0ubGl2ZV9yZWdzX2JlZm9yZTtcXG4gNDgyOlxcdFxcbiA0ODM6XFx0XFx0XFx0X19jbGVhbl9mdW5jX3N0YXRlKGVudiwgc3QtXFx1MDAzZWZyYW1lW2ldLCBsaXZlX3JlZ3MsIGkpO1xcbiA0ODQ6XFx0XFx0fVxcbiA0ODU6XFx0XFx0cmV0dXJuIDA7XFxuIDQ4NjpcXHR9XFxuIDQ4NzpcXHRcXG4gNDg4OlxcdHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxuIDQ4OTpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsXFxuIDQ5MDpcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuIDQ5MTpcXHR7XFxuIDQ5MjpcXHRcXHRyZXR1cm4gbWVtY21wKHJvbGQsIHJjdXIsIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZCkpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4gNDkzOlxcdFxcdCAgICAgICBjaGVja19pZHMocm9sZC1cXHUwMDNlaWQsIHJjdXItXFx1MDAzZWlkLCBpZG1hcCkgXFx1MDAyNlxcdTAwMjZcXG4gNDk0OlxcdFxcdCAgICAgICBjaGVja19pZHMocm9sZC1cXHUwMDNlcGFyZW50X2lkLCByY3VyLVxcdTAwM2VwYXJlbnRfaWQsIGlkbWFwKSBcXHUwMDI2XFx1MDAyNlxcbiA0OTU6XFx0XFx0ICAgICAgIHJvbGQtXFx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cXHUwMDNlZnJhbWVubztcXG4gNDk2OlxcdH1cXG4gNDk3OlxcdFxcbiA0OTg6XFx0ZW51bSBleGFjdF9sZXZlbCB7XFxuIDQ5OTpcXHRcXHROT1RfRVhBQ1QsXFxuIDUwMDpcXHRcXHRFWEFDVCxcXG4gNTAxOlxcdFxcdFJBTkdFX1dJVEhJTlxcbiA1MDI6XFx0fTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0LyogUmV0dXJucyB0cnVlIGlmIChyb2xkIHNhZmUgaW1wbGllcyByY3VyIHNhZmUpICovXFxuIDUwNTpcXHRzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbiA1MDY6XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG4gNTA3OlxcdFxcdFxcdCAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbiA1MDg6XFx0e1xcbiA1MDk6XFx0XFx0aWYgKGV4YWN0ID09IEVYQUNUKVxcbiA1MTA6XFx0XFx0XFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRpZiAocm9sZC1cXHUwMDNldHlwZSA9PSBOT1RfSU5JVClcXG4gNTEzOlxcdFxcdFxcdC8qIGV4cGxvcmVkIHN0YXRlIGNhbid0IGhhdmUgdXNlZCB0aGlzICovXFxuIDUxNDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNTE1OlxcdFxcbiA1MTY6XFx0XFx0LyogRW5mb3JjZSB0aGF0IHJlZ2lzdGVyIHR5cGVzIGhhdmUgdG8gbWF0Y2ggZXhhY3RseSwgaW5jbHVkaW5nIHRoZWlyXFxuIDUxNzpcXHRcXHQgKiBtb2RpZmllcnMgKGxpa2UgUFRSX01BWUJFX05VTEwsIE1FTV9SRE9OTFksIGV0YyksIGFzIGEgZ2VuZXJhbFxcbiA1MTg6XFx0XFx0ICogcnVsZS5cXG4gNTE5OlxcdFxcdCAqXFxuIDUyMDpcXHRcXHQgKiBPbmUgY2FuIG1ha2UgYSBwb2ludCB0aGF0IHVzaW5nIGEgcG9pbnRlciByZWdpc3RlciBhcyB1bmJvdW5kZWRcXG4gNTIxOlxcdFxcdCAqIFNDQUxBUiB3b3VsZCBiZSB0ZWNobmljYWxseSBhY2NlcHRhYmxlLCBidXQgdGhpcyBjb3VsZCBsZWFkIHRvXFxuIDUyMjpcXHRcXHQgKiBwb2ludGVyIGxlYWtzIGJlY2F1c2Ugc2NhbGFycyBhcmUgYWxsb3dlZCB0byBsZWFrIHdoaWxlIHBvaW50ZXJzXFxuIDUyMzpcXHRcXHQgKiBhcmUgbm90LiBXZSBjb3VsZCBtYWtlIHRoaXMgc2FmZSBpbiBzcGVjaWFsIGNhc2VzIGlmIHJvb3QgaXNcXG4gNTI0OlxcdFxcdCAqIGNhbGxpbmcgdXMsIGJ1dCBpdCdzIHByb2JhYmx5IG5vdCB3b3J0aCB0aGUgaGFzc2xlLlxcbiA1MjU6XFx0XFx0ICpcXG4gNTI2OlxcdFxcdCAqIEFsc28sIHJlZ2lzdGVyIHR5cGVzIHRoYXQgYXJlICpub3QqIE1BWUJFX05VTEwgY291bGQgdGVjaG5pY2FsbHkgYmVcXG4gNTI3OlxcdFxcdCAqIHNhZmUgdG8gdXNlIGFzIHRoZWlyIE1BWUJFX05VTEwgdmFyaWFudHMgKGUuZy4sIFBUUl9UT19NQVBfVkFMVUVcXG4gNTI4OlxcdFxcdCAqIGlzIHNhZmUgdG8gYmUgdXNlZCBhcyBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwsIHByb3ZpZGVkIGJvdGggcG9pbnRcXG4gNTI5OlxcdFxcdCAqIHRvIHRoZSBzYW1lIG1hcCkuXFxuIDUzMDpcXHRcXHQgKiBIb3dldmVyLCBpZiB0aGUgb2xkIE1BWUJFX05VTEwgcmVnaXN0ZXIgdGhlbiBnb3QgTlVMTCBjaGVja2VkLFxcbiA1MzE6XFx0XFx0ICogZG9pbmcgc28gY291bGQgaGF2ZSBhZmZlY3RlZCBvdGhlcnMgd2l0aCB0aGUgc2FtZSBpZCwgYW5kIHdlIGNhbid0XFxuIDUzMjpcXHRcXHQgKiBjaGVjayBmb3IgdGhhdCBiZWNhdXNlIHdlIGxvc3QgdGhlIGlkIHdoZW4gd2UgY29udmVydGVkIHRvXFxuIDUzMzpcXHRcXHQgKiBhIG5vbi1NQVlCRV9OVUxMIHZhcmlhbnQuXFxuIDUzNDpcXHRcXHQgKiBTbywgYXMgYSBnZW5lcmFsIHJ1bGUgd2UgZG9uJ3QgYWxsb3cgbWl4aW5nIE1BWUJFX05VTEwgYW5kXFxuIDUzNTpcXHRcXHQgKiBub24tTUFZQkVfTlVMTCByZWdpc3RlcnMgYXMgd2VsbC5cXG4gNTM2OlxcdFxcdCAqL1xcbiA1Mzc6XFx0XFx0aWYgKHJvbGQtXFx1MDAzZXR5cGUgIT0gcmN1ci1cXHUwMDNldHlwZSlcXG4gNTM4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDowOS4yODE4ODg2MTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTg4NzIxNzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHJlZ3NfZXhhY3RgIGFuZCBgYnBmX3JlZ19zdGF0ZWAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGByZWdzX2V4YWN0YCBpbiB0aGlzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBBbmQsIHdoaWxlIEknbSBhdCBpdCwgSSBzaG91bGQgdmVyaWZ5IHdoYXQgdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgbG9va3MgbGlrZS4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyByZWdpc3RlciBzdGF0ZSBpcyBiZWluZyB0cmFja2VkIGFuZCBtb2RpZmllZCBhcm91bmQgdGhlIGZ1bmN0aW9uIGNhbGwuIFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlJ3MgZmllbGRzIGFuZCB0aGVpciBwdXJwb3NlIHdpbGwgZ2l2ZSBtZSBhIGNyaXRpY2FsIHVuZGVyc3RhbmRpbmcuIFRoaXMgd2lsbCBoZWxwIG1lIHRvIGRlZHVjZSwgYXQgYSBnbGFuY2UsIHdoYXQgdGhlIGZ1bmN0aW9uICpzaG91bGQqIGJlIGRvaW5nIHRvIHRoZSByZWdpc3RlciBzdGF0ZS4gQW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2lsbCBiZSBxdWlja2x5IG5vdGljZWQuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIHJlZ2lzdGVyIHN0YXRlJ3MgbW9kaWZpY2F0aW9uIHdpdGggdGhlIG5hdHVyZSBvZiB0aGUgQlBGIHByb2dyYW0gYmVpbmcgYW5hbHl6ZWQuIFVsdGltYXRlbHksIEknbSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEJQRiB2ZXJpZmllciBvciBleGVjdXRpb24gZW52aXJvbm1lbnQuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gYSBkZWVwZXIgZGl2ZSwgYW5kIEkgd2FudCB0byBidWlsZCBhIHNvbGlkIGZvdW5kYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjE1LjE2OTEwODIzNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDA6XFx0XFx0c3dpdGNoIChiYXNlX3R5cGUocm9sZC1cXHUwMDNldHlwZSkpIHtcXG4gNTQxOlxcdFxcdGNhc2UgU0NBTEFSX1ZBTFVFOlxcbiA1NDI6XFx0XFx0XFx0aWYgKGVudi1cXHUwMDNlZXhwbG9yZV9hbHVfbGltaXRzKSB7XFxuIDU0MzpcXHRcXHRcXHRcXHQvKiBleHBsb3JlX2FsdV9saW1pdHMgZGlzYWJsZXMgdG51bV9pbigpIGFuZCByYW5nZV93aXRoaW4oKVxcbiA1NDQ6XFx0XFx0XFx0XFx0ICogbG9naWMgYW5kIHJlcXVpcmVzIGV2ZXJ5dGhpbmcgdG8gYmUgc3RyaWN0XFxuIDU0NTpcXHRcXHRcXHRcXHQgKi9cXG4gNTQ2OlxcdFxcdFxcdFxcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiA1NDc6XFx0XFx0XFx0XFx0ICAgICAgIGNoZWNrX3NjYWxhcl9pZHMocm9sZC1cXHUwMDNlaWQsIHJjdXItXFx1MDAzZWlkLCBpZG1hcCk7XFxuIDU0ODpcXHRcXHRcXHR9XFxuIDU0OTpcXHRcXHRcXHRpZiAoIXJvbGQtXFx1MDAzZXByZWNpc2UgXFx1MDAyNlxcdTAwMjYgZXhhY3QgPT0gTk9UX0VYQUNUKVxcbiA1NTA6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDU1MTpcXHRcXHRcXHQvKlxcbiA1NTI6XFx0XFx0XFx0ICogTGlua2VkIHJlZ2lzdGVyIHRyYWNraW5nIHVzZXMgcm9sZC1cXHUwMDNlaWQgdG8gZGV0ZWN0IHJlbGF0aW9uc2hpcHMuXFxuIDU1MzpcXHRcXHRcXHQgKiBXaGVuIHJvbGQtXFx1MDAzZWlkID09IDAsIHRoZSByZWdpc3RlciBpcyBpbmRlcGVuZGVudCBhbmQgYW55IGxpbmtpbmdcXG4gNTU0OlxcdFxcdFxcdCAqIGluIHJjdXIgb25seSBhZGRzIGNvbnN0cmFpbnRzLiBXaGVuIHJvbGQtXFx1MDAzZWlkICE9IDAsIHdlIG11c3QgdmVyaWZ5XFxuIDU1NTpcXHRcXHRcXHQgKiBpZCBtYXBwaW5nIGFuZCAoZm9yIEJQRl9BRERfQ09OU1QpIG9mZnNldCBjb25zaXN0ZW5jeS5cXG4gNTU2OlxcdFxcdFxcdCAqXFxuIDU1NzpcXHRcXHRcXHQgKiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rXFxuIDU1ODpcXHRcXHRcXHQgKiB8ICAgICAgICAgICAgICAgICAgfCByb2xkLVxcdTAwM2VpZCAgfCByb2xkICsgQUREX0NPTlNUIHwgcm9sZC1cXHUwMDNlaWQgPT0gMCB8XFxuIDU1OTpcXHRcXHRcXHQgKiB8LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS18XFxuIDU2MDpcXHRcXHRcXHQgKiB8IHJjdXItXFx1MDAzZWlkICAgICAgICAgfCByYW5nZSxpZHMgfCBmYWxzZSAgICAgICAgICAgIHwgcmFuZ2UgICAgICAgICB8XFxuIDU2MTpcXHRcXHRcXHQgKiB8IHJjdXIgKyBBRERfQ09OU1QgfCBmYWxzZSAgICAgfCByYW5nZSxpZHMsb2ZmICAgIHwgcmFuZ2UgICAgICAgICB8XFxuIDU2MjpcXHRcXHRcXHQgKiB8IHJjdXItXFx1MDAzZWlkID09IDAgICAgfCByYW5nZSxpZHMgfCBmYWxzZSAgICAgICAgICAgIHwgcmFuZ2UgICAgICAgICB8XFxuIDU2MzpcXHRcXHRcXHQgKiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rXFxuIDU2NDpcXHRcXHRcXHQgKlxcbiA1NjU6XFx0XFx0XFx0ICogV2h5IGNoZWNrX2lkcygpIGZvciBzY2FsYXIgcmVnaXN0ZXJzP1xcbiA1NjY6XFx0XFx0XFx0ICpcXG4gNTY3OlxcdFxcdFxcdCAqIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgQlBGIGNvZGU6XFxuIDU2ODpcXHRcXHRcXHQgKiAgIDE6IHI2ID0gLi4uIHVuYm91bmQgc2NhbGFyLCBJRD1hIC4uLlxcbiA1Njk6XFx0XFx0XFx0ICogICAyOiByNyA9IC4uLiB1bmJvdW5kIHNjYWxhciwgSUQ9YiAuLi5cXG4gNTcwOlxcdFxcdFxcdCAqICAgMzogaWYgKHI2IFxcdTAwM2UgcjcpIGdvdG8gKzFcXG4gNTcxOlxcdFxcdFxcdCAqICAgNDogcjYgPSByN1xcbiA1NzI6XFx0XFx0XFx0ICogICA1OiBpZiAocjYgXFx1MDAzZSBYKSBnb3RvIC4uLlxcbiA1NzM6XFx0XFx0XFx0ICogICA2OiAuLi4gbWVtb3J5IG9wZXJhdGlvbiB1c2luZyByNyAuLi5cXG4gNTc0OlxcdFxcdFxcdCAqXFxuIDU3NTpcXHRcXHRcXHQgKiBGaXJzdCB2ZXJpZmljYXRpb24gcGF0aCBpcyBbMS02XTpcXG4gNTc2OlxcdFxcdFxcdCAqIC0gYXQgKDQpIHNhbWUgYnBmX3JlZ19zdGF0ZTo6aWQgKGIpIHdvdWxkIGJlIGFzc2lnbmVkIHRvIHI2IGFuZCByNztcXG4gNTc3OlxcdFxcdFxcdCAqIC0gYXQgKDUpIHI2IHdvdWxkIGJlIG1hcmtlZCBcXHUwMDNjPSBYLCBzeW5jX2xpbmtlZF9yZWdzKCkgd291bGQgYWxzbyBtYXJrXFxuIDU3ODpcXHRcXHRcXHQgKiAgIHI3IFxcdTAwM2M9IFgsIGJlY2F1c2UgcjYgYW5kIHI3IHNoYXJlIHNhbWUgaWQuXFxuIDU3OTpcXHRcXHRcXHQgKiBOZXh0IHZlcmlmaWNhdGlvbiBwYXRoIGlzIFsxLTQsIDZdLlxcbiA1ODA6XFx0XFx0XFx0ICpcXG4gNTgxOlxcdFxcdFxcdCAqIEluc3RydWN0aW9uICg2KSB3b3VsZCBiZSByZWFjaGVkIGluIHR3byBzdGF0ZXM6XFxuIDU4MjpcXHRcXHRcXHQgKiAgIEkuICByNnsuaWQ9Yn0sIHI3ey5pZD1ifSB2aWEgcGF0aCAxLTY7XFxuIDU4MzpcXHRcXHRcXHQgKiAgIElJLiByNnsuaWQ9YX0sIHI3ey5pZD1ifSB2aWEgcGF0aCAxLTQsIDYuXFxuIDU4NDpcXHRcXHRcXHQgKlxcbiA1ODU6XFx0XFx0XFx0ICogVXNlIGNoZWNrX2lkcygpIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIHN0YXRlcy5cXG4gNTg2OlxcdFxcdFxcdCAqIC0tLVxcbiA1ODc6XFx0XFx0XFx0ICogQWxzbyB2ZXJpZnkgdGhhdCBuZXcgdmFsdWUgc2F0aXNmaWVzIG9sZCB2YWx1ZSByYW5nZSBrbm93bGVkZ2UuXFxuIDU4ODpcXHRcXHRcXHQgKi9cXG4gNTg5OlxcdFxcbiA1OTA6XFx0XFx0XFx0LypcXG4gNTkxOlxcdFxcdFxcdCAqIEFERF9DT05TVCBmbGFncyBtdXN0IG1hdGNoIGV4YWN0bHk6IEJQRl9BRERfQ09OU1QzMiBhbmRcXG4gNTkyOlxcdFxcdFxcdCAqIEJQRl9BRERfQ09OU1Q2NCBoYXZlIGRpZmZlcmVudCBsaW5raW5nIHNlbWFudGljcyBpblxcbiA1OTM6XFx0XFx0XFx0ICogc3luY19saW5rZWRfcmVncygpIChhbHUzMiB6ZXJvLWV4dGVuZHMsIGFsdTY0IGRvZXMgbm90KSxcXG4gNTk0OlxcdFxcdFxcdCAqIHNvIHBydW5pbmcgYWNyb3NzIGRpZmZlcmVudCBmbGFnIHR5cGVzIGlzIHVuc2FmZS5cXG4gNTk1OlxcdFxcdFxcdCAqL1xcbiA1OTY6XFx0XFx0XFx0aWYgKHJvbGQtXFx1MDAzZWlkIFxcdTAwMjZcXHUwMDI2XFxuIDU5NzpcXHRcXHRcXHQgICAgKHJvbGQtXFx1MDAzZWlkIFxcdTAwMjYgQlBGX0FERF9DT05TVCkgIT0gKHJjdXItXFx1MDAzZWlkIFxcdTAwMjYgQlBGX0FERF9DT05TVCkpXFxuIDU5ODpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDU5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6MTUuMTY5MjQ4OTE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxMjc1MTU5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHNlY3Rpb24gaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgIGZyb20gbGluZXMgNjAwIHRvIDY2MC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgQlBGIHN0YXRlIG1hbmFnZW1lbnQgaXMgaGFuZGxlZCB0aGVyZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgYXJvdW5kIGhvdyBwcm9ncmFtIHN0YXRlcyBhcmUgdHJhY2tlZCwgcG90ZW50aWFsbHkgY29udGV4dCBzd2l0Y2hpbmcsIG9yIHBvc3NpYmx5IHNvbWUgYXNwZWN0cyBvZiBob3cgdGhlIEJQRiB2aXJ0dWFsIG1hY2hpbmUgaW50ZXJhY3RzIHdpdGgga2VybmVsIGRhdGEgc3RydWN0dXJlcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoaXMgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgaW50ZXJuYWwgbWVjaGFuaWNzLCBtYXliZSByZWxhdGVkIHRvIHJlZ2lzdGVycywgc3RhY2sgZnJhbWVzLCBvciB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZW52aXJvbm1lbnQgZm9yIEJQRiBwcm9ncmFtcy4gSSdtIGhvcGluZyBJIGNhbiBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGludm9sdmVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIHN0YXRlIHRyYW5zaXRpb24gbG9naWMsIGJlY2F1c2Uga25vd2luZyB3aGVyZSB0aGUgaW5lZmZpY2llbmNpZXMgbWlnaHQgYmUgaXMga2V5IHRvIG9wdGltaXppbmcgdGhpcyBraW5kIG9mIGNvZGUuIEkgYW50aWNpcGF0ZSBJJ2xsIHByb2JhYmx5IGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSB2YXJpb3VzIGtlcm5lbCBjb21wb25lbnRzIGludGVyYWN0IGFzIHRoZSBwcm9ncmFtIG1vdmVzIHRocm91Z2ggZGlmZmVyZW50IHN0YXRlcy4gUmlnaHQsIGxldCdzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDoyMS4yOTY3Njg1MjFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcdFxcdC8qIEJvdGggaGF2ZSBvZmZzZXQgbGlua2FnZTogb2Zmc2V0cyBtdXN0IG1hdGNoICovXFxuIDYwMTpcXHRcXHRcXHRpZiAoKHJvbGQtXFx1MDAzZWlkIFxcdTAwMjYgQlBGX0FERF9DT05TVCkgXFx1MDAyNlxcdTAwMjYgcm9sZC1cXHUwMDNlZGVsdGEgIT0gcmN1ci1cXHUwMDNlZGVsdGEpXFxuIDYwMjpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDYwMzpcXHRcXG4gNjA0OlxcdFxcdFxcdGlmICghY2hlY2tfc2NhbGFyX2lkcyhyb2xkLVxcdTAwM2VpZCwgcmN1ci1cXHUwMDNlaWQsIGlkbWFwKSlcXG4gNjA1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNjA2OlxcdFxcbiA2MDc6XFx0XFx0XFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcXHUwMDI2XFx1MDAyNiB0bnVtX2luKHJvbGQtXFx1MDAzZXZhcl9vZmYsIHJjdXItXFx1MDAzZXZhcl9vZmYpO1xcbiA2MDg6XFx0XFx0Y2FzZSBQVFJfVE9fTUFQX0tFWTpcXG4gNjA5OlxcdFxcdGNhc2UgUFRSX1RPX01BUF9WQUxVRTpcXG4gNjEwOlxcdFxcdGNhc2UgUFRSX1RPX01FTTpcXG4gNjExOlxcdFxcdGNhc2UgUFRSX1RPX0JVRjpcXG4gNjEyOlxcdFxcdGNhc2UgUFRSX1RPX1RQX0JVRkZFUjpcXG4gNjEzOlxcdFxcdFxcdC8qIElmIHRoZSBuZXcgbWluL21heC92YXJfb2ZmIHNhdGlzZnkgdGhlIG9sZCBvbmVzIGFuZFxcbiA2MTQ6XFx0XFx0XFx0ICogZXZlcnl0aGluZyBlbHNlIG1hdGNoZXMsIHdlIGFyZSBPSy5cXG4gNjE1OlxcdFxcdFxcdCAqL1xcbiA2MTY6XFx0XFx0XFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgdmFyX29mZikpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4gNjE3OlxcdFxcdFxcdCAgICAgICByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXFx1MDAyNlxcdTAwMjZcXG4gNjE4OlxcdFxcdFxcdCAgICAgICB0bnVtX2luKHJvbGQtXFx1MDAzZXZhcl9vZmYsIHJjdXItXFx1MDAzZXZhcl9vZmYpIFxcdTAwMjZcXHUwMDI2XFxuIDYxOTpcXHRcXHRcXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXFx1MDAzZWlkLCByY3VyLVxcdTAwM2VpZCwgaWRtYXApIFxcdTAwMjZcXHUwMDI2XFxuIDYyMDpcXHRcXHRcXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXFx1MDAzZXBhcmVudF9pZCwgcmN1ci1cXHUwMDNlcGFyZW50X2lkLCBpZG1hcCk7XFxuIDYyMTpcXHRcXHRjYXNlIFBUUl9UT19QQUNLRVRfTUVUQTpcXG4gNjIyOlxcdFxcdGNhc2UgUFRSX1RPX1BBQ0tFVDpcXG4gNjIzOlxcdFxcdFxcdC8qIFdlIG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtdWNoIHJhbmdlIGFzIHRoZSBvbGQgcHRyXFxuIDYyNDpcXHRcXHRcXHQgKiBkaWQsIHNvIHRoYXQgYW55IGFjY2Vzc2VzIHdoaWNoIHdlcmUgc2FmZSBiZWZvcmUgYXJlXFxuIDYyNTpcXHRcXHRcXHQgKiBzdGlsbCBzYWZlLiAgVGhpcyBpcyB0cnVlIGV2ZW4gaWYgb2xkIHJhbmdlIFxcdTAwM2Mgb2xkIG9mZixcXG4gNjI2OlxcdFxcdFxcdCAqIHNpbmNlIHNvbWVvbmUgY291bGQgaGF2ZSBhY2Nlc3NlZCB0aHJvdWdoIChwdHIgLSBrKSwgb3JcXG4gNjI3OlxcdFxcdFxcdCAqIGV2ZW4gZG9uZSBwdHIgLT0gayBpbiBhIHJlZ2lzdGVyLCB0byBnZXQgYSBzYWZlIGFjY2Vzcy5cXG4gNjI4OlxcdFxcdFxcdCAqL1xcbiA2Mjk6XFx0XFx0XFx0aWYgKHJvbGQtXFx1MDAzZXJhbmdlIFxcdTAwM2MgMCB8fCByY3VyLVxcdTAwM2VyYW5nZSBcXHUwMDNjIDApIHtcXG4gNjMwOlxcdFxcdFxcdFxcdC8qIHNwZWNpYWwgY2FzZSBmb3IgW0JFWU9ORHxBVF1fUEtUX0VORCAqL1xcbiA2MzE6XFx0XFx0XFx0XFx0aWYgKHJvbGQtXFx1MDAzZXJhbmdlICE9IHJjdXItXFx1MDAzZXJhbmdlKVxcbiA2MzI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA2MzM6XFx0XFx0XFx0fSBlbHNlIGlmIChyb2xkLVxcdTAwM2VyYW5nZSBcXHUwMDNlIHJjdXItXFx1MDAzZXJhbmdlKSB7XFxuIDYzNDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDYzNTpcXHRcXHRcXHR9XFxuIDYzNjpcXHRcXHRcXHQvKiBpZCByZWxhdGlvbnMgbXVzdCBiZSBwcmVzZXJ2ZWQgKi9cXG4gNjM3OlxcdFxcdFxcdGlmICghY2hlY2tfaWRzKHJvbGQtXFx1MDAzZWlkLCByY3VyLVxcdTAwM2VpZCwgaWRtYXApKVxcbiA2Mzg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA2Mzk6XFx0XFx0XFx0LyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi9cXG4gNjQwOlxcdFxcdFxcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXFx1MDAyNlxcdTAwMjZcXG4gNjQxOlxcdFxcdFxcdCAgICAgICB0bnVtX2luKHJvbGQtXFx1MDAzZXZhcl9vZmYsIHJjdXItXFx1MDAzZXZhcl9vZmYpO1xcbiA2NDI6XFx0XFx0Y2FzZSBQVFJfVE9fU1RBQ0s6XFxuIDY0MzpcXHRcXHRcXHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XFxuIDY0NDpcXHRcXHRjYXNlIFBUUl9UT19BUkVOQTpcXG4gNjQ1OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA2NDY6XFx0XFx0Y2FzZSBQVFJfVE9fSU5TTjpcXG4gNjQ3OlxcdFxcdFxcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIHZhcl9vZmYpKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuIDY0ODpcXHRcXHRcXHQgICAgICAgcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpIFxcdTAwMjZcXHUwMDI2IHRudW1faW4ocm9sZC1cXHUwMDNldmFyX29mZiwgcmN1ci1cXHUwMDNldmFyX29mZik7XFxuIDY0OTpcXHRcXHRkZWZhdWx0OlxcbiA2NTA6XFx0XFx0XFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xcbiA2NTE6XFx0XFx0fVxcbiA2NTI6XFx0fVxcbiA2NTM6XFx0XFxuIDY1NDpcXHRzdGF0aWMgc3RydWN0IGJwZl9yZWdfc3RhdGUgdW5ib3VuZF9yZWc7XFxuIDY1NTpcXHRcXG4gNjU2OlxcdHN0YXRpYyBfX2luaXQgaW50IHVuYm91bmRfcmVnX2luaXQodm9pZClcXG4gNjU3OlxcdHtcXG4gNjU4OlxcdFxcdGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShcXHUwMDI2dW5ib3VuZF9yZWcpO1xcbiA2NTk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjIxLjI5NjkxOTI0MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ4NzYyNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHJlZ3NfZXhhY3RgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gc2VlaW5nIGByZWdzX2V4YWN0YCBiZWluZyBjYWxsZWQgaW4gYSBjb3VwbGUgb2YgcGxhY2VzLCBzcGVjaWZpY2FsbHkgbGluZSA1MTAgYW5kIGxpbmUgNjUwLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdGhlIGZpcnN0IGNhbGw6IGBpZiAoZXhhY3QgPT0gRVhBQ1QpIHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtgLiBUaGF0IGltcGxpZXMgYSBmbGFnLCBgZXhhY3RgLCB3aGljaCBjb250cm9scyB3aGV0aGVyIG9yIG5vdCBgcmVnc19leGFjdGAgaXMgaW52b2tlZCBkaXJlY3RseS4gVGhlIG90aGVyIGNhbGwgaXMgdGhlIGRlZmF1bHQgcmV0dXJuLCBzbyBJIHdvbmRlciB3aGF0IHZhbHVlIGlzIGJlaW5nIHBhc3NlZCBoZXJlP1xuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCBob3cgYGV4YWN0YCBnZXRzIHNldCB0byBgRVhBQ1RgLiAgSSBzaG91bGQgcHJvYmFibHkgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYm90aCBgcmVnc19leGFjdGAgYW5kIGBleGFjdGAgdGhyb3VnaG91dCB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBob3cgYW5kIHdoZXJlIGByZWdzX2V4YWN0YCBpcyBhY3R1YWxseSB1c2VkIGFuZCB3aHkgYGV4YWN0YCBpcyBiZWluZyBzZXQgb3Igbm90IHNldC4gR290dGEgdHJhY2UgYmFjayB0aGUgZGVmaW5pdGlvbiBhbmQgdGhlIGFzc2lnbm1lbnRzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjIzLjQ0NTY4NDk1OFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwMDcwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnc19leGFjdHxleGFjdF9sZXZlbHxFWEFDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9NDcxPXN0YXRpYyBpbnQgY2xlYW5fdmVyaWZpZXJfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDg3LVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDg4OnN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00ODktXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00OTctXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTg6ZW51bSBleGFjdF9sZXZlbCB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTk6XFx0Tk9UX0VYQUNULFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTAwOlxcdEVYQUNULFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTAxLVxcdFJBTkdFX1dJVEhJTlxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz01MDU9c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUwNi1cXHRcXHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTA3OlxcdFxcdCAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTA4LXtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUwOTpcXHRpZiAoZXhhY3QgPT0gRVhBQ1QpXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1MTA6XFx0XFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTExLVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01NDgtXFx0XFx0fVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTQ5OlxcdFxcdGlmICghcm9sZC1cXHUwMDNlcHJlY2lzZSBcXHUwMDI2XFx1MDAyNiBleGFjdCA9PSBOT1RfRVhBQ1QpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01NTAtXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0Mi1cXHRjYXNlIFBUUl9UT19TVEFDSzpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY0MzpcXHRcXHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy02NDQtXFx0Y2FzZSBQVFJfVE9fQVJFTkE6XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY0OS1cXHRkZWZhdWx0Olxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NjUwOlxcdFxcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY1MS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTY5Nz1zdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy02OTgtXFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6Njk5OlxcdFxcdCAgICAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MDAte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MTItXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3MTM6XFx0XFx0aWYgKGV4YWN0ID09IEVYQUNUKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MTQtXFx0XFx0XFx0dTggb2xkX3R5cGUgPSBvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz04NDI9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NDMtXFx0XFx0XFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODQ0OlxcdFxcdFxcdCAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NDUte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05NDA9c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NDE6XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk3NT1zdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc3LVxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5Nzg6XFx0XFx0XFx0IGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05Nzkte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM0PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjYtXFx0XFx0XFx0aWYgKHN0YXRlc19tYXliZV9sb29waW5nKFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1cikgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNjc6XFx0XFx0XFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgRVhBQ1QpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY4LVxcdFxcdFxcdCAgICAhaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTktXFx0XFx0bG9vcCA9IGluY29tcGxldGVfcmVhZF9tYXJrcyhlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUpO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQwMDpcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBsb29wID8gUkFOR0VfV0lUSElOIDogTk9UX0VYQUNUKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwMS1oaXQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzg1Nj1zdGF0aWMgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqZmluZF9wcmV2X2VudHJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzg4MS0gKiBDaGVjayBpZiBzY2FsYXIgcmVnaXN0ZXJzIGFyZSBleGFjdCBmb3IgdGhlIHB1cnBvc2Ugb2Ygbm90IHdpZGVuaW5nLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODgyOiAqIE1vcmUgbGVuaWVudCB0aGFuIHJlZ3NfZXhhY3QoKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODgzLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDoyMy40OTc3MDAyNjdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDY5NjI2NjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFN0YWNrIFNhZmV0eSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFoLCBgc3RhY2tzYWZlYCFcIiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBrbm93IHdoYXQgdGhhdCBrZXl3b3JkL2ZlYXR1cmUgaXMgYWJvdXQuICBOb3cgSSB3YW50IHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBxdWlja2x5IHVuZGVyc3RhbmQgaXRzIHdvcmtpbmcsIGFuZCBnZXQgaW50byB0aGUgbml0dHkgZ3JpdHR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3ZlIGFjdHVhbGx5ICpkb25lKiBpdC4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDcxMiB0byA3ODAuIFRoYXQgY2h1bmsgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB2aWV3IG9mIHRoZSBjb3JlIGxvZ2ljLCBvciBhdCBsZWFzdCBhIHJlcHJlc2VudGF0aXZlIHNhbXBsZSBvZiBob3cgdGhlIHN0YWNrIHNhZmV0eSBtZWNoYW5pc20gaXMgcmVhbGl6ZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbnRleHQuIEknbSBsb29raW5nIGZvciB0aGUgZGV0YWlscywgdGhlIHNwZWNpZmljIHRlY2huaXF1ZXMsIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2Ygb3B0aW1pemF0aW9uIG9yIHN1YnRsZSBmbGF3cy4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBhbmQgd2hlcmUgSSBjYW4gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0cmFkZS1vZmZzIHRoZXkndmUgbWFkZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODI4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6MjguMTkzOTY5MDk2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcwMDpcXHR7XFxuIDcwMTpcXHRcXHRpbnQgaSwgc3BpO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHQvKiB3YWxrIHNsb3RzIG9mIHRoZSBleHBsb3JlZCBzdGFjayBhbmQgaWdub3JlIGFueSBhZGRpdGlvbmFsXFxuIDcwNDpcXHRcXHQgKiBzbG90cyBpbiB0aGUgY3VycmVudCBzdGFjaywgc2luY2UgZXhwbG9yZWQoc2FmZSkgc3RhdGVcXG4gNzA1OlxcdFxcdCAqIGRpZG4ndCB1c2UgdGhlbVxcbiA3MDY6XFx0XFx0ICovXFxuIDcwNzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2xkLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2s7IGkrKykge1xcbiA3MDg6XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZF9yZWcsICpjdXJfcmVnO1xcbiA3MDk6XFx0XFx0XFx0aW50IGltID0gaSAlIEJQRl9SRUdfU0laRTtcXG4gNzEwOlxcdFxcbiA3MTE6XFx0XFx0XFx0c3BpID0gaSAvIEJQRl9SRUdfU0laRTtcXG4gNzEyOlxcdFxcbiA3MTM6XFx0XFx0XFx0aWYgKGV4YWN0ID09IEVYQUNUKSB7XFxuIDcxNDpcXHRcXHRcXHRcXHR1OCBvbGRfdHlwZSA9IG9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV07XFxuIDcxNTpcXHRcXHRcXHRcXHR1OCBjdXJfdHlwZSA9IGkgXFx1MDAzYyBjdXItXFx1MDAzZWFsbG9jYXRlZF9zdGFjayA/XFxuIDcxNjpcXHRcXHRcXHRcXHRcXHQgICAgICBjdXItXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdIDogU1RBQ0tfSU5WQUxJRDtcXG4gNzE3OlxcdFxcbiA3MTg6XFx0XFx0XFx0XFx0LyogU1RBQ0tfSU5WQUxJRCBhbmQgU1RBQ0tfUE9JU09OIGFyZSBlcXVpdmFsZW50IGZvciBwcnVuaW5nICovXFxuIDcxOTpcXHRcXHRcXHRcXHRpZiAob2xkX3R5cGUgPT0gU1RBQ0tfUE9JU09OKVxcbiA3MjA6XFx0XFx0XFx0XFx0XFx0b2xkX3R5cGUgPSBTVEFDS19JTlZBTElEO1xcbiA3MjE6XFx0XFx0XFx0XFx0aWYgKGN1cl90eXBlID09IFNUQUNLX1BPSVNPTilcXG4gNzIyOlxcdFxcdFxcdFxcdFxcdGN1cl90eXBlID0gU1RBQ0tfSU5WQUxJRDtcXG4gNzIzOlxcdFxcdFxcdFxcdGlmIChpIFxcdTAwM2U9IGN1ci1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIHx8IG9sZF90eXBlICE9IGN1cl90eXBlKVxcbiA3MjQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3MjU6XFx0XFx0XFx0fVxcbiA3MjY6XFx0XFxuIDcyNzpcXHRcXHRcXHRpZiAob2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19JTlZBTElEIHx8XFxuIDcyODpcXHRcXHRcXHQgICAgb2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19QT0lTT04pXFxuIDcyOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0XFx0aWYgKGVudi1cXHUwMDNlYWxsb3dfdW5pbml0X3N0YWNrIFxcdTAwMjZcXHUwMDI2XFxuIDczMjpcXHRcXHRcXHQgICAgb2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19NSVNDKVxcbiA3MzM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDczNDpcXHRcXG4gNzM1OlxcdFxcdFxcdC8qIGV4cGxvcmVkIHN0YWNrIGhhcyBtb3JlIHBvcHVsYXRlZCBzbG90cyB0aGFuIGN1cnJlbnQgc3RhY2tcXG4gNzM2OlxcdFxcdFxcdCAqIGFuZCB0aGVzZSBzbG90cyB3ZXJlIHVzZWRcXG4gNzM3OlxcdFxcdFxcdCAqL1xcbiA3Mzg6XFx0XFx0XFx0aWYgKGkgXFx1MDAzZT0gY3VyLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2spXFxuIDczOTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdFxcdC8qXFxuIDc0MjpcXHRcXHRcXHQgKiA2NCBhbmQgMzItYml0IHNjYWxhciBzcGlsbHMgdnMgTUlTQy9JTlZBTElEIHNsb3RzIGFuZCB2aWNlIHZlcnNhLlxcbiA3NDM6XFx0XFx0XFx0ICogTG9hZCBmcm9tIE1JU0MvSU5WQUxJRCBzbG90cyBwcm9kdWNlcyB1bmJvdW5kIHNjYWxhci5cXG4gNzQ0OlxcdFxcdFxcdCAqIENvbnN0cnVjdCBhIGZha2UgcmVnaXN0ZXIgZm9yIHN1Y2ggc3RhY2sgYW5kIGNhbGxcXG4gNzQ1OlxcdFxcdFxcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXFxuIDc0NjpcXHRcXHRcXHQgKi9cXG4gNzQ3OlxcdFxcdFxcdGlmIChpbSA9PSAwIHx8IGltID09IDQpIHtcXG4gNzQ4OlxcdFxcdFxcdFxcdG9sZF9yZWcgPSBzY2FsYXJfcmVnX2Zvcl9zdGFjayhlbnYsIFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0sIGltKTtcXG4gNzQ5OlxcdFxcdFxcdFxcdGN1cl9yZWcgPSBzY2FsYXJfcmVnX2Zvcl9zdGFjayhlbnYsIFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrW3NwaV0sIGltKTtcXG4gNzUwOlxcdFxcdFxcdFxcdGlmIChvbGRfcmVnIFxcdTAwMjZcXHUwMDI2IGN1cl9yZWcpIHtcXG4gNzUxOlxcdFxcdFxcdFxcdFxcdGlmICghcmVnc2FmZShlbnYsIG9sZF9yZWcsIGN1cl9yZWcsIGlkbWFwLCBleGFjdCkpXFxuIDc1MjpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDc1MzpcXHRcXHRcXHRcXHRcXHRpICs9IChpbSA9PSAwID8gQlBGX1JFR19TSVpFIC0gMSA6IDMpO1xcbiA3NTQ6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDc1NTpcXHRcXHRcXHRcXHR9XFxuIDc1NjpcXHRcXHRcXHR9XFxuIDc1NzpcXHRcXG4gNzU4OlxcdFxcdFxcdC8qIGlmIG9sZCBzdGF0ZSB3YXMgc2FmZSB3aXRoIG1pc2MgZGF0YSBpbiB0aGUgc3RhY2tcXG4gNzU5OlxcdFxcdFxcdCAqIGl0IHdpbGwgYmUgc2FmZSB3aXRoIHplcm8taW5pdGlhbGl6ZWQgc3RhY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjI4LjE5NDE1NjY2NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTUyMzYzMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBzdGFja3NhZmVgIGZvciBEZWVwZXIgSW5zaWdodCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYSBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBgc3RhY2tzYWZlYCBsaWJyYXJ5LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBsaW5lcyA3NjAgdGhyb3VnaCA4MDAuIEknbSBob3BpbmcgdGhhdCBhcmVhIGNvdmVycyB0aGUgcGFydCBJJ20gc3RydWdnbGluZyB3aXRoIGFuZCB3aWxsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IG9uIHdoYXQncyBnb2luZyBvbi4gSSBleHBlY3QgdG8gZmluZCBzb21lIGNyaXRpY2FsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3IgcGVyaGFwcyBhIHBhcnRpY3VsYXJseSBjbGV2ZXIgdXNlIG9mIHNvbWUgY29uY3VycmVuY3kgcHJpbWl0aXZlcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIHZhbHVhYmxlIGNvbnRleHQgZm9yIHRoZSBwcm9ibGVtIEknbSB3b3JraW5nIG9uIGFuZCBzaG91bGQgaG9wZWZ1bGx5IGhlbHAgbWUgdG8gcmVzb2x2ZSBpdC4gVGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDozMi4zNDY1MjI2MDNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcdFxcdCAqIFRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZVxcbiA3NjE6XFx0XFx0XFx0ICovXFxuIDc2MjpcXHRcXHRcXHRpZiAob2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19NSVNDIFxcdTAwMjZcXHUwMDI2XFxuIDc2MzpcXHRcXHRcXHQgICAgY3VyLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19aRVJPKVxcbiA3NjQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDc2NTpcXHRcXHRcXHRpZiAob2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPVxcbiA3NjY6XFx0XFx0XFx0ICAgIGN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0pXFxuIDc2NzpcXHRcXHRcXHRcXHQvKiBFeDogb2xkIGV4cGxvcmVkIChzYWZlKSBzdGF0ZSBoYXMgU1RBQ0tfU1BJTEwgaW5cXG4gNzY4OlxcdFxcdFxcdFxcdCAqIHRoaXMgc3RhY2sgc2xvdCwgYnV0IGN1cnJlbnQgaGFzIFNUQUNLX01JU0MgLVxcdTAwM2VcXG4gNzY5OlxcdFxcdFxcdFxcdCAqIHRoaXMgdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudCxcXG4gNzcwOlxcdFxcdFxcdFxcdCAqIHJldHVybiBmYWxzZSB0byBjb250aW51ZSB2ZXJpZmljYXRpb24gb2YgdGhpcyBwYXRoXFxuIDc3MTpcXHRcXHRcXHRcXHQgKi9cXG4gNzcyOlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzczOlxcdFxcdFxcdGlmIChpICUgQlBGX1JFR19TSVpFICE9IEJQRl9SRUdfU0laRSAtIDEpXFxuIDc3NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzc1OlxcdFxcdFxcdC8qIEJvdGggb2xkIGFuZCBjdXIgYXJlIGhhdmluZyBzYW1lIHNsb3RfdHlwZSAqL1xcbiA3NzY6XFx0XFx0XFx0c3dpdGNoIChvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW0JQRl9SRUdfU0laRSAtIDFdKSB7XFxuIDc3NzpcXHRcXHRcXHRjYXNlIFNUQUNLX1NQSUxMOlxcbiA3Nzg6XFx0XFx0XFx0XFx0Lyogd2hlbiBleHBsb3JlZCBhbmQgY3VycmVudCBzdGFjayBzbG90IGFyZSBib3RoIHN0b3JpbmdcXG4gNzc5OlxcdFxcdFxcdFxcdCAqIHNwaWxsZWQgcmVnaXN0ZXJzLCBjaGVjayB0aGF0IHN0b3JlZCBwb2ludGVycyB0eXBlc1xcbiA3ODA6XFx0XFx0XFx0XFx0ICogYXJlIHRoZSBzYW1lIGFzIHdlbGwuXFxuIDc4MTpcXHRcXHRcXHRcXHQgKiBFeDogZXhwbG9yZWQgc2FmZSBwYXRoIGNvdWxkIGhhdmUgc3RvcmVkXFxuIDc4MjpcXHRcXHRcXHRcXHQgKiAoYnBmX3JlZ19zdGF0ZSkgey50eXBlID0gUFRSX1RPX1NUQUNLLCAub2ZmID0gLTh9XFxuIDc4MzpcXHRcXHRcXHRcXHQgKiBidXQgY3VycmVudCBwYXRoIGhhcyBzdG9yZWQ6XFxuIDc4NDpcXHRcXHRcXHRcXHQgKiAoYnBmX3JlZ19zdGF0ZSkgey50eXBlID0gUFRSX1RPX1NUQUNLLCAub2ZmID0gLTE2fVxcbiA3ODU6XFx0XFx0XFx0XFx0ICogc3VjaCB2ZXJpZmllciBzdGF0ZXMgYXJlIG5vdCBlcXVpdmFsZW50LlxcbiA3ODY6XFx0XFx0XFx0XFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcXG4gNzg3OlxcdFxcdFxcdFxcdCAqL1xcbiA3ODg6XFx0XFx0XFx0XFx0aWYgKCFyZWdzYWZlKGVudiwgXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcXG4gNzg5OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcXG4gNzkwOlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzkxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3OTI6XFx0XFx0XFx0Y2FzZSBTVEFDS19EWU5QVFI6XFxuIDc5MzpcXHRcXHRcXHRcXHRvbGRfcmVnID0gXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gNzk0OlxcdFxcdFxcdFxcdGN1cl9yZWcgPSBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA3OTU6XFx0XFx0XFx0XFx0aWYgKG9sZF9yZWctXFx1MDAzZWR5bnB0ci50eXBlICE9IGN1cl9yZWctXFx1MDAzZWR5bnB0ci50eXBlIHx8XFxuIDc5NjpcXHRcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgIT0gY3VyX3JlZy1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcXG4gNzk3OlxcdFxcdFxcdFxcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXFx1MDAzZWlkLCBjdXJfcmVnLVxcdTAwM2VpZCwgaWRtYXApIHx8XFxuIDc5ODpcXHRcXHRcXHRcXHQgICAgIWNoZWNrX2lkcyhvbGRfcmVnLVxcdTAwM2VwYXJlbnRfaWQsIGN1cl9yZWctXFx1MDAzZXBhcmVudF9pZCwgaWRtYXApKVxcbiA3OTk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4MDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgwMTpcXHRcXHRcXHRjYXNlIFNUQUNLX0lURVI6XFxuIDgwMjpcXHRcXHRcXHRcXHRvbGRfcmVnID0gXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gODAzOlxcdFxcdFxcdFxcdGN1cl9yZWcgPSBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA4MDQ6XFx0XFx0XFx0XFx0LyogaXRlci5kZXB0aCBpcyBub3QgY29tcGFyZWQgYmV0d2VlbiBzdGF0ZXMgYXMgaXRcXG4gODA1OlxcdFxcdFxcdFxcdCAqIGRvZXNuJ3QgbWF0dGVyIGZvciBjb3JyZWN0bmVzcyBhbmQgd291bGQgb3RoZXJ3aXNlXFxuIDgwNjpcXHRcXHRcXHRcXHQgKiBwcmV2ZW50IGNvbnZlcmdlbmNlOyB3ZSBtYWludGFpbiBpdCBvbmx5IHRvIHByZXZlbnRcXG4gODA3OlxcdFxcdFxcdFxcdCAqIGluZmluaXRlIGxvb3AgY2hlY2sgdHJpZ2dlcmluZywgc2VlXFxuIDgwODpcXHRcXHRcXHRcXHQgKiBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcXG4gODA5OlxcdFxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDozMi4zNDY2ODA4NTJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzg0NDA3NDA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBicGZfcmVnX3N0YXRlYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIHNvbWUgc3VidGxldGllcyBpbiBob3cgd2UncmUgdHJhY2tpbmcgcmVnaXN0ZXIgc3RhdGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHN0YWNrIHBvaW50ZXJzIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gc3RhY2sgZnJhbWVzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuXG5cbkxvb2tpbmcgYXQgdGhlIGByZWdzX2V4YWN0YCBmdW5jdGlvbiwgdGhlIGFkZGVkIGByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vYCBjaGVjayBzZWVtcyBzaWduaWZpY2FudC4gUHJldmlvdXNseSwgd2Ugb25seSBjb25zaWRlcmVkIHdoZXRoZXIgdGhlIHJlZ2lzdGVyIHN0YXRlcyB3ZXJlIGlkZW50aWNhbCBiYXNlZCBvbiBhIGBtZW1jbXBgIHVwIHRvIHRoZSBgaWRgIGZpZWxkIGFuZCB0aGUgb3V0Y29tZSBvZiB0aGUgYGNoZWNrX2lkc2AgZnVuY3Rpb24gZm9yIGBpZGAgYW5kIGBwYXJlbnRfaWRgLiBOb3csIHdlJ3JlIGV4cGxpY2l0bHkgY29tcGFyaW5nIHRoZSBgZnJhbWVub2AgZmllbGQgYXMgd2VsbC4gVGhlIGltcGxpY2F0aW9ucyBhcmUsIHRoaXMgYWRkaXRpb24gaXMgbGlrZWx5IGludGVuZGVkIHRvIGVuc3VyZSB0aGF0IHR3byByZWdpc3RlciBzdGF0ZXMgYXJlIGNvbnNpZGVyZWQgdHJ1bHkgZXF1YWwgb25seSBpZiB0aGV5IGFyZSBib3RoIHBvaW50aW5nIHRvIHRoZSBzYW1lIHN0YWNrIGZyYW1lLlxuXG5UaGUgY2hhbmdlIGluIGByZWdzYWZlYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYFBUUl9UT19TVEFDS2AgY2FzZSwgZnVydGhlciByZWluZm9yY2VzIHRoaXMgaW50ZXJwcmV0YXRpb24uIFRoZSBvcmlnaW5hbCBjb21tZW50IGhpbnRlZCBhdCB0aGUgbmVlZCBmb3IgZnJhbWUtc3BlY2lmaWMgZXF1YWxpdHkgd2hlbiBkZWFsaW5nIHdpdGggc3RhY2sgcG9pbnRlcnMuIFRoZSByZW1vdmFsIG9mIHRoZSBgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVub2AgY2hlY2sgdGhlcmUsICphZnRlciogdGhlIGFkZGl0aW9uIG9mIGl0IHRvIGByZWdzX2V4YWN0YCwgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IG5vdywgd2l0aCBgcmVnc19leGFjdGAgdXBkYXRlZCwgd2UgZG9uJ3QgbmVlZCB0byByZS1jaGVjayB0aGUgZnJhbWUgbnVtYmVyIGluIHRoZSBQVFJfVE9fU1RBQ0sgY2FzZSBzZXBhcmF0ZWx5LiBgcmVnc19leGFjdGAgbm93IGhhbmRsZXMgaXQuIFRoYXQgaXMgdGhlIGNyaXRpY2FsIGNoYW5nZS5cblxuTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGRlbHZlIGludG8gdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgZGVmaW5pdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZnJhbWVub2AgaXMgZGVmaW5lZCBhbmQgdXNlZC4gSXQncyBjcnVjaWFsIHRvIGNvbmZpcm0gaXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgc3RydWN0dXJlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXRzIG1lYW5pbmcgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIEJQRiByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZSBgZnJhbWVub2AgZmllbGQgcmVwcmVzZW50cyB0aGUgYWN0dWFsIGZyYW1lIG51bWJlciBvciBhIGtpbmQgb2YgZnJhbWUgaWRlbnRpZmllci4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIHNvbGlkaWZ5IHRoZSBvdmVyYWxsIGVmZmVjdCBvZiB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyODAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDozNi4xOTA3NTcyMzRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODQyNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBicGZfcmVnX3N0YXRlIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0zMj1lbnVtIGJwZl9pdGVyX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzctXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDozODpzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zOS1cXHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NDozNi4yNDE2MjQyNTNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzY1ODE4OTcxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBCUEYgdmVyaWZpZXIncyBpbnRlcm5hbHMuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAzOCwgYXNzdW1pbmcgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbnMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCdzIG9mdGVuIHdoZXJlIHlvdSdsbCBmaW5kIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zLCBpbXBvcnRhbnQgbWFjcm9zLCBhbmQgcG90ZW50aWFsbHkgc29tZSBvZiB0aGUga2V5IGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBzZXQgdGhlIHN0YWdlIGZvciBob3cgdGhlIHZlcmlmaWVyIG9wZXJhdGVzLiBGcm9tIHRoZXJlLCBJJ2xsIGxpa2VseSBicmFuY2ggb3V0IGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgYnV0IHRoYXQncyB0aGUgaW5pdGlhbCB0YXJnZXQuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5lYXJ0aGVkLiBJJ20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdGhlIGNvbnRyb2wgZmxvdyBncmFwaCBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIHBlcmhhcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6MzkuODk5ODE3NDE3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG4gIDM5OlxcdFxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuICA0MDpcXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xcbiAgNDE6XFx0XFx0LypcXG4gIDQyOlxcdFxcdCAqIENvbnN0YW50IGRlbHRhIGJldHdlZW4gXFxcImxpbmtlZFxcXCIgc2NhbGFycyB3aXRoIHRoZSBzYW1lIElELlxcbiAgNDM6XFx0XFx0ICovXFxuICA0NDpcXHRcXHRzMzIgZGVsdGE7XFxuICA0NTpcXHRcXHR1bmlvbiB7XFxuICA0NjpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gUFRSX1RPX1BBQ0tFVCAqL1xcbiAgNDc6XFx0XFx0XFx0aW50IHJhbmdlO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxcbiAgNTA6XFx0XFx0XFx0ICogICBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTExcXG4gIDUxOlxcdFxcdFxcdCAqL1xcbiAgNTI6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDUzOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXBfcHRyO1xcbiAgNTQ6XFx0XFx0XFx0XFx0LyogVG8gZGlzdGluZ3Vpc2ggbWFwIGxvb2t1cHMgZnJvbSBvdXRlciBtYXBcXG4gIDU1OlxcdFxcdFxcdFxcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcXG4gIDU2OlxcdFxcdFxcdFxcdCAqIHBvaW50aW5nIHRvIGlubmVyIG1hcHMuXFxuICA1NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDU4OlxcdFxcdFxcdFxcdHUzMiBtYXBfdWlkO1xcbiAgNTk6XFx0XFx0XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0XFx0LyogZm9yIFBUUl9UT19CVEZfSUQgKi9cXG4gIDYyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA2MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnRmICpidGY7XFxuICA2NDpcXHRcXHRcXHRcXHR1MzIgYnRmX2lkO1xcbiAgNjU6XFx0XFx0XFx0fTtcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0XFx0c3RydWN0IHsgLyogZm9yIFBUUl9UT19NRU0gfCBQVFJfVE9fTUVNX09SX05VTEwgKi9cXG4gIDY4OlxcdFxcdFxcdFxcdHUzMiBtZW1fc2l6ZTtcXG4gIDY5OlxcdFxcdFxcdH07XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC8qIEZvciBkeW5wdHIgc3RhY2sgc2xvdHMgKi9cXG4gIDcyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA3MzpcXHRcXHRcXHRcXHRlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlO1xcbiAgNzQ6XFx0XFx0XFx0XFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cXG4gIDc1OlxcdFxcdFxcdFxcdCAqIFdlIG5lZWQgdG8gdHJhY2sgd2hpY2ggc2xvdCBpcyB0aGUgZmlyc3Qgc2xvdFxcbiAgNzY6XFx0XFx0XFx0XFx0ICogdG8gcHJvdGVjdCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHRoZSB1c2VyIG1heSB0cnkgdG9cXG4gIDc3OlxcdFxcdFxcdFxcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXFxuICA3ODpcXHRcXHRcXHRcXHQgKiBkeW5wdHIuXFxuICA3OTpcXHRcXHRcXHRcXHQgKi9cXG4gIDgwOlxcdFxcdFxcdFxcdGJvb2wgZmlyc3Rfc2xvdDtcXG4gIDgxOlxcdFxcdFxcdH0gZHlucHRyO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRcXHQvKiBGb3IgYnBmX2l0ZXIgc3RhY2sgc2xvdHMgKi9cXG4gIDg0OlxcdFxcdFxcdHN0cnVjdCB7XFxuICA4NTpcXHRcXHRcXHRcXHQvKiBCVEYgY29udGFpbmVyIGFuZCBCVEYgdHlwZSBJRCBkZXNjcmliaW5nXFxuICA4NjpcXHRcXHRcXHRcXHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXFx1MDAzY3R5cGVcXHUwMDNlIG9mIGFuIGl0ZXJhdG9yIHN0YXRlXFxuICA4NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDg4OlxcdFxcdFxcdFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gIDg5OlxcdFxcdFxcdFxcdHUzMiBidGZfaWQ7XFxuICA5MDpcXHRcXHRcXHRcXHQvKiBwYWNraW5nIGZvbGxvd2luZyB0d28gZmllbGRzIHRvIGZpdCBpdGVyIHN0YXRlIGludG8gMTYgYnl0ZXMgKi9cXG4gIDkxOlxcdFxcdFxcdFxcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcXG4gIDkyOlxcdFxcdFxcdFxcdGludCBkZXB0aDozMDtcXG4gIDkzOlxcdFxcdFxcdH0gaXRlcjtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0XFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xcbiAgOTY6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDk3OlxcdFxcdFxcdFxcdGVudW0ge1xcbiAgOTg6XFx0XFx0XFx0XFx0XFx0SVJRX05BVElWRV9LRlVOQyxcXG4gIDk5OlxcdFxcdFxcdFxcdFxcdElSUV9MT0NLX0tGVU5DLFxcbiAxMDA6XFx0XFx0XFx0XFx0fSBrZnVuY19jbGFzcztcXG4gMTAxOlxcdFxcdFxcdH0gaXJxO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXFxuIDEwNDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAxMDU6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcxO1xcbiAxMDY6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcyO1xcbiAxMDc6XFx0XFx0XFx0fSByYXc7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdFxcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xcbiAxMTA6XFx0XFx0fTtcXG4gMTExOlxcdFxcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXFxuIDExMjpcXHRcXHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxcbiAxMTM6XFx0XFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XFxuIDExNDpcXHRcXHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xcbiAxMTU6XFx0XFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cXG4gMTE2OlxcdFxcdCAqL1xcbiAxMTc6XFx0XFx0c3RydWN0IHRudW0gdmFyX29mZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6MzkuODk5OTgzNjc3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4ODY4ODI5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBhbHJlYWR5IGxvb2tlZCBhdCBzb21lIGFzcGVjdHMgb2YgdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAuIE5vdywgSSBuZWVkIHRvIGdldCBhIGZ1bGwgaGFuZGxlIG9uIHRoZSByZXN0IG9mIGl0LiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBmYW1pbGlhciB3aXRoIGV2ZXJ5IHNpbmdsZSBmaWVsZCBhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoaXMgc3RydWN0dXJlLiBUaGVyZSdzIGEgbG90IG9mIGltcG9ydGFudCBtZXRhZGF0YSB3cmFwcGVkIHVwIGluIHRoYXQgc3RydWN0LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZSBpcyBjcml0aWNhbCBmb3IgdGhlIG9uZ29pbmcgd29yay4gTm8gc3RvbmUgY2FuIGJlIGxlZnQgdW50dXJuZWQgaGVyZSwgb3IgSSdtIG1pc3Npbmcgb3Bwb3J0dW5pdGllcyB0byByZWZpbmUsIG9wdGltaXplLCBhbmQgcG90ZW50aWFsbHkgZmluZCBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSBJIGtub3cgKmV2ZXJ5dGhpbmcqIGFib3V0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ2MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6NDEuNzg2ODY5NTM5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExOCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExODpcXHRcXHQvKiBVc2VkIHRvIGRldGVybWluZSBpZiBhbnkgbWVtb3J5IGFjY2VzcyB1c2luZyB0aGlzIHJlZ2lzdGVyIHdpbGxcXG4gMTE5OlxcdFxcdCAqIHJlc3VsdCBpbiBhIGJhZCBhY2Nlc3MuXFxuIDEyMDpcXHRcXHQgKiBUaGVzZSByZWZlciB0byB0aGUgc2FtZSB2YWx1ZSBhcyB2YXJfb2ZmLCBub3QgbmVjZXNzYXJpbHkgdGhlIGFjdHVhbFxcbiAxMjE6XFx0XFx0ICogY29udGVudHMgb2YgdGhlIHJlZ2lzdGVyLlxcbiAxMjI6XFx0XFx0ICovXFxuIDEyMzpcXHRcXHRzdHJ1Y3QgY251bTY0IHI2NDsgLyogNjQtYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xcbiAxMjQ6XFx0XFx0c3RydWN0IGNudW0zMiByMzI7IC8qIDMyLWJpdCByYW5nZSBhcyBjaXJjdWxhciBudW1iZXIgKi9cXG4gMTI1OlxcdFxcdC8qIEZvciBQVFJfVE9fUEFDS0VULCB1c2VkIHRvIGZpbmQgb3RoZXIgcG9pbnRlcnMgd2l0aCB0aGUgc2FtZSB2YXJpYWJsZVxcbiAxMjY6XFx0XFx0ICogb2Zmc2V0LCBzbyB0aGV5IGNhbiBzaGFyZSByYW5nZSBrbm93bGVkZ2UuXFxuIDEyNzpcXHRcXHQgKiBGb3IgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBzaGFyZSB3aGljaCBtYXAgdmFsdWUgd2VcXG4gMTI4OlxcdFxcdCAqIGNhbWUgZnJvbSwgd2hlbiBvbmUgaXMgdGVzdGVkIGZvciAhPSBOVUxMLlxcbiAxMjk6XFx0XFx0ICogRm9yIFBUUl9UT19NRU1fT1JfTlVMTCB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgbWVtb3J5IGFsbG9jYXRpb25cXG4gMTMwOlxcdFxcdCAqIGZvciB0aGUgcHVycG9zZSBvZiB0cmFja2luZyB0aGF0IGl0J3MgZnJlZWQuXFxuIDEzMTpcXHRcXHQgKiBGb3IgUFRSX1RPX1NPQ0tFVCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggcG9pbnRlcnMgcmV0YWluIHRoZVxcbiAxMzI6XFx0XFx0ICogc2FtZSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCwgdG8gZGV0ZXJtaW5lIHByb3BlciByZWZlcmVuY2UgZnJlZWluZy5cXG4gMTMzOlxcdFxcdCAqIEZvciBzdGFjayBzbG90cyB0aGF0IGFyZSBkeW5wdHJzLCB0aGlzIGlzIHVzZWQgdG8gdHJhY2sgcmVmZXJlbmNlcyB0b1xcbiAxMzQ6XFx0XFx0ICogdGhlIGR5bnB0ciB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxcbiAxMzU6XFx0XFx0ICogU2ltaWxhcmx5IHRvIGR5bnB0cnMsIHdlIHVzZSBJRCB0byB0cmFjayBcXFwiYmVsb25naW5nXFxcIiBvZiBhIHJlZmVyZW5jZVxcbiAxMzY6XFx0XFx0ICogdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiBicGZfaXRlci5cXG4gMTM3OlxcdFxcdCAqL1xcbiAxMzg6XFx0XFx0LypcXG4gMTM5OlxcdFxcdCAqIFVwcGVyIGJpdCBvZiBJRCBpcyB1c2VkIHRvIHJlbWVtYmVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFxcXCJsaW5rZWRcXFwiXFxuIDE0MDpcXHRcXHQgKiByZWdpc3RlcnMuIEV4YW1wbGU6XFxuIDE0MTpcXHRcXHQgKiByMSA9IHIyOyAgICBib3RoIHdpbGwgaGF2ZSByMS1cXHUwMDNlaWQgPT0gcjItXFx1MDAzZWlkID09IE5cXG4gMTQyOlxcdFxcdCAqIHIxICs9IDEwOyAgIHIxLVxcdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVCBhbmQgcjEtXFx1MDAzZWRlbHRhID09IDEwXFxuIDE0MzpcXHRcXHQgKiByMyA9IHIyOyAgICBib3RoIHdpbGwgaGF2ZSByMy1cXHUwMDNlaWQgPT0gcjItXFx1MDAzZWlkID09IE5cXG4gMTQ0OlxcdFxcdCAqIHczICs9IDEwOyAgIHIzLVxcdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVDMyIGFuZCByMy1cXHUwMDNlZGVsdGEgPT0gMTBcXG4gMTQ1OlxcdFxcdCAqL1xcbiAxNDY6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUNjQgKDFVIFxcdTAwM2NcXHUwMDNjIDMxKVxcbiAxNDc6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUMzIgKDFVIFxcdTAwM2NcXHUwMDNjIDMwKVxcbiAxNDg6XFx0I2RlZmluZSBCUEZfQUREX0NPTlNUIChCUEZfQUREX0NPTlNUNjQgfCBCUEZfQUREX0NPTlNUMzIpXFxuIDE0OTpcXHRcXHR1MzIgaWQ7XFxuIDE1MDpcXHRcXHQvKlxcbiAxNTE6XFx0XFx0ICogVHJhY2tzIHRoZSBwYXJlbnQgb2JqZWN0IHRoaXMgcmVnaXN0ZXIgd2FzIGRlcml2ZWQgZnJvbS5cXG4gMTUyOlxcdFxcdCAqIFVzZWQgZm9yIGNhc2NhZGluZyBpbnZhbGlkYXRpb246IHdoZW4gdGhlIHBhcmVudCBvYmplY3QgaXNcXG4gMTUzOlxcdFxcdCAqIHJlbGVhc2VkIG9yIGludmFsaWRhdGVkLCBhbGwgcmVnaXN0ZXJzIHdpdGggbWF0Y2hpbmcgcGFyZW50X2lkXFxuIDE1NDpcXHRcXHQgKiBhcmUgYWxzbyBpbnZhbGlkYXRlZC4gRm9yIGV4YW1wbGUsIGEgc2xpY2UgZnJvbSBicGZfZHlucHRyX2RhdGEoKVxcbiAxNTU6XFx0XFx0ICogZ2V0cyBwYXJlbnRfaWQgc2V0IHRvIHRoZSBkeW5wdHIncyBpZC5cXG4gMTU2OlxcdFxcdCAqL1xcbiAxNTc6XFx0XFx0dTMyIHBhcmVudF9pZDtcXG4gMTU4OlxcdFxcdC8qIEluc2lkZSB0aGUgY2FsbGVlIHR3byByZWdpc3RlcnMgY2FuIGJlIGJvdGggUFRSX1RPX1NUQUNLIGxpa2VcXG4gMTU5OlxcdFxcdCAqIFIxPWZwLTggYW5kIFIyPWZwLTgsIGJ1dCBvbmUgb2YgdGhlbSBwb2ludHMgdG8gdGhpcyBmdW5jdGlvbiBzdGFja1xcbiAxNjA6XFx0XFx0ICogd2hpbGUgYW5vdGhlciB0byB0aGUgY2FsbGVyJ3Mgc3RhY2suIFRvIGRpZmZlcmVudGlhdGUgdGhlbSAnZnJhbWVubydcXG4gMTYxOlxcdFxcdCAqIGlzIHVzZWQgd2hpY2ggaXMgYW4gaW5kZXggaW4gYnBmX3ZlcmlmaWVyX3N0YXRlLVxcdTAwM2VmcmFtZVtdIGFycmF5XFxuIDE2MjpcXHRcXHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cXG4gMTYzOlxcdFxcdCAqL1xcbiAxNjQ6XFx0XFx0dTMyIGZyYW1lbm87XFxuIDE2NTpcXHRcXHQvKiBpZiAoIXByZWNpc2UgXFx1MDAyNlxcdTAwMjYgU0NBTEFSX1ZBTFVFKSBtaW4vbWF4L3RudW0gZG9uJ3QgYWZmZWN0IHNhZmV0eSAqL1xcbiAxNjY6XFx0XFx0Ym9vbCBwcmVjaXNlO1xcbiAxNjc6XFx0fTtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0c3RhdGljIGlubGluZSBzNjQgcmVnX3NtaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdHJldHVybiBjbnVtNjRfc21pbihyZWctXFx1MDAzZXI2NCk7XFxuIDE3MjpcXHR9XFxuIDE3MzpcXHRcXG4gMTc0OlxcdHN0YXRpYyBpbmxpbmUgczY0IHJlZ19zbWF4KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIDE3NTpcXHR7XFxuIDE3NjpcXHRcXHRyZXR1cm4gY251bTY0X3NtYXgocmVnLVxcdTAwM2VyNjQpO1xcbiAxNzc6XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRzdGF0aWMgaW5saW5lIHU2NCByZWdfdW1pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiAxODA6XFx0e1xcbiAxODE6XFx0XFx0cmV0dXJuIGNudW02NF91bWluKHJlZy1cXHUwMDNlcjY0KTtcXG4gMTgyOlxcdH1cXG4gMTgzOlxcdFxcbiAxODQ6XFx0c3RhdGljIGlubGluZSB1NjQgcmVnX3VtYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gMTg1OlxcdHtcXG4gMTg2OlxcdFxcdHJldHVybiBjbnVtNjRfdW1heChyZWctXFx1MDAzZXI2NCk7XFxuIDE4NzpcXHR9XFxuIDE4ODpcXHRcXG4gMTg5OlxcdHN0YXRpYyBpbmxpbmUgczMyIHJlZ19zMzJfbWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIDE5MDpcXHR7XFxuIDE5MTpcXHRcXHRyZXR1cm4gY251bTMyX3NtaW4ocmVnLVxcdTAwM2VyMzIpO1xcbiAxOTI6XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRzdGF0aWMgaW5saW5lIHMzMiByZWdfczMyX21heChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiAxOTU6XFx0e1xcbiAxOTY6XFx0XFx0cmV0dXJuIGNudW0zMl9zbWF4KHJlZy1cXHUwMDNlcjMyKTtcXG4gMTk3OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTQ6NDEuNzg3MDU3MDY5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0OTM2Nzg2MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgQlBGIHZlcmlmaWVyIHBlcnNwZWN0aXZlLioqIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyB3aGF0IEkndmUgZm91bmQuXG5cbkluaXRpYWxseSwgSSBsb29rZWQgYXQgdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgZGVmaW5pdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5vdGVkIHRoZSBmaWVsZCBvcmRlcjogYGlkYCwgYHBhcmVudF9pZGAsIGBmcmFtZW5vYCwgYW5kIGBwcmVjaXNlYC4gVGhlIGV4aXN0aW5nIGByZWdzX2V4YWN0YCBmdW5jdGlvbiwgYXMgaXQgd2FzICpiZWZvcmUqIHRoZSBwYXRjaCwgd2FzIGZsYXdlZC4gSXQgdXNlZCBgbWVtY21wYCB1cCB0byBgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKWAgdG8gY29tcGFyZSByZWdpc3RlciBzdGF0ZXMsIHRoZW4gc2VwYXJhdGVseSBjaGVja2VkIGBpZGAgYW5kIGBwYXJlbnRfaWRgIHdpdGggYGNoZWNrX2lkc2AuIFRoaXMgbWVhbnQgYGZyYW1lbm9gIHdhcyAqZW50aXJlbHkqIHNraXBwZWQgZHVyaW5nIHRoZSBjb21wYXJpc29uLiBUaGUgZnVuY3Rpb24gZXNzZW50aWFsbHkgcmV0dXJuZWQgdHJ1ZSBpZiBhbGwgdGhlIGZpZWxkcyAqYmVmb3JlKiBgZnJhbWVub2Agd2VyZSB0aGUgc2FtZS5cblxuVGhlIHByb2JsZW0gcXVpY2tseSBiZWNhbWUgY2xlYXIuICBgUFRSX1RPX1NUQUNLYCBzcGVjaWZpY2FsbHkgY2hlY2tlZCBgcm9sZC1cdTAwM2VmcmFtZW5vID09IHJjdXItXHUwMDNlZnJhbWVub2AsIGJ1dCBvdGhlciBwYXRocywgc3VjaCBhcyB3aGVuIGBleGFjdCA9PSBFWEFDVGAsIGNhbGxlZCBgcmVnc19leGFjdGAgZGlyZWN0bHksIHRodXMgYnlwYXNzaW5nIHRoZSBjaGVjayBvZiBmcmFtZW5vLiAgVGhpcyBvbWlzc2lvbiBhbGxvd2VkIHJlZ2lzdGVycyBwb2ludGluZyB0byAqZGlmZmVyZW50KiBzdGFjayBmcmFtZXMgKGUuZy4sIGNhbGxlciB2cy4gY2FsbGVlKSB0byBiZSBjb25zaWRlcmVkIGlkZW50aWNhbCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBidWcgaW4gdGhlIGFuYWx5c2lzLiBGdXJ0aGVybW9yZSwgc3BpbGxlZCByZWdpc3RlcnMgb24gdGhlIHN0YWNrIHdvdWxkIGFsc28gYnlwYXNzIHRoZSBleHBsaWNpdCBgZnJhbWVub2AgY2hlY2sgaW4gdGhlIGBQVFJfVE9fU1RBQ0tgIGNhc2Ugd2hlbiBgZXhhY3QgPT0gRVhBQ1RgLCBsZWFkaW5nIHRvIHRoZSBzYW1lIGluY29ycmVjdCBjb21wYXJpc29uLiBUaGUgc2VsZnRlc3QgZGVtb25zdHJhdGVkIHRoaXMgdmVyeSBwcm9ibGVtLCB1c2luZyBhIHNwaWxsZWQgcG9pbnRlciB0byBjb21wYXJlIGRpZmZlcmVudCBmcmFtZXMsIHdoaWNoIHRoZSBicm9rZW4gbG9naWMgd291bGQgaW5jb3JyZWN0bHkgZGVlbSBlcXVhbC5cblxuVGhlIHBhdGNoJ3MgZml4LCBtb3ZpbmcgYHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm9gIGludG8gYHJlZ3NfZXhhY3RgLCBjb3JyZWN0bHkgYWRkcmVzc2VkIHRoaXMgb21pc3Npb24sIGVuc3VyaW5nICphbGwqIGZpZWxkcyBhcmUgY29tcGFyZWQgd2hlbiBgZXhhY3QgPT0gRVhBQ1RgLlxuXG5Ob3csIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFzc2VzcyB0aGUgcGF0Y2gncyBwb3RlbnRpYWwgaW1wYWN0LiBUaGUgY3JpdGljYWwgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzP1xuXG5JIG5lZWQgdG8gYXBwbHkgdGhlIEtNU0FOIGNyaXRlcmlhLiBEb2VzIHRoaXMgdG91Y2gga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIsIG9yIG1vZGlmeSBib3VuZHMgY2hlY2tzIHRvIGFsbG93IHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcz9cblxuQW5kIGEga2V5IHBvaW50IGp1c3QgaGl0IG1lOiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZnJhbWVub2AgaXRzZWxmIGlzICppbml0aWFsaXplZCogd2l0aGluIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgZHVyaW5nIEJQRiB2ZXJpZmllciBvcGVyYXRpb25zLiBUaGF0J3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTMyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjU2LjcyMzg0NjIxMVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NjI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnJhbWVub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz00Nz1zdHJ1Y3QgYnBmX2RpYWdfbW9kX3RhcmdldCB7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNTctXFx0fTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NTg6XFx0dTggZnJhbWVubztcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNTktXFx0dTgga2luZDtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy02MS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NjI6c3RhdGljIHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0IGRpYWdfcmVnX3RhcmdldCh1MzIgZnJhbWVfaWQsIHU4IGZyYW1lbm8sIHU4IHJlZ25vKVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy02My17XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjUtXFx0XFx0LmZyYW1lX2lkID0gZnJhbWVfaWQsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjY2OlxcdFxcdC5mcmFtZW5vID0gZnJhbWVubyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjctXFx0XFx0LmtpbmQgPSBCUEZfRElBR19NT0RfVEFSR0VUX1JFRyxcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy03MS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NzI6c3RhdGljIHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0IGRpYWdfc3RhY2tfYXJnX3RhcmdldCh1MzIgZnJhbWVfaWQsIHU4IGZyYW1lbm8sIHU4IHNsb3QpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTczLXtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy03NS1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NzY6XFx0XFx0LmZyYW1lbm8gPSBmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy03Ny1cXHRcXHQua2luZCA9IEJQRl9ESUFHX01PRF9UQVJHRVRfU1RBQ0tfQVJHLFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTgxLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzo4MjpzdGF0aWMgc3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgZGlhZ19zdGFja19zbG90X3RhcmdldCh1MzIgZnJhbWVfaWQsIHU4IGZyYW1lbm8sIHUxNiBzcGkpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTgzLXtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy04NS1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6ODY6XFx0XFx0LmZyYW1lbm8gPSBmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy04Ny1cXHRcXHQua2luZCA9IEJQRl9ESUFHX01PRF9UQVJHRVRfU1RBQ0tfU0xPVCxcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy05MS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6OTI6c3RhdGljIHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0IGRpYWdfc3RhY2tfcmFuZ2VfdGFyZ2V0KHUzMiBmcmFtZV9pZCwgdTggZnJhbWVubyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtOTMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzMTYgbWluX29mZiwgczE2IG1heF9vZmYpXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtOTYtXFx0XFx0LmZyYW1lX2lkID0gZnJhbWVfaWQsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjk3OlxcdFxcdC5mcmFtZW5vID0gZnJhbWVubyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtOTgtXFx0XFx0LmtpbmQgPSBCUEZfRElBR19NT0RfVEFSR0VUX1NUQUNLX1JBTkdFLFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1ND1zdHJ1Y3QgYnBmX2RpYWdfaGlzdG9yeV9vcHRzIHtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNTYtXFx0dTMyIGZyYW1lX2lkO1xcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNTc6XFx0dTMyIGZyYW1lbm87XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1OC1cXHRpbnQgcmVnbm87XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9OTA2PXZvaWQgYnBmX2RpYWdfcmVnaXN0ZXJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCByZWdubyxcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy05MTItXFx0XFx0LmZyYW1lX2lkID0gZnJhbWUtXFx1MDAzZWRpYWdfZnJhbWVfaWQsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjkxMzpcXHRcXHQuZnJhbWVubyA9IGZyYW1lLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy05MTQtXFx0XFx0LnJlZ25vID0gcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9OTk1PXZvaWQgYnBmX2RpYWdfY2FsbF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCwgaW50IGFyZ25vLCBpbnQgcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTAwMS1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZS1cXHUwMDNlZGlhZ19mcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTAwMjpcXHRcXHQuZnJhbWVubyA9IGZyYW1lLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMDAzLVxcdH07XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTIzMj12b2lkIGJwZl9kaWFnX2ludmFsaWRfZGVyZWYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTIzOS1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZS1cXHUwMDNlZGlhZ19mcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTI0MDpcXHRcXHQuZnJhbWVubyA9IGZyYW1lLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMjQxLVxcdFxcdC5yZWdubyA9IHJlZ25vLFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTEyOTk9dm9pZCBicGZfZGlhZ191bnJlYWRhYmxlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCByZWdubylcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMzA0LVxcdFxcdC5mcmFtZV9pZCA9IGZyYW1lLVxcdTAwM2VkaWFnX2ZyYW1lX2lkLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxMzA1OlxcdFxcdC5mcmFtZW5vID0gZnJhbWUtXFx1MDAzZWZyYW1lbm8sXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzMDYtXFx0XFx0LnJlZ25vID0gcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTMxMi1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTMxMzpcXHR0YXJnZXQgPSBkaWFnX3JlZ190YXJnZXQob3B0cy5mcmFtZV9pZCwgb3B0cy5mcmFtZW5vLCByZWdubyk7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEzMTQtXFx0Zm9yIChpID0gbG9nID8gbG9nLVxcdTAwM2VjbnQgOiAwOyBpIFxcdTAwM2UgMDsgaS0tKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTM3Nz12b2lkIGJwZl9kaWFnX3N0YWNrX2FyZ191bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgbmFyZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTM4NC1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZS1cXHUwMDNlZGlhZ19mcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTM4NTpcXHRcXHQuZnJhbWVubyA9IGZyYW1lLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xMzg2LVxcdFxcdC5zdGFja19hcmdfc2xvdCA9IHN0YWNrX2FyZ19zbG90LFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE0NTU9c3RhdGljIGJvb2wgZGlhZ19tb2RfaW5zbl9vcmlnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE0NjQtXFx0ICAgIEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTU9WIFxcdTAwMjZcXHUwMDI2IEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTQ2NTpcXHRcXHQqb3JpZ2luID0gZGlhZ19yZWdfdGFyZ2V0KHRhcmdldC1cXHUwMDNlZnJhbWVfaWQsIHRhcmdldC1cXHUwMDNlZnJhbWVubywgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE0NjYtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTQ3NC1cXHRzdGF0ZSA9IGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VmcmFtZVtlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlY3VyZnJhbWVdO1xcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNDc1OlxcdCpvcmlnaW4gPSBkaWFnX3JlZ190YXJnZXQoc3RhdGUtXFx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVxcdTAwM2VmcmFtZW5vLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTQ3Ni1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNTQ4PXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqdGFyZ2V0X3RvX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1NTMtXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE1NTQ6XFx0c3RhdGUgPSB0YXJnZXQtXFx1MDAzZWZyYW1lbm8gXFx1MDAzYz0gdnN0YXRlLVxcdTAwM2VjdXJmcmFtZSA/IHZzdGF0ZS1cXHUwMDNlZnJhbWVbdGFyZ2V0LVxcdTAwM2VmcmFtZW5vXSA6IE5VTEw7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1NTUtXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTU3OT1zdGF0aWMgYm9vbCByZWdfdG9fdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU5NC1cXHRcXHRpZiAoYWRkciBcXHUwMDNlPSBzdGFydCBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgZW5kKSB7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE1OTU6XFx0XFx0XFx0KnRhcmdldCA9IGRpYWdfcmVnX3RhcmdldChzdGF0ZS1cXHUwMDNlZGlhZ19mcmFtZV9pZCwgc3RhdGUtXFx1MDAzZWZyYW1lbm8sXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1OTYtXFx0XFx0XFx0XFx0XFx0XFx0ICByZWcgLSBzdGF0ZS1cXHUwMDNlcmVncyk7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYwMi1cXHRcXHRpZiAoc3RhdGUtXFx1MDAzZW91dF9zdGFja19hcmdfY250IFxcdTAwMjZcXHUwMDI2IGFkZHIgXFx1MDAzZT0gc3RhcnQgXFx1MDAyNlxcdTAwMjYgYWRkciBcXHUwMDNjIGVuZCkge1xcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNjAzOlxcdFxcdFxcdCp0YXJnZXQgPSBkaWFnX3N0YWNrX2FyZ190YXJnZXQoc3RhdGUtXFx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjA0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdHJlZyAtIHN0YXRlLVxcdTAwM2VzdGFja19hcmdfcmVncyk7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYxMi1cXHRcXHRcXHQgICAgICBzaXplb2YoKnN0YXRlLVxcdTAwM2VzdGFjayk7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2MTM6XFx0XFx0XFx0KnRhcmdldCA9IGRpYWdfc3RhY2tfc2xvdF90YXJnZXQoc3RhdGUtXFx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVxcdTAwM2VmcmFtZW5vLCBzcGkpO1xcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjE0LVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE2NjY9dm9pZCBicGZfZGlhZ19yZWNvcmRfc2NydWJfc3RhY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjcwLVxcdGRpYWdfcmVjb3JkX21vZChlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2NzE6XFx0XFx0XFx0ZGlhZ19zdGFja19yYW5nZV90YXJnZXQoc3RhdGUtXFx1MDAzZWRpYWdfZnJhbWVfaWQsIHN0YXRlLVxcdTAwM2VmcmFtZW5vLCBtaW5fb2ZmLCBtYXhfb2ZmKSxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTY3Mi1cXHRcXHRcXHRyZWFzb24sIE5VTEwsIE5VTEwsIE5VTEwpO1xcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE3NTA9c3RhdGljIGJvb2wgZGlhZ190YXJnZXRfbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgYnBmX2RpYWdfbW9kX3RhcmdldCAqZXZlbnRfdGFyZ2V0LFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE3NTQtXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE3NTU6XFx0aWYgKGV2ZW50X3RhcmdldC1cXHUwMDNlZnJhbWVfaWQgIT0gdGFyZ2V0LVxcdTAwM2VmcmFtZV9pZCB8fCBldmVudF90YXJnZXQtXFx1MDAzZWZyYW1lbm8gIT0gdGFyZ2V0LVxcdTAwM2VmcmFtZW5vKVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNzU2LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNzgwPXN0YXRpYyB2b2lkIGRpYWdfYnVpbGRfbGluZWFnZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2RpYWdfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTc5MC1cXHRpZiAob3B0cy1cXHUwMDNlc2NvcGUgPT0gQlBGX0RJQUdfSElTVE9SWV9TQ09QRV9SRUcpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE3OTE6XFx0XFx0dGFyZ2V0ID0gZGlhZ19yZWdfdGFyZ2V0KG9wdHMtXFx1MDAzZWZyYW1lX2lkLCBvcHRzLVxcdTAwM2VmcmFtZW5vLCBvcHRzLVxcdTAwM2VyZWdubyk7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE3OTItXFx0ZWxzZSBpZiAob3B0cy1cXHUwMDNlc2NvcGUgPT0gQlBGX0RJQUdfSElTVE9SWV9TQ09QRV9TVEFDS19BUkcpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE3OTM6XFx0XFx0dGFyZ2V0ID0gZGlhZ19zdGFja19hcmdfdGFyZ2V0KG9wdHMtXFx1MDAzZWZyYW1lX2lkLCBvcHRzLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNzk0LVxcdFxcdFxcdFxcdFxcdCAgICAgICBvcHRzLVxcdTAwM2VzdGFja19hcmdfc2xvdCk7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTk1Mj12b2lkIGJwZl9kaWFnX21lbV9ib3VuZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTk1OS1cXHRcXHQuZnJhbWVfaWQgPSBmcmFtZS1cXHUwMDNlZGlhZ19mcmFtZV9pZCxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTk2MDpcXHRcXHQuZnJhbWVubyA9IGZyYW1lLVxcdTAwM2VmcmFtZW5vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xOTYxLVxcdFxcdC5yZWdubyA9IHJlZ25vLFxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEwMT1zdGF0aWMgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmxvb2t1cF9pbnN0YW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDItXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdCxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAzOlxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGZyYW1lbm8pXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNC17XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA4LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDk6XFx0c3VicHJvZ19zdGFydCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW3N0LVxcdTAwM2VmcmFtZVtmcmFtZW5vXS1cXHUwMDNlc3VicHJvZ25vXS5zdGFydDtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTEwOlxcdGNhbGxzaXRlID0gZnJhbWVubyBcXHUwMDNlIDAgPyBzdC1cXHUwMDNlZnJhbWVbZnJhbWVub10tXFx1MDAzZWNhbGxzaXRlIDogc3VicHJvZ19zdGFydDtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTExLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTI6XFx0Zm9yIChkZXB0aCA9IGZyYW1lbm87IDsgZGVwdGgtLSkge1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTMtXFx0XFx0a2V5ID0gZGVwdGggXFx1MDAzZSAwID8gY2FsbHNpdGUgOiBzdWJwcm9nX3N0YXJ0O1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTMwNj1zdGF0aWMgdm9pZCB1cGRhdGVfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlKVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMyOS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MzMwOnN0YXRpYyBib29sIGlzX2xpdmVfYmVmb3JlKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGluc25faWR4LCB1MzIgZnJhbWVubywgdTMyIGhhbGZfc3BpKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zMzEte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzMy1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MzM0OlxcdG1hc2tzID0gZ2V0X2ZyYW1lX21hc2tzKGluc3RhbmNlLCBmcmFtZW5vLCBpbnNuX2lkeCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzNS1cXHRyZXR1cm4gbWFza3MgXFx1MDAyNlxcdTAwMjYgc3Bpc190ZXN0X2JpdChtYXNrcy1cXHUwMDNlbGl2ZV9iZWZvcmUsIGhhbGZfc3BpKTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0zMzg9aW50IGJwZl9saXZlX3N0YWNrX3F1ZXJ5X2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzU4LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozNTk6Ym9vbCBicGZfc3RhY2tfc2xvdF9hbGl2ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnJhbWVubywgdTMyIGhhbGZfc3BpKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zNjAte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM3Ni1cXHRjdXJfZGVsdGEgPSAoaW50KWN1cmZyYW1lX2luc3RhbmNlLVxcdTAwM2VkZXB0aCAtIChpbnQpcS1cXHUwMDNlY3VyZnJhbWU7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjM3NzpcXHRyZWwgPSBmcmFtZW5vICsgY3VyX2RlbHRhO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zNzgtXFx0aWYgKHJlbCBcXHUwMDNjPSBjdXJmcmFtZV9pbnN0YW5jZS1cXHUwMDNlZGVwdGgpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzgzLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozODQ6XFx0Zm9yIChpID0gZnJhbWVubzsgaSBcXHUwMDNjIHEtXFx1MDAzZWN1cmZyYW1lOyBpKyspIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzg1LVxcdFxcdGluc3RhbmNlID0gcS1cXHUwMDNlaW5zdGFuY2VzW2ldO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTM4Ny1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6Mzg4OlxcdFxcdC8qIE1hcCBhY3R1YWwgZnJhbWVubyB0byBmcmFtZSBpbmRleCB3aXRoaW4gdGhpcyBpbnN0YW5jZSAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zODktXFx0XFx0ZGVsdGEgPSAoaW50KWluc3RhbmNlLVxcdTAwM2VkZXB0aCAtIChpbnQpaTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MzkwOlxcdFxcdHJlbCA9IGZyYW1lbm8gKyBkZWx0YTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzkxLVxcdFxcdGlmIChyZWwgXFx1MDAzZSBpbnN0YW5jZS1cXHUwMDNlZGVwdGgpXFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jPTYyND1zdGF0aWMgdm9pZCBwcmludF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvbG9nLmMtNjQyLVxcdGlmICh0ID09IFBUUl9UT19TVEFDSykge1xcbmtlcm5lbC9icGYvbG9nLmM6NjQzOlxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZnJhbWVubyAhPSByZWctXFx1MDAzZWZyYW1lbm8pXFxua2VybmVsL2JwZi9sb2cuYzo2NDQ6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJbJWRdXFxcIiwgcmVnLVxcdTAwM2VmcmFtZW5vKTtcXG5rZXJuZWwvYnBmL2xvZy5jLTY0NS1cXHRcXHRpZiAodG51bV9pc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jPTcwMD12b2lkIHByaW50X3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSxcXG5rZXJuZWwvYnBmL2xvZy5jOjcwMTpcXHRcXHRcXHQgIHUzMiBmcmFtZW5vLCBib29sIHByaW50X2FsbClcXG5rZXJuZWwvYnBmL2xvZy5jLTcwMi17XFxua2VybmVsL2JwZi9sb2cuYzo3MDM6XFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IHZzdGF0ZS1cXHUwMDNlZnJhbWVbZnJhbWVub107XFxua2VybmVsL2JwZi9sb2cuYy03MDQtXFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4tLVxcbmtlcm5lbC9icGYvbG9nLmMtNzA2LVxcbmtlcm5lbC9icGYvbG9nLmM6NzA3OlxcdGlmIChzdGF0ZS1cXHUwMDNlZnJhbWVubylcXG5rZXJuZWwvYnBmL2xvZy5jOjcwODpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiBmcmFtZSVkOlxcXCIsIHN0YXRlLVxcdTAwM2VmcmFtZW5vKTtcXG5rZXJuZWwvYnBmL2xvZy5jLTcwOS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0JQRl9SRUc7IGkrKykge1xcbi0tXFxua2VybmVsL2JwZi9sb2cuYz04MDM9dm9pZCBwcmludF9pbnNuX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSxcXG5rZXJuZWwvYnBmL2xvZy5jOjgwNDpcXHRcXHQgICAgICB1MzIgZnJhbWVubylcXG5rZXJuZWwvYnBmL2xvZy5jLTgwNS17XFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jLTgxMi1cXHR9XFxua2VybmVsL2JwZi9sb2cuYzo4MTM6XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCB2c3RhdGUsIGZyYW1lbm8sIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2xvZy5jLTgxNC19XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTQ4OD1zdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00OTQtXFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVxcdTAwM2VwYXJlbnRfaWQsIHJjdXItXFx1MDAzZXBhcmVudF9pZCwgaWRtYXApIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTU6XFx0ICAgICAgIHJvbGQtXFx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cXHUwMDNlZnJhbWVubztcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ5Ni19XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTExMDk9c3RhdGljIGJvb2wgc3RhdGVzX21heWJlX2xvb3Bpbmcoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTIxLVxcdFxcdGlmIChtZW1jbXAoXFx1MDAyNmZvbGQtXFx1MDAzZXJlZ3NbaV0sIFxcdTAwMjZmY3VyLVxcdTAwM2VyZWdzW2ldLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTEyMjpcXHRcXHRcXHQgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgZnJhbWVubykpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTEyMy1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjI3MT1zdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyODMtXFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfRlApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMjg0OlxcdHJlZ3NbQlBGX1JFR19GUF0uZnJhbWVubyA9IHN0YXRlLVxcdTAwM2VmcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjg1LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMjk2PXN0YXRpYyB2b2lkIGluaXRfZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjk3LVxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMjk4OlxcdFxcdFxcdCAgICBpbnQgY2FsbHNpdGUsIGludCBmcmFtZW5vLCBpbnQgc3VicHJvZ25vKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjk5LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjMwMC1cXHRzdGF0ZS1cXHUwMDNlY2FsbHNpdGUgPSBjYWxsc2l0ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjMwMTpcXHRzdGF0ZS1cXHUwMDNlZnJhbWVubyA9IGZyYW1lbm87XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIzMDItXFx0YnBmX2RpYWdfaW5pdF9mcmFtZShlbnYsIHN0YXRlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMzEwPXN0YXRpYyBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpwdXNoX2FzeW5jX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjM0NS1cXHRcXHRcXHRCUEZfTUFJTl9GVU5DIC8qIGNhbGxzaXRlICovLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMzQ2OlxcdFxcdFxcdDAgLyogZnJhbWVubyB3aXRoaW4gdGhpcyBjYWxsY2hhaW4gKi8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIzNDctXFx0XFx0XFx0c3VicHJvZyAvKiBzdWJwcm9nIG51bWJlciB3aXRoaW4gdGhpcyBwcm9nICovKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjQ4PXN0cnVjdCBsaW5rZWRfcmVnIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzI0OTpcXHR1OCBmcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjUwLVxcdHVuaW9uIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjYyPXN0YXRpYyBzdHJ1Y3QgbGlua2VkX3JlZyAqbGlua2VkX3JlZ3NfcHVzaChzdHJ1Y3QgbGlua2VkX3JlZ3MgKnMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI3My0gKiBQYWNrIG9uZSBoaXN0b3J5IGVudHJ5IGZvciBsaW5rZWQgcmVnaXN0ZXJzIGFzIDExIGJpdHMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyNzQ6ICogLSA0LWJpdHMgZnJhbWVub1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjc1LSAqIC0gNi1iaXRzIHNwaV9vcl9yZWdcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjc4PXN0YXRpYyB1NjQgbGlua2VkX3JlZ3NfcGFjayhzdHJ1Y3QgbGlua2VkX3JlZ3MgKnMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI4Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzI4NzpcXHRcXHR0bXAgfD0gZS1cXHUwMDNlZnJhbWVubztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI4OC1cXHRcXHR0bXAgfD0gZS1cXHUwMDNlc3BpIFxcdTAwM2NcXHUwMDNjIExSX1NQSV9PRkY7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzI5OT1zdGF0aWMgdm9pZCBsaW5rZWRfcmVnc191bnBhY2sodTY0IHZhbCwgc3RydWN0IGxpbmtlZF9yZWdzICpzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMDgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzMDk6XFx0XFx0ZS1cXHUwMDNlZnJhbWVubyA9ICB2YWwgXFx1MDAyNiBMUl9GUkFNRU5PX01BU0s7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMTAtXFx0XFx0ZS1cXHUwMDNlc3BpICAgICA9ICh2YWwgXFx1MDAzZVxcdTAwM2UgTFJfU1BJX09GRikgXFx1MDAyNiBMUl9TUElfTUFTSztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzQ4PXZvaWQgYnBmX2J0X3N5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQsIHN0cnVjdCBicGZfam1wX2hpc3RvcnlfZW50cnkgKmhpc3QpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM2MC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzM2MTpcXHRcXHRpZiAoKGUtXFx1MDAzZWlzX3JlZyBcXHUwMDI2XFx1MDAyNiBidF9pc19mcmFtZV9yZWdfc2V0KGJ0LCBlLVxcdTAwM2VmcmFtZW5vLCBlLVxcdTAwM2VyZWdubykpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzNjI6XFx0XFx0ICAgICghZS1cXHUwMDNlaXNfcmVnIFxcdTAwMjZcXHUwMDI2IGJ0X2lzX2ZyYW1lX3Nsb3Rfc2V0KGJ0LCBlLVxcdTAwM2VmcmFtZW5vLCBlLVxcdTAwM2VzcGkpKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzYzLVxcdFxcdFxcdHNvbWVfcHJlY2lzZSA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM3NC1cXHRcXHRpZiAoZS1cXHUwMDNlaXNfcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMzc1OlxcdFxcdFxcdGJwZl9idF9zZXRfZnJhbWVfcmVnKGJ0LCBlLVxcdTAwM2VmcmFtZW5vLCBlLVxcdTAwM2VyZWdubyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzNzYtXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMzc3OlxcdFxcdFxcdGJwZl9idF9zZXRfZnJhbWVfc2xvdChidCwgZS1cXHUwMDNlZnJhbWVubywgZS1cXHUwMDNlc3BpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM3OC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzUxOT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1MjktXFx0aW50IGluc25fZmxhZ3MgPSBJTlNOX0ZfU1RBQ0tfQUNDRVNTO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTMwOlxcdGludCBoaXN0X3NwaSA9IHNwaSwgaGlzdF9mcmFtZSA9IHN0YXRlLVxcdTAwM2VmcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTMxLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM3OTQ9c3RhdGljIGludCBtYXJrX3JlZ19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzgyOC1cXHRcXHRpZiAoemVyb19zcGlsbF9tYXNrKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM4Mjk6XFx0XFx0XFx0YnBmX2J0X3NldF9mcmFtZV9zbG90X21hc2soXFx1MDAyNmVudi1cXHUwMDNlYnQsIHB0cl9zdGF0ZS1cXHUwMDNlZnJhbWVubywgemVyb19zcGlsbF9tYXNrKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzgzMC1cXHRcXHRcXHRyZXR1cm4gbWFya19jaGFpbl9wcmVjaXNpb25fYmF0Y2goZW52LCBlbnYtXFx1MDAzZWN1cl9zdGF0ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzg2ND1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzg3NS1cXHRpbnQgaW5zbl9mbGFncyA9IElOU05fRl9TVEFDS19BQ0NFU1M7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM4NzY6XFx0aW50IGhpc3Rfc3BpID0gc3BpLCBoaXN0X2ZyYW1lID0gcmVnX3N0YXRlLVxcdTAwM2VmcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zODc3LVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQyNDM9c3RhdGljIGludCBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGFyZ19pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDI0Ny1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI0ODpcXHRidF9zZXRfZnJhbWVfc3RhY2tfYXJnX3Nsb3QoXFx1MDAyNmVudi1cXHUwMDNlYnQsIGNhbGxlci1cXHUwMDNlZnJhbWVubywgc3BpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDI0OS1cXHRyZXR1cm4gbWFya19jaGFpbl9wcmVjaXNpb25fYmF0Y2goZW52LCBlbnYtXFx1MDAzZWN1cl9zdGF0ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzc0Nj1zdGF0aWMgaW50IHByb2Nlc3NfaXRlcl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MzktXFx0XFx0bWV0YS1cXHUwMDNlaXRlci5zcGkgPSBzcGk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc4NDA6XFx0XFx0bWV0YS1cXHUwMDNlaXRlci5mcmFtZW5vID0gcmVnLVxcdTAwM2VmcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODQxLVxcdFxcdHVwZGF0ZV9yZWZfb2JqKFxcdTAwMjZtZXRhLVxcdTAwM2VyZWZfb2JqLCBcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc5MzM9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpnZXRfaXRlcl9mcm9tX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cl9zdCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM1LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzkzNjpcXHRpbnQgaXRlcl9mcmFtZW5vID0gbWV0YS1cXHUwMDNlaXRlci5mcmFtZW5vO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM3LVxcdGludCBpdGVyX3NwaSA9IG1ldGEtXFx1MDAzZWl0ZXIuc3BpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3OTM5OlxcdHJldHVybiBcXHUwMDI2Y3VyX3N0LVxcdTAwM2VmcmFtZVtpdGVyX2ZyYW1lbm9dLVxcdTAwM2VzdGFja1tpdGVyX3NwaV0uc3BpbGxlZF9wdHI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5NDAtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTg2MzY9c3RhdGljIGludCBnZXRfY29uc3RhbnRfbWFwX2tleShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg2ODYtXFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjg2ODc6XFx0YnBmX2J0X3NldF9mcmFtZV9zbG90KFxcdTAwMjZlbnYtXFx1MDAzZWJ0LCBrZXktXFx1MDAzZWZyYW1lbm8sIHNwaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg2ODgtXFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb25fYmF0Y2goZW52LCBlbnYtXFx1MDAzZWN1cl9zdGF0ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTYzMj1zdGF0aWMgaW50IHNldHVwX2Z1bmNfZW50cnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2csIGludCBjYWxsc2l0ZSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjYyLVxcdFxcdFxcdGNhbGxzaXRlLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NjYzOlxcdFxcdFxcdHN0YXRlLVxcdTAwM2VjdXJmcmFtZSArIDEgLyogZnJhbWVubyB3aXRoaW4gdGhpcyBjYWxsY2hhaW4gKi8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk2NjQtXFx0XFx0XFx0c3VicHJvZyAvKiBzdWJwcm9nIG51bWJlciB3aXRoaW4gdGhpcyBwcm9nICovKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTE0PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDAyMi1cXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxlcjpcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDAyMzpcXHRcXHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXFx1MDAzZWZyYW1lbm8sIHRydWUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDAyNC1cXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxlZTpcXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzQ2PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQwOC1cXHRcXHR2ZXJib3NlKGVudiwgXFxcInJldHVybmluZyBmcm9tIGNhbGxlZTpcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQwOTpcXHRcXHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZWUtXFx1MDAzZWZyYW1lbm8sIHRydWUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxMC1cXHRcXHR2ZXJib3NlKGVudiwgXFxcInRvIGNhbGxlciBhdCAlZDpcXFxcblxcXCIsICppbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDExOlxcdFxcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cXHUwMDNlZnJhbWVubywgdHJ1ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDEyLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDU3OD1zdGF0aWMgaW50IGNoZWNrX3JlZmVyZW5jZV9sZWFrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgZXhjZXB0aW9uX2V4aXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA1ODUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNTg2OlxcdGlmICghZXhjZXB0aW9uX2V4aXQgXFx1MDAyNlxcdTAwMjYgY3VyX2Z1bmMoZW52KS1cXHUwMDNlZnJhbWVubylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA1ODctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY4MTI9c3RhdGljIHZvaWQgX19jb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBsaW5rZWRfcmVncyAqcmVnX3NldCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY4MTM6XFx0XFx0XFx0XFx0ICB1MzIgaWQsIHUzMiBmcmFtZW5vLCB1MzIgc3BpX29yX3JlZywgYm9vbCBpc19yZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODE0LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgyMS1cXHRpZiAoZSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgyMjpcXHRcXHRlLVxcdTAwM2VmcmFtZW5vID0gZnJhbWVubztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MjMtXFx0XFx0ZS1cXHUwMDNlaXNfcmVnID0gaXNfcmVnO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2ODY3PXN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODc2LVxcdFxcdGUgPSBcXHUwMDI2bGlua2VkX3JlZ3MtXFx1MDAzZWVudHJpZXNbaV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODc3OlxcdFxcdHJlZyA9IGUtXFx1MDAzZWlzX3JlZyA/IFxcdTAwMjZ2c3RhdGUtXFx1MDAzZWZyYW1lW2UtXFx1MDAzZWZyYW1lbm9dLVxcdTAwM2VyZWdzW2UtXFx1MDAzZXJlZ25vXVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjg3ODpcXHRcXHRcXHRcXHQ6IFxcdTAwMjZ2c3RhdGUtXFx1MDAzZWZyYW1lW2UtXFx1MDAzZWZyYW1lbm9dLVxcdTAwM2VzdGFja1tlLVxcdTAwM2VzcGldLnNwaWxsZWRfcHRyO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjg3OS1cXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSB8fCByZWcgPT0ga25vd25fcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NDUwPXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDc3LVxcdFxcdFxcdEJQRl9NQUlOX0ZVTkMgLyogY2FsbHNpdGUgKi8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDc4OlxcdFxcdFxcdDAgLyogZnJhbWVubyAqLyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NzktXFx0XFx0XFx0c3VicHJvZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU0OjU2Ljc3MTUxNTY4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg0OTU2MzkxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVmVyaWZpZXIgQnVnIGFuZCBpdHMgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aHJvdWdoIHRoZSBsb2dpYyBvZiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyByZWdpc3RlciBzdGF0ZSBjb21wYXJpc29ucy4gYHJlZ3NfZXhhY3RgIGlzIGEga2V5IGZ1bmN0aW9uIHVzZWQgd2hlbiB0aGUgdmVyaWZpZXIgbmVlZHMgdG8gZGV0ZXJtaW5lIGlmIHR3byByZWdpc3RlciBzdGF0ZXMgYXJlIGlkZW50aWNhbC4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGByZWdzX2V4YWN0YCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGl0IGNoZWNrcyBmb3IgZXF1YWxpdHkgb2YgdGhlIG1lbW9yeSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIgc3RhdGUgc3RydWN0cyB1cCB0byBhIGNlcnRhaW4gcG9pbnQgYW5kIHRoZW4gY2FsbHMgaGVscGVyIGZ1bmN0aW9ucyB0byBjaGVjayBJRHMuIFRoZSBpc3N1ZSBsaWVzIGluIGhvdyBgcmVnc19leGFjdGAgaXMgKnVzZWQqLlxuXG5UaGUgcGF0Y2ggaW4gcXVlc3Rpb24gYWRkcmVzc2VzIGEgY3JpdGljYWwgYnVnIGluIGByZWdzYWZlKClgIHJlbGF0ZWQgdG8gc3RhY2sgcG9pbnRlciBjb21wYXJpc29ucywgZXNwZWNpYWxseSB3aGVuIGBleGFjdGAgaXMgc2V0IHRvIGBFWEFDVGAuICBQcmV2aW91c2x5LCB3aGVuIHRoZSByZWdpc3RlciBwb2ludGVkIHRvIHRoZSBzdGFjayAoYFBUUl9UT19TVEFDS2ApLCBgcmVnc2FmZSgpYCAqc2hvdWxkKiBoYXZlIGJlZW4gY2hlY2tpbmcgdGhlIGBmcmFtZW5vYCBmaWVsZCBhcyBwYXJ0IG9mIHRoZSBlcXVhbGl0eSBjb21wYXJpc29uLiBIb3dldmVyLCB3aGVuIGBleGFjdGAgd2FzIHNldCB0byBgRVhBQ1RgLCBzdWNoIGFzIGR1cmluZyBsb29wIGRldGVjdGlvbiwgaXQgd2FzIGJ5cGFzc2luZyB0aGUgY2hlY2ssIGxlYWRpbmcgdG8gYSBmYWxzZSBwb3NpdGl2ZS4gVGhlIHZlcmlmaWVyIHdhcyBpbmNvcnJlY3RseSBjb25jbHVkaW5nIHRoYXQgdHdvIHJlZ2lzdGVyIHN0YXRlcyB3ZXJlIGVxdWl2YWxlbnQgZXZlbiBpZiB0aGV5IHBvaW50ZWQgdG8gZGlmZmVyZW50IHN0YWNrIGZyYW1lcyAoZS5nLiwgY2FsbGVyIHZzLiBjYWxsZWUgZnJhbWVzKS4gVGhlIHNhbWUgaXNzdWUgd2FzIGhhcHBlbmluZyB3aXRoIHNwaWxsZWQgc3RhY2sgcG9pbnRlcnMgKGBTVEFDS19TUElMTGApLCBhbmQgdGhlIGJ1ZyB3YXMgcGVybWl0dGluZyB0aGUgdmVyaWZpZXIgdG8gdHJlYXQgYSBsb29wIHdpdGggYSBzcGlsbGVkIHN0YWNrIHBvaW50ZXIgcG9pbnRpbmcgdG8gYSBkaWZmZXJlbnQgZnJhbWUgYXMgZXF1aXZhbGVudCB0byBhbm90aGVyIHN0YXRlLCBsZWFkaW5nIHRvIGluY29ycmVjdCBzdGF0ZSBwcnVuaW5nIGFuZCBsb29wIGRldGVjdGlvbi5cblxuU28sIHRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggcmUtaW50cm9kdWNlcyB0aGUgbWlzc2luZyBgZnJhbWVub2AgY2hlY2sgd2l0aGluIHRoZSBgcmVnc19leGFjdGAgZnVuY3Rpb24gYW5kIHJlc3RvcmVzIHRoZSBgXHUwMDI2XHUwMDI2IHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm9gIGNoZWNrIGluIHRoZSBgcmVnc19leGFjdGAgZnVuY3Rpb24uICBJdCAqc2hvdWxkKiBoYXZlIGJlZW4gdGhlcmUgYWxsIGFsb25nLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyAgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGByb2xkLVx1MDAzZWZyYW1lbm9gIGFuZCBgcmN1ci1cdTAwM2VmcmFtZW5vYCBhcmUgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSBgcmVnc19leGFjdGAgaXMgY2FsbGVkLiBMb29raW5nIGludG8gd2hlcmUgYGJwZl9yZWdfc3RhdGVgIHN0cnVjdHMgKHdoaWNoIGNvbnRhaW4gdGhlIGBmcmFtZW5vYCBmaWVsZCkgYXJlIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkLiBUaGV5IGFyZSBlaXRoZXIgcGFydHMgb2YgYGJwZl9mdW5jX3N0YXRlYCAoZm91bmQgaW4gdGhlIGByZWdzW01BWF9CUEZfUkVHXWAgYXJyYXkgb3IgdGhlIHN0YWNrIHNsb3RzLCBgc3RhY2tbTUFYX0JQRl9TVEFDSyAvIEJQRl9SRUdfU0laRV0uc3BpbGxlZF9wdHJgIG9yIGBzdGFja19hcmdfcmVnc2ApLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIGBicGZfcmVnX3N0YXRlYCBpbnN0YW5jZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgaW5pdGlhbGl6YXRpb24gb3IgY2xlYXJpbmcgcGF0dGVybnMgZm9yIHRoZXNlIHN0cnVjdHMgdG8gdmVyaWZ5IHRoYXQgdGhlIGBmcmFtZW5vYCBmaWVsZCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgYWNjZXNzZWQuICBJJ2xsIHN0YXJ0IGdyZXBwaW5nIGZvciBob3cgYGZyYW1lbm9gIGlzIGluaXRpYWxpemVkIG9yIGhvdyBgYnBmX3JlZ19zdGF0ZWAgaXMgY2xlYXJlZC9pbml0aWFsaXplZCB3aXRoaW4gdGhlIHZlcmlmaWVyIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NTowNS4yNjcxNTc5NjFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTU1MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ3NcXFxcW0JQRl9SRUdfRlBcXFxcXVxcXFwuZnJhbWVub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMjcxPXN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjI4My1cXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR19GUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIyODQ6XFx0cmVnc1tCUEZfUkVHX0ZQXS5mcmFtZW5vID0gc3RhdGUtXFx1MDAzZWZyYW1lbm87XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyODUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NTowNS4zMTU3MjQ5ODFaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzcwMzIwNTg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgSW5pdGlhbCBTdGF0ZXMqKlxuXG5Pa2F5LCBzbyBiZWZvcmUgZGl2aW5nIGRlZXBlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbmFsIHN0YXRlcyBhcmUgc2V0IGNvcnJlY3RseS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBleGVjdXRpb24gb2YgdGhpcyByb3V0aW5lLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpbml0X2Z1bmNfc3RhdGVgIGFuZCBgaW5pdF9yZWdfc3RhdGVgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gQXJlIHRoZSBmdW5jdGlvbidzIGludGVybmFsIHN0YXRlIGFuZCB0aGUgcmVnaXN0ZXIgdmFsdWVzIHNldCB0byB3aGF0IEkgZXhwZWN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBwYXJ0aWN1bGFyIG9wZXJhdGlvbj8gSXQncyBjcnVjaWFsIGZvciB0aGUgc3Vic2VxdWVudCBsb2dpYyB0byB3b3JrIGFzIGludGVuZGVkLCBhbmQgYW55IGVycm9ycyBoZXJlIHdpbGwgcmlwcGxlIHRocm91Z2ggdGhlIGV4ZWN1dGlvbi4gSXQncyBhIHF1aWNrIHNhbml0eSBjaGVjayBidXQgYW4gaW1wb3J0YW50IG9uZSB0byBhdm9pZCB3YXN0ZWQgdGltZSB0cmFja2luZyBkb3duIGRvd25zdHJlYW0gaXNzdWVzLiBMZXQncyBtYWtlIHN1cmUgdGhlc2UgaW5pdGlhbGl6YXRpb24gc3RlcHMgYXJlIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzMxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjEzLjAxODkzMzY1M1oiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNzA6XFx0XFxuMjI3MTpcXHRzdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyNzI6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSlcXG4yMjczOlxcdHtcXG4yMjc0OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gc3RhdGUtXFx1MDAzZXJlZ3M7XFxuMjI3NTpcXHRcXHRpbnQgaTtcXG4yMjc2OlxcdFxcbjIyNzc6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9CUEZfUkVHOyBpKyspIHtcXG4yMjc4OlxcdFxcdFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZyZWdzW2ldKTtcXG4yMjc5OlxcdFxcdH1cXG4yMjgwOlxcdFxcbjIyODE6XFx0XFx0LyogZnJhbWUgcG9pbnRlciAqL1xcbjIyODI6XFx0XFx0cmVnc1tCUEZfUkVHX0ZQXS50eXBlID0gUFRSX1RPX1NUQUNLO1xcbjIyODM6XFx0XFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfRlApO1xcbjIyODQ6XFx0XFx0cmVnc1tCUEZfUkVHX0ZQXS5mcmFtZW5vID0gc3RhdGUtXFx1MDAzZWZyYW1lbm87XFxuMjI4NTpcXHR9XFxuMjI4NjpcXHRcXG4yMjg3OlxcdHN0YXRpYyBzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSByZXR2YWxfcmFuZ2UoczMyIG1pbnZhbCwgczMyIG1heHZhbClcXG4yMjg4OlxcdHtcXG4yMjg5OlxcdFxcdC8qXFxuMjI5MDpcXHRcXHQgKiByZXR1cm5fMzJiaXQgaXMgc2V0IHRvIGZhbHNlIGJ5IGRlZmF1bHQgYW5kIHNldCBleHBsaWNpdGx5XFxuMjI5MTpcXHRcXHQgKiBieSB0aGUgY2FsbGVyIHdoZW4gbmVjZXNzYXJ5LlxcbjIyOTI6XFx0XFx0ICovXFxuMjI5MzpcXHRcXHRyZXR1cm4gKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlKXsgbWludmFsLCBtYXh2YWwsIGZhbHNlIH07XFxuMjI5NDpcXHR9XFxuMjI5NTpcXHRcXG4yMjk2OlxcdHN0YXRpYyB2b2lkIGluaXRfZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyOTc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXFxuMjI5ODpcXHRcXHRcXHRcXHQgICAgaW50IGNhbGxzaXRlLCBpbnQgZnJhbWVubywgaW50IHN1YnByb2dubylcXG4yMjk5OlxcdHtcXG4yMzAwOlxcdFxcdHN0YXRlLVxcdTAwM2VjYWxsc2l0ZSA9IGNhbGxzaXRlO1xcbjIzMDE6XFx0XFx0c3RhdGUtXFx1MDAzZWZyYW1lbm8gPSBmcmFtZW5vO1xcbjIzMDI6XFx0XFx0YnBmX2RpYWdfaW5pdF9mcmFtZShlbnYsIHN0YXRlKTtcXG4yMzAzOlxcdFxcdHN0YXRlLVxcdTAwM2VzdWJwcm9nbm8gPSBzdWJwcm9nbm87XFxuMjMwNDpcXHRcXHRzdGF0ZS1cXHUwMDNlY2FsbGJhY2tfcmV0X3JhbmdlID0gcmV0dmFsX3JhbmdlKDAsIDApO1xcbjIzMDU6XFx0XFx0aW5pdF9yZWdfc3RhdGUoZW52LCBzdGF0ZSk7XFxuMjMwNjpcXHRcXHRtYXJrX3ZlcmlmaWVyX3N0YXRlX3NjcmF0Y2hlZChlbnYpO1xcbjIzMDc6XFx0fVxcbjIzMDg6XFx0XFxuMjMwOTpcXHQvKiBTaW1pbGFyIHRvIHB1c2hfc3RhY2soKSwgYnV0IGZvciBhc3luYyBjYWxsYmFja3MgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTU6MTMuMDE5NTg0MjUzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNTkxMDgyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEZWNvZGluZyBgYnBmX21hcmtfcmVnX25vdF9pbml0YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgYnBmX21hcmtfcmVnX25vdF9pbml0YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggQlBGLCBsaWtlbHkgZUJQRiwgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBzb3J0IG9mIGluaXRpYWxpemF0aW9uIG9yIHJlZ2lzdGVyIHRyYWNraW5nIGlzc3VlLiBUaGUgXCJub3QgaW5pdFwiIHBhcnQgaXMgdGhlIGtleS4gSXQgc2lnbmlmaWVzIGEgc3RhdGUgd2hlcmUgYSBwYXJ0aWN1bGFyIEJQRiByZWdpc3RlciBoYXNuJ3QgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gVGhpcyBzY3JlYW1zIHBvdGVudGlhbCBmb3IgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCwgZnJhbmtseSwgY3Jhc2hlcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSBzY2VuYXJpb3MuIElzIHRoaXMgcmVsYXRlZCB0byBhIHNwZWNpZmljIEJQRiBoZWxwZXIgZnVuY3Rpb24/IE9yIHBlcmhhcHMgYSBnZW5lcmFsIGlzc3VlIGluIHRoZSB2ZXJpZmllciB3aGVyZSBpdCdzIG5vdCBjYXRjaGluZyB1bmluaXRpYWxpemVkIHJlZ2lzdGVyIHVzYWdlIGVhcmx5IGVub3VnaD8gSSBoYXZlIHRvIHJlbWVtYmVyIHRoZSB2ZXJpZmllciBpcyAqc3VwcG9zZWQqIHRvIGNhdGNoIHRoZXNlLCBzbyB0aGlzIGNvdWxkIG1lYW46XG5cbiogICAqKkEgdmVyaWZpZXIgYnVnOioqIEEgZmxhdyBpbiB0aGUgc3RhdGljIGFuYWx5c2lzIG9mIHRoZSBCUEYgdmVyaWZpZXIgYWxsb3dzIHRoZSBwcm9ncmFtIHRvIHBhc3MgdmFsaWRhdGlvbiB3aXRoIHVuaW5pdGlhbGl6ZWQgcmVnaXN0ZXJzLiBUaGlzIGlzIGJhZCwgKnZlcnkqIGJhZC4gSXQgY291bGQgbGVhZCB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaWYgZXhwbG9pdGVkLlxuKiAgICoqRWRnZSBjYXNlczoqKiBQZXJoYXBzIGEgY29tcGxleCBjb250cm9sIGZsb3cgcGF0aCB0aGF0J3MgYnlwYXNzaW5nIHRoZSB2ZXJpZmllcidzIGNoZWNrcy4gVGhlIHZlcmlmaWVyIG1pZ2h0IHN0cnVnZ2xlIHdpdGggaW50cmljYXRlIGxvb3BzIG9yIGNvbmRpdGlvbmFsIGp1bXBzLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNhc2VzIGFyZSBoYW5kbGVkIGJ5IHRoZSB2ZXJpZmllcidzIGFuYWx5c2lzLCBhbmQgd2hldGhlciB3ZSdyZSB1c2luZyBhbnkgdHJpY2tzIHRoYXQgbWlnaHQgdGhyb3cgaXQgb2ZmLlxuKiAgICoqQ29tcGlsZXIgT3B0aW1pemF0aW9uOioqIE1pZ2h0IGEgY2VydGFpbiBjb21waWxlciBvcHRpbWl6YXRpb24gYmUgaW50cm9kdWNpbmcgdGhpcyBidWc/IFRoaXMgaXMgYSBsaXR0bGUgbGVzcyBjb21tb24sIGJ1dCBpdCdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZS5cbiogICAqKkRvY3VtZW50YXRpb24gb3IgQXNzdW1wdGlvbnM6KiogQ291bGQgdGhlcmUgYmUgc29tZSBpbmNvcnJlY3QgZG9jdW1lbnRhdGlvbiwgb3IgYW4gdW53cml0dGVuIGFzc3VtcHRpb24gaW4gdGhlIGNvZGUgdGhhdCdzIGxlYWQgdG8gdGhlIGJ1Zz9cbiogICAqKlVzZXIgRXJyb3I6KiogSW4gYSB1c2VyLXByb3ZpZGVkIEJQRiBwcm9ncmFtLCBzb21lIGJhZCBwcm9ncmFtIG1pZ2h0IGJlIGdlbmVyYXRpbmcgdGhpcyBpc3N1ZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIHRoYXQncyB0cmlnZ2VyaW5nIHRoZSBpc3N1ZS5cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBBcmUgdGhlcmUgYW55IGNsdWVzIGluIHRoZSBzdGFjayB0cmFjZSwgb3IgYW55IHJlbGF0ZWQgZXJyb3IgbWVzc2FnZXM/IFdoYXQgQlBGIHByb2dyYW0gaXMgdHJpZ2dlcmluZyB0aGlzPyBVbmRlcnN0YW5kaW5nIHRoZSBwcm9ncmFtJ3Mgc3RydWN0dXJlIGFuZCB0aGUgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2VxdWVuY2Ugd2hlcmUgdGhpcyBmYWlsdXJlIG9jY3VycyBpcyBjcnVjaWFsLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBkaWcgZGVlcCBpbnRvIHRoZSB2ZXJpZmllcidzIGNvZGUsIG9yIGEgZGlzYXNzZW1ibGVyIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgdGhpcy4gSSdtIGxpa2VseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgcmVnaXN0ZXIgdXNhZ2UsIHN0YXRlIHRyYW5zaXRpb25zLCBhbmQgdGhlIGZsb3cgb2YgZGF0YSB3aXRoaW4gdGhlIEJQRiBwcm9ncmFtLlxuXG5PdmVyYWxsLCBgYnBmX21hcmtfcmVnX25vdF9pbml0YCBpcyBhIHJlZCBmbGFnLiBJdCBwb2ludHMgdG8gYSBjcml0aWNhbCBlcnJvciwgYW5kIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGFuZCBjYXJlZnVsIGF0dGVudGlvbi4gSSBuZWVkIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWUsIGFuYWx5emUgdGhlIGZhaWxpbmcgQlBGIHByb2dyYW0sIGFuZCB0aGVuIGZpZ3VyZSBvdXQgKndoeSogdGhlIHZlcmlmaWVyIGlzIGxldHRpbmcgdGhpcyBzbGlwIHRocm91Z2guIFRoZW4sIHRpbWUgdG8gYXBwbHkgdGhlIGZpeCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjE3LjI3ODY5NTQ2OFoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3OTE2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicGZfbWFya19yZWdfbm90X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjIxNT1zdGF0aWMgaW50IF9fbWFya19yZWdfczMyX3JhbmdlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjIzNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjIzNTp2b2lkIGJwZl9tYXJrX3JlZ19ub3RfaW5pdChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjM2LVxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjE3LjMyNjQ5MzM4N1oiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTg0Nzk1NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX21hcmtfcmVnX25vdF9pbml0YCBmdW5jdGlvbi4gSSBzZWUgaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgQlBGIHJlZ2lzdGVycyBhcmUgaGFuZGxlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBJIGltbWVkaWF0ZWx5IHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBpcyByZWxhdGVkIHRvIHRoZSBwcmV2ZW50aW9uIG9mIHVzaW5nIHVuaW5pdGlhbGl6ZWQgcmVnaXN0ZXJzLiBUaGF0J3MgYSBjbGFzc2ljIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYW5kIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIGFueSByb2J1c3QgQlBGIGltcGxlbWVudGF0aW9uLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBhbmQgc2FmZXR5IG9mIHRoZSBwcm9ncmFtcyBydW5uaW5nIGluIHRoZSBCUEYgVk0uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGl0cyB1c2UsIGFuZCB3aGF0IGRhdGEgaXQncyBvcGVyYXRpbmcgb24uIElzIGl0IGNoZWNraW5nIHJlZ2lzdGVycyBhZnRlciBzcGVjaWZpYyBvcGVyYXRpb25zPyBJcyBpdCBjYWxsZWQgZHVyaW5nIHByb2dyYW0gbG9hZGluZyBvciB2ZXJpZmljYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIHRyaWdnZXJlZC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGFuZCBzdGFydCBtYXBwaW5nIGl0IG91dCBpbiBteSBoZWFkLCB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBlZGdlIGNhc2VzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTU6MTkuNTExMjkyMjM0WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIzNSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIzNTpcXHR2b2lkIGJwZl9tYXJrX3JlZ19ub3RfaW5pdChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyMzY6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4yMjM3OlxcdHtcXG4yMjM4OlxcdFxcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIHJlZyk7XFxuMjIzOTpcXHRcXHRyZWctXFx1MDAzZXR5cGUgPSBOT1RfSU5JVDtcXG4yMjQwOlxcdH1cXG4yMjQxOlxcdFxcbjIyNDI6XFx0c3RhdGljIGludCBtYXJrX2J0Zl9sZF9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4yMjQzOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXFxuMjI0NDpcXHRcXHRcXHRcXHQgICBlbnVtIGJwZl9yZWdfdHlwZSByZWdfdHlwZSxcXG4yMjQ1OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZCxcXG4yMjQ2OlxcdFxcdFxcdFxcdCAgIGVudW0gYnBmX3R5cGVfZmxhZyBmbGFnKVxcbjIyNDc6XFx0e1xcbjIyNDg6XFx0XFx0c3dpdGNoIChyZWdfdHlwZSkge1xcbjIyNDk6XFx0XFx0Y2FzZSBTQ0FMQVJfVkFMVUU6XFxuMjI1MDpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xcbjIyNTE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjI1MjpcXHRcXHRjYXNlIFBUUl9UT19CVEZfSUQ6XFxuMjI1MzpcXHRcXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgcmVnbm8pO1xcbjIyNTQ6XFx0XFx0XFx0cmVnc1tyZWdub10udHlwZSA9IFBUUl9UT19CVEZfSUQgfCBmbGFnO1xcbjIyNTU6XFx0XFx0XFx0cmVnc1tyZWdub10uYnRmID0gYnRmO1xcbjIyNTY6XFx0XFx0XFx0cmVnc1tyZWdub10uYnRmX2lkID0gYnRmX2lkO1xcbjIyNTc6XFx0XFx0XFx0aWYgKHR5cGVfbWF5X2JlX251bGwoZmxhZykpXFxuMjI1ODpcXHRcXHRcXHRcXHRyZWdzW3JlZ25vXS5pZCA9ICsrZW52LVxcdTAwM2VpZF9nZW47XFxuMjI1OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjYwOlxcdFxcdGNhc2UgUFRSX1RPX01FTTpcXG4yMjYxOlxcdFxcdFxcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCByZWdubyk7XFxuMjI2MjpcXHRcXHRcXHRyZWdzW3JlZ25vXS50eXBlID0gUFRSX1RPX01FTSB8IGZsYWc7XFxuMjI2MzpcXHRcXHRcXHRyZWdzW3JlZ25vXS5tZW1fc2l6ZSA9IDA7XFxuMjI2NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjY1OlxcdFxcdGRlZmF1bHQ6XFxuMjI2NjpcXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwidW5leHBlY3RlZCByZWdfdHlwZSAlZCBpbiAlc1xcXFxuXFxcIiwgcmVnX3R5cGUsIF9fZnVuY19fKTtcXG4yMjY3OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjIyNjg6XFx0XFx0fVxcbjIyNjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NToxOS41MTE5MDk2NzRaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMwMDc5NTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYF9fbWFya19yZWdfdW5rbm93bmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgX19tYXJrX3JlZ191bmtub3duYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBTZWVpbmcgdGhpcyBuYW1lLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgaXRzIHJvbGUgaW4gcmVnaXN0ZXIgbWFuYWdlbWVudCBvciB0cmFja2luZy4gVGhlIFwidW5rbm93blwiIHBhcnQgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBJdCBzdWdnZXN0cyBhIG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgcmVnaXN0ZXJzIHdob3NlIHN0YXRlIGlzbid0IHByZWNpc2VseSBkZWZpbmVkIGF0IGEgY2VydGFpbiBwb2ludCwgb3IgcGVyaGFwcyBpbml0aWFsaXphdGlvbiwgb3Igd2l0aGluIGEgc3BlY2lmaWMgY29udHJvbCBmbG93LlxuXG5JJ20gdGhpbmtpbmcsIHRoaXMgaXMgcHJvYmFibHkgaW1wbGVtZW50ZWQgYXQgYSBmYWlybHkgbG93IGxldmVsLiBXZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHRoaW5ncyBsaWtlIG9wdGltaXppbmcgY29tcGlsZXIgcGFzc2VzLCBvciBwZXJoYXBzIGV2ZW4gaW4gdGhlIGNvcmUgb2YgYW4gZW11bGF0b3Igb3IgdmlydHVhbCBtYWNoaW5lLiBHaXZlbiB0aGUgZW1waGFzaXMgb24gXCJtYXJrLFwiIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGZsYWcgb3IgYml0bWFzayB0byBiZSBtYW5pcHVsYXRlZCwgaW5kaWNhdGluZyB0aGF0IHRoZSByZWdpc3RlcidzIGNvbnRlbnRzIGFyZSBpbmRldGVybWluYXRlIG9yIGludmFsaWQgZm9yIGEgcGFydGljdWxhciBvcGVyYXRpb24uXG5cblRoZSBrZXkgcXVlc3Rpb25zIGltbWVkaWF0ZWx5IGZvcm1pbmcgaW4gbXkgaGVhZCBhcmU6IFdoYXQgdHJpZ2dlcnMgdGhpcyBtYXJraW5nPyBJcyBpdCBkdWUgdG8gY29udHJvbCBmbG93IHBhdGhzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgcGVyaGFwcyByZWdpc3RlciBhbGlhc2luZyB0aGF0IGlzbid0IGNsZWFubHkgaGFuZGxlZD8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciByZWdpc3RlciBhbmFseXNpcyB0ZWNobmlxdWVzIGxpa2UgbGl2ZW5lc3MgYW5hbHlzaXMgb3IgcmVnaXN0ZXIgYWxsb2NhdGlvbj8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgb2Z0ZW4sIGlzIGl0IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gQXJlIHRoZXJlIG90aGVyIHJlbGF0ZWQgcm91dGluZXMsIGUuZy4gYF9fdW5tYXJrX3JlZ19rbm93bmA/IElzIHRoZXJlIGEgY29udGV4dCBzd2l0Y2gsIG9yIGZ1bmN0aW9uIGNhbGwgaGVyZT8gSG93IGFyZSB0aGVzZSByZWdpc3RlcnMgbGF0ZXIgYmVpbmcgdXNlZD8gQXJlIHRoZXJlIHJ1bnRpbWUgY2hlY2tzPyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgZ2VuZXJhdGUgY29tcGlsZSB0aW1lIGVycm9ycz8gSXMgaXQgZ2VuZXJhdGluZyBhIHdhcm5pbmc/IFRoaXMgbXVzdCBiZSBpbXBvcnRhbnQuXG5cbkluIHNob3J0LCBteSBtaW5kIGlzIGFscmVhZHkgZm9ybXVsYXRpbmcgYSBzZXJpZXMgb2YgcXVlc3Rpb25zIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBhY2N1cmFjeSwgYW5kIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2Ygd2hhdGV2ZXIgc3lzdGVtIG9yIHRvb2wgd2UncmUgZXhhbWluaW5nLiBJJ20ga2VlbiB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBlZGdlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTgxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTU6MjIuODEyNzA4NjI0WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYxNDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIF9fbWFya19yZWdfdW5rbm93blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz03NTM9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzcyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NzM6c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc3NC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjE5MT12b2lkIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyMDEtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIyMDI6c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyMDMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjIyLjg2MTMyNzcwM1oiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDAzMDA5NDM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyB6ZXJvIGluIG9uIHRob3NlIGNydWNpYWwgbGluZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGxpbmVzIDIyMDAtMjIzMC4gQmFzZWQgb24gcHJldmlvdXMgZGVidWdnaW5nIHNlc3Npb25zLCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGxvZ2ljIHJlc3BvbnNpYmxlIGZvciBbKioqSW5zZXJ0IFlvdXIgS25vd2xlZGdlIG9mIHdoYXQgdGhvc2UgbGluZXMgbGlrZWx5IHJlbGF0ZSB0byBoZXJlLCBlLmcuLCByZWdpc3RlciB2YWxpZGF0aW9uLCBsb29wIGRldGVjdGlvbiwgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaGFuZGxpbmcsIG9yIGEgcGFydGljdWxhciBpbnN0cnVjdGlvbiBwYXR0ZXJuKioqXS4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIGFuZCBjb2RlIGZsb3cuIEkgd2FudCB0byBjaGVjayBmb3IgZWRnZSBjYXNlcywgcG90ZW50aWFsIGZsYXdzLCBvciBldmVuIGp1c3Qgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgdmVyaWZpZXIncyBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSSdsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gYWNjb3VudHMgZm9yIGFsbCByZWxldmFudCBzY2VuYXJpb3MgYW5kIHBvdGVudGlhbGx5IGxvb2sgdG8gb3B0aW1pemUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTU6MzIuODkxNDI1NTAxWiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTY4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMDA6XFx0ICogaW5pdGlhbGl6ZSAucHJlY2lzZSBhcyB0cnVlIHdoZW4gbm90IGJwZiBjYXBhYmxlLlxcbjIyMDE6XFx0ICovXFxuMjIwMjpcXHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4yMjAzOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbjIyMDQ6XFx0e1xcbjIyMDU6XFx0XFx0YnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHJlZyk7XFxuMjIwNjpcXHRcXHRyZWctXFx1MDAzZXByZWNpc2UgPSAhZW52LVxcdTAwM2VicGZfY2FwYWJsZTtcXG4yMjA3OlxcdH1cXG4yMjA4OlxcdFxcbjIyMDk6XFx0c3RhdGljIHZvaWQgbWFya19yZWdfdW5rbm93bihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyMTA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vKVxcbjIyMTE6XFx0e1xcbjIyMTI6XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVncyArIHJlZ25vKTtcXG4yMjEzOlxcdH1cXG4yMjE0OlxcdFxcbjIyMTU6XFx0c3RhdGljIGludCBfX21hcmtfcmVnX3MzMl9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyMTY6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXFxuMjIxNzpcXHRcXHRcXHRcXHRcXHR1MzIgcmVnbm8sXFxuMjIxODpcXHRcXHRcXHRcXHRcXHRzMzIgczMyX21pbixcXG4yMjE5OlxcdFxcdFxcdFxcdFxcdHMzMiBzMzJfbWF4KVxcbjIyMjA6XFx0e1xcbjIyMjE6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ3MgKyByZWdubztcXG4yMjIyOlxcdFxcbjIyMjM6XFx0XFx0cmVnX3NldF9zcmFuZ2UzMihyZWcsXFxuMjIyNDpcXHRcXHRcXHRcXHQgbWF4X3QoczMyLCByZWdfczMyX21pbihyZWcpLCBzMzJfbWluKSxcXG4yMjI1OlxcdFxcdFxcdFxcdCBtaW5fdChzMzIsIHJlZ19zMzJfbWF4KHJlZyksIHMzMl9tYXgpKTtcXG4yMjI2OlxcdFxcdHJlZ19zZXRfc3JhbmdlNjQocmVnLFxcbjIyMjc6XFx0XFx0XFx0XFx0IG1heF90KHM2NCwgcmVnX3NtaW4ocmVnKSwgczMyX21pbiksXFxuMjIyODpcXHRcXHRcXHRcXHQgbWluX3QoczY0LCByZWdfc21heChyZWcpLCBzMzJfbWF4KSk7XFxuMjIyOTpcXHRcXG4yMjMwOlxcdFxcdHJlZ19ib3VuZHNfc3luYyhyZWcpO1xcbjIyMzE6XFx0XFxuMjIzMjpcXHRcXHRyZXR1cm4gcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soZW52LCByZWcsIFxcXCJzMzJfcmFuZ2VcXFwiKTtcXG4yMjMzOlxcdH1cXG4yMjM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1NTozMi44OTI1Mjc1M1oiLCJTZXEiOjY5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTY0ODQwMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZWAsIHN1bW1hcml6ZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqTXkgUGVyc3BlY3RpdmUgb24gYGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZWAqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlYC4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgb2YgQlBGIHByb2dyYW0gYW5hbHlzaXMuIFRoaXMgZnVuY3Rpb24sIG9yIHdoYXRldmVyIGl0IGlzLCBpcyBhbG1vc3QgY2VydGFpbmx5IGEgY3J1Y2lhbCBjb21wb25lbnQgaW4gaGFuZGxpbmcgKnVuY2VydGFpbnR5KiBkdXJpbmcgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIGEgcGxhY2Ugd2hlcmUgdGhpbmdzIGFyZW4ndCBwZXJmZWN0bHkgcHJlZGljdGFibGUuICBUaGUgXCJ1bmtub3duXCIgcGFydCBpcyBjbGVhciDigJMgd2UndmUgZW5jb3VudGVyZWQgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGV4YWN0IHZhbHVlIG9mIGEgcmVnaXN0ZXIgY2FuJ3QgYmUgcGlubmVkIGRvd24gZGVmaW5pdGl2ZWx5LiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBhIGNvbXBsZXggY29uZGl0aW9uYWwgcGF0aCwgYW4gZXh0ZXJuYWwgaW5wdXQsIG9yIGV2ZW4ganVzdCBzb21lIGRlbGliZXJhdGUgb2JmdXNjYXRpb24gd2l0aGluIHRoZSBwcm9ncmFtLlxuXG5UaGUgXCJpbXByZWNpc2VcIiBsYWJlbCBpcyBhbHNvIHZlcnkgdGVsbGluZy4gSXQgc3VnZ2VzdHMgd2UgYXJlbid0IHRocm93aW5nIG91ciBoYW5kcyB1cCBpbiB0aGUgYWlyIGFuZCBnaXZpbmcgdXAgb24gdHJhY2tpbmcgdGhpcyByZWdpc3RlciBlbnRpcmVseS4gSW5zdGVhZCwgd2UncmUgbGlrZWx5IGFkb3B0aW5nIGEgY29uc2VydmF0aXZlLCBvdmVyLWFwcHJveGltYXRpbmcgc3RyYXRlZ3kuICBXZSdyZSBhY2tub3dsZWRnaW5nIHRoZSBhbWJpZ3VpdHksIHllcywgYnV0IHdlJ3JlIHRyeWluZyB0byBjb250YWluIGl0LiBUaGUgcHJvZ3JhbSBtaWdodCBjb250aW51ZSB0byBvcGVyYXRlIG9uIHRoZSByZWdpc3RlciwgYW5kIHdlIG5lZWQgdG8gcHJvdmlkZSBhIHZhbHVlIG9yIGNvbnN0cmFpbnQgZm9yIGl0LCBldmVuIGlmIHRoYXQgdmFsdWUgaXMgZXh0cmVtZWx5IGJyb2FkLlxuXG5Gcm9tIGEgcHJhY3RpY2FsIGFuZ2xlLCBJJ2QgYmV0IHRoaXMgZnVuY3Rpb24gaXMgZXNzZW50aWFsIGZvciBzYWZldHkgYW5kIGNvcnJlY3RuZXNzLiBUaGUgZ29hbCBpc24ndCBuZWNlc3NhcmlseSB0byAqc29sdmUqIGZvciB0aGUgZXhhY3QgcmVnaXN0ZXIgdmFsdWUsIGJ1dCB0byBwcmV2ZW50IGRhbmdlcm91cyBiZWhhdmlvciB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gbGVhdmluZyB0aGUgdmFsdWUgdW5pbml0aWFsaXplZCBvciBpbXByb3Blcmx5IGNvbnN0cmFpbmVkLiBGb3IgaW5zdGFuY2UsIHlvdSBjb3VsZCBzZWUgaXQgdXNlZCB0bzpcblxuKiAgICoqRmxhZyBhIHJlZ2lzdGVyIGZvciBhIG1vcmUgaW4tZGVwdGggYW5hbHlzaXMgbGF0ZXI6KiogdGhlIFwiaW1wcmVjaXNlXCIgbWFya2luZyBjb3VsZCB0cmlnZ2VyIG1vcmUgc29waGlzdGljYXRlZCBzeW1ib2xpYyBleGVjdXRpb24gaWYgZW5hYmxlZFxuKiAgICoqUHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb246KiogVGhpcyBtaWdodCBtZWFuIGxpbWl0aW5nIHdoYXQgb3BlcmF0aW9ucyB0aGF0IHJlZ2lzdGVyIGNhbiB0YWtlIHBhcnQgaW4gZHVyaW5nIGEgc2FmZXR5IGNoZWNrLCBwcmV2ZW50aW5nIGludmFsaWQgbWVtb3J5IGFjY2Vzcywgb3IgYXJpdGhtZXRpYyBvdmVyZmxvd3MuXG4qICAgKipFc3RhYmxpc2ggYSBib3VuZGFyeSBmb3IgdmFsdWUgcmFuZ2VzOioqIFRoaXMgcHJldmVudHMgdW5leHBlY3RlZCBiZWhhdmlvciwgYW5kIGFsbG93cyBmdXJ0aGVyIG9wZXJhdGlvbnMgb24gdGhlIHJlZ2lzdGVyIHdpdGggcmVhc29uYWJsZSBjb25zdHJhaW50c1xuKiAgICoqRW5mb3JjZSBzYWZldHkgY29uc3RyYWludHM6KiogUHJldmVudHMgbWFsaWNpb3VzIGlucHV0cyB0byB0aGUgQlBGIG1hY2hpbmUuXG5cbk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgY2FsbGVkIGZyb20gd2l0aGluIEJQRiB2ZXJpZmllci4gVGhlIHZlcmlmaWVyIGhhcyB0byBiZSBleHRyZW1lbHkgY2F1dGlvdXMgYW5kIGVyciBvbiB0aGUgc2lkZSBvZiBzYWZldHkgaW4gdGhlIGZhY2Ugb2YgdW5jZXJ0YWludHkuIFRoYXQncyBpdHMgam9iISBTbywgYGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZWAgaXMgYSBzbWFsbCBidXQgY3JpdGljYWwgY29nIGluIHRoYXQgbWFjaGluZS4gSXQgcHJvdmlkZXMgYSBtZWFucyB0byBhY2NvdW50IGZvciBhbWJpZ3VpdHkgd2hpbGUgc3RpbGwgbWFpbnRhaW5pbmcgY29udHJvbCBvdmVyIHRoZSBwcm9ncmFtJ3MgZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM2OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTU6MzcuMDU3MzcxMjk3WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjczNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxODU6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjE4NjpcXHRcXHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xcbjIxODc6XFx0XFx0cmV0dXJuIDA7XFxuMjE4ODpcXHR9XFxuMjE4OTpcXHRcXG4yMTkwOlxcdC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovXFxuMjE5MTpcXHR2b2lkIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbjIxOTI6XFx0e1xcbjIxOTM6XFx0XFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcXG4yMTk0OlxcdFxcdHJlZy1cXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcXG4yMTk1OlxcdFxcdHJlZy1cXHUwMDNldmFyX29mZiA9IHRudW1fdW5rbm93bjtcXG4yMTk2OlxcdFxcdF9fbWFya19yZWdfdW5ib3VuZGVkKHJlZyk7XFxuMjE5NzpcXHR9XFxuMjE5ODpcXHRcXG4yMTk5OlxcdC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUsXFxuMjIwMDpcXHQgKiBpbml0aWFsaXplIC5wcmVjaXNlIGFzIHRydWUgd2hlbiBub3QgYnBmIGNhcGFibGUuXFxuMjIwMTpcXHQgKi9cXG4yMjAyOlxcdHN0YXRpYyB2b2lkIF9fbWFya19yZWdfdW5rbm93bihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyMDM6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuMjIwNDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjM3LjA1OTM0MjY2N1oiLCJTZXEiOjcxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NTM0OTc0NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJQRiBWZXJpZmllciBQYXRjaCBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgZXZlcnkgYGJwZl9yZWdfc3RhdGVgIHN0YXJ0cyB6ZXJvZWQgb3V0LCBzbyBgZnJhbWVub2AgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZC4gSSBzZWUgdGhhdCBgc3RhdGVzX21heWJlX2xvb3BpbmdgIGhhcyBhIGBtZW1jbXBgIHVwIHRvIGBmcmFtZW5vYCwgd2hpY2ggc2VlbXMgcmVsZXZhbnQuIEFuZCBJIG5vdGljZSB0aGF0IGByZWdzX2V4YWN0YCBpcyBzdXBwb3NlZCB0byBjaGVjayBpZiB0d28gcmVnaXN0ZXJzIGFyZSBleGFjdGx5IHRoZSBzYW1lLiBCZWZvcmUgdGhlIHBhdGNoLCBpdCBvbmx5IGNoZWNrZWQgdXAgdG8gdGhlIGBpZGAgZmllbGQuIEl0IHNraXBwZWQgY29tcGFyaW5nIGBmcmFtZW5vYCBpbiBzb21lIGtleSBzaXR1YXRpb25zLiBGb3IgZXhhbXBsZSwgaW4gYHJlZ3NhZmVgIGZvciBgUFRSX1RPX1NUQUNLYCwgYW5kIHdoZW4gYGV4YWN0ID09IEVYQUNUYCBkdXJpbmcgbG9vcCBkZXRlY3Rpb24uIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQhIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGFkZHJlc3MgdGhlIGZhY3QgdGhhdCB0aGUgdmVyaWZpZXIgd2FzIG1pc3NpbmcgdGhlIGNoZWNrIGZvciBgZnJhbWVub2AgaW4gYHJlZ3NfZXhhY3RgLiBOb3csIGl0IGVuc3VyZXMgdGhhdCBzdGFjayBmcmFtZSBkaWZmZXJlbmNlcyBhcmUgY2F1Z2h0IGNvcnJlY3RseS5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNvdWxkIHRoaXMgYnVnIG9yIHRoZSBmaXggZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBrZXJuZWw/IFdoYXQgd2FzIHRoZSBidWcgZG9pbmc/IFdlbGwsIHRoZSB0ZXN0IGNhc2UgcHJvdmlkZWQgc2hvd3MgYSBzY2VuYXJpbyB3aGVyZSBhIGxvb3AgbW9kaWZpZXMgdGhlIHN0YWNrIGZyYW1lIG9mIGEgcG9pbnRlci4gVGhlIHZlcmlmaWVyIHdhcyBpbmNvcnJlY3RseSB0aGlua2luZyB0aGUgc3RhdGVzIHdlcmUgZXF1YWwgb3IgYW4gaW5maW5pdGUgbG9vcCB3aGVuIHRoZXkgd2VyZW4ndC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIHZlcmlmaWVyIGdvdCB0aGlzIGNvbXBsZXRlbHkgd3JvbmcuIEl0IGNvdWxkIGhhdmUgZWl0aGVyIHJlamVjdGVkIHRoZSBjb2RlIGluY29ycmVjdGx5IG9yIGxldCBhIGxvb3AgcnVuIGZvcmV2ZXIgYnkgbWlzc2luZyB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uLiBCdXQgZG9lcyBpdCBsZWFrIGluZm8gb3IgZXhwb3NlIHVuaW5pdCBtZW0/XG5cbkxldCdzIGNhcmVmdWxseSBjaGVjayB0aGUgS01TQU4gZ3VpZGVsaW5lcy4gRG9lcyB0aGUgcGF0Y2guLi5cbjEuICBJbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8sIHRoZSBjb2RlIGlzIGludGVybmFsIHRvIHRoZSB2ZXJpZmllci5cbjIuICBJbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYmVjYXVzZSBgZnJhbWVub2AgaXMgYWx3YXlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHN0cnVjdHMgYXJlIGNyZWF0ZWQuXG4zLiAgQWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOby5cbjQuICBNb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby5cblxuQWgsIG5vLCB0aGF0IGlzbid0IHRoZSBjYXNlIGhlcmUuIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IGZpeGluZyBhIGxvZ2ljYWwgZXJyb3IsIG5vdCBpbnRyb2R1Y2luZyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBJdOKAmXMgYWJvdXQgZW5zdXJpbmcgdGhlICpjb3JyZWN0bmVzcyogb2YgY29tcGFyaXNvbnMsIG5vdCBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdHRlcm5zLiBUaGUgY29tcGFyaXNvbiBub3cgaW5jbHVkZXMgYHJvbGQtXHUwMDNlZnJhbWVubyA9PSByY3VyLVx1MDAzZWZyYW1lbm9gLCB0aGVzZSByZWdpc3RlcnMgYXJlIGFsbCB6ZXJvLWluaXRpYWxpemVkIGFuZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHRpbWUgdGhlIGNvbXBhcmlzb25zIGFyZSBtYWRlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGp1c3QgaW1wcm92ZXMgdGhlIGxvb3AgZGV0ZWN0aW9uIGxvZ2ljLCB3aGljaCB1c2VzIGFscmVhZHktaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGl0J3MgYWxsIGJhc2VkIG9uIHplcm8taW5pdGlhbGl6ZWQgc3RydWN0dXJlcy4gVGhlIHBhdGNoIHNpbXBseSBlbnN1cmVzIHRoYXQgYGZyYW1lbm9gIGlzIGFjY291bnRlZCBmb3Igd2hlbiBjaGVja2luZyBpZiBzdGF0ZXMgYXJlIGlkZW50aWNhbC4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3Rpb24sIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGV0Yy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNzUsIk91dHB1dFRva2VucyI6MjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU1OjQ2LjU5NDMyMjc5MloiLCJTZXEiOjcyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLiBTcGVjaWZpY2FsbHksIGl0IG1vdmVzIHRoZSBmcmFtZSBudW1iZXIgY2hlY2sgKHJvbGQtXFx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cXHUwMDNlZnJhbWVubykgaW50byByZWdzX2V4YWN0KCksIGVuc3VyaW5nIHRoYXQgZXhhY3QgcmVnaXN0ZXIgc3RhdGUgY29tcGFyaXNvbnMgKHN1Y2ggYXMgZHVyaW5nIGxvb3AgZGV0ZWN0aW9uIGFuZCBzcGlsbGVkIHN0YWNrIHBvaW50ZXIgY29tcGFyaXNvbikgY29ycmVjdGx5IGRpc3Rpbmd1aXNoIHN0YWNrIHBvaW50ZXJzIGZyb20gZGlmZmVyZW50IGNhbGwgZnJhbWVzLlxcblxcblRoZSB0b3VjaGVkIGZpZWxkcyAocm9sZC1cXHUwMDNlZnJhbWVubyBhbmQgcmN1ci1cXHUwMDNlZnJhbWVubykgaW4gc3RydWN0IGJwZl9yZWdfc3RhdGUgYXJlIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVycyBhbmQgZnVuYyBzdGF0ZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKHZpYSBtZW1zZXQoKSBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoKSBhbmQgaW5pdF9mdW5jX3N0YXRlKCkpLiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyBpbiBrZXJuZWwvYnBmL3N0YXRlcy5jLiBTcGVjaWZpY2FsbHksIGl0IG1vdmVzIHRoZSBmcmFtZSBudW1iZXIgY2hlY2sgKHJvbGQtXFx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cXHUwMDNlZnJhbWVubykgaW50byByZWdzX2V4YWN0KCksIGVuc3VyaW5nIHRoYXQgZXhhY3QgcmVnaXN0ZXIgc3RhdGUgY29tcGFyaXNvbnMgKHN1Y2ggYXMgZHVyaW5nIGxvb3AgZGV0ZWN0aW9uIGFuZCBzcGlsbGVkIHN0YWNrIHBvaW50ZXIgY29tcGFyaXNvbikgY29ycmVjdGx5IGRpc3Rpbmd1aXNoIHN0YWNrIHBvaW50ZXJzIGZyb20gZGlmZmVyZW50IGNhbGwgZnJhbWVzLlxcblxcblRoZSB0b3VjaGVkIGZpZWxkcyAocm9sZC1cXHUwMDNlZnJhbWVubyBhbmQgcmN1ci1cXHUwMDNlZnJhbWVubykgaW4gc3RydWN0IGJwZl9yZWdfc3RhdGUgYXJlIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVycyBhbmQgZnVuYyBzdGF0ZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKHZpYSBtZW1zZXQoKSBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoKSBhbmQgaW5pdF9mdW5jX3N0YXRlKCkpLiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdmqd[1] Phase: Succeeded StartedAt: 2026-09-14 19:55:57 +0000 UTC FinishedAt: 2026-09-14 19:55:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 19:55:57 +0000 UTC FinishedAt: 2026-09-14 19:55:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[2] Phase: Running StartedAt: 2026-09-14 19:55:57 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-09-14 19:55:57 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 19:55:57 +0000 UTC FinishedAt: 2026-09-14 19:56:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 19:55:57 +0000 UTC FinishedAt: 2026-09-14 19:56:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowwdmqd/series-workflowwdmqd-convert-artifact-681522252/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 19:56:07 +0000 UTC FinishedAt: 2026-09-14 20:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 19:56:07 +0000 UTC FinishedAt: 2026-09-14 20:12:46 +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:*c1fede39-8316-4d08-898d-7ef0fbbf9d98,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-workflowwdmqd/series-workflowwdmqd-convert-artifact-681522252/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": "30f88408-ee46-4826-9a7c-3f7607a5d8b7", "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-workflowwdmqd/series-workflowwdmqd-build-action-510472826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 19:56:07 +0000 UTC FinishedAt: 2026-09-14 20:12:36 +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:*c1fede39-8316-4d08-898d-7ef0fbbf9d98,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-workflowwdmqd/series-workflowwdmqd-convert-artifact-681522252/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": "30f88408-ee46-4826-9a7c-3f7607a5d8b7", "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-workflowwdmqd/series-workflowwdmqd-build-action-510472826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 20:12:46 +0000 UTC FinishedAt: 2026-09-14 20:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 20:12:46 +0000 UTC FinishedAt: 2026-09-14 20:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 20:12:46 +0000 UTC FinishedAt: 2026-09-14 20:12:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 20:12:46 +0000 UTC FinishedAt: 2026-09-14 20:12:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowwdmqd/series-workflowwdmqd-convert-artifact-1026139019/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 20:12:56 +0000 UTC FinishedAt: 2026-09-14 20:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 20:12:56 +0000 UTC FinishedAt: 2026-09-14 20:15:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*30f88408-ee46-4826-9a7c-3f7607a5d8b7,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-workflowwdmqd/series-workflowwdmqd-build-action-510472826/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-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 20:15:11 +0000 UTC FinishedAt: 2026-09-14 20:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 20:15:11 +0000 UTC FinishedAt: 2026-09-14 20:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Running StartedAt: 2026-09-14 20:15:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Running StartedAt: 2026-09-14 20:15:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*c1fede39-8316-4d08-898d-7ef0fbbf9d98,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-workflowwdmqd/series-workflowwdmqd-convert-artifact-1026139019/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwdmqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["regs_exact","regsafe","states_equal","bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"33eff1bc-49da-4860-8fda-913b092bb2d1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Running StartedAt: 2026-09-14 20:15:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*c1fede39-8316-4d08-898d-7ef0fbbf9d98,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-workflowwdmqd/series-workflowwdmqd-convert-artifact-1026139019/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,}