Name: series-workflowxjpd2 Phase: Succeeded StartedAt: 2026-08-19 14:48:22 +0000 UTC FinishedAt: 2026-08-19 18:56:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[0] Phase: Succeeded StartedAt: 2026-08-19 14:48:22 +0000 UTC FinishedAt: 2026-08-19 15:08:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 14:48:22 +0000 UTC FinishedAt: 2026-08-19 15:08:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS", "NET_CLS_BASIC", "NET_CLS_ROUTE4", "INET", "NET_CLS_FW", "NET_CLS_U32", "CLS_U32_PERF", "CLS_U32_MARK", "NET_CLS_FLOW", "NET_CLS_CGROUP", "CGROUPS", "NET_CLS_BPF", "NET_CLS_FLOWER", "NET_CLS_MATCHALL", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS", "NET_CLS_BASIC", "NET_CLS_ROUTE4", "INET", "NET_CLS_FW", "NET_CLS_U32", "CLS_U32_PERF", "CLS_U32_MARK", "NET_CLS_FLOW", "NET_CLS_CGROUP", "CGROUPS", "NET_CLS_BPF", "NET_CLS_FLOWER", "NET_CLS_MATCHALL", "NET_CLS_ACT" ], "series_id": "464a2b7d-4d6c-4593-aa29-510031f4d40d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "basic_change", "cls_bpf_change", "cls_cgroup_change", "flow_change", "fl_change", "fw_change", "mall_change", "route4_change", "u32_change", "tcf_exts_init_ex", "tc_new_tfilter" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQkFTSUMmIzM0OywKICAgICYjMzQ7TkVUX0NMU19ST1VURTQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZXJiMzNDssCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDssCiAgICAmIzM0O0NMU19VMzJfUEVSRiYjMzQ7LAogICAgJiMzNDtDTFNfVTMyX01BUksmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GTE9XJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQ0dST1VQJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GTE9XRVImIzM0OywKICAgICYjMzQ7TkVUX0NMU19NQVRDSEFMTCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jhc2ljX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtjbHNfYnBmX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtjbHNfY2dyb3VwX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbG93X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZndfY2hhbmdlJiMzNDssCiAgICAmIzM0O21hbGxfY2hhbmdlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7LAogICAgJiMzNDt0Y2ZfZXh0c19pbml0X2V4JiMzNDssCiAgICAmIzM0O3RjX25ld190ZmlsdGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgY2xhc3NpZmllcnMgKGBuZXQvc2NoZWQvY2xzXyouY2ApIHRvIHVzZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmb3IgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLiBJdCByZXBsYWNlcyBga3phbGxvY19vYmpgLCBga3phbGxvY19vYmpzYCwgYGt6YWxsb2NfZmxleGAsIGBhbGxvY19wZXJjcHVgLCBga21lbWR1cGAsIGFuZCBgbmxhX21lbWR1cGAgd2l0aCB0aGVpciBgX2dmcGAgb3IgYWNjb3VudGVkIGVxdWl2YWxlbnRzLiBBbGwgYWZmZWN0ZWQgYWxsb2NhdGlvbnMgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkOiBga3phbGxvY2AtYmFzZWQgZnVuY3Rpb25zIGluaGVyZW50bHkgemVybyB0aGUgbWVtb3J5LCBgYWxsb2NfcGVyY3B1X2dmcGAgemVyby1pbml0aWFsaXplcyB0aGUgcGVyLUNQVSBtZW1vcnksIGFuZCBga21lbWR1cGAvYG5sYV9tZW1kdXBgIGNvcHkgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXJzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIG1pbm9yIGVycm9yLXBhdGggZml4IGluIGBjbHNfYmFzaWMuY2AgdG8gcmVtb3ZlIGFuIElEUiBlbnRyeSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgaW52YWxpZCBzdGF0ZSBidXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYWx0ZXJlZCwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgR0ZQX0tFUk5FTF9BQ0NPVU5UIHRvIHZhcmlvdXMgbWVtb3J5IGFsbG9jYXRpb25zIGluIG5ldHdvcmsgY2xhc3NpZmllcnMuIFdoaWxlIG1vc3RseSBhbiBhY2NvdW50aW5nIGNoYW5nZSwgaXQgYWxzbyBpbmNsdWRlcyBhIGZ1bmN0aW9uYWwgYnVnIGZpeCBpbiBjbHNfYmFzaWMuYyAoYmFzaWNfY2hhbmdlKSB3aGVyZSBpdCBhZGRzIGEgbWlzc2luZyBpZHJfcmVtb3ZlIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYWxsb2NfcGVyY3B1X2dmcCBmYWlscy4gVGhpcyBlcnJvciBwYXRoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIGZhdWx0IGluamVjdGlvbiBkdXJpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gSURSIGxlYWtzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzdiODNjZDZiOTQ4YWVkNGFlMzQwOTNiMWJhNjZjMWQxOTcxODQ5NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDE1OjA1OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5pbmRleCA0ZTZhMjgxMmE0ZjMyLi5iZTYzYjM0NzY0MGJhIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xuQEAgLTMzNjQsNyAmIzQzOzMzNjQsOCBAQCBpbnQgdGNmX2V4dHNfaW5pdF9leChzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMsIHN0cnVjdCBuZXQgKm5ldCwgaW50IGFjdGlvbixcbiBcdCAqIFRoaXMgcmVmZXJlbmNlIG1pZ2h0IGJlIHRha2VuIGxhdGVyIGZyb20gdGNmX2V4dHNfZ2V0X25ldCgpLlxuIFx0ICovXG4gXHRleHRzLVx1MDAzZW5ldCA9IG5ldDtcbi1cdGV4dHMtXHUwMDNlYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdGNfYWN0aW9uICosIFRDQV9BQ1RfTUFYX1BSSU8pO1xuJiM0MztcdGV4dHMtXHUwMDNlYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdGNfYWN0aW9uICosIFRDQV9BQ1RfTUFYX1BSSU8sXG4mIzQzO1x0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFleHRzLVx1MDAzZWFjdGlvbnMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYmFzaWMuYyBiL25ldC9zY2hlZC9jbHNfYmFzaWMuY1xuaW5kZXggNDkyY2Q5Y2U4ZDQ2Zi4uZTJhOTRiYTlmYmE3NiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYmFzaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jXG5AQCAtMTkzLDcgJiM0MzsxOTMsNyBAQCBzdGF0aWMgaW50IGJhc2ljX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpO1xuJiM0MztcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTIxMiw5ICYjNDM7MjEyLDExIEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFx0Zm5ldy1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4tXHRmbmV3LVx1MDAzZXBmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB0Y19iYXNpY19wY250KTtcbiYjNDM7XHRmbmV3LVx1MDAzZXBmID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgdGNfYmFzaWNfcGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldy1cdTAwM2VwZikge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0aWYgKCFmb2xkKVxuJiM0MztcdFx0XHRpZHJfcmVtb3ZlKFx1MDAyNmhlYWQtXHUwMDNlaGFuZGxlX2lkciwgZm5ldy1cdTAwM2VoYW5kbGUpO1xuIFx0XHRnb3RvIGVycm91dDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2JwZi5jIGIvbmV0L3NjaGVkL2Nsc19icGYuY1xuaW5kZXggNmQxOTE1NWJlY2M4Ni4uMTg4Y2YwZjk0OWRkNCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYnBmLmNcbkBAIC0zNTIsNyAmIzQzOzM1Miw3IEBAIHN0YXRpYyBpbnQgY2xzX2JwZl9wcm9nX2Zyb21fb3BzKHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGNsc19icGZfcHJvZyAqcHJvZylcbiBcdGlmIChicGZfc2l6ZSAhPSBubGFfbGVuKHRiW1RDQV9CUEZfT1BTXSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0YnBmX29wcyA9IGttZW1kdXAobmxhX2RhdGEodGJbVENBX0JQRl9PUFNdKSwgYnBmX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGJwZl9vcHMgPSBrbWVtZHVwKG5sYV9kYXRhKHRiW1RDQV9CUEZfT1BTXSksIGJwZl9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKGJwZl9vcHMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNDAzLDcgJiM0Mzs0MDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX2VmZChzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gXG4gXHRpZiAodGJbVENBX0JQRl9OQU1FXSkge1xuLVx0XHRuYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdG5hbWUgPSBubGFfbWVtZHVwKHRiW1RDQV9CUEZfTkFNRV0sIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghbmFtZSkge1xuIFx0XHRcdGJwZl9wcm9nX3B1dChmcCk7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwcm9nID0ga3phbGxvY19vYmooKnByb2cpO1xuJiM0MztcdHByb2cgPSBremFsbG9jX29iaigqcHJvZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghcHJvZylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXG5pbmRleCA2ODBhNWMzMDgwOTRlLi4yMTBmZDlmZDI2ZDgzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuY1xuQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIHN0YXRpYyBpbnQgY2xzX2Nncm91cF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0aWYgKGhlYWQgXHUwMDI2XHUwMDI2IGhhbmRsZSAhPSBoZWFkLVx1MDAzZWhhbmRsZSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4tXHRuZXcgPSBremFsbG9jX29iaigqaGVhZCk7XG4mIzQzO1x0bmV3ID0ga3phbGxvY19vYmooKmhlYWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvdy5jIGIvbmV0L3NjaGVkL2Nsc19mbG93LmNcbmluZGV4IDM1NmM2OGViYzM4OTUuLmE5YWMzYWNmNmVkYTAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19mbG93LmNcbkBAIC00MzgsNyAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgZmxvd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbi1cdGZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7XG4mIzQzO1x0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFmbmV3KVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcbmluZGV4IDg4ZjhhMzJmYWIyYjQuLjBlMjc1YjU4MTUxYzQgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG5AQCAtMjIzMyw3ICYjNDM7MjIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmxfZmxvd19tYXNrICpmbF9jcmVhdGVfbmV3X21hc2soc3RydWN0IGNsc19mbF9oZWFkICpoZWFkLFxuIFx0c3RydWN0IGZsX2Zsb3dfbWFzayAqbmV3bWFzaztcbiBcdGludCBlcnI7XG4gXG4tXHRuZXdtYXNrID0ga3phbGxvY19vYmooKm5ld21hc2spO1xuJiM0MztcdG5ld21hc2sgPSBremFsbG9jX29iaigqbmV3bWFzaywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3bWFzaylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG5AQCAtMjM5NCw3ICYjNDM7MjM5NCw3IEBAIHN0YXRpYyBpbnQgZmxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0Z290byBlcnJvdXRfdGI7XG4gXHR9XG4gXG4tXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpO1xuJiM0MztcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldykge1xuIFx0XHRlcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byBlcnJvdXRfdGI7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mdy5jIGIvbmV0L3NjaGVkL2Nsc19mdy5jXG5pbmRleCA2NDZhNzMwZGNhOTNjLi5hNDYyYjI2MjcxOWMzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19mdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Z3LmNcbkBAIC0yNzYsNyAmIzQzOzI3Niw3IEBAIHN0YXRpYyBpbnQgZndfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0aWYgKGYtXHUwMDNlaWQgIT0gaGFuZGxlIFx1MDAyNlx1MDAyNiBoYW5kbGUpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdGZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyKTtcbiYjNDM7XHRcdGZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIWZuZXcpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTMzMCw3ICYjNDM7MzMwLDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHAtXHUwMDNlcm9vdCwgaGVhZCk7XG4gXHR9XG4gXG4tXHRmID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlcik7XG4mIzQzO1x0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoZiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jIGIvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXG5pbmRleCA2ZjEyNjg3MmMxNGEwLi5jMTQ4OTliOTM1YmZkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmNcbkBAIC0xODksNyAmIzQzOzE4OSw3IEBAIHN0YXRpYyBpbnQgbWFsbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0bmV3ID0ga3phbGxvY19vYmooKm5ldyk7XG4mIzQzO1x0bmV3ID0ga3phbGxvY19vYmooKm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5AQCAtMjAxLDcgJiM0MzsyMDEsNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0aGFuZGxlID0gMTtcbiBcdG5ldy1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4gXHRuZXctXHUwMDNlZmxhZ3MgPSB1c2VyZmxhZ3M7XG4tXHRuZXctXHUwMDNlcGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX21hdGNoYWxsX3BjbnQpO1xuJiM0MztcdG5ldy1cdTAwM2VwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX21hdGNoYWxsX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW5ldy1cdTAwM2VwZikge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9hbGxvY19wZXJjcHU7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG5pbmRleCBlZGVkN2FhY2QzZjcwLi4wZDEzMjRjOTA1ODM3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbkBAIC00NTUsNyAmIzQzOzQ1NSw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0aDEgPSB0b19oYXNoKG5oYW5kbGUpO1xuIFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVtoMV0pO1xuIFx0aWYgKCFiKSB7XG4tXHRcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCk7XG4mIzQzO1x0XHRiID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmIChiID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTUyNCw3ICYjNDM7NTI0LDcgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGVyciA9IC1FTk9CVUZTO1xuLVx0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfZmlsdGVyKTtcbiYjNDM7XHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWYpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCBjMjk3ZDdkYmNmOTE2Li5hYzZkMGZhNWE0MGUzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTgyNSw3ICYjNDM7ODI1LDcgQEAgc3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0c3RydWN0IHRjX3UzMl9zZWwgKnMgPSBcdTAwMjZuLVx1MDAzZXNlbDtcbiBcdHN0cnVjdCB0Y191X2tub2RlICpuZXc7XG4gXG4tXHRuZXcgPSBremFsbG9jX2ZsZXgoKm5ldywgc2VsLmtleXMsIHMtXHUwMDNlbmtleXMpO1xuJiM0MztcdG5ldyA9IGt6YWxsb2NfZmxleCgqbmV3LCBzZWwua2V5cywgcy1cdTAwM2Vua2V5cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0xMTE0LDE1ICYjNDM7MTExNCwxNiBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRnb3RvIGVycmlkcjtcbiBcdH1cbiBcbi1cdG4gPSBremFsbG9jX2ZsZXgoKm4sIHNlbC5rZXlzLCBzLVx1MDAzZW5rZXlzKTtcbiYjNDM7XHRuID0ga3phbGxvY19mbGV4KCpuLCBzZWwua2V5cywgcy1cdTAwM2Vua2V5cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChuID09IE5VTEwpIHtcbiBcdFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRcdGdvdG8gZXJyaWRyO1xuIFx0fVxuIFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9QRVJGXG4tXHRuLVx1MDAzZXBmID0gX19hbGxvY19wZXJjcHUoc3RydWN0X3NpemUobi1cdTAwM2VwZiwga2NudHMsIHMtXHUwMDNlbmtleXMpLFxuLVx0XHRcdCAgICAgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdGNfdTMyX3BjbnQpKTtcbiYjNDM7XHRuLVx1MDAzZXBmID0gX19hbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdF9zaXplKG4tXHUwMDNlcGYsIGtjbnRzLCBzLVx1MDAzZW5rZXlzKSxcbiYjNDM7XHRcdFx0XHQgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdGNfdTMyX3BjbnQpLFxuJiM0MztcdFx0XHRcdCAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW4tXHUwMDNlcGYpIHtcbiBcdFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRcdGdvdG8gZXJyZnJlZTtcbkBAIC0xMTQ0LDcgJiM0MzsxMTQ1LDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gI2lmZGVmIENPTkZJR19DTFNfVTMyX01BUktcbi1cdG4tXHUwMDNlcGNwdV9zdWNjZXNzID0gYWxsb2NfcGVyY3B1KHUzMik7XG4mIzQzO1x0bi1cdTAwM2VwY3B1X3N1Y2Nlc3MgPSBhbGxvY19wZXJjcHVfZ2ZwKHUzMiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbi1cdTAwM2VwY3B1X3N1Y2Nlc3MpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBlcnJvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQkFTSUMmIzM0OywKICAgICYjMzQ7TkVUX0NMU19ST1VURTQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZXJiMzNDssCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDssCiAgICAmIzM0O0NMU19VMzJfUEVSRiYjMzQ7LAogICAgJiMzNDtDTFNfVTMyX01BUksmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GTE9XJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQ0dST1VQJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GTE9XRVImIzM0OywKICAgICYjMzQ7TkVUX0NMU19NQVRDSEFMTCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jhc2ljX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtjbHNfYnBmX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtjbHNfY2dyb3VwX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbG93X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZndfY2hhbmdlJiMzNDssCiAgICAmIzM0O21hbGxfY2hhbmdlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7LAogICAgJiMzNDt0Y2ZfZXh0c19pbml0X2V4JiMzNDssCiAgICAmIzM0O3RjX25ld190ZmlsdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgR0ZQX0tFUk5FTF9BQ0NPVU5UIHRvIHZhcmlvdXMgbWVtb3J5IGFsbG9jYXRpb25zIGluIG5ldHdvcmsgY2xhc3NpZmllcnMuIFdoaWxlIG1vc3RseSBhbiBhY2NvdW50aW5nIGNoYW5nZSwgaXQgYWxzbyBpbmNsdWRlcyBhIGZ1bmN0aW9uYWwgYnVnIGZpeCBpbiBjbHNfYmFzaWMuYyAoYmFzaWNfY2hhbmdlKSB3aGVyZSBpdCBhZGRzIGEgbWlzc2luZyBpZHJfcmVtb3ZlIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYWxsb2NfcGVyY3B1X2dmcCBmYWlscy4gVGhpcyBlcnJvciBwYXRoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIGZhdWx0IGluamVjdGlvbiBkdXJpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gSURSIGxlYWtzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzdiODNjZDZiOTQ4YWVkNGFlMzQwOTNiMWJhNjZjMWQxOTcxODQ5NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDE1OjA1OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKaW5kZXggNGU2YTI4MTJhNGYzMi4uYmU2M2IzNDc2NDBiYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCkBAIC0zMzY0LDcgJiM0MzszMzY0LDggQEAgaW50IHRjZl9leHRzX2luaXRfZXgoc3RydWN0IHRjZl9leHRzICpleHRzLCBzdHJ1Y3QgbmV0ICpuZXQsIGludCBhY3Rpb24sCiAJICogVGhpcyByZWZlcmVuY2UgbWlnaHQgYmUgdGFrZW4gbGF0ZXIgZnJvbSB0Y2ZfZXh0c19nZXRfbmV0KCkuCiAJICovCiAJZXh0cy0mZ3Q7bmV0ID0gbmV0OwotCWV4dHMtJmd0O2FjdGlvbnMgPSBremFsbG9jX29ianMoc3RydWN0IHRjX2FjdGlvbiAqLCBUQ0FfQUNUX01BWF9QUklPKTsKJiM0MzsJZXh0cy0mZ3Q7YWN0aW9ucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdGNfYWN0aW9uICosIFRDQV9BQ1RfTUFYX1BSSU8sCiYjNDM7CQkJCSAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWV4dHMtJmd0O2FjdGlvbnMpCiAJCXJldHVybiAtRU5PTUVNOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Jhc2ljLmMgYi9uZXQvc2NoZWQvY2xzX2Jhc2ljLmMKaW5kZXggNDkyY2Q5Y2U4ZDQ2Zi4uZTJhOTRiYTlmYmE3NiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYmFzaWMuYwpAQCAtMTkzLDcgJiM0MzsxOTMsNyBAQCBzdGF0aWMgaW50IGJhc2ljX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpOwomIzQzOwlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFmbmV3KQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKQEAgLTIxMiw5ICYjNDM7MjEyLDExIEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycm91dDsKIAlmbmV3LSZndDtoYW5kbGUgPSBoYW5kbGU7Ci0JZm5ldy0mZ3Q7cGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX2Jhc2ljX3BjbnQpOwomIzQzOwlmbmV3LSZndDtwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX2Jhc2ljX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFmbmV3LSZndDtwZikgewogCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJaWYgKCFmb2xkKQomIzQzOwkJCWlkcl9yZW1vdmUoJmFtcDtoZWFkLSZndDtoYW5kbGVfaWRyLCBmbmV3LSZndDtoYW5kbGUpOwogCQlnb3RvIGVycm91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYnBmLmMgYi9uZXQvc2NoZWQvY2xzX2JwZi5jCmluZGV4IDZkMTkxNTViZWNjODYuLjE4OGNmMGY5NDlkZDQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19icGYuYwpAQCAtMzUyLDcgJiM0MzszNTIsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX29wcyhzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2cpCiAJaWYgKGJwZl9zaXplICE9IG5sYV9sZW4odGJbVENBX0JQRl9PUFNdKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlicGZfb3BzID0ga21lbWR1cChubGFfZGF0YSh0YltUQ0FfQlBGX09QU10pLCBicGZfc2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWJwZl9vcHMgPSBrbWVtZHVwKG5sYV9kYXRhKHRiW1RDQV9CUEZfT1BTXSksIGJwZl9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmIChicGZfb3BzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC00MDMsNyAmIzQzOzQwMyw3IEBAIHN0YXRpYyBpbnQgY2xzX2JwZl9wcm9nX2Zyb21fZWZkKHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGNsc19icGZfcHJvZyAqcHJvZywKIAl9CiAKIAlpZiAodGJbVENBX0JQRl9OQU1FXSkgewotCQluYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMKTsKJiM0MzsJCW5hbWUgPSBubGFfbWVtZHVwKHRiW1RDQV9CUEZfTkFNRV0sIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmICghbmFtZSkgewogCQkJYnBmX3Byb2dfcHV0KGZwKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXByb2cgPSBremFsbG9jX29iaigqcHJvZyk7CiYjNDM7CXByb2cgPSBremFsbG9jX29iaigqcHJvZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIXByb2cpCiAJCXJldHVybiAtRU5PQlVGUzsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuYyBiL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMKaW5kZXggNjgwYTVjMzA4MDk0ZS4uMjEwZmQ5ZmQyNmQ4MyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jCkBAIC05NSw3ICYjNDM7OTUsNyBAQCBzdGF0aWMgaW50IGNsc19jZ3JvdXBfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlpZiAoaGVhZCAmYW1wOyZhbXA7IGhhbmRsZSAhPSBoZWFkLSZndDtoYW5kbGUpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JbmV3ID0ga3phbGxvY19vYmooKmhlYWQpOwomIzQzOwluZXcgPSBremFsbG9jX29iaigqaGVhZCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW5ldykKIAkJcmV0dXJuIC1FTk9CVUZTOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Zsb3cuYyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jCmluZGV4IDM1NmM2OGViYzM4OTUuLmE5YWMzYWNmNmVkYTAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZmxvdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jCkBAIC00MzgsNyAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgZmxvd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCWZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7CiYjNDM7CWZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWZuZXcpCiAJCXJldHVybiAtRU5PQlVGUzsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMKaW5kZXggODhmOGEzMmZhYjJiNC4uMGUyNzViNTgxNTFjNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jCkBAIC0yMjMzLDcgJiM0MzsyMjMzLDcgQEAgc3RhdGljIHN0cnVjdCBmbF9mbG93X21hc2sgKmZsX2NyZWF0ZV9uZXdfbWFzayhzdHJ1Y3QgY2xzX2ZsX2hlYWQgKmhlYWQsCiAJc3RydWN0IGZsX2Zsb3dfbWFzayAqbmV3bWFzazsKIAlpbnQgZXJyOwogCi0JbmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrKTsKJiM0MzsJbmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbmV3bWFzaykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKQEAgLTIzOTQsNyAmIzQzOzIzOTQsNyBAQCBzdGF0aWMgaW50IGZsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCWdvdG8gZXJyb3V0X3RiOwogCX0KIAotCWZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7CiYjNDM7CWZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWZuZXcpIHsKIAkJZXJyID0gLUVOT0JVRlM7CiAJCWdvdG8gZXJyb3V0X3RiOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mdy5jIGIvbmV0L3NjaGVkL2Nsc19mdy5jCmluZGV4IDY0NmE3MzBkY2E5M2MuLmE0NjJiMjYyNzE5YzMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZncuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Z3LmMKQEAgLTI3Niw3ICYjNDM7Mjc2LDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlpZiAoZi0mZ3Q7aWQgIT0gaGFuZGxlICZhbXA7JmFtcDsgaGFuZGxlKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZm5ldyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIpOwomIzQzOwkJZm5ldyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmICghZm5ldykKIAkJCXJldHVybiAtRU5PQlVGUzsKIApAQCAtMzMwLDcgJiM0MzszMzAsNyBAQCBzdGF0aWMgaW50IGZ3X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCXJjdV9hc3NpZ25fcG9pbnRlcih0cC0mZ3Q7cm9vdCwgaGVhZCk7CiAJfQogCi0JZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIpOwomIzQzOwlmID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYyBiL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYwppbmRleCA2ZjEyNjg3MmMxNGEwLi5jMTQ4OTliOTM1YmZkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jCkBAIC0xODksNyAmIzQzOzE4OSw3IEBAIHN0YXRpYyBpbnQgbWFsbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbmV3ID0ga3phbGxvY19vYmooKm5ldyk7CiYjNDM7CW5ldyA9IGt6YWxsb2Nfb2JqKCpuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuZXcpCiAJCXJldHVybiAtRU5PQlVGUzsKIApAQCAtMjAxLDcgJiM0MzsyMDEsNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJaGFuZGxlID0gMTsKIAluZXctJmd0O2hhbmRsZSA9IGhhbmRsZTsKIAluZXctJmd0O2ZsYWdzID0gdXNlcmZsYWdzOwotCW5ldy0mZ3Q7cGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX21hdGNoYWxsX3BjbnQpOwomIzQzOwluZXctJmd0O3BmID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgdGNfbWF0Y2hhbGxfcGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW5ldy0mZ3Q7cGYpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2NfcGVyY3B1OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCmluZGV4IGVkZWQ3YWFjZDNmNzAuLjBkMTMyNGM5MDU4MzcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKQEAgLTQ1NSw3ICYjNDM7NDU1LDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsCiAJaDEgPSB0b19oYXNoKG5oYW5kbGUpOwogCWIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtJmd0O3RhYmxlW2gxXSk7CiAJaWYgKCFiKSB7Ci0JCWIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCk7CiYjNDM7CQliID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmIChiID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAKQEAgLTUyNCw3ICYjNDM7NTI0LDcgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gLUVOT0JVRlM7Ci0JZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfZmlsdGVyKTsKJiM0MzsJZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghZikKIAkJZ290byBlcnJvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCmluZGV4IGMyOTdkN2RiY2Y5MTYuLmFjNmQwZmE1YTQwZTMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc191MzIuYwpAQCAtODI1LDcgJiM0Mzs4MjUsNyBAQCBzdGF0aWMgc3RydWN0IHRjX3Vfa25vZGUgKnUzMl9pbml0X2tub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsCiAJc3RydWN0IHRjX3UzMl9zZWwgKnMgPSAmYW1wO24tJmd0O3NlbDsKIAlzdHJ1Y3QgdGNfdV9rbm9kZSAqbmV3OwogCi0JbmV3ID0ga3phbGxvY19mbGV4KCpuZXcsIHNlbC5rZXlzLCBzLSZndDtua2V5cyk7CiYjNDM7CW5ldyA9IGt6YWxsb2NfZmxleCgqbmV3LCBzZWwua2V5cywgcy0mZ3Q7bmtleXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuZXcpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xMTE0LDE1ICYjNDM7MTExNCwxNiBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlnb3RvIGVycmlkcjsKIAl9CiAKLQluID0ga3phbGxvY19mbGV4KCpuLCBzZWwua2V5cywgcy0mZ3Q7bmtleXMpOwomIzQzOwluID0ga3phbGxvY19mbGV4KCpuLCBzZWwua2V5cywgcy0mZ3Q7bmtleXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKG4gPT0gTlVMTCkgewogCQllcnIgPSAtRU5PQlVGUzsKIAkJZ290byBlcnJpZHI7CiAJfQogCiAjaWZkZWYgQ09ORklHX0NMU19VMzJfUEVSRgotCW4tJmd0O3BmID0gX19hbGxvY19wZXJjcHUoc3RydWN0X3NpemUobi0mZ3Q7cGYsIGtjbnRzLCBzLSZndDtua2V5cyksCi0JCQkgICAgICAgX19hbGlnbm9mX18oc3RydWN0IHRjX3UzMl9wY250KSk7CiYjNDM7CW4tJmd0O3BmID0gX19hbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdF9zaXplKG4tJmd0O3BmLCBrY250cywgcy0mZ3Q7bmtleXMpLAomIzQzOwkJCQkgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdGNfdTMyX3BjbnQpLAomIzQzOwkJCQkgICBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbi0mZ3Q7cGYpIHsKIAkJZXJyID0gLUVOT0JVRlM7CiAJCWdvdG8gZXJyZnJlZTsKQEAgLTExNDQsNyAmIzQzOzExNDUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlnb3RvIGVycm91dDsKIAogI2lmZGVmIENPTkZJR19DTFNfVTMyX01BUksKLQluLSZndDtwY3B1X3N1Y2Nlc3MgPSBhbGxvY19wZXJjcHUodTMyKTsKJiM0MzsJbi0mZ3Q7cGNwdV9zdWNjZXNzID0gYWxsb2NfcGVyY3B1X2dmcCh1MzIsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuLSZndDtwY3B1X3N1Y2Nlc3MpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJvdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfKi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCBqdXN0IGFub3RoZXIgbWVtb3J5IGFjY291bnRpbmcgY2hhbmdlLCBhZGRpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgdG8gYSBidW5jaCBvZiBhbGxvY2F0aW9uIGNhbGxzLiBUaGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuJiMzNDsgIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gdGhpbmdzIGxpa2UgYGt6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX29iamAsIGBhbGxvY19wZXJjcHVgLCBhbmQgb3RoZXIgYWxsb2NhdGlvbiByb3V0aW5lcy4KCk15IGZpcnN0IGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBwdXJlbHkgZGVjb3JhdGl2ZSwganVzdCB0cmFja2luZyBtZW1vcnkgdXNhZ2Ugd2l0aGluIGNncm91cHMgYW5kIG5vdCBjaGFuZ2luZyBob3cgdGhlc2UgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBjYXNlLCBhcyBpZiBpdCBjaGFuZ2VzIHRoZSBleGVjdXRpb24gb2YgdGhlIGtlcm5lbCBJIG5lZWQgdG8ga25vdy4gTWVtb3J5IGFjY291bnRpbmcgY2hhbmdlcyAqY2FuKiBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSBpZiB0aGV5IGludHJvZHVjZSBuZXcgYmVoYXZpb3JzLgoKSSBjaGVjayBmb3IgYW55IGNoYW5nZXMgdG8gbG9naWMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93LiAgSSBrbm93IGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UgdGhhdCAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMmIzM0OyBzaG91bGQgaGF2ZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gQWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHRvIGBremFsbG9jYCBjYWxscyBpcywgZ2VuZXJhbGx5LCBqdXN0IGNoYW5naW5nIHRoZSBHRlAgZmxhZ3MsIG5vdCBhZmZlY3RpbmcgZmxvdywgZXhjZXB0IG1heWJlIGFkZGluZyBhIGNoZWNrIGlmIGEgY2dyb3VwIG1lbW9yeSBsaW1pdCBpcyBoaXQuIEkgY29uZmlybSB0aGF0IHRoaW5ncyBsaWtlIGBremFsbG9jX29ianNgIGFuZCBga3phbGxvY19vYmpgIGFyZSBtYWNyb3MuIFRoZSBjaGFuZ2VzIHNob3duIGNvbmZpcm0gdGhpcyBhcyB3ZWxsLCBqdXN0IGFkZGluZyBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCB0byB0aGUgY2FsbHMuIFNvLCB1cCB1bnRpbCBoZXJlLCBpdCBpcyBub3Qgd29ydGggZnV6emluZywgYW5kIEkgd291bGQgaGF2ZSByZXR1cm5lZCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhvd2V2ZXIsIGFzIEkgZGl2ZSBkZWVwZXIsIEkgc3R1bWJsZSB1cG9uIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSSBsb29rIGF0IHRoZSBgY2xzX2Jhc2ljLmNgIGZpbGUgYW5kIHNlZSB0aGlzIGFkZGl0aW9uOgoKYGBgYwogCWZuZXctJmd0O3BmID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgdGNfYmFzaWNfcGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWZuZXctJmd0O3BmKSB7CiAJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlpZiAoIWZvbGQpCiYjNDM7CQkJaWRyX3JlbW92ZSgmYW1wO2hlYWQtJmd0O2hhbmRsZV9pZHIsIGZuZXctJmd0O2hhbmRsZSk7CiAJCWdvdG8gZXJyb3V0OwogCX0KYGBgCgpXYWl0IGEgc2Vjb25kLi4uICBOb3cgdGhhdCYjMzk7cyBub3QganVzdCBhY2NvdW50aW5nISBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgcmVtb3ZhbCBmcm9tIHRoZSBgaGVhZC0mZ3Q7aGFuZGxlX2lkcmAhIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqLiBJdCYjMzk7cyBhIGZpeCBmb3IgYSBwb3RlbnRpYWwgbWVtb3J5IG9yIElEUiBsZWFrIG9uIHRoZSBlcnJvciBwYXRoIGlmIGBhbGxvY19wZXJjcHVfZ2ZwYCBmYWlscy4gVGhpcyBpcyBhIGJpZyBkZWFsISBPbiBlcnJvciwgaXQgbm93IGNsZWFucyB1cCBhbiBJRFIgZW50cnkgaWYgYGZvbGRgIGlzIG5vdCBzZXQuIFRoaXMgaXMgZ29vZCwgZ29vZCwgZ29vZC4KCk15IGV4cGVydCBtaW5kIHNheXMgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBhIGZ1enplciBjYW4gaGl0IHVzaW5nIGZhdWx0IGluamVjdGlvbi4gVGhpcyB2ZXJpZmllcyB0aGF0IGEgbWVtb3J5IGxlYWsgb3IgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24gaXMgYXZvaWRlZC4gSXQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LgoKSSBjaGVjayBgY2xzX3UzMi5jYCBhbmQgY29uZmlybSB0aGF0IHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGVyZS4KClNvLCBpbiBzdW1tYXJ5OiBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFRoaXMgY2hhbmdlIGluIHRoZSBlcnJvciBwYXRoIGZvciBgY2xzX2Jhc2ljLmNgIGlzIHNpZ25pZmljYW50IGFuZCB3YXJyYW50cyBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIHRlc3Rpbmcgb24gdGhlIGVycm9yIHNjZW5hcmlvcyBpbiBgbmV0L3NjaGVkL2Nsc19iYXNpYy5jYC4gSSB3aWxsIHRoZW4gZ28gb24gYW5kIHJ1biB0aGUgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jhc2ljX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYmFzaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Jhc2ljLmM9MTQ3PXN0YXRpYyBpbnQgYmFzaWNfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4tLVxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTE3MS1cbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoxNzI6c3RhdGljIGludCBiYXNpY19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTE3My1cdFx0XHRzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxuLS1cbm5ldC9zY2hlZC9jbHNfYmFzaWMuYz0zMjA9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19iYXNpY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMzI1LVx0LmdldFx0XHQ9XHRiYXNpY19nZXQsXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM6MzI2Olx0LmNoYW5nZVx0XHQ9XHRiYXNpY19jaGFuZ2UsXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMzI3LVx0LmRlbGV0ZVx0XHQ9XHRiYXNpY19kZWxldGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBBIFNwZWNpZmljIEVycm9yIFBhdGggRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGBiYXNpY19jaGFuZ2VgIGZ1bmN0aW9uLCB3aGljaCBJIGtub3cgaXMgYSBgLmNoYW5nZWAgY2FsbGJhY2sgd2l0aGluIHRoZSBgdGNmX3Byb3RvX29wc2Agc3RydWN0dXJlLiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGB0Y2AgbmV0bGluayBpbnRlcmZhY2UgKFJUTV9ORVdURklMVEVSKS4gVGhlIGNvcmUgb2YgdGhlIGZpeCBhcHBlYXJzIHRvIGJlIGFkZGluZyBgaWRyX3JlbW92ZSgmYW1wO2hlYWQtJmd0O2hhbmRsZV9pZHIsIGZuZXctJmd0O2hhbmRsZSk7YCBvbiBhbiBlcnJvciBwYXRoLCBzcGVjaWZpY2FsbHkgd2hlbiBgYWxsb2NfcGVyY3B1X2dmcGAgZmFpbHMuIFRoaXMgbG9va3MgbGlrZSBhIHNwZWNpZmljIGZpeCB0byBwcmV2ZW50IGFuIElEUiBsZWFrLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCBkZWZpbml0ZWx5LiBGYXVsdCBpbmplY3Rpb24gZHVyaW5nIGZ1enppbmcgY291bGQgYmUgaWRlYWwgZm9yIHRyaWdnZXJpbmcgdGhpcyBlcnJvciBwYXRoLiBJZiB3ZSB0cmlnZ2VyIHRoZSBlcnJvciBwYXRoIHZpYSBmYXVsdCBpbmplY3Rpb24sIHRoZW4gd2UgY2FuIHZlcmlmeSB0aGUgSURSIGVudHJ5IGlzIHJlbW92ZWQgY29ycmVjdGx5LiBQcmV2ZW50aW5nIGEgbGVhayAqb3IqIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24gbGF0ZXIgaXMgYSBzdHJvbmcgcmVhc29uIHRvIGZ1enouCgpCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHJlY2FsbCB0aGUgZnV6emluZyBndWlkZWxpbmVzIG1lbnRpb24gc29tZXRoaW5nIGFib3V0ICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyYjMzQ7IG9yIG1vZGlmaWNhdGlvbnMgdG8gbnVtZXJpYyBjb25zdGFudHMuIFRoZXkgd2FudCBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgdGhvc2UuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggKmRvZXMqIGNvbnRhaW4gYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgdGhhdCBgaWRyX3JlbW92ZWAgY2FsbCEgSXQgYWN0aXZlbHkgbW9kaWZpZXMgcHJvZ3JhbSBiZWhhdmlvci4KCkFscmlnaHQsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzLiBJIHNlZSBzb21lIGNoYW5nZXMgaW4gYGNsc19icGYuY2AsIGBjbHNfY2dyb3VwLmNgLCBgY2xzX2Zsb3cuY2AsIGBjbHNfZmxvd2VyLmNgLCBgY2xzX2Z3LmNgLCBgY2xzX21hdGNoYWxsLmNgLCBgY2xzX3JvdXRlLmNgLCBhbmQgYGNsc191MzIuY2AsIGJ1dCBpdCBqdXN0IGxvb2tzIGxpa2UgdGhleSBhcmUgY2hhbmdpbmcgYGt6YWxsb2Nfb2JqYCB0byB1c2UgYEdGUF9LRVJORUxfQUNDT1VOVGAgb3IgYGFsbG9jX3BlcmNwdWAgdG8gYGFsbG9jX3BlcmNwdV9nZnBgLiBOb3csIHRoZXNlIGBremFsbG9jX29iamAgY2FsbHMgLSB0aG9zZSBhcmVuJiMzOTt0IGZhbWlsaWFyIHRvIG1lIGFzIHN0YW5kYXJkIGtlcm5lbCBtYWNyb3MuIEFyZSB0aGV5IGRlZmluZWQgaW4gYSBoZWFkZXIgc29tZXdoZXJlPyBJIHNob3VsZCBwcm9iYWJseSBncmVwIGZvciB0aG9zZSBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBremFsbG9jX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDcwPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUxLS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1MjojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTMtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU0OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU1LVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXQgU2NoZWR1bGVyIENsYXNzaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgdG8gYSBidW5jaCBvZiBga3phbGxvY19vYmpgIGNhbGxzIHdpdGhpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgY2xhc3NpZmllciBjb2RlIChgbmV0L3NjaGVkL2Nsc18qLmNgKS4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBnb2FsIGhlcmUgaXMgcmVzb3VyY2UgYWNjb3VudGluZy4gVGhlIG9ubHkgKmZ1bmN0aW9uYWwqIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGFuIGBpZHJfcmVtb3ZlYCBjYWxsIGluIGBjbHNfYmFzaWMuY2AuCgpHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIHNheSB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gbmV0d29yayBzY2hlZHVsZXJzLCBhbmQgd2hpbGUgdGhlIGNoYW5nZSBpcyBzdWJ0bGUsIGFueSBidWcgaW4gdGhpcyBhcmVhIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wYWN0LiBTbywgeWVzLCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IEkmIzM5O2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmb2N1cyBhcmVhcy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgYXNrcyBtZSB0byBpZGVudGlmeSBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBhbmQgYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIGZ1enppbmcuIExvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXNlIGZ1bmN0aW9ucyBzdGFuZCBvdXQ6CgoqICAgYGJhc2ljX2NoYW5nZWAKKiAgIGBjbHNfYnBmX2NoYW5nZWAKKiAgIGBjbHNfY2dyb3VwX2NoYW5nZWAKKiAgIGBmbG93X2NoYW5nZWAKKiAgIGBmbF9jaGFuZ2VgCiogICBgZndfY2hhbmdlYAoqICAgYG1hbGxfY2hhbmdlYAoqICAgYHJvdXRlNF9jaGFuZ2VgCiogICBgdTMyX2NoYW5nZWAKClRoZXNlIGFyZSB0aGUgYC5jaGFuZ2VgIGNhbGxiYWNrcywgdGhlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLiBUaGVzZSBhcmUgKnBlcmZlY3QqIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhleSBhcmVuJiMzOTt0IGluIHRoZSBob3QgcGF0aCAoYC5jbGFzc2lmeWAgd291bGQgYmUpLCBidXQgdGhleSBhcmUgKmNyaXRpY2FsKiBmb3IgY29udHJvbGxpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBjbGFzc2lmaWVycy4KCkkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlncyBmb3IgdGhlc2Ugc3ltYm9scy4KCiogICBgTkVUX1NDSF9CQVNJQ2AKKiAgIGBORVRfU0NIX0JQRmAKKiAgIGBORVRfQ0dST1VQX0JQRmAgb3IgYE5FVF9DTFNfQ0dST1VQYAoqICAgYE5FVF9DTFNfRkxPV2AKKiAgIGBORVRfQ0xTX0ZMT1dFUmAKKiAgIGBORVRfQ0xTX0ZXYAoqICAgYE5FVF9DTFNfTUFUQ0hBTExgCiogICBgTkVUX0NMU19ST1VURTRgCiogICBgTkVUX0NMU19VMzJgCgpPa2F5LCB0aG9zZSBsb29rIHJpZ2h0LiBHb29kLiBJIHNob3VsZCB2ZXJpZnkgdGhlIGNvbmZpZyBuYW1lcyB0byBiZSAxMDAlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NDgxPWNvbmZpZyBORVRfQ0xTXG4tLVxubmV0L3NjaGVkL0tjb25maWctNDgzLVxubmV0L3NjaGVkL0tjb25maWc6NDg0OmNvbmZpZyBORVRfQ0xTX0JBU0lDXG5uZXQvc2NoZWQvS2NvbmZpZy00ODUtXHR0cmlzdGF0ZSBcJiMzNDtFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy00OTMtXG5uZXQvc2NoZWQvS2NvbmZpZzo0OTQ6Y29uZmlnIE5FVF9DTFNfUk9VVEU0XG5uZXQvc2NoZWQvS2NvbmZpZy00OTUtXHR0cmlzdGF0ZSBcJiMzNDtSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01MDUtXG5uZXQvc2NoZWQvS2NvbmZpZzo1MDY6Y29uZmlnIE5FVF9DTFNfRldcbm5ldC9zY2hlZC9LY29uZmlnLTUwNy1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBtYXJrIChGVylcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTUzMz1jb25maWcgQ0xTX1UzMl9NQVJLXG4tLVxubmV0L3NjaGVkL0tjb25maWctNTM4LVxubmV0L3NjaGVkL0tjb25maWc6NTM5OmNvbmZpZyBORVRfQ0xTX0ZMT1dcbm5ldC9zY2hlZC9LY29uZmlnLTU0MC1cdHRyaXN0YXRlIFwmIzM0O0Zsb3cgY2xhc3NpZmllclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU0OS1cbm5ldC9zY2hlZC9LY29uZmlnOjU1MDpjb25maWcgTkVUX0NMU19DR1JPVVBcbm5ldC9zY2hlZC9LY29uZmlnLTU1MS1cdHRyaXN0YXRlIFwmIzM0O0NvbnRyb2wgR3JvdXAgQ2xhc3NpZmllclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU2MS1cbm5ldC9zY2hlZC9LY29uZmlnOjU2Mjpjb25maWcgTkVUX0NMU19CUEZcbm5ldC9zY2hlZC9LY29uZmlnLTU2My1cdHRyaXN0YXRlIFwmIzM0O0JQRi1iYXNlZCBjbGFzc2lmaWVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNTcxLVxubmV0L3NjaGVkL0tjb25maWc6NTcyOmNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxubmV0L3NjaGVkL0tjb25maWctNTczLVx0dHJpc3RhdGUgXCYjMzQ7Rmxvd2VyIGNsYXNzaWZpZXJcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01ODEtXG5uZXQvc2NoZWQvS2NvbmZpZzo1ODI6Y29uZmlnIE5FVF9DTFNfTUFUQ0hBTExcbm5ldC9zY2hlZC9LY29uZmlnLTU4My1cdHRyaXN0YXRlIFwmIzM0O01hdGNoLWFsbCBjbGFzc2lmaWVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9NjkwPWNvbmZpZyBORVRfRU1BVENIX0lQVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cbm5ldC9zY2hlZC9LY29uZmlnOjcwMjpjb25maWcgTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBORVRfQ0xTX0JBU0lDYCwgYE5FVF9DTFNfUk9VVEU0YCwgYE5FVF9DTFNfRldgLCBgTkVUX0NMU19VMzJgLCBgTkVUX0NMU19GTE9XYCwgYE5FVF9DTFNfQ0dST1VQYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9DTFNfRkxPV0VSYCwgYW5kIGBORVRfQ0xTX01BVENIQUxMYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSB2YXJpb3VzIGNsYXNzaWZpZXIgbW9kdWxlcyBiZWluZyBlbmFibGVkLiBQcmV0dHkgc3RhbmRhcmQgc3R1ZmYsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIHRvIHRoZSBjb3JlIGNsYXNzaWZpZXIgQVBJLgoKQWhhLCBhbmQgbm93IEkgc2VlIHRoYXQgYGNsc19hcGkuY2AgaXMgYWxzbyBtb2RpZmllZC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBJZiB0aGUgY29yZSBBUEkgaXMgdG91Y2hlZCwgSSBuZWVkIHRvIHBheSAqdmVyeSogY2xvc2UgYXR0ZW50aW9uLiBUaGlzIGltcGFjdHMgdGhlIGdlbmVyYWwgZnJhbWV3b3JrLCBzbyB0aGUgcmlwcGxlIGVmZmVjdHMgd2lsbCBuZWVkIHRvIGJlIGFuYWx5emVkLiBJIHNlZSBgdGNmX2V4dHNfaW5pdF9leGAgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGluIGBjbHNfYXBpLmNgIHRoYXQmIzM5O3MgYmVlbiBhbHRlcmVkLiBUaGlzIGlzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgTkVUX0NMU19BQ1RgIGlzIG5lZWRlZCBmb3IgYHRjZl9leHRzX2luaXRfZXhgIGFzIHdlbGwsIG9yIGFueSBvdGhlciBvZiB0aGVzZSBvcHRpb25zIGZvciB0aGF0IG1hdHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzk7ZG9lcyB0aGlzIGNoYW5nZSByZXF1aXJlIGEgY2hhbmdlIHRvIHRoZSBhY3Rpb24gc3Vic3lzdGVtIGFzIHdlbGw/JiMzOTsuIFRoaXMgZnVuY3Rpb24gcHJvYmFibHkgaGFuZGxlcyBpbml0aWFsaXphdGlvbiBvZiB0aGUgZXh0ZW5kZWQgY2xhc3NpZmllciBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGF0IHdvdWxkIGJlIGNyaXRpY2FsIGlmIGFueSBhY3Rpb25zIGFyZSBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9leHRzX2luaXRfZXgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmM9MzI2MD1zdGF0aWMgaW50IHRjX2R1bXBfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzM1Mi1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzM1MzppbnQgdGNmX2V4dHNfaW5pdF9leChzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMsIHN0cnVjdCBuZXQgKm5ldCwgaW50IGFjdGlvbixcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzM1NC1cdFx0ICAgICBpbnQgcG9saWNlLCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdTMyIGhhbmRsZSxcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMzOTEtfVxubmV0L3NjaGVkL2Nsc19hcGkuYzozMzkyOkVYUE9SVF9TWU1CT0wodGNmX2V4dHNfaW5pdF9leCk7XG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMzOTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzY5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgQ29yZSBGdW5jdGlvbioqCgpSaWdodCwgYHRjZl9leHRzX2luaXRfZXhgIGlzIGRlZmluaXRlbHkgYSBrZXkgcGxheWVyIGhlcmUsIGFzIEkgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBGaXJzdCB0aGluZ3MgZmlyc3QsIGlzIGBORVRfQ0xTYCByZXF1aXJlZCBmb3IgdGhpcyB0byBmdW5jdGlvbj8gQSBxdWljayBjaGVjayByZXZlYWxzIGl0JiMzOTtzIGluZGVlZCB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gZm9yIHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGguIEdvb2QsIHRoYXQgY29uZmlybXMgYSBkZXBlbmRlbmN5LiBBbmQsIHNpbmNlIEkmIzM5O20gYWxyZWFkeSBkaWdnaW5nIGludG8gcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBORVRfU0NIRURgIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHNlZSBob3cgaXQgbWlnaHQgZmFjdG9yIGluLiBJdCYjMzk7cyBiZXN0IHRvIGNvbnNpZGVyIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvZ2V0aGVyIHNpbmNlIHRoZXkmIzM5O3JlIHRpZ2h0bHkgY291cGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9uczoKCioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGEgd2hvbGUgc3VpdGUgb2YgbmV0d29yayBzY2hlZHVsZXIgYW5kIGNsYXNzaWZpZXIgY29uZmlndXJhdGlvbnM6IGBORVRfU0NIRURgLCBgTkVUX0NMU2AsIGBORVRfQ0xTX0JBU0lDYCwgYE5FVF9DTFNfUk9VVEU0YCwgYE5FVF9DTFNfRldgLCBgTkVUX0NMU19VMzJgLCBgTkVUX0NMU19GTE9XYCwgYE5FVF9DTFNfQ0dST1VQYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9DTFNfRkxPV0VSYCwgYE5FVF9DTFNfTUFUQ0hBTExgLCBhbmQgYE5FVF9DTFNfQUNUYC4gU2VlbXMgbGlrZSBhIHByZXR0eSBjb21wcmVoZW5zaXZlIHNldC4gV2UmIzM5O3ZlIGdvdCB0aGUgYmFzaWNzIGNvdmVyZWQsIHNvbWUgbW9yZSBhZHZhbmNlZCBjbGFzc2lmaWVycyBsaWtlIEJQRiBhbmQgRkxPVywgYW5kIHNvbWUgc3BlY2lmaWMgb25lcyBsaWtlIENHUk9VUCBhbmQgRkxPV0VSLiBBbmQgb2YgY291cnNlLCB0aGUgZXZlci1pbXBvcnRhbnQgYWN0aW9uIGNvbXBvbmVudCBgTkVUX0NMU19BQ1RgLgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGBORVRfQ0xTX1JPVVRFNGAuLi4gdGhhdCBvbmUgcmluZ3MgYSBiZWxsLiBJdCYjMzk7cyBhIGJpdCBzcGVjaWZpYywgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgaXQgcmVsaWVzIG9uIHNvbWV0aGluZyBlbHNlIGJlaW5nIGVuYWJsZWQuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIHRoZXJlLiBNYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueSBjcnVjaWFsIHByZXJlcXVpc2l0ZXMsIGFuZCB3aGF0IHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbCB3ZSBhcmUgdXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ0xTX1JPVVRFNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTQ4ND1jb25maWcgTkVUX0NMU19CQVNJQ1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTQ5My1cbm5ldC9zY2hlZC9LY29uZmlnOjQ5NDpjb25maWcgTkVUX0NMU19ST1VURTRcbm5ldC9zY2hlZC9LY29uZmlnLTQ5NS1cdHRyaXN0YXRlIFwmIzM0O1JvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIEZpbGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSByb3V0ZTQgY2xhc3NpZmllciB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc2NoZWR1bGVyLiBUaW1lIHRvIHB1bGwgdXAgYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgYXJvdW5kIHRoZSBgTkVUX0NMU19ST1VURTRgIGRlZmluZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNsYXNzaWZpZXIgaXMgZXhwb3NlZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcXVldWluZyBkaXNjaXBsaW5lcyBvciBjbGFzc2lmaWVyIG9wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIHVwIHRvIHNwZWVkIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTA6XHRcbiA0OTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDQ5MjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Jhc2ljLlxuIDQ5MzpcdFxuIDQ5NDpcdGNvbmZpZyBORVRfQ0xTX1JPVVRFNFxuIDQ5NTpcdFx0dHJpc3RhdGUgXCYjMzQ7Um91dGluZyBkZWNpc2lvbiAoUk9VVEUpXCYjMzQ7XG4gNDk2Olx0XHRkZXBlbmRzIG9uIElORVRcbiA0OTc6XHRcdHNlbGVjdCBJUF9ST1VURV9DTEFTU0lEXG4gNDk4Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDQ5OTpcdFx0aGVscFxuIDUwMDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXG4gNTAxOlx0XHQgIGFjY29yZGluZyB0byB0aGUgcm91dGUgdGFibGUgZW50cnkgdGhleSBtYXRjaGVkLlxuIDUwMjpcdFxuIDUwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTA0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfcm91dGUuXG4gNTA1Olx0XG4gNTA2Olx0Y29uZmlnIE5FVF9DTFNfRldcbiA1MDc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBtYXJrIChGVylcJiMzNDtcbiA1MDg6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTA5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDY1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTmV0d29yayBDbGFzc2lmaWVycyBhbmQgQ2dyb3VwcyoqCgpPa2F5LCBzbyB0aGUgYmVoYXZpb3IgaGVyZSBoaW5nZXMgb24gaG93IGBJTkVUYCBpcyBjb25maWd1cmVkLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBjbGFzc2lmaWNhdGlvbiBtZWNoYW5pc21zLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBzdGFydCBieSBleGFtaW5pbmcgYE5FVF9DTFNfQ0dST1VQYC4mIzM0OyBUaGlzIGZlZWxzIGxpa2UgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCwgdGhlIGNncm91cCBpbnRlZ3JhdGlvbiBtaWdodCBwcm92aWRlIHRoZSBjb3JlIGxpbmsgaGVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDU6XHRcdCAgaW4gY29tYmluYXRpb24gd2l0aCBTRlEuXG4gNTQ2Olx0XG4gNTQ3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA1NDg6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mbG93LlxuIDU0OTpcdFxuIDU1MDpcdGNvbmZpZyBORVRfQ0xTX0NHUk9VUFxuIDU1MTpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29udHJvbCBHcm91cCBDbGFzc2lmaWVyXCYjMzQ7XG4gNTUyOlx0XHRzZWxlY3QgTkVUX0NMU1xuIDU1MzpcdFx0c2VsZWN0IENHUk9VUF9ORVRfQ0xBU1NJRFxuIDU1NDpcdFx0ZGVwZW5kcyBvbiBDR1JPVVBTXG4gNTU1Olx0XHRoZWxwXG4gNTU2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvbiB0aGUgY29udHJvbFxuIDU1NzpcdFx0ICBjZ3JvdXAgb2YgdGhlaXIgcHJvY2Vzcy5cbiA1NTg6XHRcbiA1NTk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDU2MDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Nncm91cC5cbiA1NjE6XHRcbiA1NjI6XHRjb25maWcgTkVUX0NMU19CUEZcbiA1NjM6XHRcdHRyaXN0YXRlIFwmIzM0O0JQRi1iYXNlZCBjbGFzc2lmaWVyXCYjMzQ7XG4gNTY0Olx0XHRzZWxlY3QgTkVUX0NMU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBDb250cm9sIEdyb3VwIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaGluZ2VzIG9uIHRoZSBgQ0dST1VQU2Agc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBpbXBhY3QuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbiBJJiMzOTttIG9wZXJhdGluZyBvbi4KCk5vdywgZnJvbSB0aGVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgYE5FVF9DTFNfQlBGYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBjb25zaWRlcmF0aW9uOyBpdCYjMzk7cyBjZW50cmFsIHRvIGhvdyBJIGFwcHJvYWNoIHRoaXMgcGFydGljdWxhciBwcm9ibGVtLiBJdHMgYXZhaWxhYmlsaXR5IG9yIGltcGxlbWVudGF0aW9uIHNpZ25pZmljYW50bHkgY2hhbmdlcyB0aGUgbGFuZHNjYXBlLiBUaGF0JiMzOTtzIHdoZXJlIG15IGZvY3VzIHNoaWZ0cyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NjA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19jZ3JvdXAuXG4gNTYxOlx0XG4gNTYyOlx0Y29uZmlnIE5FVF9DTFNfQlBGXG4gNTYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtCUEYtYmFzZWQgY2xhc3NpZmllclwmIzM0O1xuIDU2NDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA1NjU6XHRcdGhlbHBcbiA1NjY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvblxuIDU2NzpcdFx0ICBwcm9ncmFtbWFibGUgQlBGIChKSVQmIzM5O2VkKSBmaWx0ZXJzIGFzIGFuIGFsdGVybmF0aXZlIHRvIGVtYXRjaGVzLlxuIDU2ODpcdFxuIDU2OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gNTcwOlx0XHQgIGJlIGNhbGxlZCBjbHNfYnBmLlxuIDU3MTpcdFxuIDU3MjpcdGNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxuIDU3MzpcdFx0dHJpc3RhdGUgXCYjMzQ7Rmxvd2VyIGNsYXNzaWZpZXJcJiMzNDtcbiA1NzQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTc1Olx0XHRoZWxwXG4gNTc2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb25cbiA1Nzc6XHRcdCAgYSBjb25maWd1cmFibGUgY29tYmluYXRpb24gb2YgcGFja2V0IGtleXMgYW5kIG1hc2tzLlxuIDU3ODpcdFxuIDU3OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24sIHByZXNlbnRlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERlcGVuZGVuY2llcyBhbmQgTmV0ZmlsdGVyIEhvb2tzKioKCkFscmlnaHQsIGluaXRpYWwgY29uc2lkZXJhdGlvbnMuIFRoZSBnb2FsIGlzIHRvIHdvcmsgd2l0aG91dCBpbnRyb2R1Y2luZyBhbnkgdW5uZWNlc3NhcnkgZGVwZW5kZW5jaWVzLiBJIGFsd2F5cyB0cnkgdG8ga2VlcCB0aGluZ3MgbGVhbiBhbmQgbWVhbiDigJMgbGVzcyBiYWdnYWdlLCBmZXdlciBwb2ludHMgb2YgZmFpbHVyZSwgYW5kIGVhc2llciBwb3J0YWJpbGl0eS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBuZXRmaWx0ZXIgaG9vaywgYW5kIGBORVRfQ0xTX0FDVGAganVtcHMgdG8gbWluZC4gVGhpcyBob29rIGlzIHdlbGwtc3VpdGVkIGZvciBhIHZhcmlldHkgb2YgcGFja2V0IG1hbmlwdWxhdGlvbiB0YXNrcy4gVGltZSB0byBnbyBkZWVwZXIgYW5kIGV2YWx1YXRlIGl0cyBzdWl0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk4Olx0XG4gNjk5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3MDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cbiA3MDE6XHRcbiA3MDI6XHRjb25maWcgTkVUX0NMU19BQ1RcbiA3MDM6XHRcdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuIDcwNDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA3MDU6XHRcdHNlbGVjdCBORVRfWEdSRVNTXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXG4gNzA4Olx0XHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXG4gNzA5Olx0XHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cbiA3MTA6XHRcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXG4gNzExOlx0XG4gNzEyOlx0XHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXG4gNzEzOlx0XHQgIGV4dGVuZGVkIG1hdGNoZXMuXG4gNzE0Olx0XG4gNzE1Olx0Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXG4gNzE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFmZmljIFBvbGljaW5nXCYjMzQ7XG4gNzE3Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE5ldHdvcmsgQ2xhc3NpZmljYXRpb24gQWN0aXZhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVF9DTFNfQUNUYC4gSXQmIzM5O3MgYSBzaW1wbGUgYm9vbGVhbiwgZXNzZW50aWFsbHkganVzdCBhIGZsYWcsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBmdW5kYW1lbnRhbCBkZXNpZ24gcGVyc3BlY3RpdmUuIFRoYXQga2VlcHMgdGhpbmdzIGNsZWFuIGFuZCBhdm9pZHMgdW5uZWNlc3NhcnkgY29tcGxleGl0eS4gTm93LCBnaXZlbiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIGRvd25zdHJlYW0gZnJvbSB0aGF0LiBNeSBmb2N1cyBpcyBub3cgb24gYE5FVF9DTFNfVTMyYC4gVGltZSB0byBkaWcgZGVlcGVyIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgdW5kZXJseWluZyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciBpcyBiZWluZyBpbnRlcnByZXRlZCBhbmQgdXNlZC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSB1c2FnZSBvZiBgTkVUX0NMU19VMzJgIGFuZCBsb29raW5nIGZvciByZWxhdGVkIGNvZGUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxNTpcdFxuIDUxNjpcdGNvbmZpZyBORVRfQ0xTX1UzMlxuIDUxNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcJiMzNDtcbiA1MTg6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTE5Olx0XHRoZWxwXG4gNTIwOlx0XHQgIFNheSBZIGhlcmUgdG8gYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIHVzaW5nIGEgdW5pdmVyc2FsXG4gNTIxOlx0XHQgIDMyYml0IHBpZWNlcyBiYXNlZCBjb21wYXJpc29uIHNjaGVtZS5cbiA1MjI6XHRcbiA1MjM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDUyNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3UzMi5cbiA1MjU6XHRcbiA1MjY6XHRjb25maWcgQ0xTX1UzMl9QRVJGXG4gNTI3Olx0XHRib29sIFwmIzM0O1BlcmZvcm1hbmNlIGNvdW50ZXJzIHN1cHBvcnRcJiMzNDtcbiA1Mjg6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19VMzJcbiA1Mjk6XHRcdGhlbHBcbiA1MzA6XHRcdCAgU2F5IFkgaGVyZSB0byBtYWtlIHUzMiBnYXRoZXIgYWRkaXRpb25hbCBzdGF0aXN0aWNzIHVzZWZ1bCBmb3JcbiA1MzE6XHRcdCAgZmluZSB0dW5pbmcgdTMyIGNsYXNzaWZpZXJzLlxuIDUzMjpcdFxuIDUzMzpcdGNvbmZpZyBDTFNfVTMyX01BUktcbiA1MzQ6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG1hcmtzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB1MzIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgY2xzX3UzMi5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYENPTkZJR19DTFNfVTMyX1BFUkZgIGFuZCBgQ09ORklHX0NMU19VMzJfTUFSS2Agc2VjdGlvbnMuIExldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvZGUgY2hhbmdlcy4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgcGF0Y2ggaXMgcmVwbGFjaW5nIGBfX2FsbG9jX3BlcmNwdWAgYW5kIGBhbGxvY19wZXJjcHVgIHdpdGggYF9fYWxsb2NfcGVyY3B1X2dmcGAgYW5kIGBhbGxvY19wZXJjcHVfZ2ZwYCByZXNwZWN0aXZlbHkuIEl0IGFsc28gYWRkcyBhIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcuIFRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIGxpa2VseSByZWxhdGVkIHRvIGFjY291bnRpbmcgZm9yIHRoZSBtZW1vcnkgdXNlZCBieSB0aGVzZSBwZXItQ1BVIGNvdW50ZXJzLiBUaGUgY2hhbmdlIG9mIGBfX2FsbG9jX3BlcmNwdWAgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGV2YWx1YXRlLgoKVGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBub3cgdXNpbmcgYSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmbGFnIG1lYW5zIHRoZSBzeXN0ZW0gd2lsbCBoYXZlIG1vcmUgYWNjdXJhdGUgaW5mb3JtYXRpb24gb24gd2hhdCBpcyB1c2luZyBob3cgbXVjaCBtZW1vcnksIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nLgoKQmFzZWQgb24gdGhlc2UgY2hhbmdlcywgaXQgbG9va3MgbGlrZSB3ZSYjMzk7bGwgbmVlZCBib3RoIGBDT05GSUdfQ0xTX1UzMl9QRVJGYCBhbmQgYENPTkZJR19DTFNfVTMyX01BUktgIGVuYWJsZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgYE5FVF9DTFNfTUFUQ0hBTExgIGlzIGFsc28gZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0XHQgIGJlIGNhbGxlZCBjbHNfZmxvd2VyLlxuIDU4MTpcdFxuIDU4MjpcdGNvbmZpZyBORVRfQ0xTX01BVENIQUxMXG4gNTgzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXRjaC1hbGwgY2xhc3NpZmllclwmIzM0O1xuIDU4NDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA1ODU6XHRcdGhlbHBcbiA1ODY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvblxuIDU4NzpcdFx0ICBub3RoaW5nLiBFdmVyeSBwYWNrZXQgd2lsbCBtYXRjaC5cbiA1ODg6XHRcbiA1ODk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuIDU5MDpcdFx0ICBiZSBjYWxsZWQgY2xzX21hdGNoYWxsLlxuIDU5MTpcdFxuIDU5MjpcdGNvbmZpZyBORVRfRU1BVENIXG4gNTkzOlx0XHRib29sIFwmIzM0O0V4dGVuZGVkIE1hdGNoZXNcJiMzNDtcbiA1OTQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODgwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgbmV0d29yayBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBzZXQgdXAuIEkgc2VlIGEgcHJldHR5IGNvbXByZWhlbnNpdmUgbGlzdCBoZXJlOiBgTkVUX1NDSEVEYCwgYE5FVF9DTFNgLCBgTkVUX0NMU19CQVNJQ2AsIGBORVRfQ0xTX1JPVVRFNGAsIGBJTkVUYCwgYE5FVF9DTFNfRldgLCBgTkVUX0NMU19VMzJgLCBgQ0xTX1UzMl9QRVJGYCwgYENMU19VMzJfTUFSS2AsIGBORVRfQ0xTX0ZMT1dgLCBhbmQgYE5FVF9DTFNfQ0dST1VQYC4gQW5kIG9mIGNvdXJzZSB0aGUgbW9yZSBhZHZhbmNlZCBzdHVmZiB0b286IGBDR1JPVVBTYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9DTFNfRkxPV0VSYCwgYE5FVF9DTFNfTUFUQ0hBTExgLCBhbmQgYE5FVF9DTFNfQUNUYC4KCkhtbSwgbm93IHRoYXQgSSBsb29rIGF0IHRoaXMgbGlzdCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBDR1JPVVBTYCBpcyBhY3R1YWxseSB0aGUgY29uZmlndXJhdGlvbiBpdGVtIEkgbmVlZC4gSXQgc2hvdWxkIGJlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEkmIzM5O20gZ29pbmcgdG8gY29uZmlybSB0aGF0IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDQ0PWNvbmZpZyBTTEFCX09CSl9FWFRcbi0tXG5pbml0L0tjb25maWctMTA0Ni1cbmluaXQvS2NvbmZpZzoxMDQ3Om1lbnVjb25maWcgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNDgtXHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZmllbGQgb2YgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnMqKgoKQWxyaWdodCwgeWVwLCB0aGF0JiMzOTtzIGl0LiBgQ0dST1VQU2AgaXMgdGhlIGNvcnJlY3QgcGFyYW1ldGVyIHdlJiMzOTtyZSBsb29raW5nIGF0LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgY2hhbmdlcyBvciBhbmFseXNpcywgaXQmIzM5O3MgYWx3YXlzIHNtYXJ0IHRvIGNvbmZpcm0uIExldCYjMzk7cyBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYElORVRgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIHNlY3Rpb24gd2UgbmVlZCB0byBiZSBmb2N1c2luZyBvbi4gQSBkb3VibGUtY2hlY2sgbm93IHNhdmVzIGEgaGVhZGFjaGUgbGF0ZXIsIGVzcGVjaWFsbHkgd2l0aCBzb21ldGhpbmcgdGhpcyBmdW5kYW1lbnRhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzMwPWNvbmZpZyBORVRfRk9VX0lQX1RVTk5FTFNcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cbm5ldC9pcHY0L0tjb25maWc6MzM5OmNvbmZpZyBJTkVUX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzUzLVxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzgxLVxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM5My1cbm5ldC9pcHY0L0tjb25maWc6Mzk0OmNvbmZpZyBJTkVUX0lQQ09NUFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogSVBDb21wIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MDMtXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXG5uZXQvaXB2NC9LY29uZmlnLTQwNS1cdGludCBcJiMzNDtJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MTMtXG5uZXQvaXB2NC9LY29uZmlnOjQxNDpjb25maWcgSU5FVF9YRlJNX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy00MTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNDE4LVxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTQyMC1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MjItXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cdHRyaXN0YXRlIFwmIzM0O0lORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDM0LVxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDM2LVx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzOC1cbm5ldC9pcHY0L0tjb25maWc6NDM5OmNvbmZpZyBJTkVUX1VEUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cdHRyaXN0YXRlIFwmIzM0O1VEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NDYtXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00NDgtXHR0cmlzdGF0ZSBcJiMzNDtSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDU0LVxubmV0L2lwdjQvS2NvbmZpZzo0NTU6Y29uZmlnIElORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC9LY29uZmlnLTQ1Ni1cdGJvb2wgXCYjMzQ7SU5FVDogYWxsb3cgcHJpdmlsZWdlZCBwcm9jZXNzIHRvIGFkbWluaXN0cmF0aXZlbHkgY2xvc2Ugc29ja2V0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMzMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyB0aHJvdWdoIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGEgc3BlY2lmaWMgb3B0aW9uLCBgSU5FVGAsIGlzIGRlZmluZWQuIEluaXRpYWxseSwgSSB3YXMgcHJvYmFibHkgbWVudGFsbHkgc2Nhbm5pbmcgdGhlIG9idmlvdXMgcGxhY2VzLCBtYXliZSB0aGlua2luZyBpdCB3b3VsZCBiZSBpbiBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIHByb3RvY29scyBpbiBnZW5lcmFsLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIGp1c3QgcmVhbGl6ZWQsIGFoYSEsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2shIEl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBuZXQvS2NvbmZpZ2AuIEV4Y2VsbGVudC4gU29tZXRpbWVzLCB5b3UganVzdCBuZWVkIGEgZnJlc2ggcGVyc3BlY3RpdmUsIG9yIGEgcmUtZm9jdXMgdG8gZmluZCB0aGUgb2J2aW91cyBhbnN3ZXIuIEkga25ldyBJJiMzOTtkIGZpbmQgaXQgZXZlbnR1YWxseS4gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1Rcbi0tXG5uZXQvS2NvbmZpZy0xMTMtXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcbm5ldC9LY29uZmlnLTExNS1cdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1OTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRnVuY3Rpb24gU3ltYm9scyBhbmQgQVBJIEVudHJ5cG9pbnRzKioKCk9rYXksIHllcywgYElORVRgIHNlZW1zIHNwb3Qgb24gaGVyZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBJIHNlZTogYGJhc2ljX2NoYW5nZWAsIGBjbHNfYnBmX2NoYW5nZWAsIGBjbHNfY2dyb3VwX2NoYW5nZWAsIGBmbG93X2NoYW5nZWAsIGBmbF9jaGFuZ2VgLCBgZndfY2hhbmdlYCwgYG1hbGxfY2hhbmdlYCwgYHJvdXRlNF9jaGFuZ2VgLCBhbmQgYHUzMl9jaGFuZ2VgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucz8gVGhlIGFuc3dlciBpcyB5ZXMsIHRoZXkgKmFyZSogc3RhdGljIGZ1bmN0aW9ucywgdXNlZCBhcyB0aGUgYC5jaGFuZ2VgIGNhbGxiYWNrcyB3aXRoaW4gYHRjZl9wcm90b19vcHNgLiBXYWl0IGEgbWludXRlLCB0aGUgcHJvbXB0IGVtcGhhc2l6ZXMgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIFRoZXNlICphcmVuJiMzOTt0KiBpbmxpbmVkLCB0aG91Z2gsIGJlY2F1c2UgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGB0Y2ZfcHJvdG9fb3BzYC4gVGhhdOKAmXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyOyB0aGVpciBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFyZSByZXRhaW5lZC4KClRvIGNvbmZpcm0gdGhhdCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhleSBhcmUgaW5kZWVkIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLiBPa2F5LCBnb29kLiBgYmFzaWNfY2hhbmdlYCAqaXMqIGFzc2lnbmVkIHRvIGAuY2hhbmdlYCBpbiBgY2xzX2Jhc2ljX29wc2AsIGZvciBleGFtcGxlLiBTbywgbm8gaW5saW5pbmcuIFRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQsIHRoZSBwcm9tcHQgc3RpbGwgc2F5cyAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMmIzM0Oy4gVGhlIHByaW1hcnkgQVBJIGVudHJ5cG9pbnQgaGVyZSBpcyBgdGNfbmV3X3RmaWx0ZXJgIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVGltZSB0byB0dXJuIG15IGF0dGVudGlvbiB0aGVyZSwgYW5kIG1ha2Ugc3VyZSB0aGF0IGlzIHRoZSBhcHByb3ByaWF0ZSBlbnRyeSBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmM9MjI0Nj1zdGF0aWMgYm9vbCBpc19pbmdyZXNzX29yX2Nsc2FjdChzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaywgc3RydWN0IFFkaXNjICpxKVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjI1MC1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MjI1MTpzdGF0aWMgaW50IHRjX25ld190ZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjI1Mi1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQxMTc9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2ZpbHRlcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L3NjaGVkL2Nsc19hcGkuYzo0MTE4Olx0ey5tc2d0eXBlID0gUlRNX05FV1RGSUxURVIsIC5kb2l0ID0gdGNfbmV3X3RmaWx0ZXIsXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQxMTktXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ4NwoJCQkJCQkJb3V0cHV0OiAzMzAKCQkJCQkJCXRob3VnaHRzOiAxMDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIHRoZSBGdXp6ZXIgb24gVGFyZ2V0ZWQgQ2xhc3NpZmllciBDaGFuZ2VzKioKCk9rYXksIGhlcmUmIzM5O3MgaG93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcy4gVGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZXNlIGNoYW5nZXMgc2VlbXMgdG8gYmUgYHRjX25ld190ZmlsdGVyYCwgYnV0IHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIHJlYWxseSB3aXRoaW4gdGhlIGAuY2hhbmdlYCBjYWxsYmFja3Mgb2Ygc3BlY2lmaWMgY2xhc3NpZmllcnMuIElmIEkgKm9ubHkqIHNwZWNpZnkgYHRjX25ld190ZmlsdGVyYCwgdGhlIGZ1enplciBtaWdodCBub3QgYmUgZGlyZWN0ZWQgZW5vdWdoIHRvIHRoZSBtb3N0IHJlbGV2YW50IGNvZGUuIFRoZSBwcm9tcHQgZG9lcyBtZW50aW9uIGZvY3VzaW5nIG9uIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMsIGFuZCBhdm9pZGluZyBnZW5lcmljIG9uZXMuIGB0Y19uZXdfdGZpbHRlcmAgaXMgbW9yZSBvZiBhIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24sIG5vdCBhIGhvdCBwYXRoLCBzbyBJIHNob3VsZCBiZSBzZWxlY3RpdmUuCgpHaXZlbiB0aGF0LCBJJiMzOTtsbCBpbmNsdWRlIHRoZSBgLmNoYW5nZWAgY2FsbGJhY2tzIGRpcmVjdGx5OiBgYmFzaWNfY2hhbmdlYCwgYGNsc19icGZfY2hhbmdlYCwgYGNsc19jZ3JvdXBfY2hhbmdlYCwgYGZsb3dfY2hhbmdlYCwgYGZsX2NoYW5nZWAsIGBmd19jaGFuZ2VgLCBgbWFsbF9jaGFuZ2VgLCBgcm91dGU0X2NoYW5nZWAsIGFuZCBgdTMyX2NoYW5nZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFsdGVyZWQgYnkgdGhlIHBhdGNoLgoKV2FpdCwgYHRjZl9leHRzX2luaXRfZXhgIGlzIGFsc28gbW9kaWZpZWQsIGFuZCBpdCYjMzk7cyBhbiAqZXhwb3J0ZWQqIGZ1bmN0aW9uLCBkZWZpbmVkIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgYWRkaXRpb24gdG8gdGhlIEZvY3VzU3ltYm9scyBsaXN0LiBJdCYjMzk7cyBhIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50LgoKQ2hlY2tpbmcgYHRjZl9leHRzX2luaXRfZXhgIGNvbmZpcm1zIGl0JiMzOTtzIHJlbGV2YW50LCBhbmQgSSB3aWxsIGFkZCBpdCB0byB0aGUgRm9jdXNTeW1ib2xzLgoKU28sIHRoZSBjdXJyZW50IEZvY3VzU3ltYm9scyBsaXN0IGlzOgoqICAgYGJhc2ljX2NoYW5nZWAKKiAgIGBjbHNfYnBmX2NoYW5nZWAKKiAgIGBjbHNfY2dyb3VwX2NoYW5nZWAKKiAgIGBmbG93X2NoYW5nZWAKKiAgIGBmbF9jaGFuZ2VgCiogICBgZndfY2hhbmdlYAoqICAgYG1hbGxfY2hhbmdlYAoqICAgYHJvdXRlNF9jaGFuZ2VgCiogICBgdTMyX2NoYW5nZWAKKiAgIGB0Y2ZfZXh0c19pbml0X2V4YAoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcsIGB0Y2ZfZXh0c19pbml0X2V4YCBpcyAqbm90KiBzdGF0aWMsIGl0JiMzOTtzIGBFWFBPUlRfU1lNQk9MYC4gVGhlIGAuY2hhbmdlYCBjYWxsYmFja3MgKmFyZSogc3RhdGljLCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgbWVhbmluZyB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZC4gV2hpbGUgU3l6a2FsbGVyICpjYW4qIHVzZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGUgcHJvbXB0IGVuY291cmFnZXMgbm9uLXN0YXRpYy4gSW5jbHVkaW5nIGB0Y19uZXdfdGZpbHRlcmAgbWlnaHQgYmUgdXNlZnVsLCBhbmQgYHRjZl9leHRzX2luaXRfZXhgIGxvb2tzIGdvb2QgYXMgYW4gZXh0ZXJuYWwgZnVuY3Rpb24uCgpIb3dldmVyLCB0aGUga2V5IGlzIGRpcmVjdGluZyB0aGUgZnV6emVyIHRvICpzcGVjaWZpYyogY2hhbmdlcy4gU2luY2UgdGhlIGAuY2hhbmdlYCBjYWxsYmFja3MgYXJlIHRoZSAqZXhhY3QqIGZ1bmN0aW9ucyBtb2RpZmllZCwgSSYjMzk7bGwga2VlcCB0aGVtIGluIHRoZSBsaXN0LiBUaGV5IGFyZSB3aGVyZSB0aGUgY29kZSBjaGFuZ2VzIGFyZSBsb2NhdGVkLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgcGF0Y2ggZm9yIG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcy4KCkluIGBjbHNfYmFzaWMuY2AsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uOiAgdGhlIGFkZGl0aW9uIG9mIGEgbWlzc2luZyBgaWRyX3JlbW92ZWAgb24gYW4gZXJyb3IgcGF0aCB3aGVuIGBhbGxvY19wZXJjcHVfZ2ZwYCBmYWlscy4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQgZml4ZXMgYW4gSURSIGxlYWsuIFRoaXMgaXMgdGhlIG9ubHkgYWRkaXRpb25hbCBmdW5jdGlvbmFsIGNoYW5nZSBJJiMzOTt2ZSBzZWVuLiBUaGlzIHBhdGggY2FuIGJlIHRlc3RlZCB3aXRoIGZhdWx0IGluamVjdGlvbiBkdXJpbmcgZnV6emluZyB0byB2ZXJpZnkgdGhlIGZpeCBhbmQgcHJldmVudCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24uCgpUaGUgY29uZmlncyBhcmU6IGBORVRfU0NIRURgLCBgTkVUX0NMU2AsIGBORVRfQ0xTX0JBU0lDYCwgYE5FVF9DTFNfUk9VVEU0YCwgYElORVRgLCBgTkVUX0NMU19GV2AsIGBORVRfQ0xTX1UzMmAsIGBDTFNfVTMyX1BFUkZgLCBgQ0xTX1UzMl9NQVJLYCwgYE5FVF9DTFNfRkxPV2AsIGBORVRfQ0xTX0NHUk9VUGAsIGBDR1JPVVBTYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9DTFNfRkxPV0VSYCwgYE5FVF9DTFNfTUFUQ0hBTExgLCBhbmQgYE5FVF9DTFNfQUNUYC4KClRoaXMgZXJyb3IgcGF0aCBpcyB3b3J0aCBmdXp6aW5nLCBzbyBJIHdpbGwgc2V0IFdvcnRoRnV6emluZz10cnVlLgoKT2theSwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMUyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0JBU0lDJiMzNDssCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GVyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1UzMiYjMzQ7LAogICAgJiMzNDtDTFNfVTMyX1BFUkYmIzM0OywKICAgICYjMzQ7Q0xTX1UzMl9NQVJLJiMzNDssCiAgICAmIzM0O05FVF9DTFNfRkxPVyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDssCiAgICAmIzM0O05FVF9DTFNfRkxPV0VSJiMzNDssCiAgICAmIzM0O05FVF9DTFNfTUFUQ0hBTEwmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiYXNpY19jaGFuZ2UmIzM0OywKICAgICYjMzQ7Y2xzX2JwZl9jaGFuZ2UmIzM0OywKICAgICYjMzQ7Y2xzX2Nncm91cF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7Zmxvd19jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZmxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2Z3X2NoYW5nZSYjMzQ7LAogICAgJiMzNDttYWxsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfY2hhbmdlJiMzNDssCiAgICAmIzM0O3UzMl9jaGFuZ2UmIzM0OywKICAgICYjMzQ7dGNmX2V4dHNfaW5pdF9leCYjMzQ7LAogICAgJiMzNDt0Y19uZXdfdGZpbHRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEdGUF9LRVJORUxfQUNDT1VOVCB0byB2YXJpb3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBuZXR3b3JrIGNsYXNzaWZpZXJzLiBXaGlsZSBtb3N0bHkgYW4gYWNjb3VudGluZyBjaGFuZ2UsIGl0IGFsc28gaW5jbHVkZXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggaW4gY2xzX2Jhc2ljLmMgKGJhc2ljX2NoYW5nZSkgd2hlcmUgaXQgYWRkcyBhIG1pc3NpbmcgaWRyX3JlbW92ZSBvbiB0aGUgZXJyb3IgcGF0aCB3aGVuIGFsbG9jX3BlcmNwdV9nZnAgZmFpbHMuIFRoaXMgZXJyb3IgcGF0aCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBmYXVsdCBpbmplY3Rpb24gZHVyaW5nIGZ1enppbmcgdG8gZW5zdXJlIG5vIElEUiBsZWFrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFMmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CQVNJQyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1JPVVRFNCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9DTFNfRlcmIzM0OywKICAgICYjMzQ7TkVUX0NMU19VMzImIzM0OywKICAgICYjMzQ7Q0xTX1UzMl9QRVJGJiMzNDssCiAgICAmIzM0O0NMU19VMzJfTUFSSyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZMT1cmIzM0OywKICAgICYjMzQ7TkVUX0NMU19DR1JPVVAmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0JQRiYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZMT1dFUiYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX01BVENIQUxMJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmFzaWNfY2hhbmdlJiMzNDssCiAgICAmIzM0O2Nsc19icGZfY2hhbmdlJiMzNDssCiAgICAmIzM0O2Nsc19jZ3JvdXBfY2hhbmdlJiMzNDssCiAgICAmIzM0O2Zsb3dfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmd19jaGFuZ2UmIzM0OywKICAgICYjMzQ7bWFsbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDt1MzJfY2hhbmdlJiMzNDssCiAgICAmIzM0O3RjZl9leHRzX2luaXRfZXgmIzM0OywKICAgICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBHRlBfS0VSTkVMX0FDQ09VTlQgdG8gdmFyaW91cyBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gbmV0d29yayBjbGFzc2lmaWVycy4gV2hpbGUgbW9zdGx5IGFuIGFjY291bnRpbmcgY2hhbmdlLCBpdCBhbHNvIGluY2x1ZGVzIGEgZnVuY3Rpb25hbCBidWcgZml4IGluIGNsc19iYXNpYy5jIChiYXNpY19jaGFuZ2UpIHdoZXJlIGl0IGFkZHMgYSBtaXNzaW5nIGlkcl9yZW1vdmUgb24gdGhlIGVycm9yIHBhdGggd2hlbiBhbGxvY19wZXJjcHVfZ2ZwIGZhaWxzLiBUaGlzIGVycm9yIHBhdGggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgZmF1bHQgaW5qZWN0aW9uIGR1cmluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBJRFIgbGVha3Mgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgY2xhc3NpZmllcnMgKGBuZXQvc2NoZWQvY2xzXyouY2ApIHRvIHVzZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmb3IgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLiBJdCByZXBsYWNlcyBga3phbGxvY19vYmpgLCBga3phbGxvY19vYmpzYCwgYGt6YWxsb2NfZmxleGAsIGBhbGxvY19wZXJjcHVgLCBga21lbWR1cGAsIGFuZCBgbmxhX21lbWR1cGAgd2l0aCB0aGVpciBgX2dmcGAgb3IgYWNjb3VudGVkIGVxdWl2YWxlbnRzLiBBbGwgYWZmZWN0ZWQgYWxsb2NhdGlvbnMgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkOiBga3phbGxvY2AtYmFzZWQgZnVuY3Rpb25zIGluaGVyZW50bHkgemVybyB0aGUgbWVtb3J5LCBgYWxsb2NfcGVyY3B1X2dmcGAgemVyby1pbml0aWFsaXplcyB0aGUgcGVyLUNQVSBtZW1vcnksIGFuZCBga21lbWR1cGAvYG5sYV9tZW1kdXBgIGNvcHkgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXJzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIG1pbm9yIGVycm9yLXBhdGggZml4IGluIGBjbHNfYmFzaWMuY2AgdG8gcmVtb3ZlIGFuIElEUiBlbnRyeSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgaW52YWxpZCBzdGF0ZSBidXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYWx0ZXJlZCwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc3YjgzY2Q2Yjk0OGFlZDRhZTM0MDkzYjFiYTY2YzFkMTk3MTg0OTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxNTowNTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCmluZGV4IDRlNmEyODEyYTRmMzIuLmJlNjNiMzQ3NjQwYmEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19hcGkuYwpAQCAtMzM2NCw3ICYjNDM7MzM2NCw4IEBAIGludCB0Y2ZfZXh0c19pbml0X2V4KHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cywgc3RydWN0IG5ldCAqbmV0LCBpbnQgYWN0aW9uLAogCSAqIFRoaXMgcmVmZXJlbmNlIG1pZ2h0IGJlIHRha2VuIGxhdGVyIGZyb20gdGNmX2V4dHNfZ2V0X25ldCgpLgogCSAqLwogCWV4dHMtJmd0O25ldCA9IG5ldDsKLQlleHRzLSZndDthY3Rpb25zID0ga3phbGxvY19vYmpzKHN0cnVjdCB0Y19hY3Rpb24gKiwgVENBX0FDVF9NQVhfUFJJTyk7CiYjNDM7CWV4dHMtJmd0O2FjdGlvbnMgPSBremFsbG9jX29ianMoc3RydWN0IHRjX2FjdGlvbiAqLCBUQ0FfQUNUX01BWF9QUklPLAomIzQzOwkJCQkgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFleHRzLSZndDthY3Rpb25zKQogCQlyZXR1cm4gLUVOT01FTTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jIGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jCmluZGV4IDQ5MmNkOWNlOGQ0NmYuLmUyYTk0YmE5ZmJhNzYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYmFzaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Jhc2ljLmMKQEAgLTE5Myw3ICYjNDM7MTkzLDcgQEAgc3RhdGljIGludCBiYXNpY19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3KTsKJiM0MzsJZm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghZm5ldykKIAkJcmV0dXJuIC1FTk9CVUZTOwogCkBAIC0yMTIsOSAmIzQzOzIxMiwxMSBAQCBzdGF0aWMgaW50IGJhc2ljX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJaWYgKGVycikKIAkJZ290byBlcnJvdXQ7CiAJZm5ldy0mZ3Q7aGFuZGxlID0gaGFuZGxlOwotCWZuZXctJmd0O3BmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB0Y19iYXNpY19wY250KTsKJiM0MzsJZm5ldy0mZ3Q7cGYgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCB0Y19iYXNpY19wY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghZm5ldy0mZ3Q7cGYpIHsKIAkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWlmICghZm9sZCkKJiM0MzsJCQlpZHJfcmVtb3ZlKCZhbXA7aGVhZC0mZ3Q7aGFuZGxlX2lkciwgZm5ldy0mZ3Q7aGFuZGxlKTsKIAkJZ290byBlcnJvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2JwZi5jIGIvbmV0L3NjaGVkL2Nsc19icGYuYwppbmRleCA2ZDE5MTU1YmVjYzg2Li4xODhjZjBmOTQ5ZGQ0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2JwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYnBmLmMKQEAgLTM1Miw3ICYjNDM7MzUyLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX3Byb2dfZnJvbV9vcHMoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgY2xzX2JwZl9wcm9nICpwcm9nKQogCWlmIChicGZfc2l6ZSAhPSBubGFfbGVuKHRiW1RDQV9CUEZfT1BTXSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYnBmX29wcyA9IGttZW1kdXAobmxhX2RhdGEodGJbVENBX0JQRl9PUFNdKSwgYnBmX3NpemUsIEdGUF9LRVJORUwpOwomIzQzOwlicGZfb3BzID0ga21lbWR1cChubGFfZGF0YSh0YltUQ0FfQlBGX09QU10pLCBicGZfc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoYnBmX29wcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNDAzLDcgJiM0Mzs0MDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX2VmZChzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2csCiAJfQogCiAJaWYgKHRiW1RDQV9CUEZfTkFNRV0pIHsKLQkJbmFtZSA9IG5sYV9tZW1kdXAodGJbVENBX0JQRl9OQU1FXSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQluYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCQlpZiAoIW5hbWUpIHsKIAkJCWJwZl9wcm9nX3B1dChmcCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ0Myw3ICYjNDM7NDQzLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlwcm9nID0ga3phbGxvY19vYmooKnByb2cpOwomIzQzOwlwcm9nID0ga3phbGxvY19vYmooKnByb2csIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFwcm9nKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jCmluZGV4IDY4MGE1YzMwODA5NGUuLjIxMGZkOWZkMjZkODMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuYwpAQCAtOTUsNyAmIzQzOzk1LDcgQEAgc3RhdGljIGludCBjbHNfY2dyb3VwX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJaWYgKGhlYWQgJmFtcDsmYW1wOyBoYW5kbGUgIT0gaGVhZC0mZ3Q7aGFuZGxlKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCW5ldyA9IGt6YWxsb2Nfb2JqKCpoZWFkKTsKJiM0MzsJbmV3ID0ga3phbGxvY19vYmooKmhlYWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuZXcpCiAJCXJldHVybiAtRU5PQlVGUzsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93LmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3cuYwppbmRleCAzNTZjNjhlYmMzODk1Li5hOWFjM2FjZjZlZGEwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Zsb3cuYwpAQCAtNDM4LDcgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgaW50IGZsb3dfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpOwomIzQzOwlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFmbmV3KQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jCmluZGV4IDg4ZjhhMzJmYWIyYjQuLjBlMjc1YjU4MTUxYzQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYwpAQCAtMjIzMyw3ICYjNDM7MjIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmxfZmxvd19tYXNrICpmbF9jcmVhdGVfbmV3X21hc2soc3RydWN0IGNsc19mbF9oZWFkICpoZWFkLAogCXN0cnVjdCBmbF9mbG93X21hc2sgKm5ld21hc2s7CiAJaW50IGVycjsKIAotCW5ld21hc2sgPSBremFsbG9jX29iaigqbmV3bWFzayk7CiYjNDM7CW5ld21hc2sgPSBremFsbG9jX29iaigqbmV3bWFzaywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW5ld21hc2spCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCkBAIC0yMzk0LDcgJiM0MzsyMzk0LDcgQEAgc3RhdGljIGludCBmbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlnb3RvIGVycm91dF90YjsKIAl9CiAKLQlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpOwomIzQzOwlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFmbmV3KSB7CiAJCWVyciA9IC1FTk9CVUZTOwogCQlnb3RvIGVycm91dF90YjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZncuYyBiL25ldC9zY2hlZC9jbHNfZncuYwppbmRleCA2NDZhNzMwZGNhOTNjLi5hNDYyYjI2MjcxOWMzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2Z3LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19mdy5jCkBAIC0yNzYsNyAmIzQzOzI3Niw3IEBAIHN0YXRpYyBpbnQgZndfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJaWYgKGYtJmd0O2lkICE9IGhhbmRsZSAmYW1wOyZhbXA7IGhhbmRsZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyKTsKJiM0MzsJCWZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCQlpZiAoIWZuZXcpCiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAKQEAgLTMzMCw3ICYjNDM7MzMwLDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlyY3VfYXNzaWduX3BvaW50ZXIodHAtJmd0O3Jvb3QsIGhlYWQpOwogCX0KIAotCWYgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyKTsKJiM0MzsJZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKGYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMgYi9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMKaW5kZXggNmYxMjY4NzJjMTRhMC4uYzE0ODk5YjkzNWJmZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYwpAQCAtMTg5LDcgJiM0MzsxODksNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW5ldyA9IGt6YWxsb2Nfb2JqKCpuZXcpOwomIzQzOwluZXcgPSBremFsbG9jX29iaigqbmV3LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbmV3KQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKQEAgLTIwMSw3ICYjNDM7MjAxLDcgQEAgc3RhdGljIGludCBtYWxsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCWhhbmRsZSA9IDE7CiAJbmV3LSZndDtoYW5kbGUgPSBoYW5kbGU7CiAJbmV3LSZndDtmbGFncyA9IHVzZXJmbGFnczsKLQluZXctJmd0O3BmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB0Y19tYXRjaGFsbF9wY250KTsKJiM0MzsJbmV3LSZndDtwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX21hdGNoYWxsX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuZXctJmd0O3BmKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jX3BlcmNwdTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfcm91dGUuYyBiL25ldC9zY2hlZC9jbHNfcm91dGUuYwppbmRleCBlZGVkN2FhY2QzZjcwLi4wZDEzMjRjOTA1ODM3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCkBAIC00NTUsNyAmIzQzOzQ1NSw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCWgxID0gdG9faGFzaChuaGFuZGxlKTsKIAliID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLSZndDt0YWJsZVtoMV0pOwogCWlmICghYikgewotCQliID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQpOwomIzQzOwkJYiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfYnVja2V0LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCQlpZiAoYiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9CVUZTOwogCkBAIC01MjQsNyAmIzQzOzUyNCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IC1FTk9CVUZTOwotCWYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlcik7CiYjNDM7CWYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWYpCiAJCWdvdG8gZXJyb3V0OwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuYwppbmRleCBjMjk3ZDdkYmNmOTE2Li5hYzZkMGZhNWE0MGUzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKQEAgLTgyNSw3ICYjNDM7ODI1LDcgQEAgc3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCXN0cnVjdCB0Y191MzJfc2VsICpzID0gJmFtcDtuLSZndDtzZWw7CiAJc3RydWN0IHRjX3Vfa25vZGUgKm5ldzsKIAotCW5ldyA9IGt6YWxsb2NfZmxleCgqbmV3LCBzZWwua2V5cywgcy0mZ3Q7bmtleXMpOwomIzQzOwluZXcgPSBremFsbG9jX2ZsZXgoKm5ldywgc2VsLmtleXMsIHMtJmd0O25rZXlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbmV3KQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMTExNCwxNSAmIzQzOzExMTQsMTYgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJZ290byBlcnJpZHI7CiAJfQogCi0JbiA9IGt6YWxsb2NfZmxleCgqbiwgc2VsLmtleXMsIHMtJmd0O25rZXlzKTsKJiM0MzsJbiA9IGt6YWxsb2NfZmxleCgqbiwgc2VsLmtleXMsIHMtJmd0O25rZXlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmIChuID09IE5VTEwpIHsKIAkJZXJyID0gLUVOT0JVRlM7CiAJCWdvdG8gZXJyaWRyOwogCX0KIAogI2lmZGVmIENPTkZJR19DTFNfVTMyX1BFUkYKLQluLSZndDtwZiA9IF9fYWxsb2NfcGVyY3B1KHN0cnVjdF9zaXplKG4tJmd0O3BmLCBrY250cywgcy0mZ3Q7bmtleXMpLAotCQkJICAgICAgIF9fYWxpZ25vZl9fKHN0cnVjdCB0Y191MzJfcGNudCkpOwomIzQzOwluLSZndDtwZiA9IF9fYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3Rfc2l6ZShuLSZndDtwZiwga2NudHMsIHMtJmd0O25rZXlzKSwKJiM0MzsJCQkJICAgX19hbGlnbm9mX18oc3RydWN0IHRjX3UzMl9wY250KSwKJiM0MzsJCQkJICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW4tJmd0O3BmKSB7CiAJCWVyciA9IC1FTk9CVUZTOwogCQlnb3RvIGVycmZyZWU7CkBAIC0xMTQ0LDcgJiM0MzsxMTQ1LDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJZ290byBlcnJvdXQ7CiAKICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9NQVJLCi0Jbi0mZ3Q7cGNwdV9zdWNjZXNzID0gYWxsb2NfcGVyY3B1KHUzMik7CiYjNDM7CW4tJmd0O3BjcHVfc3VjY2VzcyA9IGFsbG9jX3BlcmNwdV9nZnAodTMyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbi0mZ3Q7cGNwdV9zdWNjZXNzKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2MwoJCQkJCQkJb3V0cHV0OiAyNjUKCQkJCQkJCXRob3VnaHRzOiA4MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2VzIGluIGBuZXQvc2NoZWQvYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCB0d2Vha3MgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIHdpdGhpbiBgbmV0L3NjaGVkL2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCB0byBhIGJ1bmNoIG9mIGNhbGxzOiBga3phbGxvY19vYmpzYCwgYGt6YWxsb2Nfb2JqYCwgYGFsbG9jX3BlcmNwdV9nZnBgLCBga21lbWR1cGAsIGBubGFfbWVtZHVwYCwgYW5kIGBremFsbG9jX2ZsZXhgLiBUaGUgZ29hbCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBiZXR0ZXIgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLgoKRXNzZW50aWFsbHksIHRoZXkmIzM5O3JlIHN3YXBwaW5nIHRoZSBkZWZhdWx0IGZsYWdzIG9yIGBHRlBfS0VSTkVMYCB3aXRoIGBHRlBfS0VSTkVMX0FDQ09VTlRgLiBObyBjaGFuZ2VzIHRvIGhvdyB0aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkLCBubyBuZXcgZmllbGRzLCBubyBtb2RpZmljYXRpb25zIHRvIGFueSBib3VuZHMgY2hlY2tzLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgbm8gY2hhbmdlcyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXTigJlzIGFsbCBga3phbGxvY2AtYmFzZWQgKHplcm8taW5pdGlhbGl6ZWQpIG9yIGBrbWVtZHVwYC9gbmxhX21lbWR1cGAtYmFzZWQgKGNvcHlpbmcgYWxyZWFkeSBpbml0aWFsaXplZCBtZW1vcnkpLiBIb2xkIG9uLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYGFsbG9jX3BlcmNwdV9nZnBgLCBiZWNhdXNlIHRoYXQgaGFzIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCB5ZXMsIGBhbGxvY19wZXJjcHVfZ2ZwYCBzdGlsbCB6ZXJvLWluaXRpYWxpemVzLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGluIGhlcmUuIEFoLCBmb3VuZCBhIGJ1ZyBmaXggaW4gYGNsc19iYXNpYy5jYC4gVGhleSYjMzk7cmUgbm93IHJlbW92aW5nIGFuIElEUiBlbnRyeSBpZiBgYWxsb2NfcGVyY3B1X2dmcGAgZmFpbHMuIFRoaXMgaXMgYSBmaXggZm9yIGEgbWVtb3J5IGxlYWsgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlLCBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KClJpZ2h0LCBzbyBzaW5jZSBhbGwgdGhlc2UgYWxsb2NhdGlvbnMgYXJlICpzdGlsbCogZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgb3IgY29waWVzIG9mIGV4aXN0aW5nIGluaXRpYWxpemVkIGRhdGEsIHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgbWVhbnMgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdGlvbiB0b29scyBhcmUgc3VmZmljaWVudC4KClNvLCBoZXJlJiMzOTtzIG15IHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBzaW1wbHkgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZvciBjZ3JvdXAgYWNjb3VudGluZyB0byBjYWxscyBsaWtlIGBremFsbG9jYCwgYGttZW1kdXBgIGFuZCBgYWxsb2NfcGVyY3B1YC4gQWxsIHRoZXNlIGFsbG9jYXRpb25zIGFyZSAqZnVsbHkqIGluaXRpYWxpemVkLCBlaXRoZXIgemVyb2VkIChieSBga3phbGxvY2Agb3Igc2ltaWxhcikgb3IgY29waWVkIGZyb20gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgc291cmNlcy4gVGhlIGJ1ZyBmaXggaW4gYGNsc19iYXNpYy5jYCBpcyB1bnJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYW5kIG5vIGNvbXBsZXggaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYmVpbmcgY2hhbmdlZCwgdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBpbnRyb2R1Y2UgS01TQU4gZnV6emluZy4gV2UmIzM5O3JlIGdvb2Qgd2l0aCBLQVNBTiBhbmQgdGhlIHJlZ3VsYXIgdG9vbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscyBpbiB0aGUgbmV0d29yayBzY2hlZHVsaW5nIGNsYXNzaWZpZXJzIChgbmV0L3NjaGVkL2Nsc18qLmNgKSB0byB1c2UgYEdGUF9LRVJORUxfQUNDT1VOVGAgZm9yIGNncm91cCBtZW1vcnkgYWNjb3VudGluZy4gSXQgcmVwbGFjZXMgYGt6YWxsb2Nfb2JqYCwgYGt6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX2ZsZXhgLCBgYWxsb2NfcGVyY3B1YCwgYGttZW1kdXBgLCBhbmQgYG5sYV9tZW1kdXBgIHdpdGggdGhlaXIgYF9nZnBgIG9yIGFjY291bnRlZCBlcXVpdmFsZW50cy4gQWxsIGFmZmVjdGVkIGFsbG9jYXRpb25zIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZDogYGt6YWxsb2NgLWJhc2VkIGZ1bmN0aW9ucyBpbmhlcmVudGx5IHplcm8gdGhlIG1lbW9yeSwgYGFsbG9jX3BlcmNwdV9nZnBgIHplcm8taW5pdGlhbGl6ZXMgdGhlIHBlci1DUFUgbWVtb3J5LCBhbmQgYGttZW1kdXBgL2BubGFfbWVtZHVwYCBjb3B5IGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBzb3VyY2UgYnVmZmVycy4gVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgYSBtaW5vciBlcnJvci1wYXRoIGZpeCBpbiBgY2xzX2Jhc2ljLmNgIHRvIHJlbW92ZSBhbiBJRFIgZW50cnkgb24gYWxsb2NhdGlvbiBmYWlsdXJlLCB3aGljaCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIGludmFsaWQgc3RhdGUgYnV0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGlzIGFsdGVyZWQsIHRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycyBhcmUgcGVyZmVjdGx5IGFkZXF1YXRlIGZvciB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgY2xhc3NpZmllcnMgKGBuZXQvc2NoZWQvY2xzXyouY2ApIHRvIHVzZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmb3IgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLiBJdCByZXBsYWNlcyBga3phbGxvY19vYmpgLCBga3phbGxvY19vYmpzYCwgYGt6YWxsb2NfZmxleGAsIGBhbGxvY19wZXJjcHVgLCBga21lbWR1cGAsIGFuZCBgbmxhX21lbWR1cGAgd2l0aCB0aGVpciBgX2dmcGAgb3IgYWNjb3VudGVkIGVxdWl2YWxlbnRzLiBBbGwgYWZmZWN0ZWQgYWxsb2NhdGlvbnMgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkOiBga3phbGxvY2AtYmFzZWQgZnVuY3Rpb25zIGluaGVyZW50bHkgemVybyB0aGUgbWVtb3J5LCBgYWxsb2NfcGVyY3B1X2dmcGAgemVyby1pbml0aWFsaXplcyB0aGUgcGVyLUNQVSBtZW1vcnksIGFuZCBga21lbWR1cGAvYG5sYV9tZW1kdXBgIGNvcHkgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXJzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIG1pbm9yIGVycm9yLXBhdGggZml4IGluIGBjbHNfYmFzaWMuY2AgdG8gcmVtb3ZlIGFuIElEUiBlbnRyeSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgaW52YWxpZCBzdGF0ZSBidXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYWx0ZXJlZCwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjQ2LjQ5MjcwNDY1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjk3ODA3MTQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNcIixcbiAgICBcIk5FVF9DTFNfQkFTSUNcIixcbiAgICBcIk5FVF9DTFNfUk9VVEU0XCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfQ0xTX0ZXXCIsXG4gICAgXCJORVRfQ0xTX1UzMlwiLFxuICAgIFwiQ0xTX1UzMl9QRVJGXCIsXG4gICAgXCJDTFNfVTMyX01BUktcIixcbiAgICBcIk5FVF9DTFNfRkxPV1wiLFxuICAgIFwiTkVUX0NMU19DR1JPVVBcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk5FVF9DTFNfQlBGXCIsXG4gICAgXCJORVRfQ0xTX0ZMT1dFUlwiLFxuICAgIFwiTkVUX0NMU19NQVRDSEFMTFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYXNpY19jaGFuZ2VcIixcbiAgICBcImNsc19icGZfY2hhbmdlXCIsXG4gICAgXCJjbHNfY2dyb3VwX2NoYW5nZVwiLFxuICAgIFwiZmxvd19jaGFuZ2VcIixcbiAgICBcImZsX2NoYW5nZVwiLFxuICAgIFwiZndfY2hhbmdlXCIsXG4gICAgXCJtYWxsX2NoYW5nZVwiLFxuICAgIFwicm91dGU0X2NoYW5nZVwiLFxuICAgIFwidTMyX2NoYW5nZVwiLFxuICAgIFwidGNmX2V4dHNfaW5pdF9leFwiLFxuICAgIFwidGNfbmV3X3RmaWx0ZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscyBpbiB0aGUgbmV0d29yayBzY2hlZHVsaW5nIGNsYXNzaWZpZXJzIChgbmV0L3NjaGVkL2Nsc18qLmNgKSB0byB1c2UgYEdGUF9LRVJORUxfQUNDT1VOVGAgZm9yIGNncm91cCBtZW1vcnkgYWNjb3VudGluZy4gSXQgcmVwbGFjZXMgYGt6YWxsb2Nfb2JqYCwgYGt6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX2ZsZXhgLCBgYWxsb2NfcGVyY3B1YCwgYGttZW1kdXBgLCBhbmQgYG5sYV9tZW1kdXBgIHdpdGggdGhlaXIgYF9nZnBgIG9yIGFjY291bnRlZCBlcXVpdmFsZW50cy4gQWxsIGFmZmVjdGVkIGFsbG9jYXRpb25zIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZDogYGt6YWxsb2NgLWJhc2VkIGZ1bmN0aW9ucyBpbmhlcmVudGx5IHplcm8gdGhlIG1lbW9yeSwgYGFsbG9jX3BlcmNwdV9nZnBgIHplcm8taW5pdGlhbGl6ZXMgdGhlIHBlci1DUFUgbWVtb3J5LCBhbmQgYGttZW1kdXBgL2BubGFfbWVtZHVwYCBjb3B5IGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBzb3VyY2UgYnVmZmVycy4gVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgYSBtaW5vciBlcnJvci1wYXRoIGZpeCBpbiBgY2xzX2Jhc2ljLmNgIHRvIHJlbW92ZSBhbiBJRFIgZW50cnkgb24gYWxsb2NhdGlvbiBmYWlsdXJlLCB3aGljaCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIGludmFsaWQgc3RhdGUgYnV0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGlzIGFsdGVyZWQsIHRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycyBhcmUgcGVyZmVjdGx5IGFkZXF1YXRlIGZvciB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgR0ZQX0tFUk5FTF9BQ0NPVU5UIHRvIHZhcmlvdXMgbWVtb3J5IGFsbG9jYXRpb25zIGluIG5ldHdvcmsgY2xhc3NpZmllcnMuIFdoaWxlIG1vc3RseSBhbiBhY2NvdW50aW5nIGNoYW5nZSwgaXQgYWxzbyBpbmNsdWRlcyBhIGZ1bmN0aW9uYWwgYnVnIGZpeCBpbiBjbHNfYmFzaWMuYyAoYmFzaWNfY2hhbmdlKSB3aGVyZSBpdCBhZGRzIGEgbWlzc2luZyBpZHJfcmVtb3ZlIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYWxsb2NfcGVyY3B1X2dmcCBmYWlscy4gVGhpcyBlcnJvciBwYXRoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIGZhdWx0IGluamVjdGlvbiBkdXJpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gSURSIGxlYWtzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNTo0Ni40OTI3MTIyNDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTgwNDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc3YjgzY2Q2Yjk0OGFlZDRhZTM0MDkzYjFiYTY2YzFkMTk3MTg0OTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTU6MDU6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcXG5pbmRleCA0ZTZhMjgxMmE0ZjMyLi5iZTYzYjM0NzY0MGJhIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXFxuQEAgLTMzNjQsNyArMzM2NCw4IEBAIGludCB0Y2ZfZXh0c19pbml0X2V4KHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cywgc3RydWN0IG5ldCAqbmV0LCBpbnQgYWN0aW9uLFxcbiBcXHQgKiBUaGlzIHJlZmVyZW5jZSBtaWdodCBiZSB0YWtlbiBsYXRlciBmcm9tIHRjZl9leHRzX2dldF9uZXQoKS5cXG4gXFx0ICovXFxuIFxcdGV4dHMtXFx1MDAzZW5ldCA9IG5ldDtcXG4tXFx0ZXh0cy1cXHUwMDNlYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdGNfYWN0aW9uICosIFRDQV9BQ1RfTUFYX1BSSU8pO1xcbitcXHRleHRzLVxcdTAwM2VhY3Rpb25zID0ga3phbGxvY19vYmpzKHN0cnVjdCB0Y19hY3Rpb24gKiwgVENBX0FDVF9NQVhfUFJJTyxcXG4rXFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWV4dHMtXFx1MDAzZWFjdGlvbnMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jIGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jXFxuaW5kZXggNDkyY2Q5Y2U4ZDQ2Zi4uZTJhOTRiYTlmYmE3NiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Jhc2ljLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Jhc2ljLmNcXG5AQCAtMTkzLDcgKzE5Myw3IEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7XFxuK1xcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFmbmV3KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIFxcbkBAIC0yMTIsOSArMjEyLDExIEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcdGZuZXctXFx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcXG4tXFx0Zm5ldy1cXHUwMDNlcGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX2Jhc2ljX3BjbnQpO1xcbitcXHRmbmV3LVxcdTAwM2VwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX2Jhc2ljX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghZm5ldy1cXHUwMDNlcGYpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0aWYgKCFmb2xkKVxcbitcXHRcXHRcXHRpZHJfcmVtb3ZlKFxcdTAwMjZoZWFkLVxcdTAwM2VoYW5kbGVfaWRyLCBmbmV3LVxcdTAwM2VoYW5kbGUpO1xcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19icGYuYyBiL25ldC9zY2hlZC9jbHNfYnBmLmNcXG5pbmRleCA2ZDE5MTU1YmVjYzg2Li4xODhjZjBmOTQ5ZGQ0IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfYnBmLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX2JwZi5jXFxuQEAgLTM1Miw3ICszNTIsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX29wcyhzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2cpXFxuIFxcdGlmIChicGZfc2l6ZSAhPSBubGFfbGVuKHRiW1RDQV9CUEZfT1BTXSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0YnBmX29wcyA9IGttZW1kdXAobmxhX2RhdGEodGJbVENBX0JQRl9PUFNdKSwgYnBmX3NpemUsIEdGUF9LRVJORUwpO1xcbitcXHRicGZfb3BzID0ga21lbWR1cChubGFfZGF0YSh0YltUQ0FfQlBGX09QU10pLCBicGZfc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKGJwZl9vcHMgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC00MDMsNyArNDAzLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX3Byb2dfZnJvbV9lZmQoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgY2xzX2JwZl9wcm9nICpwcm9nLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAodGJbVENBX0JQRl9OQU1FXSkge1xcbi1cXHRcXHRuYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0bmFtZSA9IG5sYV9tZW1kdXAodGJbVENBX0JQRl9OQU1FXSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0aWYgKCFuYW1lKSB7XFxuIFxcdFxcdFxcdGJwZl9wcm9nX3B1dChmcCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC00NDMsNyArNDQzLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cHJvZyA9IGt6YWxsb2Nfb2JqKCpwcm9nKTtcXG4rXFx0cHJvZyA9IGt6YWxsb2Nfb2JqKCpwcm9nLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIXByb2cpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXFxuaW5kZXggNjgwYTVjMzA4MDk0ZS4uMjEwZmQ5ZmQyNmQ4MyAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuY1xcbkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyBpbnQgY2xzX2Nncm91cF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRpZiAoaGVhZCBcXHUwMDI2XFx1MDAyNiBoYW5kbGUgIT0gaGVhZC1cXHUwMDNlaGFuZGxlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuLVxcdG5ldyA9IGt6YWxsb2Nfb2JqKCpoZWFkKTtcXG4rXFx0bmV3ID0ga3phbGxvY19vYmooKmhlYWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbmV3KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Zsb3cuYyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jXFxuaW5kZXggMzU2YzY4ZWJjMzg5NS4uYTlhYzNhY2Y2ZWRhMCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3cuY1xcbisrKyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jXFxuQEAgLTQzOCw3ICs0MzgsNyBAQCBzdGF0aWMgaW50IGZsb3dfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuIFxcbi1cXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpO1xcbitcXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghZm5ldylcXG4gXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcXG5pbmRleCA4OGY4YTMyZmFiMmI0Li4wZTI3NWI1ODE1MWM0IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXFxuQEAgLTIyMzMsNyArMjIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmxfZmxvd19tYXNrICpmbF9jcmVhdGVfbmV3X21hc2soc3RydWN0IGNsc19mbF9oZWFkICpoZWFkLFxcbiBcXHRzdHJ1Y3QgZmxfZmxvd19tYXNrICpuZXdtYXNrO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0bmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrKTtcXG4rXFx0bmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIW5ld21hc2spXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXG5AQCAtMjM5NCw3ICsyMzk0LDcgQEAgc3RhdGljIGludCBmbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRcXHRnb3RvIGVycm91dF90YjtcXG4gXFx0fVxcbiBcXG4tXFx0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3KTtcXG4rXFx0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWZuZXcpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT0JVRlM7XFxuIFxcdFxcdGdvdG8gZXJyb3V0X3RiO1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Z3LmMgYi9uZXQvc2NoZWQvY2xzX2Z3LmNcXG5pbmRleCA2NDZhNzMwZGNhOTNjLi5hNDYyYjI2MjcxOWMzIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfZncuY1xcbisrKyBiL25ldC9zY2hlZC9jbHNfZncuY1xcbkBAIC0yNzYsNyArMjc2LDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRcXHRpZiAoZi1cXHUwMDNlaWQgIT0gaGFuZGxlIFxcdTAwMjZcXHUwMDI2IGhhbmRsZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRmbmV3ID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlcik7XFxuK1xcdFxcdGZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRcXHRpZiAoIWZuZXcpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuQEAgLTMzMCw3ICszMzAsNyBAQCBzdGF0aWMgaW50IGZ3X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0cC1cXHUwMDNlcm9vdCwgaGVhZCk7XFxuIFxcdH1cXG4gXFxuLVxcdGYgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyKTtcXG4rXFx0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmIChmID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYyBiL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuY1xcbmluZGV4IDZmMTI2ODcyYzE0YTAuLmMxNDg5OWI5MzViZmQgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXFxuQEAgLTE4OSw3ICsxODksNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdG5ldyA9IGt6YWxsb2Nfb2JqKCpuZXcpO1xcbitcXHRuZXcgPSBremFsbG9jX29iaigqbmV3LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIW5ldylcXG4gXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG5AQCAtMjAxLDcgKzIwMSw3IEBAIHN0YXRpYyBpbnQgbWFsbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRcXHRoYW5kbGUgPSAxO1xcbiBcXHRuZXctXFx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcXG4gXFx0bmV3LVxcdTAwM2VmbGFncyA9IHVzZXJmbGFncztcXG4tXFx0bmV3LVxcdTAwM2VwZiA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgdGNfbWF0Y2hhbGxfcGNudCk7XFxuK1xcdG5ldy1cXHUwMDNlcGYgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCB0Y19tYXRjaGFsbF9wY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIW5ldy1cXHUwMDNlcGYpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBlcnJfYWxsb2NfcGVyY3B1O1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcXG5pbmRleCBlZGVkN2FhY2QzZjcwLi4wZDEzMjRjOTA1ODM3IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuY1xcbisrKyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xcbkBAIC00NTUsNyArNDU1LDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuIFxcdGgxID0gdG9faGFzaChuaGFuZGxlKTtcXG4gXFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cXHUwMDNldGFibGVbaDFdKTtcXG4gXFx0aWYgKCFiKSB7XFxuLVxcdFxcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCk7XFxuK1xcdFxcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0aWYgKGIgPT0gTlVMTClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG5AQCAtNTI0LDcgKzUyNCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0ZXJyID0gLUVOT0JVRlM7XFxuLVxcdGYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlcik7XFxuK1xcdGYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFmKVxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXFxuaW5kZXggYzI5N2Q3ZGJjZjkxNi4uYWM2ZDBmYTVhNDBlMyAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xcbkBAIC04MjUsNyArODI1LDcgQEAgc3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiBcXHRzdHJ1Y3QgdGNfdTMyX3NlbCAqcyA9IFxcdTAwMjZuLVxcdTAwM2VzZWw7XFxuIFxcdHN0cnVjdCB0Y191X2tub2RlICpuZXc7XFxuIFxcbi1cXHRuZXcgPSBremFsbG9jX2ZsZXgoKm5ldywgc2VsLmtleXMsIHMtXFx1MDAzZW5rZXlzKTtcXG4rXFx0bmV3ID0ga3phbGxvY19mbGV4KCpuZXcsIHNlbC5rZXlzLCBzLVxcdTAwM2Vua2V5cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFuZXcpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG5AQCAtMTExNCwxNSArMTExNCwxNiBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRcXHRnb3RvIGVycmlkcjtcXG4gXFx0fVxcbiBcXG4tXFx0biA9IGt6YWxsb2NfZmxleCgqbiwgc2VsLmtleXMsIHMtXFx1MDAzZW5rZXlzKTtcXG4rXFx0biA9IGt6YWxsb2NfZmxleCgqbiwgc2VsLmtleXMsIHMtXFx1MDAzZW5rZXlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAobiA9PSBOVUxMKSB7XFxuIFxcdFxcdGVyciA9IC1FTk9CVUZTO1xcbiBcXHRcXHRnb3RvIGVycmlkcjtcXG4gXFx0fVxcbiBcXG4gI2lmZGVmIENPTkZJR19DTFNfVTMyX1BFUkZcXG4tXFx0bi1cXHUwMDNlcGYgPSBfX2FsbG9jX3BlcmNwdShzdHJ1Y3Rfc2l6ZShuLVxcdTAwM2VwZiwga2NudHMsIHMtXFx1MDAzZW5rZXlzKSxcXG4tXFx0XFx0XFx0ICAgICAgIF9fYWxpZ25vZl9fKHN0cnVjdCB0Y191MzJfcGNudCkpO1xcbitcXHRuLVxcdTAwM2VwZiA9IF9fYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3Rfc2l6ZShuLVxcdTAwM2VwZiwga2NudHMsIHMtXFx1MDAzZW5rZXlzKSxcXG4rXFx0XFx0XFx0XFx0ICAgX19hbGlnbm9mX18oc3RydWN0IHRjX3UzMl9wY250KSxcXG4rXFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFuLVxcdTAwM2VwZikge1xcbiBcXHRcXHRlcnIgPSAtRU5PQlVGUztcXG4gXFx0XFx0Z290byBlcnJmcmVlO1xcbkBAIC0xMTQ0LDcgKzExNDUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9NQVJLXFxuLVxcdG4tXFx1MDAzZXBjcHVfc3VjY2VzcyA9IGFsbG9jX3BlcmNwdSh1MzIpO1xcbitcXHRuLVxcdTAwM2VwY3B1X3N1Y2Nlc3MgPSBhbGxvY19wZXJjcHVfZ2ZwKHUzMiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFuLVxcdTAwM2VwY3B1X3N1Y2Nlc3MpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjQ3LjAwOTQ5NTE1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMzk1ODgyMDQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNcIixcbiAgICBcIk5FVF9DTFNfQkFTSUNcIixcbiAgICBcIk5FVF9DTFNfUk9VVEU0XCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfQ0xTX0ZXXCIsXG4gICAgXCJORVRfQ0xTX1UzMlwiLFxuICAgIFwiQ0xTX1UzMl9QRVJGXCIsXG4gICAgXCJDTFNfVTMyX01BUktcIixcbiAgICBcIk5FVF9DTFNfRkxPV1wiLFxuICAgIFwiTkVUX0NMU19DR1JPVVBcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk5FVF9DTFNfQlBGXCIsXG4gICAgXCJORVRfQ0xTX0ZMT1dFUlwiLFxuICAgIFwiTkVUX0NMU19NQVRDSEFMTFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYXNpY19jaGFuZ2VcIixcbiAgICBcImNsc19icGZfY2hhbmdlXCIsXG4gICAgXCJjbHNfY2dyb3VwX2NoYW5nZVwiLFxuICAgIFwiZmxvd19jaGFuZ2VcIixcbiAgICBcImZsX2NoYW5nZVwiLFxuICAgIFwiZndfY2hhbmdlXCIsXG4gICAgXCJtYWxsX2NoYW5nZVwiLFxuICAgIFwicm91dGU0X2NoYW5nZVwiLFxuICAgIFwidTMyX2NoYW5nZVwiLFxuICAgIFwidGNmX2V4dHNfaW5pdF9leFwiLFxuICAgIFwidGNfbmV3X3RmaWx0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEdGUF9LRVJORUxfQUNDT1VOVCB0byB2YXJpb3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBuZXR3b3JrIGNsYXNzaWZpZXJzLiBXaGlsZSBtb3N0bHkgYW4gYWNjb3VudGluZyBjaGFuZ2UsIGl0IGFsc28gaW5jbHVkZXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggaW4gY2xzX2Jhc2ljLmMgKGJhc2ljX2NoYW5nZSkgd2hlcmUgaXQgYWRkcyBhIG1pc3NpbmcgaWRyX3JlbW92ZSBvbiB0aGUgZXJyb3IgcGF0aCB3aGVuIGFsbG9jX3BlcmNwdV9nZnAgZmFpbHMuIFRoaXMgZXJyb3IgcGF0aCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBmYXVsdCBpbmplY3Rpb24gZHVyaW5nIGZ1enppbmcgdG8gZW5zdXJlIG5vIElEUiBsZWFrcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzdiODNjZDZiOTQ4YWVkNGFlMzQwOTNiMWJhNjZjMWQxOTcxODQ5NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDE1OjA1OjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcbmluZGV4IDRlNmEyODEyYTRmMzIuLmJlNjNiMzQ3NjQwYmEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5AQCAtMzM2NCw3ICszMzY0LDggQEAgaW50IHRjZl9leHRzX2luaXRfZXgoc3RydWN0IHRjZl9leHRzICpleHRzLCBzdHJ1Y3QgbmV0ICpuZXQsIGludCBhY3Rpb24sXG4gXHQgKiBUaGlzIHJlZmVyZW5jZSBtaWdodCBiZSB0YWtlbiBsYXRlciBmcm9tIHRjZl9leHRzX2dldF9uZXQoKS5cbiBcdCAqL1xuIFx0ZXh0cy1cdTAwM2VuZXQgPSBuZXQ7XG4tXHRleHRzLVx1MDAzZWFjdGlvbnMgPSBremFsbG9jX29ianMoc3RydWN0IHRjX2FjdGlvbiAqLCBUQ0FfQUNUX01BWF9QUklPKTtcbitcdGV4dHMtXHUwMDNlYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdGNfYWN0aW9uICosIFRDQV9BQ1RfTUFYX1BSSU8sXG4rXHRcdFx0XHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWV4dHMtXHUwMDNlYWN0aW9ucylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jIGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jXG5pbmRleCA0OTJjZDljZThkNDZmLi5lMmE5NGJhOWZiYTc2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Jhc2ljLmNcbkBAIC0xOTMsNyArMTkzLDcgQEAgc3RhdGljIGludCBiYXNpY19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3KTtcbitcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTIxMiw5ICsyMTIsMTEgQEAgc3RhdGljIGludCBiYXNpY19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvdXQ7XG4gXHRmbmV3LVx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcbi1cdGZuZXctXHUwMDNlcGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX2Jhc2ljX3BjbnQpO1xuK1x0Zm5ldy1cdTAwM2VwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX2Jhc2ljX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWZuZXctXHUwMDNlcGYpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0aWYgKCFmb2xkKVxuK1x0XHRcdGlkcl9yZW1vdmUoXHUwMDI2aGVhZC1cdTAwM2VoYW5kbGVfaWRyLCBmbmV3LVx1MDAzZWhhbmRsZSk7XG4gXHRcdGdvdG8gZXJyb3V0O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYnBmLmMgYi9uZXQvc2NoZWQvY2xzX2JwZi5jXG5pbmRleCA2ZDE5MTU1YmVjYzg2Li4xODhjZjBmOTQ5ZGQ0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19icGYuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19icGYuY1xuQEAgLTM1Miw3ICszNTIsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX29wcyhzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2cpXG4gXHRpZiAoYnBmX3NpemUgIT0gbmxhX2xlbih0YltUQ0FfQlBGX09QU10pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGJwZl9vcHMgPSBrbWVtZHVwKG5sYV9kYXRhKHRiW1RDQV9CUEZfT1BTXSksIGJwZl9zaXplLCBHRlBfS0VSTkVMKTtcbitcdGJwZl9vcHMgPSBrbWVtZHVwKG5sYV9kYXRhKHRiW1RDQV9CUEZfT1BTXSksIGJwZl9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKGJwZl9vcHMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNDAzLDcgKzQwMyw3IEBAIHN0YXRpYyBpbnQgY2xzX2JwZl9wcm9nX2Zyb21fZWZkKHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGNsc19icGZfcHJvZyAqcHJvZyxcbiBcdH1cbiBcbiBcdGlmICh0YltUQ0FfQlBGX05BTUVdKSB7XG4tXHRcdG5hbWUgPSBubGFfbWVtZHVwKHRiW1RDQV9CUEZfTkFNRV0sIEdGUF9LRVJORUwpO1xuK1x0XHRuYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIW5hbWUpIHtcbiBcdFx0XHRicGZfcHJvZ19wdXQoZnApO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTQ0Myw3ICs0NDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwcm9nID0ga3phbGxvY19vYmooKnByb2cpO1xuK1x0cHJvZyA9IGt6YWxsb2Nfb2JqKCpwcm9nLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFwcm9nKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuYyBiL25ldC9zY2hlZC9jbHNfY2dyb3VwLmNcbmluZGV4IDY4MGE1YzMwODA5NGUuLjIxMGZkOWZkMjZkODMgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXG5AQCAtOTUsNyArOTUsNyBAQCBzdGF0aWMgaW50IGNsc19jZ3JvdXBfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdGlmIChoZWFkIFx1MDAyNlx1MDAyNiBoYW5kbGUgIT0gaGVhZC1cdTAwM2VoYW5kbGUpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuLVx0bmV3ID0ga3phbGxvY19vYmooKmhlYWQpO1xuK1x0bmV3ID0ga3phbGxvY19vYmooKmhlYWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvdy5jIGIvbmV0L3NjaGVkL2Nsc19mbG93LmNcbmluZGV4IDM1NmM2OGViYzM4OTUuLmE5YWMzYWNmNmVkYTAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3cuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19mbG93LmNcbkBAIC00MzgsNyArNDM4LDcgQEAgc3RhdGljIGludCBmbG93X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuLVx0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3KTtcbitcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG5pbmRleCA4OGY4YTMyZmFiMmI0Li4wZTI3NWI1ODE1MWM0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xuQEAgLTIyMzMsNyArMjIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmxfZmxvd19tYXNrICpmbF9jcmVhdGVfbmV3X21hc2soc3RydWN0IGNsc19mbF9oZWFkICpoZWFkLFxuIFx0c3RydWN0IGZsX2Zsb3dfbWFzayAqbmV3bWFzaztcbiBcdGludCBlcnI7XG4gXG4tXHRuZXdtYXNrID0ga3phbGxvY19vYmooKm5ld21hc2spO1xuK1x0bmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFuZXdtYXNrKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbkBAIC0yMzk0LDcgKzIzOTQsNyBAQCBzdGF0aWMgaW50IGZsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdGdvdG8gZXJyb3V0X3RiO1xuIFx0fVxuIFxuLVx0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3KTtcbitcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldykge1xuIFx0XHRlcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byBlcnJvdXRfdGI7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mdy5jIGIvbmV0L3NjaGVkL2Nsc19mdy5jXG5pbmRleCA2NDZhNzMwZGNhOTNjLi5hNDYyYjI2MjcxOWMzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19mdy5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Z3LmNcbkBAIC0yNzYsNyArMjc2LDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRpZiAoZi1cdTAwM2VpZCAhPSBoYW5kbGUgXHUwMDI2XHUwMDI2IGhhbmRsZSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0Zm5ldyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIpO1xuK1x0XHRmbmV3ID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKCFmbmV3KVxuIFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcbkBAIC0zMzAsNyArMzMwLDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHAtXHUwMDNlcm9vdCwgaGVhZCk7XG4gXHR9XG4gXG4tXHRmID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlcik7XG4rXHRmID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChmID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMgYi9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmNcbmluZGV4IDZmMTI2ODcyYzE0YTAuLmMxNDg5OWI5MzViZmQgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuY1xuQEAgLTE4OSw3ICsxODksNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdG5ldyA9IGt6YWxsb2Nfb2JqKCpuZXcpO1xuK1x0bmV3ID0ga3phbGxvY19vYmooKm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5AQCAtMjAxLDcgKzIwMSw3IEBAIHN0YXRpYyBpbnQgbWFsbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRoYW5kbGUgPSAxO1xuIFx0bmV3LVx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcbiBcdG5ldy1cdTAwM2VmbGFncyA9IHVzZXJmbGFncztcbi1cdG5ldy1cdTAwM2VwZiA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgdGNfbWF0Y2hhbGxfcGNudCk7XG4rXHRuZXctXHUwMDNlcGYgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCB0Y19tYXRjaGFsbF9wY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFuZXctXHUwMDNlcGYpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBlcnJfYWxsb2NfcGVyY3B1O1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfcm91dGUuYyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuaW5kZXggZWRlZDdhYWNkM2Y3MC4uMGQxMzI0YzkwNTgzNyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG5AQCAtNDU1LDcgKzQ1NSw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0aDEgPSB0b19oYXNoKG5oYW5kbGUpO1xuIFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVtoMV0pO1xuIFx0aWYgKCFiKSB7XG4tXHRcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCk7XG4rXHRcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKGIgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5AQCAtNTI0LDcgKzUyNCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlcnIgPSAtRU5PQlVGUztcbi1cdGYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlcik7XG4rXHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWYpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCBjMjk3ZDdkYmNmOTE2Li5hYzZkMGZhNWE0MGUzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTgyNSw3ICs4MjUsNyBAQCBzdGF0aWMgc3RydWN0IHRjX3Vfa25vZGUgKnUzMl9pbml0X2tub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRzdHJ1Y3QgdGNfdTMyX3NlbCAqcyA9IFx1MDAyNm4tXHUwMDNlc2VsO1xuIFx0c3RydWN0IHRjX3Vfa25vZGUgKm5ldztcbiBcbi1cdG5ldyA9IGt6YWxsb2NfZmxleCgqbmV3LCBzZWwua2V5cywgcy1cdTAwM2Vua2V5cyk7XG4rXHRuZXcgPSBremFsbG9jX2ZsZXgoKm5ldywgc2VsLmtleXMsIHMtXHUwMDNlbmtleXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5AQCAtMTExNCwxNSArMTExNCwxNiBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRnb3RvIGVycmlkcjtcbiBcdH1cbiBcbi1cdG4gPSBremFsbG9jX2ZsZXgoKm4sIHNlbC5rZXlzLCBzLVx1MDAzZW5rZXlzKTtcbitcdG4gPSBremFsbG9jX2ZsZXgoKm4sIHNlbC5rZXlzLCBzLVx1MDAzZW5rZXlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKG4gPT0gTlVMTCkge1xuIFx0XHRlcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byBlcnJpZHI7XG4gXHR9XG4gXG4gI2lmZGVmIENPTkZJR19DTFNfVTMyX1BFUkZcbi1cdG4tXHUwMDNlcGYgPSBfX2FsbG9jX3BlcmNwdShzdHJ1Y3Rfc2l6ZShuLVx1MDAzZXBmLCBrY250cywgcy1cdTAwM2Vua2V5cyksXG4tXHRcdFx0ICAgICAgIF9fYWxpZ25vZl9fKHN0cnVjdCB0Y191MzJfcGNudCkpO1xuK1x0bi1cdTAwM2VwZiA9IF9fYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3Rfc2l6ZShuLVx1MDAzZXBmLCBrY250cywgcy1cdTAwM2Vua2V5cyksXG4rXHRcdFx0XHQgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdGNfdTMyX3BjbnQpLFxuK1x0XHRcdFx0ICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbi1cdTAwM2VwZikge1xuIFx0XHRlcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byBlcnJmcmVlO1xuQEAgLTExNDQsNyArMTE0NSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9NQVJLXG4tXHRuLVx1MDAzZXBjcHVfc3VjY2VzcyA9IGFsbG9jX3BlcmNwdSh1MzIpO1xuK1x0bi1cdTAwM2VwY3B1X3N1Y2Nlc3MgPSBhbGxvY19wZXJjcHVfZ2ZwKHUzMiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbi1cdTAwM2VwY3B1X3N1Y2Nlc3MpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBlcnJvdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNTo0Ny4wMDk0OTcwODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDY3Mzg0Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTmV0d29yayBTY2hlZHVsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2Nsc18qLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGp1c3QgYW5vdGhlciBtZW1vcnkgYWNjb3VudGluZyBjaGFuZ2UsIGFkZGluZyBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCB0byBhIGJ1bmNoIG9mIGFsbG9jYXRpb24gY2FsbHMuIFRoaXMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC5cIiAgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byB0aGluZ3MgbGlrZSBga3phbGxvY19vYmpzYCwgYGt6YWxsb2Nfb2JqYCwgYGFsbG9jX3BlcmNwdWAsIGFuZCBvdGhlciBhbGxvY2F0aW9uIHJvdXRpbmVzLlxuXG5NeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBwdXJlbHkgZGVjb3JhdGl2ZSwganVzdCB0cmFja2luZyBtZW1vcnkgdXNhZ2Ugd2l0aGluIGNncm91cHMgYW5kIG5vdCBjaGFuZ2luZyBob3cgdGhlc2UgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBjYXNlLCBhcyBpZiBpdCBjaGFuZ2VzIHRoZSBleGVjdXRpb24gb2YgdGhlIGtlcm5lbCBJIG5lZWQgdG8ga25vdy4gTWVtb3J5IGFjY291bnRpbmcgY2hhbmdlcyAqY2FuKiBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSBpZiB0aGV5IGludHJvZHVjZSBuZXcgYmVoYXZpb3JzLlxuXG5JIGNoZWNrIGZvciBhbnkgY2hhbmdlcyB0byBsb2dpYyBvciB0aGUgZXhlY3V0aW9uIGZsb3cuICBJIGtub3cgYmFzZWQgb24gcHJpb3IgZXhwZXJpZW5jZSB0aGF0IFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlc1wiIHNob3VsZCBoYXZlIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBBZGRpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgdG8gYGt6YWxsb2NgIGNhbGxzIGlzLCBnZW5lcmFsbHksIGp1c3QgY2hhbmdpbmcgdGhlIEdGUCBmbGFncywgbm90IGFmZmVjdGluZyBmbG93LCBleGNlcHQgbWF5YmUgYWRkaW5nIGEgY2hlY2sgaWYgYSBjZ3JvdXAgbWVtb3J5IGxpbWl0IGlzIGhpdC4gSSBjb25maXJtIHRoYXQgdGhpbmdzIGxpa2UgYGt6YWxsb2Nfb2Jqc2AgYW5kIGBremFsbG9jX29iamAgYXJlIG1hY3Jvcy4gVGhlIGNoYW5nZXMgc2hvd24gY29uZmlybSB0aGlzIGFzIHdlbGwsIGp1c3QgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHRvIHRoZSBjYWxscy4gU28sIHVwIHVudGlsIGhlcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLCBhbmQgSSB3b3VsZCBoYXZlIHJldHVybmVkIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Ib3dldmVyLCBhcyBJIGRpdmUgZGVlcGVyLCBJIHN0dW1ibGUgdXBvbiBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEkgbG9vayBhdCB0aGUgYGNsc19iYXNpYy5jYCBmaWxlIGFuZCBzZWUgdGhpcyBhZGRpdGlvbjpcblxuYGBgY1xuIFx0Zm5ldy1cdTAwM2VwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX2Jhc2ljX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWZuZXctXHUwMDNlcGYpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0aWYgKCFmb2xkKVxuK1x0XHRcdGlkcl9yZW1vdmUoXHUwMDI2aGVhZC1cdTAwM2VoYW5kbGVfaWRyLCBmbmV3LVx1MDAzZWhhbmRsZSk7XG4gXHRcdGdvdG8gZXJyb3V0O1xuIFx0fVxuYGBgXG5cbldhaXQgYSBzZWNvbmQuLi4gIE5vdyB0aGF0J3Mgbm90IGp1c3QgYWNjb3VudGluZyEgSXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgY29uZGl0aW9uYWwgcmVtb3ZhbCBmcm9tIHRoZSBgaGVhZC1cdTAwM2VoYW5kbGVfaWRyYCEgVGhpcyBpcyBhICpmdW5jdGlvbmFsIGNoYW5nZSouIEl0J3MgYSBmaXggZm9yIGEgcG90ZW50aWFsIG1lbW9yeSBvciBJRFIgbGVhayBvbiB0aGUgZXJyb3IgcGF0aCBpZiBgYWxsb2NfcGVyY3B1X2dmcGAgZmFpbHMuIFRoaXMgaXMgYSBiaWcgZGVhbCEgT24gZXJyb3IsIGl0IG5vdyBjbGVhbnMgdXAgYW4gSURSIGVudHJ5IGlmIGBmb2xkYCBpcyBub3Qgc2V0LiBUaGlzIGlzIGdvb2QsIGdvb2QsIGdvb2QuXG5cbk15IGV4cGVydCBtaW5kIHNheXMgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBhIGZ1enplciBjYW4gaGl0IHVzaW5nIGZhdWx0IGluamVjdGlvbi4gVGhpcyB2ZXJpZmllcyB0aGF0IGEgbWVtb3J5IGxlYWsgb3IgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24gaXMgYXZvaWRlZC4gSXQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LlxuXG5JIGNoZWNrIGBjbHNfdTMyLmNgIGFuZCBjb25maXJtIHRoYXQgdGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoZXJlLlxuXG5TbywgaW4gc3VtbWFyeTogSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGlzIGNoYW5nZSBpbiB0aGUgZXJyb3IgcGF0aCBmb3IgYGNsc19iYXNpYy5jYCBpcyBzaWduaWZpY2FudCBhbmQgd2FycmFudHMgZnV6emluZy4gSSdsbCBuZWVkIHRvIGZvY3VzIHRlc3Rpbmcgb24gdGhlIGVycm9yIHNjZW5hcmlvcyBpbiBgbmV0L3NjaGVkL2Nsc19iYXNpYy5jYC4gSSB3aWxsIHRoZW4gZ28gb24gYW5kIHJ1biB0aGUgZnV6emVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjY2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjAxLjY4MzM0MzQwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTU1NzMzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFzaWNfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfYmFzaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2Jhc2ljLmM9MTQ3PXN0YXRpYyBpbnQgYmFzaWNfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMTcxLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoxNzI6c3RhdGljIGludCBiYXNpY19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0xNzMtXFx0XFx0XFx0c3RydWN0IHRjZl9wcm90byAqdHAsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdTMyIGhhbmRsZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYz0zMjA9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19iYXNpY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0zMjUtXFx0LmdldFxcdFxcdD1cXHRiYXNpY19nZXQsXFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jOjMyNjpcXHQuY2hhbmdlXFx0XFx0PVxcdGJhc2ljX2NoYW5nZSxcXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMzI3LVxcdC5kZWxldGVcXHRcXHQ9XFx0YmFzaWNfZGVsZXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjowMS45OTg5MjE1NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTY0NTQzMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IEEgU3BlY2lmaWMgRXJyb3IgUGF0aCBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBgYmFzaWNfY2hhbmdlYCBmdW5jdGlvbiwgd2hpY2ggSSBrbm93IGlzIGEgYC5jaGFuZ2VgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHRjZl9wcm90b19vcHNgIHN0cnVjdHVyZS4gSXQncyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGB0Y2AgbmV0bGluayBpbnRlcmZhY2UgKFJUTV9ORVdURklMVEVSKS4gVGhlIGNvcmUgb2YgdGhlIGZpeCBhcHBlYXJzIHRvIGJlIGFkZGluZyBgaWRyX3JlbW92ZShcdTAwMjZoZWFkLVx1MDAzZWhhbmRsZV9pZHIsIGZuZXctXHUwMDNlaGFuZGxlKTtgIG9uIGFuIGVycm9yIHBhdGgsIHNwZWNpZmljYWxseSB3aGVuIGBhbGxvY19wZXJjcHVfZ2ZwYCBmYWlscy4gVGhpcyBsb29rcyBsaWtlIGEgc3BlY2lmaWMgZml4IHRvIHByZXZlbnQgYW4gSURSIGxlYWsuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFllcywgZGVmaW5pdGVseS4gRmF1bHQgaW5qZWN0aW9uIGR1cmluZyBmdXp6aW5nIGNvdWxkIGJlIGlkZWFsIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXJyb3IgcGF0aC4gSWYgd2UgdHJpZ2dlciB0aGUgZXJyb3IgcGF0aCB2aWEgZmF1bHQgaW5qZWN0aW9uLCB0aGVuIHdlIGNhbiB2ZXJpZnkgdGhlIElEUiBlbnRyeSBpcyByZW1vdmVkIGNvcnJlY3RseS4gUHJldmVudGluZyBhIGxlYWsgKm9yKiBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uIGxhdGVyIGlzIGEgc3Ryb25nIHJlYXNvbiB0byBmdXp6LlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHJlY2FsbCB0aGUgZnV6emluZyBndWlkZWxpbmVzIG1lbnRpb24gc29tZXRoaW5nIGFib3V0IFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlc1wiIG9yIG1vZGlmaWNhdGlvbnMgdG8gbnVtZXJpYyBjb25zdGFudHMuIFRoZXkgd2FudCBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgdGhvc2UuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggKmRvZXMqIGNvbnRhaW4gYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgdGhhdCBgaWRyX3JlbW92ZWAgY2FsbCEgSXQgYWN0aXZlbHkgbW9kaWZpZXMgcHJvZ3JhbSBiZWhhdmlvci5cblxuQWxyaWdodCwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcy4gSSBzZWUgc29tZSBjaGFuZ2VzIGluIGBjbHNfYnBmLmNgLCBgY2xzX2Nncm91cC5jYCwgYGNsc19mbG93LmNgLCBgY2xzX2Zsb3dlci5jYCwgYGNsc19mdy5jYCwgYGNsc19tYXRjaGFsbC5jYCwgYGNsc19yb3V0ZS5jYCwgYW5kIGBjbHNfdTMyLmNgLCBidXQgaXQganVzdCBsb29rcyBsaWtlIHRoZXkgYXJlIGNoYW5naW5nIGBremFsbG9jX29iamAgdG8gdXNlIGBHRlBfS0VSTkVMX0FDQ09VTlRgIG9yIGBhbGxvY19wZXJjcHVgIHRvIGBhbGxvY19wZXJjcHVfZ2ZwYC4gTm93LCB0aGVzZSBga3phbGxvY19vYmpgIGNhbGxzIC0gdGhvc2UgYXJlbid0IGZhbWlsaWFyIHRvIG1lIGFzIHN0YW5kYXJkIGtlcm5lbCBtYWNyb3MuIEFyZSB0aGV5IGRlZmluZWQgaW4gYSBoZWFkZXIgc29tZXdoZXJlPyBJIHNob3VsZCBwcm9iYWJseSBncmVwIGZvciB0aG9zZSBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjA4Ljk2MzQ2NzY4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM5OTEzMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBremFsbG9jX29ialwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zbGFiLmg9MTA3MD12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUxLS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTI6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUzLVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU0OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU1LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgQ09VTlQpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoxMS4yMDMzOTA1MTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODg1Nzc5MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldCBTY2hlZHVsZXIgQ2xhc3NpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHRvIGEgYnVuY2ggb2YgYGt6YWxsb2Nfb2JqYCBjYWxscyB3aXRoaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIGNsYXNzaWZpZXIgY29kZSAoYG5ldC9zY2hlZC9jbHNfKi5jYCkuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZ29hbCBoZXJlIGlzIHJlc291cmNlIGFjY291bnRpbmcuIFRoZSBvbmx5ICpmdW5jdGlvbmFsKiBjaGFuZ2UgYXBwZWFycyB0byBiZSBhbiBgaWRyX3JlbW92ZWAgY2FsbCBpbiBgY2xzX2Jhc2ljLmNgLlxuXG5HaXZlbiBteSBleHBlcmllbmNlLCBJJ2Qgc2F5IHRoaXMgd2FycmFudHMgZnV6emluZy4gSXQncyB0b3VjaGluZyBjb3JlIGtlcm5lbCBsb2dpYyByZWxhdGVkIHRvIG5ldHdvcmsgc2NoZWR1bGVycywgYW5kIHdoaWxlIHRoZSBjaGFuZ2UgaXMgc3VidGxlLCBhbnkgYnVnIGluIHRoaXMgYXJlYSBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGltcGFjdC4gU28sIHllcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBJJ2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZm9jdXMgYXJlYXMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGFza3MgbWUgdG8gaWRlbnRpZnkga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiwgYW5kIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHNrZXdlZCBmdXp6aW5nLiBMb29raW5nIGF0IHRoZSBjb2RlLCB0aGVzZSBmdW5jdGlvbnMgc3RhbmQgb3V0OlxuXG4qICAgYGJhc2ljX2NoYW5nZWBcbiogICBgY2xzX2JwZl9jaGFuZ2VgXG4qICAgYGNsc19jZ3JvdXBfY2hhbmdlYFxuKiAgIGBmbG93X2NoYW5nZWBcbiogICBgZmxfY2hhbmdlYFxuKiAgIGBmd19jaGFuZ2VgXG4qICAgYG1hbGxfY2hhbmdlYFxuKiAgIGByb3V0ZTRfY2hhbmdlYFxuKiAgIGB1MzJfY2hhbmdlYFxuXG5UaGVzZSBhcmUgdGhlIGAuY2hhbmdlYCBjYWxsYmFja3MsIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4gVGhlc2UgYXJlICpwZXJmZWN0KiBmb3IgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRoZXkgYXJlbid0IGluIHRoZSBob3QgcGF0aCAoYC5jbGFzc2lmeWAgd291bGQgYmUpLCBidXQgdGhleSBhcmUgKmNyaXRpY2FsKiBmb3IgY29udHJvbGxpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBjbGFzc2lmaWVycy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWdzIGZvciB0aGVzZSBzeW1ib2xzLlxuXG4qICAgYE5FVF9TQ0hfQkFTSUNgXG4qICAgYE5FVF9TQ0hfQlBGYFxuKiAgIGBORVRfQ0dST1VQX0JQRmAgb3IgYE5FVF9DTFNfQ0dST1VQYFxuKiAgIGBORVRfQ0xTX0ZMT1dgXG4qICAgYE5FVF9DTFNfRkxPV0VSYFxuKiAgIGBORVRfQ0xTX0ZXYFxuKiAgIGBORVRfQ0xTX01BVENIQUxMYFxuKiAgIGBORVRfQ0xTX1JPVVRFNGBcbiogICBgTkVUX0NMU19VMzJgXG5cbk9rYXksIHRob3NlIGxvb2sgcmlnaHQuIEdvb2QuIEkgc2hvdWxkIHZlcmlmeSB0aGUgY29uZmlnIG5hbWVzIHRvIGJlIDEwMCUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoxOS4wODkxNzUwNjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4ODM1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9DTFNfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTQ4MT1jb25maWcgTkVUX0NMU1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNDgzLVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ4NDpjb25maWcgTkVUX0NMU19CQVNJQ1xcbm5ldC9zY2hlZC9LY29uZmlnLTQ4NS1cXHR0cmlzdGF0ZSBcXFwiRWxlbWVudGFyeSBjbGFzc2lmaWNhdGlvbiAoQkFTSUMpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNDkzLVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ5NDpjb25maWcgTkVUX0NMU19ST1VURTRcXG5uZXQvc2NoZWQvS2NvbmZpZy00OTUtXFx0dHJpc3RhdGUgXFxcIlJvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTUwNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1MDY6Y29uZmlnIE5FVF9DTFNfRldcXG5uZXQvc2NoZWQvS2NvbmZpZy01MDctXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBtYXJrIChGVylcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXFxubmV0L3NjaGVkL0tjb25maWc6NTE2OmNvbmZpZyBORVRfQ0xTX1UzMlxcbm5ldC9zY2hlZC9LY29uZmlnLTUxNy1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz01MzM9Y29uZmlnIENMU19VMzJfTUFSS1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTM4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjUzOTpjb25maWcgTkVUX0NMU19GTE9XXFxubmV0L3NjaGVkL0tjb25maWctNTQwLVxcdHRyaXN0YXRlIFxcXCJGbG93IGNsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01NDktXFxubmV0L3NjaGVkL0tjb25maWc6NTUwOmNvbmZpZyBORVRfQ0xTX0NHUk9VUFxcbm5ldC9zY2hlZC9LY29uZmlnLTU1MS1cXHR0cmlzdGF0ZSBcXFwiQ29udHJvbCBHcm91cCBDbGFzc2lmaWVyXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTYxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjU2Mjpjb25maWcgTkVUX0NMU19CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXFx0dHJpc3RhdGUgXFxcIkJQRi1iYXNlZCBjbGFzc2lmaWVyXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTcxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjU3Mjpjb25maWcgTkVUX0NMU19GTE9XRVJcXG5uZXQvc2NoZWQvS2NvbmZpZy01NzMtXFx0dHJpc3RhdGUgXFxcIkZsb3dlciBjbGFzc2lmaWVyXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTgxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjU4Mjpjb25maWcgTkVUX0NMU19NQVRDSEFMTFxcbm5ldC9zY2hlZC9LY29uZmlnLTU4My1cXHR0cmlzdGF0ZSBcXFwiTWF0Y2gtYWxsIGNsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXFxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoxOS4xNTEwNjg3OTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQyNjk5NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgTkVUX0NMU19CQVNJQ2AsIGBORVRfQ0xTX1JPVVRFNGAsIGBORVRfQ0xTX0ZXYCwgYE5FVF9DTFNfVTMyYCwgYE5FVF9DTFNfRkxPV2AsIGBORVRfQ0xTX0NHUk9VUGAsIGBORVRfQ0xTX0JQRmAsIGBORVRfQ0xTX0ZMT1dFUmAsIGFuZCBgTkVUX0NMU19NQVRDSEFMTGAuIFRoZXNlIGFsbCBsb29rIGxpa2UgdmFyaW91cyBjbGFzc2lmaWVyIG1vZHVsZXMgYmVpbmcgZW5hYmxlZC4gUHJldHR5IHN0YW5kYXJkIHN0dWZmLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyB0byB0aGUgY29yZSBjbGFzc2lmaWVyIEFQSS5cblxuQWhhLCBhbmQgbm93IEkgc2VlIHRoYXQgYGNsc19hcGkuY2AgaXMgYWxzbyBtb2RpZmllZC4gVGhhdCdzIGEgcmVkIGZsYWcuIElmIHRoZSBjb3JlIEFQSSBpcyB0b3VjaGVkLCBJIG5lZWQgdG8gcGF5ICp2ZXJ5KiBjbG9zZSBhdHRlbnRpb24uIFRoaXMgaW1wYWN0cyB0aGUgZ2VuZXJhbCBmcmFtZXdvcmssIHNvIHRoZSByaXBwbGUgZWZmZWN0cyB3aWxsIG5lZWQgdG8gYmUgYW5hbHl6ZWQuIEkgc2VlIGB0Y2ZfZXh0c19pbml0X2V4YCBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gaW4gYGNsc19hcGkuY2AgdGhhdCdzIGJlZW4gYWx0ZXJlZC4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgTkVUX0NMU19BQ1RgIGlzIG5lZWRlZCBmb3IgYHRjZl9leHRzX2luaXRfZXhgIGFzIHdlbGwsIG9yIGFueSBvdGhlciBvZiB0aGVzZSBvcHRpb25zIGZvciB0aGF0IG1hdHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICdkb2VzIHRoaXMgY2hhbmdlIHJlcXVpcmUgYSBjaGFuZ2UgdG8gdGhlIGFjdGlvbiBzdWJzeXN0ZW0gYXMgd2VsbD8nLiBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IGhhbmRsZXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGV4dGVuZGVkIGNsYXNzaWZpZXIgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhhdCB3b3VsZCBiZSBjcml0aWNhbCBpZiBhbnkgYWN0aW9ucyBhcmUgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjI1Ljk5Mzc3MTE2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0MTgxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2V4dHNfaW5pdF9leFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmM9MzI2MD1zdGF0aWMgaW50IHRjX2R1bXBfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zMzUyLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzM1MzppbnQgdGNmX2V4dHNfaW5pdF9leChzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMsIHN0cnVjdCBuZXQgKm5ldCwgaW50IGFjdGlvbixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMzNTQtXFx0XFx0ICAgICBpbnQgcG9saWNlLCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdTMyIGhhbmRsZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzM5MS19XFxubmV0L3NjaGVkL2Nsc19hcGkuYzozMzkyOkVYUE9SVF9TWU1CT0wodGNmX2V4dHNfaW5pdF9leCk7XFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zMzkzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoyNi4wNTYyMzYzODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDQyMTI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgQ29yZSBGdW5jdGlvbioqXG5cblJpZ2h0LCBgdGNmX2V4dHNfaW5pdF9leGAgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIgaGVyZSwgYXMgSSBleHBlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgYE5FVF9DTFNgIHJlcXVpcmVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uPyBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQncyBpbmRlZWQgdGhlIHBhcmVudCBjb25maWd1cmF0aW9uIGZvciB3aGF0IEknbSBkZWFsaW5nIHdpdGguIEdvb2QsIHRoYXQgY29uZmlybXMgYSBkZXBlbmRlbmN5LiBBbmQsIHNpbmNlIEknbSBhbHJlYWR5IGRpZ2dpbmcgaW50byByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgYE5FVF9TQ0hFRGAgYXMgd2VsbCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgc2VlIGhvdyBpdCBtaWdodCBmYWN0b3IgaW4uIEl0J3MgYmVzdCB0byBjb25zaWRlciB0aGVzZSBjb25maWd1cmF0aW9ucyB0b2dldGhlciBzaW5jZSB0aGV5J3JlIHRpZ2h0bHkgY291cGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoyOS42OTA2NjI3MTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwODM5NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjI5Ljc1MTUxOTU5M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY0NjM5MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9uczpcblxuKipBbmFseXppbmcgdGhlIE5ldHdvcmsgVHJhZmZpYyBDb250cm9sIENvbmZpZ3VyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgYSB3aG9sZSBzdWl0ZSBvZiBuZXR3b3JrIHNjaGVkdWxlciBhbmQgY2xhc3NpZmllciBjb25maWd1cmF0aW9uczogYE5FVF9TQ0hFRGAsIGBORVRfQ0xTYCwgYE5FVF9DTFNfQkFTSUNgLCBgTkVUX0NMU19ST1VURTRgLCBgTkVUX0NMU19GV2AsIGBORVRfQ0xTX1UzMmAsIGBORVRfQ0xTX0ZMT1dgLCBgTkVUX0NMU19DR1JPVVBgLCBgTkVUX0NMU19CUEZgLCBgTkVUX0NMU19GTE9XRVJgLCBgTkVUX0NMU19NQVRDSEFMTGAsIGFuZCBgTkVUX0NMU19BQ1RgLiBTZWVtcyBsaWtlIGEgcHJldHR5IGNvbXByZWhlbnNpdmUgc2V0LiBXZSd2ZSBnb3QgdGhlIGJhc2ljcyBjb3ZlcmVkLCBzb21lIG1vcmUgYWR2YW5jZWQgY2xhc3NpZmllcnMgbGlrZSBCUEYgYW5kIEZMT1csIGFuZCBzb21lIHNwZWNpZmljIG9uZXMgbGlrZSBDR1JPVVAgYW5kIEZMT1dFUi4gQW5kIG9mIGNvdXJzZSwgdGhlIGV2ZXItaW1wb3J0YW50IGFjdGlvbiBjb21wb25lbnQgYE5FVF9DTFNfQUNUYC5cblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGBORVRfQ0xTX1JPVVRFNGAuLi4gdGhhdCBvbmUgcmluZ3MgYSBiZWxsLiBJdCdzIGEgYml0IHNwZWNpZmljLCBhbmQgSSdtIHByZXR0eSBzdXJlIGl0IHJlbGllcyBvbiBzb21ldGhpbmcgZWxzZSBiZWluZyBlbmFibGVkLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyB0aGVyZS4gTWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueSBjcnVjaWFsIHByZXJlcXVpc2l0ZXMsIGFuZCB3aGF0IHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbCB3ZSBhcmUgdXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDc3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjM0LjExNjE2Mjk1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2NDg5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9DTFNfUk9VVEU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTQ4ND1jb25maWcgTkVUX0NMU19CQVNJQ1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNDkzLVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ5NDpjb25maWcgTkVUX0NMU19ST1VURTRcXG5uZXQvc2NoZWQvS2NvbmZpZy00OTUtXFx0dHJpc3RhdGUgXFxcIlJvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MzQuMTc5ODI3NjkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTEwNzIxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgRmlsZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSByb3V0ZTQgY2xhc3NpZmllciB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc2NoZWR1bGVyLiBUaW1lIHRvIHB1bGwgdXAgYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBhcm91bmQgdGhlIGBORVRfQ0xTX1JPVVRFNGAgZGVmaW5lLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjbGFzc2lmaWVyIGlzIGV4cG9zZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCBhbnkgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcXVldWluZyBkaXNjaXBsaW5lcyBvciBjbGFzc2lmaWVyIG9wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gdXAgdG8gc3BlZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MzguMDMwOTAzOTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA0OTI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Jhc2ljLlxcbiA0OTM6XFx0XFxuIDQ5NDpcXHRjb25maWcgTkVUX0NMU19ST1VURTRcXG4gNDk1OlxcdFxcdHRyaXN0YXRlIFxcXCJSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcXFwiXFxuIDQ5NjpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNDk3OlxcdFxcdHNlbGVjdCBJUF9ST1VURV9DTEFTU0lEXFxuIDQ5ODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA0OTk6XFx0XFx0aGVscFxcbiA1MDA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXFxuIDUwMTpcXHRcXHQgIGFjY29yZGluZyB0byB0aGUgcm91dGUgdGFibGUgZW50cnkgdGhleSBtYXRjaGVkLlxcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTA0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19yb3V0ZS5cXG4gNTA1OlxcdFxcbiA1MDY6XFx0Y29uZmlnIE5FVF9DTFNfRldcXG4gNTA3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbWFyayAoRlcpXFxcIlxcbiA1MDg6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTA5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MzguMDMxMDQ0NzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyNjAyMjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTmV0d29yayBDbGFzc2lmaWVycyBhbmQgQ2dyb3VwcyoqXG5cbk9rYXksIHNvIHRoZSBiZWhhdmlvciBoZXJlIGhpbmdlcyBvbiBob3cgYElORVRgIGlzIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgdGhlIGNsYXNzaWZpY2F0aW9uIG1lY2hhbmlzbXMuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJMZXQncyBzdGFydCBieSBleGFtaW5pbmcgYE5FVF9DTFNfQ0dST1VQYC5cIiBUaGlzIGZlZWxzIGxpa2UgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCwgdGhlIGNncm91cCBpbnRlZ3JhdGlvbiBtaWdodCBwcm92aWRlIHRoZSBjb3JlIGxpbmsgaGVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6NDEuODU3MDcxNDc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0XFx0ICBpbiBjb21iaW5hdGlvbiB3aXRoIFNGUS5cXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDU0ODpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfZmxvdy5cXG4gNTQ5OlxcdFxcbiA1NTA6XFx0Y29uZmlnIE5FVF9DTFNfQ0dST1VQXFxuIDU1MTpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29udHJvbCBHcm91cCBDbGFzc2lmaWVyXFxcIlxcbiA1NTI6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTUzOlxcdFxcdHNlbGVjdCBDR1JPVVBfTkVUX0NMQVNTSURcXG4gNTU0OlxcdFxcdGRlcGVuZHMgb24gQ0dST1VQU1xcbiA1NTU6XFx0XFx0aGVscFxcbiA1NTY6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb24gdGhlIGNvbnRyb2xcXG4gNTU3OlxcdFxcdCAgY2dyb3VwIG9mIHRoZWlyIHByb2Nlc3MuXFxuIDU1ODpcXHRcXG4gNTU5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1NjA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Nncm91cC5cXG4gNTYxOlxcdFxcbiA1NjI6XFx0Y29uZmlnIE5FVF9DTFNfQlBGXFxuIDU2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiQlBGLWJhc2VkIGNsYXNzaWZpZXJcXFwiXFxuIDU2NDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo0MS44NTcyOTMxNThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkzODIyNDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvbnRyb2wgR3JvdXAgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2Ygd2hhdCBJJ20gdGhpbmtpbmcgYWJvdXQgaGluZ2VzIG9uIHRoZSBgQ0dST1VQU2Agc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGltcGFjdC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGZvdW5kYXRpb24gSSdtIG9wZXJhdGluZyBvbi5cblxuTm93LCBmcm9tIHRoZXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgTkVUX0NMU19CUEZgLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgY29uc2lkZXJhdGlvbjsgaXQncyBjZW50cmFsIHRvIGhvdyBJIGFwcHJvYWNoIHRoaXMgcGFydGljdWxhciBwcm9ibGVtLiBJdHMgYXZhaWxhYmlsaXR5IG9yIGltcGxlbWVudGF0aW9uIHNpZ25pZmljYW50bHkgY2hhbmdlcyB0aGUgbGFuZHNjYXBlLiBUaGF0J3Mgd2hlcmUgbXkgZm9jdXMgc2hpZnRzIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo0Ny43OTU1MjE4MTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU2MDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfY2dyb3VwLlxcbiA1NjE6XFx0XFxuIDU2MjpcXHRjb25maWcgTkVUX0NMU19CUEZcXG4gNTYzOlxcdFxcdHRyaXN0YXRlIFxcXCJCUEYtYmFzZWQgY2xhc3NpZmllclxcXCJcXG4gNTY0OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDU2NTpcXHRcXHRoZWxwXFxuIDU2NjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb25cXG4gNTY3OlxcdFxcdCAgcHJvZ3JhbW1hYmxlIEJQRiAoSklUJ2VkKSBmaWx0ZXJzIGFzIGFuIGFsdGVybmF0aXZlIHRvIGVtYXRjaGVzLlxcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gNTcwOlxcdFxcdCAgYmUgY2FsbGVkIGNsc19icGYuXFxuIDU3MTpcXHRcXG4gNTcyOlxcdGNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxcbiA1NzM6XFx0XFx0dHJpc3RhdGUgXFxcIkZsb3dlciBjbGFzc2lmaWVyXFxcIlxcbiA1NzQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTc1OlxcdFxcdGhlbHBcXG4gNTc2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvblxcbiA1Nzc6XFx0XFx0ICBhIGNvbmZpZ3VyYWJsZSBjb21iaW5hdGlvbiBvZiBwYWNrZXQga2V5cyBhbmQgbWFza3MuXFxuIDU3ODpcXHRcXG4gNTc5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo0Ny43OTU3MTAyMzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NTIyODc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0cywgc3VtbWFyaXplZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duLCBwcmVzZW50ZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERlcGVuZGVuY2llcyBhbmQgTmV0ZmlsdGVyIEhvb2tzKipcblxuQWxyaWdodCwgaW5pdGlhbCBjb25zaWRlcmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gd29yayB3aXRob3V0IGludHJvZHVjaW5nIGFueSB1bm5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMuIEkgYWx3YXlzIHRyeSB0byBrZWVwIHRoaW5ncyBsZWFuIGFuZCBtZWFuIOKAkyBsZXNzIGJhZ2dhZ2UsIGZld2VyIHBvaW50cyBvZiBmYWlsdXJlLCBhbmQgZWFzaWVyIHBvcnRhYmlsaXR5LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgbmV0ZmlsdGVyIGhvb2ssIGFuZCBgTkVUX0NMU19BQ1RgIGp1bXBzIHRvIG1pbmQuIFRoaXMgaG9vayBpcyB3ZWxsLXN1aXRlZCBmb3IgYSB2YXJpZXR5IG9mIHBhY2tldCBtYW5pcHVsYXRpb24gdGFza3MuIFRpbWUgdG8gZ28gZGVlcGVyIGFuZCBldmFsdWF0ZSBpdHMgc3VpdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo1MS42NTA5NDM2NDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5ODpcXHRcXG4gNjk5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA3MDA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZW1faXB0LlxcbiA3MDE6XFx0XFxuIDcwMjpcXHRjb25maWcgTkVUX0NMU19BQ1RcXG4gNzAzOlxcdFxcdGJvb2wgXFxcIkFjdGlvbnNcXFwiXFxuIDcwNDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA3MDU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1NcXG4gNzA2OlxcdFxcdGhlbHBcXG4gNzA3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMuIEFjdGlvbnNcXG4gNzA4OlxcdFxcdCAgZ2V0IGF0dGFjaGVkIHRvIGNsYXNzaWZpZXJzIGFuZCBhcmUgaW52b2tlZCBhZnRlciBhIHN1Y2Nlc3NmdWxcXG4gNzA5OlxcdFxcdCAgY2xhc3NpZmljYXRpb24uIFRoZXkgYXJlIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBjbGFzc2lmaWNhdGlvblxcbiA3MTA6XFx0XFx0ICByZXN1bHQsIGluc3RhbnRseSBkcm9wIG9yIHJlZGlyZWN0IHBhY2tldHMsIGV0Yy5cXG4gNzExOlxcdFxcbiA3MTI6XFx0XFx0ICBBIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBpcHJvdXRlMiBwYWNrYWdlIGlzIHJlcXVpcmVkIHRvIHVzZVxcbiA3MTM6XFx0XFx0ICBleHRlbmRlZCBtYXRjaGVzLlxcbiA3MTQ6XFx0XFxuIDcxNTpcXHRjb25maWcgTkVUX0FDVF9QT0xJQ0VcXG4gNzE2OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFmZmljIFBvbGljaW5nXFxcIlxcbiA3MTc6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo1MS42NTEwNDY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Njk5Mzk4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIENsYXNzaWZpY2F0aW9uIEFjdGl2YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgTkVUX0NMU19BQ1RgLiBJdCdzIGEgc2ltcGxlIGJvb2xlYW4sIGVzc2VudGlhbGx5IGp1c3QgYSBmbGFnLCB3aGljaCBtYWtlcyBzZW5zZSBmcm9tIGEgZnVuZGFtZW50YWwgZGVzaWduIHBlcnNwZWN0aXZlLiBUaGF0IGtlZXBzIHRoaW5ncyBjbGVhbiBhbmQgYXZvaWRzIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuIE5vdywgZ2l2ZW4gdGhhdCdzIHRoZSBjYXNlLCBJIG5lZWQgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgZG93bnN0cmVhbSBmcm9tIHRoYXQuIE15IGZvY3VzIGlzIG5vdyBvbiBgTkVUX0NMU19VMzJgLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSB1bmRlcmx5aW5nIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGlzIGJlaW5nIGludGVycHJldGVkIGFuZCB1c2VkLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgdXNhZ2Ugb2YgYE5FVF9DTFNfVTMyYCBhbmQgbG9va2luZyBmb3IgcmVsYXRlZCBjb2RlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGludGVyZXN0aW5nIHN0dWZmIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6NTYuNDIwOTkyMTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxNTpcXHRcXG4gNTE2OlxcdGNvbmZpZyBORVRfQ0xTX1UzMlxcbiA1MTc6XFx0XFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXFxcIlxcbiA1MTg6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTE5OlxcdFxcdGhlbHBcXG4gNTIwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgdXNpbmcgYSB1bml2ZXJzYWxcXG4gNTIxOlxcdFxcdCAgMzJiaXQgcGllY2VzIGJhc2VkIGNvbXBhcmlzb24gc2NoZW1lLlxcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTI0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc191MzIuXFxuIDUyNTpcXHRcXG4gNTI2OlxcdGNvbmZpZyBDTFNfVTMyX1BFUkZcXG4gNTI3OlxcdFxcdGJvb2wgXFxcIlBlcmZvcm1hbmNlIGNvdW50ZXJzIHN1cHBvcnRcXFwiXFxuIDUyODpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfVTMyXFxuIDUyOTpcXHRcXHRoZWxwXFxuIDUzMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gbWFrZSB1MzIgZ2F0aGVyIGFkZGl0aW9uYWwgc3RhdGlzdGljcyB1c2VmdWwgZm9yXFxuIDUzMTpcXHRcXHQgIGZpbmUgdHVuaW5nIHUzMiBjbGFzc2lmaWVycy5cXG4gNTMyOlxcdFxcbiA1MzM6XFx0Y29uZmlnIENMU19VMzJfTUFSS1xcbiA1MzQ6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG1hcmtzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjU2LjQyMTEyMzkzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MjM4MTYwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB1MzIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBjbHNfdTMyLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgQ09ORklHX0NMU19VMzJfUEVSRmAgYW5kIGBDT05GSUdfQ0xTX1UzMl9NQVJLYCBzZWN0aW9ucy4gTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBjb2RlIGNoYW5nZXMuIEknbSBzZWVpbmcgdGhhdCB0aGUgcGF0Y2ggaXMgcmVwbGFjaW5nIGBfX2FsbG9jX3BlcmNwdWAgYW5kIGBhbGxvY19wZXJjcHVgIHdpdGggYF9fYWxsb2NfcGVyY3B1X2dmcGAgYW5kIGBhbGxvY19wZXJjcHVfZ2ZwYCByZXNwZWN0aXZlbHkuIEl0IGFsc28gYWRkcyBhIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcuIFRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIGxpa2VseSByZWxhdGVkIHRvIGFjY291bnRpbmcgZm9yIHRoZSBtZW1vcnkgdXNlZCBieSB0aGVzZSBwZXItQ1BVIGNvdW50ZXJzLiBUaGUgY2hhbmdlIG9mIGBfX2FsbG9jX3BlcmNwdWAgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGV2YWx1YXRlLlxuXG5UaGUgZmFjdCB0aGF0IHRoZXkgYXJlIG5vdyB1c2luZyBhIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcgbWVhbnMgdGhlIHN5c3RlbSB3aWxsIGhhdmUgbW9yZSBhY2N1cmF0ZSBpbmZvcm1hdGlvbiBvbiB3aGF0IGlzIHVzaW5nIGhvdyBtdWNoIG1lbW9yeSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIGZvciBkZWJ1Z2dpbmcgYW5kIG1vbml0b3JpbmcuXG5cbkJhc2VkIG9uIHRoZXNlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2Ugd2UnbGwgbmVlZCBib3RoIGBDT05GSUdfQ0xTX1UzMl9QRVJGYCBhbmQgYENPTkZJR19DTFNfVTMyX01BUktgIGVuYWJsZWQuIExldCdzIG1ha2Ugc3VyZSBgTkVUX0NMU19NQVRDSEFMTGAgaXMgYWxzbyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjA1LjE0NDk0MzY2NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdFxcdCAgYmUgY2FsbGVkIGNsc19mbG93ZXIuXFxuIDU4MTpcXHRcXG4gNTgyOlxcdGNvbmZpZyBORVRfQ0xTX01BVENIQUxMXFxuIDU4MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWF0Y2gtYWxsIGNsYXNzaWZpZXJcXFwiXFxuIDU4NDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1ODU6XFx0XFx0aGVscFxcbiA1ODY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIGJhc2VkIG9uXFxuIDU4NzpcXHRcXHQgIG5vdGhpbmcuIEV2ZXJ5IHBhY2tldCB3aWxsIG1hdGNoLlxcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gNTkwOlxcdFxcdCAgYmUgY2FsbGVkIGNsc19tYXRjaGFsbC5cXG4gNTkxOlxcdFxcbiA1OTI6XFx0Y29uZmlnIE5FVF9FTUFUQ0hcXG4gNTkzOlxcdFxcdGJvb2wgXFxcIkV4dGVuZGVkIE1hdGNoZXNcXFwiXFxuIDU5NDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzowNS4xNDUwNjQwNTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgxNTU1MjY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHNldCB1cC4gSSBzZWUgYSBwcmV0dHkgY29tcHJlaGVuc2l2ZSBsaXN0IGhlcmU6IGBORVRfU0NIRURgLCBgTkVUX0NMU2AsIGBORVRfQ0xTX0JBU0lDYCwgYE5FVF9DTFNfUk9VVEU0YCwgYElORVRgLCBgTkVUX0NMU19GV2AsIGBORVRfQ0xTX1UzMmAsIGBDTFNfVTMyX1BFUkZgLCBgQ0xTX1UzMl9NQVJLYCwgYE5FVF9DTFNfRkxPV2AsIGFuZCBgTkVUX0NMU19DR1JPVVBgLiBBbmQgb2YgY291cnNlIHRoZSBtb3JlIGFkdmFuY2VkIHN0dWZmIHRvbzogYENHUk9VUFNgLCBgTkVUX0NMU19CUEZgLCBgTkVUX0NMU19GTE9XRVJgLCBgTkVUX0NMU19NQVRDSEFMTGAsIGFuZCBgTkVUX0NMU19BQ1RgLlxuXG5IbW0sIG5vdyB0aGF0IEkgbG9vayBhdCB0aGlzIGxpc3QsIEknbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBDR1JPVVBTYCBpcyBhY3R1YWxseSB0aGUgY29uZmlndXJhdGlvbiBpdGVtIEkgbmVlZC4gSXQgc2hvdWxkIGJlLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4gSSdtIGdvaW5nIHRvIGNvbmZpcm0gdGhhdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg4MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjE0Ljk2MDYyMDU5OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MzAwMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA0ND1jb25maWcgU0xBQl9PQkpfRVhUXFxuLS1cXG5pbml0L0tjb25maWctMTA0Ni1cXG5pbml0L0tjb25maWc6MTA0NzptZW51Y29uZmlnIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA0OC1cXHRib29sIFxcXCJDb250cm9sIEdyb3VwIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjE1LjQ4ODkyNzY1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE4NDQ0NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBmaWVsZCBvZiBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzKipcblxuQWxyaWdodCwgeWVwLCB0aGF0J3MgaXQuIGBDR1JPVVBTYCBpcyB0aGUgY29ycmVjdCBwYXJhbWV0ZXIgd2UncmUgbG9va2luZyBhdC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IGNoYW5nZXMgb3IgYW5hbHlzaXMsIGl0J3MgYWx3YXlzIHNtYXJ0IHRvIGNvbmZpcm0uIExldCdzIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgSU5FVGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gc2VjdGlvbiB3ZSBuZWVkIHRvIGJlIGZvY3VzaW5nIG9uLiBBIGRvdWJsZS1jaGVjayBub3cgc2F2ZXMgYSBoZWFkYWNoZSBsYXRlciwgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyB0aGlzIGZ1bmRhbWVudGFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjE4LjcwNzM3NjA2OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MzQ2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXFxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxubmV0L2lwdjQvS2NvbmZpZy00MDUtXFx0aW50IFxcXCJJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTgtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDIyLVxcbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cXHR0cmlzdGF0ZSBcXFwiSU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzgtXFxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cXHR0cmlzdGF0ZSBcXFwiVURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDU0LVxcbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L0tjb25maWctNDU2LVxcdGJvb2wgXFxcIklORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjE4Ljc4NjExODAyNloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzY4NDQ2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIHRocm91Z2ggdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBhIHNwZWNpZmljIG9wdGlvbiwgYElORVRgLCBpcyBkZWZpbmVkLiBJbml0aWFsbHksIEkgd2FzIHByb2JhYmx5IG1lbnRhbGx5IHNjYW5uaW5nIHRoZSBvYnZpb3VzIHBsYWNlcywgbWF5YmUgdGhpbmtpbmcgaXQgd291bGQgYmUgaW4gc29tZXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBwcm90b2NvbHMgaW4gZ2VuZXJhbC4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBqdXN0IHJlYWxpemVkLCBhaGEhLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2shIEl0J3MgcmlnaHQgdGhlcmUgaW4gYG5ldC9LY29uZmlnYC4gRXhjZWxsZW50LiBTb21ldGltZXMsIHlvdSBqdXN0IG5lZWQgYSBmcmVzaCBwZXJzcGVjdGl2ZSwgb3IgYSByZS1mb2N1cyB0byBmaW5kIHRoZSBvYnZpb3VzIGFuc3dlci4gSSBrbmV3IEknZCBmaW5kIGl0IGV2ZW50dWFsbHkuIFRpbWUgdG8gZHJpbGwgZG93biBpbnRvIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMzMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzoyNy4xNTQ1Njc2NzFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTM5OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjI3LjIzMjUxNTQ5OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDk0NTQ4MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEZ1bmN0aW9uIFN5bWJvbHMgYW5kIEFQSSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHllcywgYElORVRgIHNlZW1zIHNwb3Qgb24gaGVyZS4gTGV0J3MgZGlnIGludG8gdGhlc2UgYEZvY3VzU3ltYm9sc2AuIEkgc2VlOiBgYmFzaWNfY2hhbmdlYCwgYGNsc19icGZfY2hhbmdlYCwgYGNsc19jZ3JvdXBfY2hhbmdlYCwgYGZsb3dfY2hhbmdlYCwgYGZsX2NoYW5nZWAsIGBmd19jaGFuZ2VgLCBgbWFsbF9jaGFuZ2VgLCBgcm91dGU0X2NoYW5nZWAsIGFuZCBgdTMyX2NoYW5nZWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgYXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnM/IFRoZSBhbnN3ZXIgaXMgeWVzLCB0aGV5ICphcmUqIHN0YXRpYyBmdW5jdGlvbnMsIHVzZWQgYXMgdGhlIGAuY2hhbmdlYCBjYWxsYmFja3Mgd2l0aGluIGB0Y2ZfcHJvdG9fb3BzYC4gV2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBUaGVzZSAqYXJlbid0KiBpbmxpbmVkLCB0aG91Z2gsIGJlY2F1c2UgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGB0Y2ZfcHJvdG9fb3BzYC4gVGhhdOKAmXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyOyB0aGVpciBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFyZSByZXRhaW5lZC5cblxuVG8gY29uZmlybSB0aGF0LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGV5IGFyZSBpbmRlZWQgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMuIE9rYXksIGdvb2QuIGBiYXNpY19jaGFuZ2VgICppcyogYXNzaWduZWQgdG8gYC5jaGFuZ2VgIGluIGBjbHNfYmFzaWNfb3BzYCwgZm9yIGV4YW1wbGUuIFNvLCBubyBpbmxpbmluZy4gVGhleSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgdGhlIHByb21wdCBzdGlsbCBzYXlzIFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9uc1wiLiBUaGUgcHJpbWFyeSBBUEkgZW50cnlwb2ludCBoZXJlIGlzIGB0Y19uZXdfdGZpbHRlcmAgaW4gYG5ldC9zY2hlZC9jbHNfYXBpLmNgLiBUaW1lIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRoZXJlLCBhbmQgbWFrZSBzdXJlIHRoYXQgaXMgdGhlIGFwcHJvcHJpYXRlIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzozNC4zMjcwNjcyMzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjI0MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX25ld190ZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc19hcGkuYz0yMjQ2PXN0YXRpYyBib29sIGlzX2luZ3Jlc3Nfb3JfY2xzYWN0KHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrLCBzdHJ1Y3QgUWRpc2MgKnEpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyNTAtXFxubmV0L3NjaGVkL2Nsc19hcGkuYzoyMjUxOnN0YXRpYyBpbnQgdGNfbmV3X3RmaWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjI1Mi1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM9NDExNz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgdGNfZmlsdGVyX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XFxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MTE4OlxcdHsubXNndHlwZSA9IFJUTV9ORVdURklMVEVSLCAuZG9pdCA9IHRjX25ld190ZmlsdGVyLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDExOS1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzozNC40MDk3MDQwNDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY0NTQwNDkxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgdGhlIEZ1enplciBvbiBUYXJnZXRlZCBDbGFzc2lmaWVyIENoYW5nZXMqKlxuXG5Pa2F5LCBoZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCB0aGlzLiBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlc2UgY2hhbmdlcyBzZWVtcyB0byBiZSBgdGNfbmV3X3RmaWx0ZXJgLCBidXQgdGhlIGNvcmUgbW9kaWZpY2F0aW9ucyBhcmUgcmVhbGx5IHdpdGhpbiB0aGUgYC5jaGFuZ2VgIGNhbGxiYWNrcyBvZiBzcGVjaWZpYyBjbGFzc2lmaWVycy4gSWYgSSAqb25seSogc3BlY2lmeSBgdGNfbmV3X3RmaWx0ZXJgLCB0aGUgZnV6emVyIG1pZ2h0IG5vdCBiZSBkaXJlY3RlZCBlbm91Z2ggdG8gdGhlIG1vc3QgcmVsZXZhbnQgY29kZS4gVGhlIHByb21wdCBkb2VzIG1lbnRpb24gZm9jdXNpbmcgb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucywgYW5kIGF2b2lkaW5nIGdlbmVyaWMgb25lcy4gYHRjX25ld190ZmlsdGVyYCBpcyBtb3JlIG9mIGEgY29uZmlndXJhdGlvbiBmdW5jdGlvbiwgbm90IGEgaG90IHBhdGgsIHNvIEkgc2hvdWxkIGJlIHNlbGVjdGl2ZS5cblxuR2l2ZW4gdGhhdCwgSSdsbCBpbmNsdWRlIHRoZSBgLmNoYW5nZWAgY2FsbGJhY2tzIGRpcmVjdGx5OiBgYmFzaWNfY2hhbmdlYCwgYGNsc19icGZfY2hhbmdlYCwgYGNsc19jZ3JvdXBfY2hhbmdlYCwgYGZsb3dfY2hhbmdlYCwgYGZsX2NoYW5nZWAsIGBmd19jaGFuZ2VgLCBgbWFsbF9jaGFuZ2VgLCBgcm91dGU0X2NoYW5nZWAsIGFuZCBgdTMyX2NoYW5nZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFsdGVyZWQgYnkgdGhlIHBhdGNoLlxuXG5XYWl0LCBgdGNmX2V4dHNfaW5pdF9leGAgaXMgYWxzbyBtb2RpZmllZCwgYW5kIGl0J3MgYW4gKmV4cG9ydGVkKiBmdW5jdGlvbiwgZGVmaW5lZCBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGFkZGl0aW9uIHRvIHRoZSBGb2N1c1N5bWJvbHMgbGlzdC4gSXQncyBhIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50LlxuXG5DaGVja2luZyBgdGNmX2V4dHNfaW5pdF9leGAgY29uZmlybXMgaXQncyByZWxldmFudCwgYW5kIEkgd2lsbCBhZGQgaXQgdG8gdGhlIEZvY3VzU3ltYm9scy5cblxuU28sIHRoZSBjdXJyZW50IEZvY3VzU3ltYm9scyBsaXN0IGlzOlxuKiAgIGBiYXNpY19jaGFuZ2VgXG4qICAgYGNsc19icGZfY2hhbmdlYFxuKiAgIGBjbHNfY2dyb3VwX2NoYW5nZWBcbiogICBgZmxvd19jaGFuZ2VgXG4qICAgYGZsX2NoYW5nZWBcbiogICBgZndfY2hhbmdlYFxuKiAgIGBtYWxsX2NoYW5nZWBcbiogICBgcm91dGU0X2NoYW5nZWBcbiogICBgdTMyX2NoYW5nZWBcbiogICBgdGNmX2V4dHNfaW5pdF9leGBcblxuSSdtIGRvdWJsZS1jaGVja2luZywgYHRjZl9leHRzX2luaXRfZXhgIGlzICpub3QqIHN0YXRpYywgaXQncyBgRVhQT1JUX1NZTUJPTGAuIFRoZSBgLmNoYW5nZWAgY2FsbGJhY2tzICphcmUqIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4sIG1lYW5pbmcgdGhleSBhcmVuJ3QgaW5saW5lZC4gV2hpbGUgU3l6a2FsbGVyICpjYW4qIHVzZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGUgcHJvbXB0IGVuY291cmFnZXMgbm9uLXN0YXRpYy4gSW5jbHVkaW5nIGB0Y19uZXdfdGZpbHRlcmAgbWlnaHQgYmUgdXNlZnVsLCBhbmQgYHRjZl9leHRzX2luaXRfZXhgIGxvb2tzIGdvb2QgYXMgYW4gZXh0ZXJuYWwgZnVuY3Rpb24uXG5cbkhvd2V2ZXIsIHRoZSBrZXkgaXMgZGlyZWN0aW5nIHRoZSBmdXp6ZXIgdG8gKnNwZWNpZmljKiBjaGFuZ2VzLiBTaW5jZSB0aGUgYC5jaGFuZ2VgIGNhbGxiYWNrcyBhcmUgdGhlICpleGFjdCogZnVuY3Rpb25zIG1vZGlmaWVkLCBJJ2xsIGtlZXAgdGhlbSBpbiB0aGUgbGlzdC4gVGhleSBhcmUgd2hlcmUgdGhlIGNvZGUgY2hhbmdlcyBhcmUgbG9jYXRlZC5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZSBwYXRjaCBmb3Igb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzLlxuXG5JbiBgY2xzX2Jhc2ljLmNgLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uOiAgdGhlIGFkZGl0aW9uIG9mIGEgbWlzc2luZyBgaWRyX3JlbW92ZWAgb24gYW4gZXJyb3IgcGF0aCB3aGVuIGBhbGxvY19wZXJjcHVfZ2ZwYCBmYWlscy4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQgZml4ZXMgYW4gSURSIGxlYWsuIFRoaXMgaXMgdGhlIG9ubHkgYWRkaXRpb25hbCBmdW5jdGlvbmFsIGNoYW5nZSBJJ3ZlIHNlZW4uIFRoaXMgcGF0aCBjYW4gYmUgdGVzdGVkIHdpdGggZmF1bHQgaW5qZWN0aW9uIGR1cmluZyBmdXp6aW5nIHRvIHZlcmlmeSB0aGUgZml4IGFuZCBwcmV2ZW50IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbi5cblxuVGhlIGNvbmZpZ3MgYXJlOiBgTkVUX1NDSEVEYCwgYE5FVF9DTFNgLCBgTkVUX0NMU19CQVNJQ2AsIGBORVRfQ0xTX1JPVVRFNGAsIGBJTkVUYCwgYE5FVF9DTFNfRldgLCBgTkVUX0NMU19VMzJgLCBgQ0xTX1UzMl9QRVJGYCwgYENMU19VMzJfTUFSS2AsIGBORVRfQ0xTX0ZMT1dgLCBgTkVUX0NMU19DR1JPVVBgLCBgQ0dST1VQU2AsIGBORVRfQ0xTX0JQRmAsIGBORVRfQ0xTX0ZMT1dFUmAsIGBORVRfQ0xTX01BVENIQUxMYCwgYW5kIGBORVRfQ0xTX0FDVGAuXG5cblRoaXMgZXJyb3IgcGF0aCBpcyB3b3J0aCBmdXp6aW5nLCBzbyBJIHdpbGwgc2V0IFdvcnRoRnV6emluZz10cnVlLlxuXG5Pa2F5LCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ4NywiT3V0cHV0VG9rZW5zIjozMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjUwLjg2Mzc1NTc5N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDU1NjIzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTXCIsXG4gICAgXCJORVRfQ0xTX0JBU0lDXCIsXG4gICAgXCJORVRfQ0xTX1JPVVRFNFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0NMU19GV1wiLFxuICAgIFwiTkVUX0NMU19VMzJcIixcbiAgICBcIkNMU19VMzJfUEVSRlwiLFxuICAgIFwiQ0xTX1UzMl9NQVJLXCIsXG4gICAgXCJORVRfQ0xTX0ZMT1dcIixcbiAgICBcIk5FVF9DTFNfQ0dST1VQXCIsXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiLFxuICAgIFwiTkVUX0NMU19GTE9XRVJcIixcbiAgICBcIk5FVF9DTFNfTUFUQ0hBTExcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmFzaWNfY2hhbmdlXCIsXG4gICAgXCJjbHNfYnBmX2NoYW5nZVwiLFxuICAgIFwiY2xzX2Nncm91cF9jaGFuZ2VcIixcbiAgICBcImZsb3dfY2hhbmdlXCIsXG4gICAgXCJmbF9jaGFuZ2VcIixcbiAgICBcImZ3X2NoYW5nZVwiLFxuICAgIFwibWFsbF9jaGFuZ2VcIixcbiAgICBcInJvdXRlNF9jaGFuZ2VcIixcbiAgICBcInUzMl9jaGFuZ2VcIixcbiAgICBcInRjZl9leHRzX2luaXRfZXhcIixcbiAgICBcInRjX25ld190ZmlsdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBHRlBfS0VSTkVMX0FDQ09VTlQgdG8gdmFyaW91cyBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gbmV0d29yayBjbGFzc2lmaWVycy4gV2hpbGUgbW9zdGx5IGFuIGFjY291bnRpbmcgY2hhbmdlLCBpdCBhbHNvIGluY2x1ZGVzIGEgZnVuY3Rpb25hbCBidWcgZml4IGluIGNsc19iYXNpYy5jIChiYXNpY19jaGFuZ2UpIHdoZXJlIGl0IGFkZHMgYSBtaXNzaW5nIGlkcl9yZW1vdmUgb24gdGhlIGVycm9yIHBhdGggd2hlbiBhbGxvY19wZXJjcHVfZ2ZwIGZhaWxzLiBUaGlzIGVycm9yIHBhdGggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgZmF1bHQgaW5qZWN0aW9uIGR1cmluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBJRFIgbGVha3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTXCIsXG4gICAgXCJORVRfQ0xTX0JBU0lDXCIsXG4gICAgXCJORVRfQ0xTX1JPVVRFNFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0NMU19GV1wiLFxuICAgIFwiTkVUX0NMU19VMzJcIixcbiAgICBcIkNMU19VMzJfUEVSRlwiLFxuICAgIFwiQ0xTX1UzMl9NQVJLXCIsXG4gICAgXCJORVRfQ0xTX0ZMT1dcIixcbiAgICBcIk5FVF9DTFNfQ0dST1VQXCIsXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiLFxuICAgIFwiTkVUX0NMU19GTE9XRVJcIixcbiAgICBcIk5FVF9DTFNfTUFUQ0hBTExcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmFzaWNfY2hhbmdlXCIsXG4gICAgXCJjbHNfYnBmX2NoYW5nZVwiLFxuICAgIFwiY2xzX2Nncm91cF9jaGFuZ2VcIixcbiAgICBcImZsb3dfY2hhbmdlXCIsXG4gICAgXCJmbF9jaGFuZ2VcIixcbiAgICBcImZ3X2NoYW5nZVwiLFxuICAgIFwibWFsbF9jaGFuZ2VcIixcbiAgICBcInJvdXRlNF9jaGFuZ2VcIixcbiAgICBcInUzMl9jaGFuZ2VcIixcbiAgICBcInRjZl9leHRzX2luaXRfZXhcIixcbiAgICBcInRjX25ld190ZmlsdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBHRlBfS0VSTkVMX0FDQ09VTlQgdG8gdmFyaW91cyBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gbmV0d29yayBjbGFzc2lmaWVycy4gV2hpbGUgbW9zdGx5IGFuIGFjY291bnRpbmcgY2hhbmdlLCBpdCBhbHNvIGluY2x1ZGVzIGEgZnVuY3Rpb25hbCBidWcgZml4IGluIGNsc19iYXNpYy5jIChiYXNpY19jaGFuZ2UpIHdoZXJlIGl0IGFkZHMgYSBtaXNzaW5nIGlkcl9yZW1vdmUgb24gdGhlIGVycm9yIHBhdGggd2hlbiBhbGxvY19wZXJjcHVfZ2ZwIGZhaWxzLiBUaGlzIGVycm9yIHBhdGggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgZmF1bHQgaW5qZWN0aW9uIGR1cmluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBJRFIgbGVha3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjUwLjk2ODMxOTk5M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MDI0NDEzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzo1MC45Njg5NTU0NTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI1MDE4MDExNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscyBpbiB0aGUgbmV0d29yayBzY2hlZHVsaW5nIGNsYXNzaWZpZXJzIChgbmV0L3NjaGVkL2Nsc18qLmNgKSB0byB1c2UgYEdGUF9LRVJORUxfQUNDT1VOVGAgZm9yIGNncm91cCBtZW1vcnkgYWNjb3VudGluZy4gSXQgcmVwbGFjZXMgYGt6YWxsb2Nfb2JqYCwgYGt6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX2ZsZXhgLCBgYWxsb2NfcGVyY3B1YCwgYGttZW1kdXBgLCBhbmQgYG5sYV9tZW1kdXBgIHdpdGggdGhlaXIgYF9nZnBgIG9yIGFjY291bnRlZCBlcXVpdmFsZW50cy4gQWxsIGFmZmVjdGVkIGFsbG9jYXRpb25zIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZDogYGt6YWxsb2NgLWJhc2VkIGZ1bmN0aW9ucyBpbmhlcmVudGx5IHplcm8gdGhlIG1lbW9yeSwgYGFsbG9jX3BlcmNwdV9nZnBgIHplcm8taW5pdGlhbGl6ZXMgdGhlIHBlci1DUFUgbWVtb3J5LCBhbmQgYGttZW1kdXBgL2BubGFfbWVtZHVwYCBjb3B5IGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBzb3VyY2UgYnVmZmVycy4gVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgYSBtaW5vciBlcnJvci1wYXRoIGZpeCBpbiBgY2xzX2Jhc2ljLmNgIHRvIHJlbW92ZSBhbiBJRFIgZW50cnkgb24gYWxsb2NhdGlvbiBmYWlsdXJlLCB3aGljaCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIGludmFsaWQgc3RhdGUgYnV0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGlzIGFsdGVyZWQsIHRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycyBhcmUgcGVyZmVjdGx5IGFkZXF1YXRlIGZvciB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc3YjgzY2Q2Yjk0OGFlZDRhZTM0MDkzYjFiYTY2YzFkMTk3MTg0OTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxNTowNTo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5pbmRleCA0ZTZhMjgxMmE0ZjMyLi5iZTYzYjM0NzY0MGJhIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xuQEAgLTMzNjQsNyArMzM2NCw4IEBAIGludCB0Y2ZfZXh0c19pbml0X2V4KHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cywgc3RydWN0IG5ldCAqbmV0LCBpbnQgYWN0aW9uLFxuIFx0ICogVGhpcyByZWZlcmVuY2UgbWlnaHQgYmUgdGFrZW4gbGF0ZXIgZnJvbSB0Y2ZfZXh0c19nZXRfbmV0KCkuXG4gXHQgKi9cbiBcdGV4dHMtXHUwMDNlbmV0ID0gbmV0O1xuLVx0ZXh0cy1cdTAwM2VhY3Rpb25zID0ga3phbGxvY19vYmpzKHN0cnVjdCB0Y19hY3Rpb24gKiwgVENBX0FDVF9NQVhfUFJJTyk7XG4rXHRleHRzLVx1MDAzZWFjdGlvbnMgPSBremFsbG9jX29ianMoc3RydWN0IHRjX2FjdGlvbiAqLCBUQ0FfQUNUX01BWF9QUklPLFxuK1x0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFleHRzLVx1MDAzZWFjdGlvbnMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYmFzaWMuYyBiL25ldC9zY2hlZC9jbHNfYmFzaWMuY1xuaW5kZXggNDkyY2Q5Y2U4ZDQ2Zi4uZTJhOTRiYTlmYmE3NiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYmFzaWMuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jXG5AQCAtMTkzLDcgKzE5Myw3IEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdGZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7XG4rXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWZuZXcpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbkBAIC0yMTIsOSArMjEyLDExIEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFx0Zm5ldy1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4tXHRmbmV3LVx1MDAzZXBmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB0Y19iYXNpY19wY250KTtcbitcdGZuZXctXHUwMDNlcGYgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCB0Y19iYXNpY19wY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFmbmV3LVx1MDAzZXBmKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGlmICghZm9sZClcbitcdFx0XHRpZHJfcmVtb3ZlKFx1MDAyNmhlYWQtXHUwMDNlaGFuZGxlX2lkciwgZm5ldy1cdTAwM2VoYW5kbGUpO1xuIFx0XHRnb3RvIGVycm91dDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2JwZi5jIGIvbmV0L3NjaGVkL2Nsc19icGYuY1xuaW5kZXggNmQxOTE1NWJlY2M4Ni4uMTg4Y2YwZjk0OWRkNCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYnBmLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfYnBmLmNcbkBAIC0zNTIsNyArMzUyLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX3Byb2dfZnJvbV9vcHMoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgY2xzX2JwZl9wcm9nICpwcm9nKVxuIFx0aWYgKGJwZl9zaXplICE9IG5sYV9sZW4odGJbVENBX0JQRl9PUFNdKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRicGZfb3BzID0ga21lbWR1cChubGFfZGF0YSh0YltUQ0FfQlBGX09QU10pLCBicGZfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRicGZfb3BzID0ga21lbWR1cChubGFfZGF0YSh0YltUQ0FfQlBGX09QU10pLCBicGZfc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChicGZfb3BzID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTQwMyw3ICs0MDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX2VmZChzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gXG4gXHRpZiAodGJbVENBX0JQRl9OQU1FXSkge1xuLVx0XHRuYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMKTtcbitcdFx0bmFtZSA9IG5sYV9tZW1kdXAodGJbVENBX0JQRl9OQU1FXSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKCFuYW1lKSB7XG4gXHRcdFx0YnBmX3Byb2dfcHV0KGZwKTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC00NDMsNyArNDQzLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cHJvZyA9IGt6YWxsb2Nfb2JqKCpwcm9nKTtcbitcdHByb2cgPSBremFsbG9jX29iaigqcHJvZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghcHJvZylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXG5pbmRleCA2ODBhNWMzMDgwOTRlLi4yMTBmZDlmZDI2ZDgzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuY1xuQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIGludCBjbHNfY2dyb3VwX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRpZiAoaGVhZCBcdTAwMjZcdTAwMjYgaGFuZGxlICE9IGhlYWQtXHUwMDNlaGFuZGxlKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdG5ldyA9IGt6YWxsb2Nfb2JqKCpoZWFkKTtcbitcdG5ldyA9IGt6YWxsb2Nfb2JqKCpoZWFkLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFuZXcpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Zsb3cuYyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jXG5pbmRleCAzNTZjNjhlYmMzODk1Li5hOWFjM2FjZjZlZGEwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19mbG93LmNcbisrKyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jXG5AQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyBpbnQgZmxvd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbi1cdGZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7XG4rXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWZuZXcpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jIGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xuaW5kZXggODhmOGEzMmZhYjJiNC4uMGUyNzViNTgxNTFjNCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcbkBAIC0yMjMzLDcgKzIyMzMsNyBAQCBzdGF0aWMgc3RydWN0IGZsX2Zsb3dfbWFzayAqZmxfY3JlYXRlX25ld19tYXNrKHN0cnVjdCBjbHNfZmxfaGVhZCAqaGVhZCxcbiBcdHN0cnVjdCBmbF9mbG93X21hc2sgKm5ld21hc2s7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrKTtcbitcdG5ld21hc2sgPSBremFsbG9jX29iaigqbmV3bWFzaywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3bWFzaylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG5AQCAtMjM5NCw3ICsyMzk0LDcgQEAgc3RhdGljIGludCBmbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRnb3RvIGVycm91dF90YjtcbiBcdH1cbiBcbi1cdGZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7XG4rXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWZuZXcpIHtcbiBcdFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRcdGdvdG8gZXJyb3V0X3RiO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZncuYyBiL25ldC9zY2hlZC9jbHNfZncuY1xuaW5kZXggNjQ2YTczMGRjYTkzYy4uYTQ2MmIyNjI3MTljMyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfZncuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19mdy5jXG5AQCAtMjc2LDcgKzI3Niw3IEBAIHN0YXRpYyBpbnQgZndfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0aWYgKGYtXHUwMDNlaWQgIT0gaGFuZGxlIFx1MDAyNlx1MDAyNiBoYW5kbGUpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdGZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyKTtcbitcdFx0Zm5ldyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghZm5ldylcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5AQCAtMzMwLDcgKzMzMCw3IEBAIHN0YXRpYyBpbnQgZndfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRwLVx1MDAzZXJvb3QsIGhlYWQpO1xuIFx0fVxuIFxuLVx0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIpO1xuK1x0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoZiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jIGIvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXG5pbmRleCA2ZjEyNjg3MmMxNGEwLi5jMTQ4OTliOTM1YmZkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmNcbkBAIC0xODksNyArMTg5LDcgQEAgc3RhdGljIGludCBtYWxsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRuZXcgPSBremFsbG9jX29iaigqbmV3KTtcbitcdG5ldyA9IGt6YWxsb2Nfb2JqKCpuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTIwMSw3ICsyMDEsNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0aGFuZGxlID0gMTtcbiBcdG5ldy1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4gXHRuZXctXHUwMDNlZmxhZ3MgPSB1c2VyZmxhZ3M7XG4tXHRuZXctXHUwMDNlcGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX21hdGNoYWxsX3BjbnQpO1xuK1x0bmV3LVx1MDAzZXBmID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgdGNfbWF0Y2hhbGxfcGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3LVx1MDAzZXBmKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gZXJyX2FsbG9jX3BlcmNwdTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbmluZGV4IGVkZWQ3YWFjZDNmNzAuLjBkMTMyNGM5MDU4MzcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuQEAgLTQ1NSw3ICs0NTUsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdGgxID0gdG9faGFzaChuaGFuZGxlKTtcbiBcdGIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtXHUwMDNldGFibGVbaDFdKTtcbiBcdGlmICghYikge1xuLVx0XHRiID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQpO1xuK1x0XHRiID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmIChiID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTUyNCw3ICs1MjQsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZXJyID0gLUVOT0JVRlM7XG4tXHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIpO1xuK1x0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFmKVxuIFx0XHRnb3RvIGVycm91dDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuaW5kZXggYzI5N2Q3ZGJjZjkxNi4uYWM2ZDBmYTVhNDBlMyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcbkBAIC04MjUsNyArODI1LDcgQEAgc3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0c3RydWN0IHRjX3UzMl9zZWwgKnMgPSBcdTAwMjZuLVx1MDAzZXNlbDtcbiBcdHN0cnVjdCB0Y191X2tub2RlICpuZXc7XG4gXG4tXHRuZXcgPSBremFsbG9jX2ZsZXgoKm5ldywgc2VsLmtleXMsIHMtXHUwMDNlbmtleXMpO1xuK1x0bmV3ID0ga3phbGxvY19mbGV4KCpuZXcsIHNlbC5rZXlzLCBzLVx1MDAzZW5rZXlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFuZXcpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuQEAgLTExMTQsMTUgKzExMTQsMTYgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0Z290byBlcnJpZHI7XG4gXHR9XG4gXG4tXHRuID0ga3phbGxvY19mbGV4KCpuLCBzZWwua2V5cywgcy1cdTAwM2Vua2V5cyk7XG4rXHRuID0ga3phbGxvY19mbGV4KCpuLCBzZWwua2V5cywgcy1cdTAwM2Vua2V5cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChuID09IE5VTEwpIHtcbiBcdFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRcdGdvdG8gZXJyaWRyO1xuIFx0fVxuIFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9QRVJGXG4tXHRuLVx1MDAzZXBmID0gX19hbGxvY19wZXJjcHUoc3RydWN0X3NpemUobi1cdTAwM2VwZiwga2NudHMsIHMtXHUwMDNlbmtleXMpLFxuLVx0XHRcdCAgICAgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdGNfdTMyX3BjbnQpKTtcbitcdG4tXHUwMDNlcGYgPSBfX2FsbG9jX3BlcmNwdV9nZnAoc3RydWN0X3NpemUobi1cdTAwM2VwZiwga2NudHMsIHMtXHUwMDNlbmtleXMpLFxuK1x0XHRcdFx0ICAgX19hbGlnbm9mX18oc3RydWN0IHRjX3UzMl9wY250KSxcbitcdFx0XHRcdCAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW4tXHUwMDNlcGYpIHtcbiBcdFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRcdGdvdG8gZXJyZnJlZTtcbkBAIC0xMTQ0LDcgKzExNDUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiAjaWZkZWYgQ09ORklHX0NMU19VMzJfTUFSS1xuLVx0bi1cdTAwM2VwY3B1X3N1Y2Nlc3MgPSBhbGxvY19wZXJjcHUodTMyKTtcbitcdG4tXHUwMDNlcGNwdV9zdWNjZXNzID0gYWxsb2NfcGVyY3B1X2dmcCh1MzIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW4tXHUwMDNlcGNwdV9zdWNjZXNzKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gZXJyb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDc6NTAuOTY4OTU2NTkzWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTAxNzcyMTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlcyBpbiBgbmV0L3NjaGVkL2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IHR3ZWFrcyBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd2l0aGluIGBuZXQvc2NoZWQvYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHRvIGEgYnVuY2ggb2YgY2FsbHM6IGBremFsbG9jX29ianNgLCBga3phbGxvY19vYmpgLCBgYWxsb2NfcGVyY3B1X2dmcGAsIGBrbWVtZHVwYCwgYG5sYV9tZW1kdXBgLCBhbmQgYGt6YWxsb2NfZmxleGAuIFRoZSBnb2FsIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGJldHRlciBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3JlIHN3YXBwaW5nIHRoZSBkZWZhdWx0IGZsYWdzIG9yIGBHRlBfS0VSTkVMYCB3aXRoIGBHRlBfS0VSTkVMX0FDQ09VTlRgLiBObyBjaGFuZ2VzIHRvIGhvdyB0aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkLCBubyBuZXcgZmllbGRzLCBubyBtb2RpZmljYXRpb25zIHRvIGFueSBib3VuZHMgY2hlY2tzLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgbm8gY2hhbmdlcyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXTigJlzIGFsbCBga3phbGxvY2AtYmFzZWQgKHplcm8taW5pdGlhbGl6ZWQpIG9yIGBrbWVtZHVwYC9gbmxhX21lbWR1cGAtYmFzZWQgKGNvcHlpbmcgYWxyZWFkeSBpbml0aWFsaXplZCBtZW1vcnkpLiBIb2xkIG9uLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYGFsbG9jX3BlcmNwdV9nZnBgLCBiZWNhdXNlIHRoYXQgaGFzIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCB5ZXMsIGBhbGxvY19wZXJjcHVfZ2ZwYCBzdGlsbCB6ZXJvLWluaXRpYWxpemVzLlxuXG5MZXQncyBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIGluIGhlcmUuIEFoLCBmb3VuZCBhIGJ1ZyBmaXggaW4gYGNsc19iYXNpYy5jYC4gVGhleSdyZSBub3cgcmVtb3ZpbmcgYW4gSURSIGVudHJ5IGlmIGBhbGxvY19wZXJjcHVfZ2ZwYCBmYWlscy4gVGhpcyBpcyBhIGZpeCBmb3IgYSBtZW1vcnkgbGVhayBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5SaWdodCwgc28gc2luY2UgYWxsIHRoZXNlIGFsbG9jYXRpb25zIGFyZSAqc3RpbGwqIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGNvcGllcyBvZiBleGlzdGluZyBpbml0aWFsaXplZCBkYXRhLCB0aGVyZSdzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgbWVhbnMgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIEtBU0FOIGFuZCBvdXIgc3RhbmRhcmQgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uIHRvb2xzIGFyZSBzdWZmaWNpZW50LlxuXG5TbywgaGVyZSdzIG15IHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBzaW1wbHkgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZvciBjZ3JvdXAgYWNjb3VudGluZyB0byBjYWxscyBsaWtlIGBremFsbG9jYCwgYGttZW1kdXBgIGFuZCBgYWxsb2NfcGVyY3B1YC4gQWxsIHRoZXNlIGFsbG9jYXRpb25zIGFyZSAqZnVsbHkqIGluaXRpYWxpemVkLCBlaXRoZXIgemVyb2VkIChieSBga3phbGxvY2Agb3Igc2ltaWxhcikgb3IgY29waWVkIGZyb20gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgc291cmNlcy4gVGhlIGJ1ZyBmaXggaW4gYGNsc19iYXNpYy5jYCBpcyB1bnJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYW5kIG5vIGNvbXBsZXggaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYmVpbmcgY2hhbmdlZCwgdGhlcmUncyBubyBuZWVkIHRvIGludHJvZHVjZSBLTVNBTiBmdXp6aW5nLiBXZSdyZSBnb29kIHdpdGggS0FTQU4gYW5kIHRoZSByZWd1bGFyIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYzLCJPdXRwdXRUb2tlbnMiOjI2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA4OjAzLjQ3MDczMjQ0N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgY2xhc3NpZmllcnMgKGBuZXQvc2NoZWQvY2xzXyouY2ApIHRvIHVzZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmb3IgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLiBJdCByZXBsYWNlcyBga3phbGxvY19vYmpgLCBga3phbGxvY19vYmpzYCwgYGt6YWxsb2NfZmxleGAsIGBhbGxvY19wZXJjcHVgLCBga21lbWR1cGAsIGFuZCBgbmxhX21lbWR1cGAgd2l0aCB0aGVpciBgX2dmcGAgb3IgYWNjb3VudGVkIGVxdWl2YWxlbnRzLiBBbGwgYWZmZWN0ZWQgYWxsb2NhdGlvbnMgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkOiBga3phbGxvY2AtYmFzZWQgZnVuY3Rpb25zIGluaGVyZW50bHkgemVybyB0aGUgbWVtb3J5LCBgYWxsb2NfcGVyY3B1X2dmcGAgemVyby1pbml0aWFsaXplcyB0aGUgcGVyLUNQVSBtZW1vcnksIGFuZCBga21lbWR1cGAvYG5sYV9tZW1kdXBgIGNvcHkgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXJzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIG1pbm9yIGVycm9yLXBhdGggZml4IGluIGBjbHNfYmFzaWMuY2AgdG8gcmVtb3ZlIGFuIElEUiBlbnRyeSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgaW52YWxpZCBzdGF0ZSBidXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYWx0ZXJlZCwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgY2xhc3NpZmllcnMgKGBuZXQvc2NoZWQvY2xzXyouY2ApIHRvIHVzZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmb3IgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLiBJdCByZXBsYWNlcyBga3phbGxvY19vYmpgLCBga3phbGxvY19vYmpzYCwgYGt6YWxsb2NfZmxleGAsIGBhbGxvY19wZXJjcHVgLCBga21lbWR1cGAsIGFuZCBgbmxhX21lbWR1cGAgd2l0aCB0aGVpciBgX2dmcGAgb3IgYWNjb3VudGVkIGVxdWl2YWxlbnRzLiBBbGwgYWZmZWN0ZWQgYWxsb2NhdGlvbnMgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkOiBga3phbGxvY2AtYmFzZWQgZnVuY3Rpb25zIGluaGVyZW50bHkgemVybyB0aGUgbWVtb3J5LCBgYWxsb2NfcGVyY3B1X2dmcGAgemVyby1pbml0aWFsaXplcyB0aGUgcGVyLUNQVSBtZW1vcnksIGFuZCBga21lbWR1cGAvYG5sYV9tZW1kdXBgIGNvcHkgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXJzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIG1pbm9yIGVycm9yLXBhdGggZml4IGluIGBjbHNfYmFzaWMuY2AgdG8gcmVtb3ZlIGFuIElEUiBlbnRyeSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgaW52YWxpZCBzdGF0ZSBidXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYWx0ZXJlZCwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxjpd2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 14:48:22 +0000 UTC FinishedAt: 2026-08-19 15:08:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS", "NET_CLS_BASIC", "NET_CLS_ROUTE4", "INET", "NET_CLS_FW", "NET_CLS_U32", "CLS_U32_PERF", "CLS_U32_MARK", "NET_CLS_FLOW", "NET_CLS_CGROUP", "CGROUPS", "NET_CLS_BPF", "NET_CLS_FLOWER", "NET_CLS_MATCHALL", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS", "NET_CLS_BASIC", "NET_CLS_ROUTE4", "INET", "NET_CLS_FW", "NET_CLS_U32", "CLS_U32_PERF", "CLS_U32_MARK", "NET_CLS_FLOW", "NET_CLS_CGROUP", "CGROUPS", "NET_CLS_BPF", "NET_CLS_FLOWER", "NET_CLS_MATCHALL", "NET_CLS_ACT" ], "series_id": "464a2b7d-4d6c-4593-aa29-510031f4d40d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "basic_change", "cls_bpf_change", "cls_cgroup_change", "flow_change", "fl_change", "fw_change", "mall_change", "route4_change", "u32_change", "tcf_exts_init_ex", "tc_new_tfilter" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQkFTSUMmIzM0OywKICAgICYjMzQ7TkVUX0NMU19ST1VURTQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZXJiMzNDssCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDssCiAgICAmIzM0O0NMU19VMzJfUEVSRiYjMzQ7LAogICAgJiMzNDtDTFNfVTMyX01BUksmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GTE9XJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQ0dST1VQJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GTE9XRVImIzM0OywKICAgICYjMzQ7TkVUX0NMU19NQVRDSEFMTCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jhc2ljX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtjbHNfYnBmX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtjbHNfY2dyb3VwX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbG93X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZndfY2hhbmdlJiMzNDssCiAgICAmIzM0O21hbGxfY2hhbmdlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7LAogICAgJiMzNDt0Y2ZfZXh0c19pbml0X2V4JiMzNDssCiAgICAmIzM0O3RjX25ld190ZmlsdGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgY2xhc3NpZmllcnMgKGBuZXQvc2NoZWQvY2xzXyouY2ApIHRvIHVzZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmb3IgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLiBJdCByZXBsYWNlcyBga3phbGxvY19vYmpgLCBga3phbGxvY19vYmpzYCwgYGt6YWxsb2NfZmxleGAsIGBhbGxvY19wZXJjcHVgLCBga21lbWR1cGAsIGFuZCBgbmxhX21lbWR1cGAgd2l0aCB0aGVpciBgX2dmcGAgb3IgYWNjb3VudGVkIGVxdWl2YWxlbnRzLiBBbGwgYWZmZWN0ZWQgYWxsb2NhdGlvbnMgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkOiBga3phbGxvY2AtYmFzZWQgZnVuY3Rpb25zIGluaGVyZW50bHkgemVybyB0aGUgbWVtb3J5LCBgYWxsb2NfcGVyY3B1X2dmcGAgemVyby1pbml0aWFsaXplcyB0aGUgcGVyLUNQVSBtZW1vcnksIGFuZCBga21lbWR1cGAvYG5sYV9tZW1kdXBgIGNvcHkgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXJzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIG1pbm9yIGVycm9yLXBhdGggZml4IGluIGBjbHNfYmFzaWMuY2AgdG8gcmVtb3ZlIGFuIElEUiBlbnRyeSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgaW52YWxpZCBzdGF0ZSBidXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYWx0ZXJlZCwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgR0ZQX0tFUk5FTF9BQ0NPVU5UIHRvIHZhcmlvdXMgbWVtb3J5IGFsbG9jYXRpb25zIGluIG5ldHdvcmsgY2xhc3NpZmllcnMuIFdoaWxlIG1vc3RseSBhbiBhY2NvdW50aW5nIGNoYW5nZSwgaXQgYWxzbyBpbmNsdWRlcyBhIGZ1bmN0aW9uYWwgYnVnIGZpeCBpbiBjbHNfYmFzaWMuYyAoYmFzaWNfY2hhbmdlKSB3aGVyZSBpdCBhZGRzIGEgbWlzc2luZyBpZHJfcmVtb3ZlIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYWxsb2NfcGVyY3B1X2dmcCBmYWlscy4gVGhpcyBlcnJvciBwYXRoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIGZhdWx0IGluamVjdGlvbiBkdXJpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gSURSIGxlYWtzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzdiODNjZDZiOTQ4YWVkNGFlMzQwOTNiMWJhNjZjMWQxOTcxODQ5NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDE1OjA1OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5pbmRleCA0ZTZhMjgxMmE0ZjMyLi5iZTYzYjM0NzY0MGJhIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xuQEAgLTMzNjQsNyAmIzQzOzMzNjQsOCBAQCBpbnQgdGNmX2V4dHNfaW5pdF9leChzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMsIHN0cnVjdCBuZXQgKm5ldCwgaW50IGFjdGlvbixcbiBcdCAqIFRoaXMgcmVmZXJlbmNlIG1pZ2h0IGJlIHRha2VuIGxhdGVyIGZyb20gdGNmX2V4dHNfZ2V0X25ldCgpLlxuIFx0ICovXG4gXHRleHRzLVx1MDAzZW5ldCA9IG5ldDtcbi1cdGV4dHMtXHUwMDNlYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdGNfYWN0aW9uICosIFRDQV9BQ1RfTUFYX1BSSU8pO1xuJiM0MztcdGV4dHMtXHUwMDNlYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdGNfYWN0aW9uICosIFRDQV9BQ1RfTUFYX1BSSU8sXG4mIzQzO1x0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFleHRzLVx1MDAzZWFjdGlvbnMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYmFzaWMuYyBiL25ldC9zY2hlZC9jbHNfYmFzaWMuY1xuaW5kZXggNDkyY2Q5Y2U4ZDQ2Zi4uZTJhOTRiYTlmYmE3NiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYmFzaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jXG5AQCAtMTkzLDcgJiM0MzsxOTMsNyBAQCBzdGF0aWMgaW50IGJhc2ljX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpO1xuJiM0MztcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTIxMiw5ICYjNDM7MjEyLDExIEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFx0Zm5ldy1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4tXHRmbmV3LVx1MDAzZXBmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB0Y19iYXNpY19wY250KTtcbiYjNDM7XHRmbmV3LVx1MDAzZXBmID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgdGNfYmFzaWNfcGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldy1cdTAwM2VwZikge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0aWYgKCFmb2xkKVxuJiM0MztcdFx0XHRpZHJfcmVtb3ZlKFx1MDAyNmhlYWQtXHUwMDNlaGFuZGxlX2lkciwgZm5ldy1cdTAwM2VoYW5kbGUpO1xuIFx0XHRnb3RvIGVycm91dDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2JwZi5jIGIvbmV0L3NjaGVkL2Nsc19icGYuY1xuaW5kZXggNmQxOTE1NWJlY2M4Ni4uMTg4Y2YwZjk0OWRkNCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYnBmLmNcbkBAIC0zNTIsNyAmIzQzOzM1Miw3IEBAIHN0YXRpYyBpbnQgY2xzX2JwZl9wcm9nX2Zyb21fb3BzKHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGNsc19icGZfcHJvZyAqcHJvZylcbiBcdGlmIChicGZfc2l6ZSAhPSBubGFfbGVuKHRiW1RDQV9CUEZfT1BTXSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0YnBmX29wcyA9IGttZW1kdXAobmxhX2RhdGEodGJbVENBX0JQRl9PUFNdKSwgYnBmX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGJwZl9vcHMgPSBrbWVtZHVwKG5sYV9kYXRhKHRiW1RDQV9CUEZfT1BTXSksIGJwZl9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKGJwZl9vcHMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNDAzLDcgJiM0Mzs0MDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX2VmZChzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gXG4gXHRpZiAodGJbVENBX0JQRl9OQU1FXSkge1xuLVx0XHRuYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdG5hbWUgPSBubGFfbWVtZHVwKHRiW1RDQV9CUEZfTkFNRV0sIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghbmFtZSkge1xuIFx0XHRcdGJwZl9wcm9nX3B1dChmcCk7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwcm9nID0ga3phbGxvY19vYmooKnByb2cpO1xuJiM0MztcdHByb2cgPSBremFsbG9jX29iaigqcHJvZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghcHJvZylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXG5pbmRleCA2ODBhNWMzMDgwOTRlLi4yMTBmZDlmZDI2ZDgzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuY1xuQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIHN0YXRpYyBpbnQgY2xzX2Nncm91cF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0aWYgKGhlYWQgXHUwMDI2XHUwMDI2IGhhbmRsZSAhPSBoZWFkLVx1MDAzZWhhbmRsZSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4tXHRuZXcgPSBremFsbG9jX29iaigqaGVhZCk7XG4mIzQzO1x0bmV3ID0ga3phbGxvY19vYmooKmhlYWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvdy5jIGIvbmV0L3NjaGVkL2Nsc19mbG93LmNcbmluZGV4IDM1NmM2OGViYzM4OTUuLmE5YWMzYWNmNmVkYTAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19mbG93LmNcbkBAIC00MzgsNyAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgZmxvd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbi1cdGZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7XG4mIzQzO1x0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFmbmV3KVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcbmluZGV4IDg4ZjhhMzJmYWIyYjQuLjBlMjc1YjU4MTUxYzQgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG5AQCAtMjIzMyw3ICYjNDM7MjIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmxfZmxvd19tYXNrICpmbF9jcmVhdGVfbmV3X21hc2soc3RydWN0IGNsc19mbF9oZWFkICpoZWFkLFxuIFx0c3RydWN0IGZsX2Zsb3dfbWFzayAqbmV3bWFzaztcbiBcdGludCBlcnI7XG4gXG4tXHRuZXdtYXNrID0ga3phbGxvY19vYmooKm5ld21hc2spO1xuJiM0MztcdG5ld21hc2sgPSBremFsbG9jX29iaigqbmV3bWFzaywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3bWFzaylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG5AQCAtMjM5NCw3ICYjNDM7MjM5NCw3IEBAIHN0YXRpYyBpbnQgZmxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0Z290byBlcnJvdXRfdGI7XG4gXHR9XG4gXG4tXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpO1xuJiM0MztcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldykge1xuIFx0XHRlcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byBlcnJvdXRfdGI7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mdy5jIGIvbmV0L3NjaGVkL2Nsc19mdy5jXG5pbmRleCA2NDZhNzMwZGNhOTNjLi5hNDYyYjI2MjcxOWMzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19mdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Z3LmNcbkBAIC0yNzYsNyAmIzQzOzI3Niw3IEBAIHN0YXRpYyBpbnQgZndfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0aWYgKGYtXHUwMDNlaWQgIT0gaGFuZGxlIFx1MDAyNlx1MDAyNiBoYW5kbGUpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdGZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyKTtcbiYjNDM7XHRcdGZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIWZuZXcpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTMzMCw3ICYjNDM7MzMwLDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHAtXHUwMDNlcm9vdCwgaGVhZCk7XG4gXHR9XG4gXG4tXHRmID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlcik7XG4mIzQzO1x0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoZiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jIGIvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXG5pbmRleCA2ZjEyNjg3MmMxNGEwLi5jMTQ4OTliOTM1YmZkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmNcbkBAIC0xODksNyAmIzQzOzE4OSw3IEBAIHN0YXRpYyBpbnQgbWFsbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0bmV3ID0ga3phbGxvY19vYmooKm5ldyk7XG4mIzQzO1x0bmV3ID0ga3phbGxvY19vYmooKm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5AQCAtMjAxLDcgJiM0MzsyMDEsNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0aGFuZGxlID0gMTtcbiBcdG5ldy1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4gXHRuZXctXHUwMDNlZmxhZ3MgPSB1c2VyZmxhZ3M7XG4tXHRuZXctXHUwMDNlcGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX21hdGNoYWxsX3BjbnQpO1xuJiM0MztcdG5ldy1cdTAwM2VwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX21hdGNoYWxsX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW5ldy1cdTAwM2VwZikge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9hbGxvY19wZXJjcHU7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG5pbmRleCBlZGVkN2FhY2QzZjcwLi4wZDEzMjRjOTA1ODM3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbkBAIC00NTUsNyAmIzQzOzQ1NSw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0aDEgPSB0b19oYXNoKG5oYW5kbGUpO1xuIFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVtoMV0pO1xuIFx0aWYgKCFiKSB7XG4tXHRcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCk7XG4mIzQzO1x0XHRiID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmIChiID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTUyNCw3ICYjNDM7NTI0LDcgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGVyciA9IC1FTk9CVUZTO1xuLVx0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfZmlsdGVyKTtcbiYjNDM7XHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWYpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCBjMjk3ZDdkYmNmOTE2Li5hYzZkMGZhNWE0MGUzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTgyNSw3ICYjNDM7ODI1LDcgQEAgc3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0c3RydWN0IHRjX3UzMl9zZWwgKnMgPSBcdTAwMjZuLVx1MDAzZXNlbDtcbiBcdHN0cnVjdCB0Y191X2tub2RlICpuZXc7XG4gXG4tXHRuZXcgPSBremFsbG9jX2ZsZXgoKm5ldywgc2VsLmtleXMsIHMtXHUwMDNlbmtleXMpO1xuJiM0MztcdG5ldyA9IGt6YWxsb2NfZmxleCgqbmV3LCBzZWwua2V5cywgcy1cdTAwM2Vua2V5cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0xMTE0LDE1ICYjNDM7MTExNCwxNiBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRnb3RvIGVycmlkcjtcbiBcdH1cbiBcbi1cdG4gPSBremFsbG9jX2ZsZXgoKm4sIHNlbC5rZXlzLCBzLVx1MDAzZW5rZXlzKTtcbiYjNDM7XHRuID0ga3phbGxvY19mbGV4KCpuLCBzZWwua2V5cywgcy1cdTAwM2Vua2V5cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChuID09IE5VTEwpIHtcbiBcdFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRcdGdvdG8gZXJyaWRyO1xuIFx0fVxuIFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9QRVJGXG4tXHRuLVx1MDAzZXBmID0gX19hbGxvY19wZXJjcHUoc3RydWN0X3NpemUobi1cdTAwM2VwZiwga2NudHMsIHMtXHUwMDNlbmtleXMpLFxuLVx0XHRcdCAgICAgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdGNfdTMyX3BjbnQpKTtcbiYjNDM7XHRuLVx1MDAzZXBmID0gX19hbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdF9zaXplKG4tXHUwMDNlcGYsIGtjbnRzLCBzLVx1MDAzZW5rZXlzKSxcbiYjNDM7XHRcdFx0XHQgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdGNfdTMyX3BjbnQpLFxuJiM0MztcdFx0XHRcdCAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW4tXHUwMDNlcGYpIHtcbiBcdFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRcdGdvdG8gZXJyZnJlZTtcbkBAIC0xMTQ0LDcgJiM0MzsxMTQ1LDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gI2lmZGVmIENPTkZJR19DTFNfVTMyX01BUktcbi1cdG4tXHUwMDNlcGNwdV9zdWNjZXNzID0gYWxsb2NfcGVyY3B1KHUzMik7XG4mIzQzO1x0bi1cdTAwM2VwY3B1X3N1Y2Nlc3MgPSBhbGxvY19wZXJjcHVfZ2ZwKHUzMiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbi1cdTAwM2VwY3B1X3N1Y2Nlc3MpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBlcnJvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQkFTSUMmIzM0OywKICAgICYjMzQ7TkVUX0NMU19ST1VURTQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZXJiMzNDssCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDssCiAgICAmIzM0O0NMU19VMzJfUEVSRiYjMzQ7LAogICAgJiMzNDtDTFNfVTMyX01BUksmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GTE9XJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQ0dST1VQJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GTE9XRVImIzM0OywKICAgICYjMzQ7TkVUX0NMU19NQVRDSEFMTCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jhc2ljX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtjbHNfYnBmX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtjbHNfY2dyb3VwX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbG93X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZndfY2hhbmdlJiMzNDssCiAgICAmIzM0O21hbGxfY2hhbmdlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7LAogICAgJiMzNDt0Y2ZfZXh0c19pbml0X2V4JiMzNDssCiAgICAmIzM0O3RjX25ld190ZmlsdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgR0ZQX0tFUk5FTF9BQ0NPVU5UIHRvIHZhcmlvdXMgbWVtb3J5IGFsbG9jYXRpb25zIGluIG5ldHdvcmsgY2xhc3NpZmllcnMuIFdoaWxlIG1vc3RseSBhbiBhY2NvdW50aW5nIGNoYW5nZSwgaXQgYWxzbyBpbmNsdWRlcyBhIGZ1bmN0aW9uYWwgYnVnIGZpeCBpbiBjbHNfYmFzaWMuYyAoYmFzaWNfY2hhbmdlKSB3aGVyZSBpdCBhZGRzIGEgbWlzc2luZyBpZHJfcmVtb3ZlIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYWxsb2NfcGVyY3B1X2dmcCBmYWlscy4gVGhpcyBlcnJvciBwYXRoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIGZhdWx0IGluamVjdGlvbiBkdXJpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gSURSIGxlYWtzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzdiODNjZDZiOTQ4YWVkNGFlMzQwOTNiMWJhNjZjMWQxOTcxODQ5NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDE1OjA1OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKaW5kZXggNGU2YTI4MTJhNGYzMi4uYmU2M2IzNDc2NDBiYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCkBAIC0zMzY0LDcgJiM0MzszMzY0LDggQEAgaW50IHRjZl9leHRzX2luaXRfZXgoc3RydWN0IHRjZl9leHRzICpleHRzLCBzdHJ1Y3QgbmV0ICpuZXQsIGludCBhY3Rpb24sCiAJICogVGhpcyByZWZlcmVuY2UgbWlnaHQgYmUgdGFrZW4gbGF0ZXIgZnJvbSB0Y2ZfZXh0c19nZXRfbmV0KCkuCiAJICovCiAJZXh0cy0mZ3Q7bmV0ID0gbmV0OwotCWV4dHMtJmd0O2FjdGlvbnMgPSBremFsbG9jX29ianMoc3RydWN0IHRjX2FjdGlvbiAqLCBUQ0FfQUNUX01BWF9QUklPKTsKJiM0MzsJZXh0cy0mZ3Q7YWN0aW9ucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdGNfYWN0aW9uICosIFRDQV9BQ1RfTUFYX1BSSU8sCiYjNDM7CQkJCSAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWV4dHMtJmd0O2FjdGlvbnMpCiAJCXJldHVybiAtRU5PTUVNOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Jhc2ljLmMgYi9uZXQvc2NoZWQvY2xzX2Jhc2ljLmMKaW5kZXggNDkyY2Q5Y2U4ZDQ2Zi4uZTJhOTRiYTlmYmE3NiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYmFzaWMuYwpAQCAtMTkzLDcgJiM0MzsxOTMsNyBAQCBzdGF0aWMgaW50IGJhc2ljX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpOwomIzQzOwlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFmbmV3KQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKQEAgLTIxMiw5ICYjNDM7MjEyLDExIEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycm91dDsKIAlmbmV3LSZndDtoYW5kbGUgPSBoYW5kbGU7Ci0JZm5ldy0mZ3Q7cGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX2Jhc2ljX3BjbnQpOwomIzQzOwlmbmV3LSZndDtwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX2Jhc2ljX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFmbmV3LSZndDtwZikgewogCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJaWYgKCFmb2xkKQomIzQzOwkJCWlkcl9yZW1vdmUoJmFtcDtoZWFkLSZndDtoYW5kbGVfaWRyLCBmbmV3LSZndDtoYW5kbGUpOwogCQlnb3RvIGVycm91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYnBmLmMgYi9uZXQvc2NoZWQvY2xzX2JwZi5jCmluZGV4IDZkMTkxNTViZWNjODYuLjE4OGNmMGY5NDlkZDQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19icGYuYwpAQCAtMzUyLDcgJiM0MzszNTIsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX29wcyhzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2cpCiAJaWYgKGJwZl9zaXplICE9IG5sYV9sZW4odGJbVENBX0JQRl9PUFNdKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlicGZfb3BzID0ga21lbWR1cChubGFfZGF0YSh0YltUQ0FfQlBGX09QU10pLCBicGZfc2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWJwZl9vcHMgPSBrbWVtZHVwKG5sYV9kYXRhKHRiW1RDQV9CUEZfT1BTXSksIGJwZl9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmIChicGZfb3BzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC00MDMsNyAmIzQzOzQwMyw3IEBAIHN0YXRpYyBpbnQgY2xzX2JwZl9wcm9nX2Zyb21fZWZkKHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGNsc19icGZfcHJvZyAqcHJvZywKIAl9CiAKIAlpZiAodGJbVENBX0JQRl9OQU1FXSkgewotCQluYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMKTsKJiM0MzsJCW5hbWUgPSBubGFfbWVtZHVwKHRiW1RDQV9CUEZfTkFNRV0sIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmICghbmFtZSkgewogCQkJYnBmX3Byb2dfcHV0KGZwKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXByb2cgPSBremFsbG9jX29iaigqcHJvZyk7CiYjNDM7CXByb2cgPSBremFsbG9jX29iaigqcHJvZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIXByb2cpCiAJCXJldHVybiAtRU5PQlVGUzsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuYyBiL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMKaW5kZXggNjgwYTVjMzA4MDk0ZS4uMjEwZmQ5ZmQyNmQ4MyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jCkBAIC05NSw3ICYjNDM7OTUsNyBAQCBzdGF0aWMgaW50IGNsc19jZ3JvdXBfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlpZiAoaGVhZCAmYW1wOyZhbXA7IGhhbmRsZSAhPSBoZWFkLSZndDtoYW5kbGUpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JbmV3ID0ga3phbGxvY19vYmooKmhlYWQpOwomIzQzOwluZXcgPSBremFsbG9jX29iaigqaGVhZCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW5ldykKIAkJcmV0dXJuIC1FTk9CVUZTOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Zsb3cuYyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jCmluZGV4IDM1NmM2OGViYzM4OTUuLmE5YWMzYWNmNmVkYTAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZmxvdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jCkBAIC00MzgsNyAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgZmxvd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCWZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7CiYjNDM7CWZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWZuZXcpCiAJCXJldHVybiAtRU5PQlVGUzsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMKaW5kZXggODhmOGEzMmZhYjJiNC4uMGUyNzViNTgxNTFjNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jCkBAIC0yMjMzLDcgJiM0MzsyMjMzLDcgQEAgc3RhdGljIHN0cnVjdCBmbF9mbG93X21hc2sgKmZsX2NyZWF0ZV9uZXdfbWFzayhzdHJ1Y3QgY2xzX2ZsX2hlYWQgKmhlYWQsCiAJc3RydWN0IGZsX2Zsb3dfbWFzayAqbmV3bWFzazsKIAlpbnQgZXJyOwogCi0JbmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrKTsKJiM0MzsJbmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbmV3bWFzaykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKQEAgLTIzOTQsNyAmIzQzOzIzOTQsNyBAQCBzdGF0aWMgaW50IGZsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCWdvdG8gZXJyb3V0X3RiOwogCX0KIAotCWZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7CiYjNDM7CWZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWZuZXcpIHsKIAkJZXJyID0gLUVOT0JVRlM7CiAJCWdvdG8gZXJyb3V0X3RiOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mdy5jIGIvbmV0L3NjaGVkL2Nsc19mdy5jCmluZGV4IDY0NmE3MzBkY2E5M2MuLmE0NjJiMjYyNzE5YzMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZncuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Z3LmMKQEAgLTI3Niw3ICYjNDM7Mjc2LDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlpZiAoZi0mZ3Q7aWQgIT0gaGFuZGxlICZhbXA7JmFtcDsgaGFuZGxlKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZm5ldyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIpOwomIzQzOwkJZm5ldyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmICghZm5ldykKIAkJCXJldHVybiAtRU5PQlVGUzsKIApAQCAtMzMwLDcgJiM0MzszMzAsNyBAQCBzdGF0aWMgaW50IGZ3X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCXJjdV9hc3NpZ25fcG9pbnRlcih0cC0mZ3Q7cm9vdCwgaGVhZCk7CiAJfQogCi0JZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIpOwomIzQzOwlmID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYyBiL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYwppbmRleCA2ZjEyNjg3MmMxNGEwLi5jMTQ4OTliOTM1YmZkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jCkBAIC0xODksNyAmIzQzOzE4OSw3IEBAIHN0YXRpYyBpbnQgbWFsbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbmV3ID0ga3phbGxvY19vYmooKm5ldyk7CiYjNDM7CW5ldyA9IGt6YWxsb2Nfb2JqKCpuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuZXcpCiAJCXJldHVybiAtRU5PQlVGUzsKIApAQCAtMjAxLDcgJiM0MzsyMDEsNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJaGFuZGxlID0gMTsKIAluZXctJmd0O2hhbmRsZSA9IGhhbmRsZTsKIAluZXctJmd0O2ZsYWdzID0gdXNlcmZsYWdzOwotCW5ldy0mZ3Q7cGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX21hdGNoYWxsX3BjbnQpOwomIzQzOwluZXctJmd0O3BmID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgdGNfbWF0Y2hhbGxfcGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW5ldy0mZ3Q7cGYpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2NfcGVyY3B1OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCmluZGV4IGVkZWQ3YWFjZDNmNzAuLjBkMTMyNGM5MDU4MzcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKQEAgLTQ1NSw3ICYjNDM7NDU1LDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsCiAJaDEgPSB0b19oYXNoKG5oYW5kbGUpOwogCWIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtJmd0O3RhYmxlW2gxXSk7CiAJaWYgKCFiKSB7Ci0JCWIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCk7CiYjNDM7CQliID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJCWlmIChiID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAKQEAgLTUyNCw3ICYjNDM7NTI0LDcgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gLUVOT0JVRlM7Ci0JZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfZmlsdGVyKTsKJiM0MzsJZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghZikKIAkJZ290byBlcnJvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCmluZGV4IGMyOTdkN2RiY2Y5MTYuLmFjNmQwZmE1YTQwZTMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc191MzIuYwpAQCAtODI1LDcgJiM0Mzs4MjUsNyBAQCBzdGF0aWMgc3RydWN0IHRjX3Vfa25vZGUgKnUzMl9pbml0X2tub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsCiAJc3RydWN0IHRjX3UzMl9zZWwgKnMgPSAmYW1wO24tJmd0O3NlbDsKIAlzdHJ1Y3QgdGNfdV9rbm9kZSAqbmV3OwogCi0JbmV3ID0ga3phbGxvY19mbGV4KCpuZXcsIHNlbC5rZXlzLCBzLSZndDtua2V5cyk7CiYjNDM7CW5ldyA9IGt6YWxsb2NfZmxleCgqbmV3LCBzZWwua2V5cywgcy0mZ3Q7bmtleXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuZXcpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xMTE0LDE1ICYjNDM7MTExNCwxNiBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlnb3RvIGVycmlkcjsKIAl9CiAKLQluID0ga3phbGxvY19mbGV4KCpuLCBzZWwua2V5cywgcy0mZ3Q7bmtleXMpOwomIzQzOwluID0ga3phbGxvY19mbGV4KCpuLCBzZWwua2V5cywgcy0mZ3Q7bmtleXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKG4gPT0gTlVMTCkgewogCQllcnIgPSAtRU5PQlVGUzsKIAkJZ290byBlcnJpZHI7CiAJfQogCiAjaWZkZWYgQ09ORklHX0NMU19VMzJfUEVSRgotCW4tJmd0O3BmID0gX19hbGxvY19wZXJjcHUoc3RydWN0X3NpemUobi0mZ3Q7cGYsIGtjbnRzLCBzLSZndDtua2V5cyksCi0JCQkgICAgICAgX19hbGlnbm9mX18oc3RydWN0IHRjX3UzMl9wY250KSk7CiYjNDM7CW4tJmd0O3BmID0gX19hbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdF9zaXplKG4tJmd0O3BmLCBrY250cywgcy0mZ3Q7bmtleXMpLAomIzQzOwkJCQkgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdGNfdTMyX3BjbnQpLAomIzQzOwkJCQkgICBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbi0mZ3Q7cGYpIHsKIAkJZXJyID0gLUVOT0JVRlM7CiAJCWdvdG8gZXJyZnJlZTsKQEAgLTExNDQsNyAmIzQzOzExNDUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlnb3RvIGVycm91dDsKIAogI2lmZGVmIENPTkZJR19DTFNfVTMyX01BUksKLQluLSZndDtwY3B1X3N1Y2Nlc3MgPSBhbGxvY19wZXJjcHUodTMyKTsKJiM0MzsJbi0mZ3Q7cGNwdV9zdWNjZXNzID0gYWxsb2NfcGVyY3B1X2dmcCh1MzIsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuLSZndDtwY3B1X3N1Y2Nlc3MpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJvdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfKi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCBqdXN0IGFub3RoZXIgbWVtb3J5IGFjY291bnRpbmcgY2hhbmdlLCBhZGRpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgdG8gYSBidW5jaCBvZiBhbGxvY2F0aW9uIGNhbGxzLiBUaGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuJiMzNDsgIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gdGhpbmdzIGxpa2UgYGt6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX29iamAsIGBhbGxvY19wZXJjcHVgLCBhbmQgb3RoZXIgYWxsb2NhdGlvbiByb3V0aW5lcy4KCk15IGZpcnN0IGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBwdXJlbHkgZGVjb3JhdGl2ZSwganVzdCB0cmFja2luZyBtZW1vcnkgdXNhZ2Ugd2l0aGluIGNncm91cHMgYW5kIG5vdCBjaGFuZ2luZyBob3cgdGhlc2UgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBjYXNlLCBhcyBpZiBpdCBjaGFuZ2VzIHRoZSBleGVjdXRpb24gb2YgdGhlIGtlcm5lbCBJIG5lZWQgdG8ga25vdy4gTWVtb3J5IGFjY291bnRpbmcgY2hhbmdlcyAqY2FuKiBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSBpZiB0aGV5IGludHJvZHVjZSBuZXcgYmVoYXZpb3JzLgoKSSBjaGVjayBmb3IgYW55IGNoYW5nZXMgdG8gbG9naWMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93LiAgSSBrbm93IGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UgdGhhdCAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMmIzM0OyBzaG91bGQgaGF2ZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gQWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHRvIGBremFsbG9jYCBjYWxscyBpcywgZ2VuZXJhbGx5LCBqdXN0IGNoYW5naW5nIHRoZSBHRlAgZmxhZ3MsIG5vdCBhZmZlY3RpbmcgZmxvdywgZXhjZXB0IG1heWJlIGFkZGluZyBhIGNoZWNrIGlmIGEgY2dyb3VwIG1lbW9yeSBsaW1pdCBpcyBoaXQuIEkgY29uZmlybSB0aGF0IHRoaW5ncyBsaWtlIGBremFsbG9jX29ianNgIGFuZCBga3phbGxvY19vYmpgIGFyZSBtYWNyb3MuIFRoZSBjaGFuZ2VzIHNob3duIGNvbmZpcm0gdGhpcyBhcyB3ZWxsLCBqdXN0IGFkZGluZyBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCB0byB0aGUgY2FsbHMuIFNvLCB1cCB1bnRpbCBoZXJlLCBpdCBpcyBub3Qgd29ydGggZnV6emluZywgYW5kIEkgd291bGQgaGF2ZSByZXR1cm5lZCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhvd2V2ZXIsIGFzIEkgZGl2ZSBkZWVwZXIsIEkgc3R1bWJsZSB1cG9uIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSSBsb29rIGF0IHRoZSBgY2xzX2Jhc2ljLmNgIGZpbGUgYW5kIHNlZSB0aGlzIGFkZGl0aW9uOgoKYGBgYwogCWZuZXctJmd0O3BmID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgdGNfYmFzaWNfcGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWZuZXctJmd0O3BmKSB7CiAJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlpZiAoIWZvbGQpCiYjNDM7CQkJaWRyX3JlbW92ZSgmYW1wO2hlYWQtJmd0O2hhbmRsZV9pZHIsIGZuZXctJmd0O2hhbmRsZSk7CiAJCWdvdG8gZXJyb3V0OwogCX0KYGBgCgpXYWl0IGEgc2Vjb25kLi4uICBOb3cgdGhhdCYjMzk7cyBub3QganVzdCBhY2NvdW50aW5nISBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgcmVtb3ZhbCBmcm9tIHRoZSBgaGVhZC0mZ3Q7aGFuZGxlX2lkcmAhIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqLiBJdCYjMzk7cyBhIGZpeCBmb3IgYSBwb3RlbnRpYWwgbWVtb3J5IG9yIElEUiBsZWFrIG9uIHRoZSBlcnJvciBwYXRoIGlmIGBhbGxvY19wZXJjcHVfZ2ZwYCBmYWlscy4gVGhpcyBpcyBhIGJpZyBkZWFsISBPbiBlcnJvciwgaXQgbm93IGNsZWFucyB1cCBhbiBJRFIgZW50cnkgaWYgYGZvbGRgIGlzIG5vdCBzZXQuIFRoaXMgaXMgZ29vZCwgZ29vZCwgZ29vZC4KCk15IGV4cGVydCBtaW5kIHNheXMgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBhIGZ1enplciBjYW4gaGl0IHVzaW5nIGZhdWx0IGluamVjdGlvbi4gVGhpcyB2ZXJpZmllcyB0aGF0IGEgbWVtb3J5IGxlYWsgb3IgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24gaXMgYXZvaWRlZC4gSXQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LgoKSSBjaGVjayBgY2xzX3UzMi5jYCBhbmQgY29uZmlybSB0aGF0IHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGVyZS4KClNvLCBpbiBzdW1tYXJ5OiBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFRoaXMgY2hhbmdlIGluIHRoZSBlcnJvciBwYXRoIGZvciBgY2xzX2Jhc2ljLmNgIGlzIHNpZ25pZmljYW50IGFuZCB3YXJyYW50cyBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIHRlc3Rpbmcgb24gdGhlIGVycm9yIHNjZW5hcmlvcyBpbiBgbmV0L3NjaGVkL2Nsc19iYXNpYy5jYC4gSSB3aWxsIHRoZW4gZ28gb24gYW5kIHJ1biB0aGUgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jhc2ljX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYmFzaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Jhc2ljLmM9MTQ3PXN0YXRpYyBpbnQgYmFzaWNfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4tLVxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTE3MS1cbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoxNzI6c3RhdGljIGludCBiYXNpY19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTE3My1cdFx0XHRzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxuLS1cbm5ldC9zY2hlZC9jbHNfYmFzaWMuYz0zMjA9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19iYXNpY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMzI1LVx0LmdldFx0XHQ9XHRiYXNpY19nZXQsXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM6MzI2Olx0LmNoYW5nZVx0XHQ9XHRiYXNpY19jaGFuZ2UsXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMzI3LVx0LmRlbGV0ZVx0XHQ9XHRiYXNpY19kZWxldGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBBIFNwZWNpZmljIEVycm9yIFBhdGggRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGBiYXNpY19jaGFuZ2VgIGZ1bmN0aW9uLCB3aGljaCBJIGtub3cgaXMgYSBgLmNoYW5nZWAgY2FsbGJhY2sgd2l0aGluIHRoZSBgdGNmX3Byb3RvX29wc2Agc3RydWN0dXJlLiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGB0Y2AgbmV0bGluayBpbnRlcmZhY2UgKFJUTV9ORVdURklMVEVSKS4gVGhlIGNvcmUgb2YgdGhlIGZpeCBhcHBlYXJzIHRvIGJlIGFkZGluZyBgaWRyX3JlbW92ZSgmYW1wO2hlYWQtJmd0O2hhbmRsZV9pZHIsIGZuZXctJmd0O2hhbmRsZSk7YCBvbiBhbiBlcnJvciBwYXRoLCBzcGVjaWZpY2FsbHkgd2hlbiBgYWxsb2NfcGVyY3B1X2dmcGAgZmFpbHMuIFRoaXMgbG9va3MgbGlrZSBhIHNwZWNpZmljIGZpeCB0byBwcmV2ZW50IGFuIElEUiBsZWFrLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCBkZWZpbml0ZWx5LiBGYXVsdCBpbmplY3Rpb24gZHVyaW5nIGZ1enppbmcgY291bGQgYmUgaWRlYWwgZm9yIHRyaWdnZXJpbmcgdGhpcyBlcnJvciBwYXRoLiBJZiB3ZSB0cmlnZ2VyIHRoZSBlcnJvciBwYXRoIHZpYSBmYXVsdCBpbmplY3Rpb24sIHRoZW4gd2UgY2FuIHZlcmlmeSB0aGUgSURSIGVudHJ5IGlzIHJlbW92ZWQgY29ycmVjdGx5LiBQcmV2ZW50aW5nIGEgbGVhayAqb3IqIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24gbGF0ZXIgaXMgYSBzdHJvbmcgcmVhc29uIHRvIGZ1enouCgpCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHJlY2FsbCB0aGUgZnV6emluZyBndWlkZWxpbmVzIG1lbnRpb24gc29tZXRoaW5nIGFib3V0ICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyYjMzQ7IG9yIG1vZGlmaWNhdGlvbnMgdG8gbnVtZXJpYyBjb25zdGFudHMuIFRoZXkgd2FudCBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgdGhvc2UuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggKmRvZXMqIGNvbnRhaW4gYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgdGhhdCBgaWRyX3JlbW92ZWAgY2FsbCEgSXQgYWN0aXZlbHkgbW9kaWZpZXMgcHJvZ3JhbSBiZWhhdmlvci4KCkFscmlnaHQsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzLiBJIHNlZSBzb21lIGNoYW5nZXMgaW4gYGNsc19icGYuY2AsIGBjbHNfY2dyb3VwLmNgLCBgY2xzX2Zsb3cuY2AsIGBjbHNfZmxvd2VyLmNgLCBgY2xzX2Z3LmNgLCBgY2xzX21hdGNoYWxsLmNgLCBgY2xzX3JvdXRlLmNgLCBhbmQgYGNsc191MzIuY2AsIGJ1dCBpdCBqdXN0IGxvb2tzIGxpa2UgdGhleSBhcmUgY2hhbmdpbmcgYGt6YWxsb2Nfb2JqYCB0byB1c2UgYEdGUF9LRVJORUxfQUNDT1VOVGAgb3IgYGFsbG9jX3BlcmNwdWAgdG8gYGFsbG9jX3BlcmNwdV9nZnBgLiBOb3csIHRoZXNlIGBremFsbG9jX29iamAgY2FsbHMgLSB0aG9zZSBhcmVuJiMzOTt0IGZhbWlsaWFyIHRvIG1lIGFzIHN0YW5kYXJkIGtlcm5lbCBtYWNyb3MuIEFyZSB0aGV5IGRlZmluZWQgaW4gYSBoZWFkZXIgc29tZXdoZXJlPyBJIHNob3VsZCBwcm9iYWJseSBncmVwIGZvciB0aG9zZSBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBremFsbG9jX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDcwPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUxLS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1MjojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTMtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU0OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU1LVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXQgU2NoZWR1bGVyIENsYXNzaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgdG8gYSBidW5jaCBvZiBga3phbGxvY19vYmpgIGNhbGxzIHdpdGhpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgY2xhc3NpZmllciBjb2RlIChgbmV0L3NjaGVkL2Nsc18qLmNgKS4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBnb2FsIGhlcmUgaXMgcmVzb3VyY2UgYWNjb3VudGluZy4gVGhlIG9ubHkgKmZ1bmN0aW9uYWwqIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGFuIGBpZHJfcmVtb3ZlYCBjYWxsIGluIGBjbHNfYmFzaWMuY2AuCgpHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIHNheSB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gbmV0d29yayBzY2hlZHVsZXJzLCBhbmQgd2hpbGUgdGhlIGNoYW5nZSBpcyBzdWJ0bGUsIGFueSBidWcgaW4gdGhpcyBhcmVhIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wYWN0LiBTbywgeWVzLCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IEkmIzM5O2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmb2N1cyBhcmVhcy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgYXNrcyBtZSB0byBpZGVudGlmeSBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBhbmQgYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIGZ1enppbmcuIExvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXNlIGZ1bmN0aW9ucyBzdGFuZCBvdXQ6CgoqICAgYGJhc2ljX2NoYW5nZWAKKiAgIGBjbHNfYnBmX2NoYW5nZWAKKiAgIGBjbHNfY2dyb3VwX2NoYW5nZWAKKiAgIGBmbG93X2NoYW5nZWAKKiAgIGBmbF9jaGFuZ2VgCiogICBgZndfY2hhbmdlYAoqICAgYG1hbGxfY2hhbmdlYAoqICAgYHJvdXRlNF9jaGFuZ2VgCiogICBgdTMyX2NoYW5nZWAKClRoZXNlIGFyZSB0aGUgYC5jaGFuZ2VgIGNhbGxiYWNrcywgdGhlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLiBUaGVzZSBhcmUgKnBlcmZlY3QqIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhleSBhcmVuJiMzOTt0IGluIHRoZSBob3QgcGF0aCAoYC5jbGFzc2lmeWAgd291bGQgYmUpLCBidXQgdGhleSBhcmUgKmNyaXRpY2FsKiBmb3IgY29udHJvbGxpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBjbGFzc2lmaWVycy4KCkkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlncyBmb3IgdGhlc2Ugc3ltYm9scy4KCiogICBgTkVUX1NDSF9CQVNJQ2AKKiAgIGBORVRfU0NIX0JQRmAKKiAgIGBORVRfQ0dST1VQX0JQRmAgb3IgYE5FVF9DTFNfQ0dST1VQYAoqICAgYE5FVF9DTFNfRkxPV2AKKiAgIGBORVRfQ0xTX0ZMT1dFUmAKKiAgIGBORVRfQ0xTX0ZXYAoqICAgYE5FVF9DTFNfTUFUQ0hBTExgCiogICBgTkVUX0NMU19ST1VURTRgCiogICBgTkVUX0NMU19VMzJgCgpPa2F5LCB0aG9zZSBsb29rIHJpZ2h0LiBHb29kLiBJIHNob3VsZCB2ZXJpZnkgdGhlIGNvbmZpZyBuYW1lcyB0byBiZSAxMDAlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NDgxPWNvbmZpZyBORVRfQ0xTXG4tLVxubmV0L3NjaGVkL0tjb25maWctNDgzLVxubmV0L3NjaGVkL0tjb25maWc6NDg0OmNvbmZpZyBORVRfQ0xTX0JBU0lDXG5uZXQvc2NoZWQvS2NvbmZpZy00ODUtXHR0cmlzdGF0ZSBcJiMzNDtFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy00OTMtXG5uZXQvc2NoZWQvS2NvbmZpZzo0OTQ6Y29uZmlnIE5FVF9DTFNfUk9VVEU0XG5uZXQvc2NoZWQvS2NvbmZpZy00OTUtXHR0cmlzdGF0ZSBcJiMzNDtSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01MDUtXG5uZXQvc2NoZWQvS2NvbmZpZzo1MDY6Y29uZmlnIE5FVF9DTFNfRldcbm5ldC9zY2hlZC9LY29uZmlnLTUwNy1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBtYXJrIChGVylcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTUzMz1jb25maWcgQ0xTX1UzMl9NQVJLXG4tLVxubmV0L3NjaGVkL0tjb25maWctNTM4LVxubmV0L3NjaGVkL0tjb25maWc6NTM5OmNvbmZpZyBORVRfQ0xTX0ZMT1dcbm5ldC9zY2hlZC9LY29uZmlnLTU0MC1cdHRyaXN0YXRlIFwmIzM0O0Zsb3cgY2xhc3NpZmllclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU0OS1cbm5ldC9zY2hlZC9LY29uZmlnOjU1MDpjb25maWcgTkVUX0NMU19DR1JPVVBcbm5ldC9zY2hlZC9LY29uZmlnLTU1MS1cdHRyaXN0YXRlIFwmIzM0O0NvbnRyb2wgR3JvdXAgQ2xhc3NpZmllclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU2MS1cbm5ldC9zY2hlZC9LY29uZmlnOjU2Mjpjb25maWcgTkVUX0NMU19CUEZcbm5ldC9zY2hlZC9LY29uZmlnLTU2My1cdHRyaXN0YXRlIFwmIzM0O0JQRi1iYXNlZCBjbGFzc2lmaWVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNTcxLVxubmV0L3NjaGVkL0tjb25maWc6NTcyOmNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxubmV0L3NjaGVkL0tjb25maWctNTczLVx0dHJpc3RhdGUgXCYjMzQ7Rmxvd2VyIGNsYXNzaWZpZXJcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01ODEtXG5uZXQvc2NoZWQvS2NvbmZpZzo1ODI6Y29uZmlnIE5FVF9DTFNfTUFUQ0hBTExcbm5ldC9zY2hlZC9LY29uZmlnLTU4My1cdHRyaXN0YXRlIFwmIzM0O01hdGNoLWFsbCBjbGFzc2lmaWVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9NjkwPWNvbmZpZyBORVRfRU1BVENIX0lQVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cbm5ldC9zY2hlZC9LY29uZmlnOjcwMjpjb25maWcgTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBORVRfQ0xTX0JBU0lDYCwgYE5FVF9DTFNfUk9VVEU0YCwgYE5FVF9DTFNfRldgLCBgTkVUX0NMU19VMzJgLCBgTkVUX0NMU19GTE9XYCwgYE5FVF9DTFNfQ0dST1VQYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9DTFNfRkxPV0VSYCwgYW5kIGBORVRfQ0xTX01BVENIQUxMYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSB2YXJpb3VzIGNsYXNzaWZpZXIgbW9kdWxlcyBiZWluZyBlbmFibGVkLiBQcmV0dHkgc3RhbmRhcmQgc3R1ZmYsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIHRvIHRoZSBjb3JlIGNsYXNzaWZpZXIgQVBJLgoKQWhhLCBhbmQgbm93IEkgc2VlIHRoYXQgYGNsc19hcGkuY2AgaXMgYWxzbyBtb2RpZmllZC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBJZiB0aGUgY29yZSBBUEkgaXMgdG91Y2hlZCwgSSBuZWVkIHRvIHBheSAqdmVyeSogY2xvc2UgYXR0ZW50aW9uLiBUaGlzIGltcGFjdHMgdGhlIGdlbmVyYWwgZnJhbWV3b3JrLCBzbyB0aGUgcmlwcGxlIGVmZmVjdHMgd2lsbCBuZWVkIHRvIGJlIGFuYWx5emVkLiBJIHNlZSBgdGNmX2V4dHNfaW5pdF9leGAgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGluIGBjbHNfYXBpLmNgIHRoYXQmIzM5O3MgYmVlbiBhbHRlcmVkLiBUaGlzIGlzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgTkVUX0NMU19BQ1RgIGlzIG5lZWRlZCBmb3IgYHRjZl9leHRzX2luaXRfZXhgIGFzIHdlbGwsIG9yIGFueSBvdGhlciBvZiB0aGVzZSBvcHRpb25zIGZvciB0aGF0IG1hdHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzk7ZG9lcyB0aGlzIGNoYW5nZSByZXF1aXJlIGEgY2hhbmdlIHRvIHRoZSBhY3Rpb24gc3Vic3lzdGVtIGFzIHdlbGw/JiMzOTsuIFRoaXMgZnVuY3Rpb24gcHJvYmFibHkgaGFuZGxlcyBpbml0aWFsaXphdGlvbiBvZiB0aGUgZXh0ZW5kZWQgY2xhc3NpZmllciBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGF0IHdvdWxkIGJlIGNyaXRpY2FsIGlmIGFueSBhY3Rpb25zIGFyZSBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9leHRzX2luaXRfZXgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmM9MzI2MD1zdGF0aWMgaW50IHRjX2R1bXBfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzM1Mi1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzM1MzppbnQgdGNmX2V4dHNfaW5pdF9leChzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMsIHN0cnVjdCBuZXQgKm5ldCwgaW50IGFjdGlvbixcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzM1NC1cdFx0ICAgICBpbnQgcG9saWNlLCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdTMyIGhhbmRsZSxcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMzOTEtfVxubmV0L3NjaGVkL2Nsc19hcGkuYzozMzkyOkVYUE9SVF9TWU1CT0wodGNmX2V4dHNfaW5pdF9leCk7XG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMzOTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzY5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgQ29yZSBGdW5jdGlvbioqCgpSaWdodCwgYHRjZl9leHRzX2luaXRfZXhgIGlzIGRlZmluaXRlbHkgYSBrZXkgcGxheWVyIGhlcmUsIGFzIEkgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBGaXJzdCB0aGluZ3MgZmlyc3QsIGlzIGBORVRfQ0xTYCByZXF1aXJlZCBmb3IgdGhpcyB0byBmdW5jdGlvbj8gQSBxdWljayBjaGVjayByZXZlYWxzIGl0JiMzOTtzIGluZGVlZCB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gZm9yIHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGguIEdvb2QsIHRoYXQgY29uZmlybXMgYSBkZXBlbmRlbmN5LiBBbmQsIHNpbmNlIEkmIzM5O20gYWxyZWFkeSBkaWdnaW5nIGludG8gcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBORVRfU0NIRURgIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHNlZSBob3cgaXQgbWlnaHQgZmFjdG9yIGluLiBJdCYjMzk7cyBiZXN0IHRvIGNvbnNpZGVyIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvZ2V0aGVyIHNpbmNlIHRoZXkmIzM5O3JlIHRpZ2h0bHkgY291cGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9uczoKCioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGEgd2hvbGUgc3VpdGUgb2YgbmV0d29yayBzY2hlZHVsZXIgYW5kIGNsYXNzaWZpZXIgY29uZmlndXJhdGlvbnM6IGBORVRfU0NIRURgLCBgTkVUX0NMU2AsIGBORVRfQ0xTX0JBU0lDYCwgYE5FVF9DTFNfUk9VVEU0YCwgYE5FVF9DTFNfRldgLCBgTkVUX0NMU19VMzJgLCBgTkVUX0NMU19GTE9XYCwgYE5FVF9DTFNfQ0dST1VQYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9DTFNfRkxPV0VSYCwgYE5FVF9DTFNfTUFUQ0hBTExgLCBhbmQgYE5FVF9DTFNfQUNUYC4gU2VlbXMgbGlrZSBhIHByZXR0eSBjb21wcmVoZW5zaXZlIHNldC4gV2UmIzM5O3ZlIGdvdCB0aGUgYmFzaWNzIGNvdmVyZWQsIHNvbWUgbW9yZSBhZHZhbmNlZCBjbGFzc2lmaWVycyBsaWtlIEJQRiBhbmQgRkxPVywgYW5kIHNvbWUgc3BlY2lmaWMgb25lcyBsaWtlIENHUk9VUCBhbmQgRkxPV0VSLiBBbmQgb2YgY291cnNlLCB0aGUgZXZlci1pbXBvcnRhbnQgYWN0aW9uIGNvbXBvbmVudCBgTkVUX0NMU19BQ1RgLgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGBORVRfQ0xTX1JPVVRFNGAuLi4gdGhhdCBvbmUgcmluZ3MgYSBiZWxsLiBJdCYjMzk7cyBhIGJpdCBzcGVjaWZpYywgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgaXQgcmVsaWVzIG9uIHNvbWV0aGluZyBlbHNlIGJlaW5nIGVuYWJsZWQuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIHRoZXJlLiBNYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueSBjcnVjaWFsIHByZXJlcXVpc2l0ZXMsIGFuZCB3aGF0IHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbCB3ZSBhcmUgdXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ0xTX1JPVVRFNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTQ4ND1jb25maWcgTkVUX0NMU19CQVNJQ1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTQ5My1cbm5ldC9zY2hlZC9LY29uZmlnOjQ5NDpjb25maWcgTkVUX0NMU19ST1VURTRcbm5ldC9zY2hlZC9LY29uZmlnLTQ5NS1cdHRyaXN0YXRlIFwmIzM0O1JvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIEZpbGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSByb3V0ZTQgY2xhc3NpZmllciB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc2NoZWR1bGVyLiBUaW1lIHRvIHB1bGwgdXAgYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgYXJvdW5kIHRoZSBgTkVUX0NMU19ST1VURTRgIGRlZmluZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNsYXNzaWZpZXIgaXMgZXhwb3NlZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcXVldWluZyBkaXNjaXBsaW5lcyBvciBjbGFzc2lmaWVyIG9wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIHVwIHRvIHNwZWVkIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTA6XHRcbiA0OTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDQ5MjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Jhc2ljLlxuIDQ5MzpcdFxuIDQ5NDpcdGNvbmZpZyBORVRfQ0xTX1JPVVRFNFxuIDQ5NTpcdFx0dHJpc3RhdGUgXCYjMzQ7Um91dGluZyBkZWNpc2lvbiAoUk9VVEUpXCYjMzQ7XG4gNDk2Olx0XHRkZXBlbmRzIG9uIElORVRcbiA0OTc6XHRcdHNlbGVjdCBJUF9ST1VURV9DTEFTU0lEXG4gNDk4Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDQ5OTpcdFx0aGVscFxuIDUwMDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXG4gNTAxOlx0XHQgIGFjY29yZGluZyB0byB0aGUgcm91dGUgdGFibGUgZW50cnkgdGhleSBtYXRjaGVkLlxuIDUwMjpcdFxuIDUwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTA0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfcm91dGUuXG4gNTA1Olx0XG4gNTA2Olx0Y29uZmlnIE5FVF9DTFNfRldcbiA1MDc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBtYXJrIChGVylcJiMzNDtcbiA1MDg6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTA5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDY1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTmV0d29yayBDbGFzc2lmaWVycyBhbmQgQ2dyb3VwcyoqCgpPa2F5LCBzbyB0aGUgYmVoYXZpb3IgaGVyZSBoaW5nZXMgb24gaG93IGBJTkVUYCBpcyBjb25maWd1cmVkLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBjbGFzc2lmaWNhdGlvbiBtZWNoYW5pc21zLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBzdGFydCBieSBleGFtaW5pbmcgYE5FVF9DTFNfQ0dST1VQYC4mIzM0OyBUaGlzIGZlZWxzIGxpa2UgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCwgdGhlIGNncm91cCBpbnRlZ3JhdGlvbiBtaWdodCBwcm92aWRlIHRoZSBjb3JlIGxpbmsgaGVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDU6XHRcdCAgaW4gY29tYmluYXRpb24gd2l0aCBTRlEuXG4gNTQ2Olx0XG4gNTQ3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA1NDg6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mbG93LlxuIDU0OTpcdFxuIDU1MDpcdGNvbmZpZyBORVRfQ0xTX0NHUk9VUFxuIDU1MTpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29udHJvbCBHcm91cCBDbGFzc2lmaWVyXCYjMzQ7XG4gNTUyOlx0XHRzZWxlY3QgTkVUX0NMU1xuIDU1MzpcdFx0c2VsZWN0IENHUk9VUF9ORVRfQ0xBU1NJRFxuIDU1NDpcdFx0ZGVwZW5kcyBvbiBDR1JPVVBTXG4gNTU1Olx0XHRoZWxwXG4gNTU2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvbiB0aGUgY29udHJvbFxuIDU1NzpcdFx0ICBjZ3JvdXAgb2YgdGhlaXIgcHJvY2Vzcy5cbiA1NTg6XHRcbiA1NTk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDU2MDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Nncm91cC5cbiA1NjE6XHRcbiA1NjI6XHRjb25maWcgTkVUX0NMU19CUEZcbiA1NjM6XHRcdHRyaXN0YXRlIFwmIzM0O0JQRi1iYXNlZCBjbGFzc2lmaWVyXCYjMzQ7XG4gNTY0Olx0XHRzZWxlY3QgTkVUX0NMU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBDb250cm9sIEdyb3VwIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaGluZ2VzIG9uIHRoZSBgQ0dST1VQU2Agc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBpbXBhY3QuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbiBJJiMzOTttIG9wZXJhdGluZyBvbi4KCk5vdywgZnJvbSB0aGVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgYE5FVF9DTFNfQlBGYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBjb25zaWRlcmF0aW9uOyBpdCYjMzk7cyBjZW50cmFsIHRvIGhvdyBJIGFwcHJvYWNoIHRoaXMgcGFydGljdWxhciBwcm9ibGVtLiBJdHMgYXZhaWxhYmlsaXR5IG9yIGltcGxlbWVudGF0aW9uIHNpZ25pZmljYW50bHkgY2hhbmdlcyB0aGUgbGFuZHNjYXBlLiBUaGF0JiMzOTtzIHdoZXJlIG15IGZvY3VzIHNoaWZ0cyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NjA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19jZ3JvdXAuXG4gNTYxOlx0XG4gNTYyOlx0Y29uZmlnIE5FVF9DTFNfQlBGXG4gNTYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtCUEYtYmFzZWQgY2xhc3NpZmllclwmIzM0O1xuIDU2NDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA1NjU6XHRcdGhlbHBcbiA1NjY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvblxuIDU2NzpcdFx0ICBwcm9ncmFtbWFibGUgQlBGIChKSVQmIzM5O2VkKSBmaWx0ZXJzIGFzIGFuIGFsdGVybmF0aXZlIHRvIGVtYXRjaGVzLlxuIDU2ODpcdFxuIDU2OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gNTcwOlx0XHQgIGJlIGNhbGxlZCBjbHNfYnBmLlxuIDU3MTpcdFxuIDU3MjpcdGNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxuIDU3MzpcdFx0dHJpc3RhdGUgXCYjMzQ7Rmxvd2VyIGNsYXNzaWZpZXJcJiMzNDtcbiA1NzQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTc1Olx0XHRoZWxwXG4gNTc2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb25cbiA1Nzc6XHRcdCAgYSBjb25maWd1cmFibGUgY29tYmluYXRpb24gb2YgcGFja2V0IGtleXMgYW5kIG1hc2tzLlxuIDU3ODpcdFxuIDU3OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24sIHByZXNlbnRlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERlcGVuZGVuY2llcyBhbmQgTmV0ZmlsdGVyIEhvb2tzKioKCkFscmlnaHQsIGluaXRpYWwgY29uc2lkZXJhdGlvbnMuIFRoZSBnb2FsIGlzIHRvIHdvcmsgd2l0aG91dCBpbnRyb2R1Y2luZyBhbnkgdW5uZWNlc3NhcnkgZGVwZW5kZW5jaWVzLiBJIGFsd2F5cyB0cnkgdG8ga2VlcCB0aGluZ3MgbGVhbiBhbmQgbWVhbiDigJMgbGVzcyBiYWdnYWdlLCBmZXdlciBwb2ludHMgb2YgZmFpbHVyZSwgYW5kIGVhc2llciBwb3J0YWJpbGl0eS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBuZXRmaWx0ZXIgaG9vaywgYW5kIGBORVRfQ0xTX0FDVGAganVtcHMgdG8gbWluZC4gVGhpcyBob29rIGlzIHdlbGwtc3VpdGVkIGZvciBhIHZhcmlldHkgb2YgcGFja2V0IG1hbmlwdWxhdGlvbiB0YXNrcy4gVGltZSB0byBnbyBkZWVwZXIgYW5kIGV2YWx1YXRlIGl0cyBzdWl0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk4Olx0XG4gNjk5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3MDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cbiA3MDE6XHRcbiA3MDI6XHRjb25maWcgTkVUX0NMU19BQ1RcbiA3MDM6XHRcdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuIDcwNDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA3MDU6XHRcdHNlbGVjdCBORVRfWEdSRVNTXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXG4gNzA4Olx0XHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXG4gNzA5Olx0XHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cbiA3MTA6XHRcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXG4gNzExOlx0XG4gNzEyOlx0XHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXG4gNzEzOlx0XHQgIGV4dGVuZGVkIG1hdGNoZXMuXG4gNzE0Olx0XG4gNzE1Olx0Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXG4gNzE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFmZmljIFBvbGljaW5nXCYjMzQ7XG4gNzE3Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE5ldHdvcmsgQ2xhc3NpZmljYXRpb24gQWN0aXZhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVF9DTFNfQUNUYC4gSXQmIzM5O3MgYSBzaW1wbGUgYm9vbGVhbiwgZXNzZW50aWFsbHkganVzdCBhIGZsYWcsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBmdW5kYW1lbnRhbCBkZXNpZ24gcGVyc3BlY3RpdmUuIFRoYXQga2VlcHMgdGhpbmdzIGNsZWFuIGFuZCBhdm9pZHMgdW5uZWNlc3NhcnkgY29tcGxleGl0eS4gTm93LCBnaXZlbiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIGRvd25zdHJlYW0gZnJvbSB0aGF0LiBNeSBmb2N1cyBpcyBub3cgb24gYE5FVF9DTFNfVTMyYC4gVGltZSB0byBkaWcgZGVlcGVyIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgdW5kZXJseWluZyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciBpcyBiZWluZyBpbnRlcnByZXRlZCBhbmQgdXNlZC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSB1c2FnZSBvZiBgTkVUX0NMU19VMzJgIGFuZCBsb29raW5nIGZvciByZWxhdGVkIGNvZGUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxNTpcdFxuIDUxNjpcdGNvbmZpZyBORVRfQ0xTX1UzMlxuIDUxNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcJiMzNDtcbiA1MTg6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTE5Olx0XHRoZWxwXG4gNTIwOlx0XHQgIFNheSBZIGhlcmUgdG8gYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIHVzaW5nIGEgdW5pdmVyc2FsXG4gNTIxOlx0XHQgIDMyYml0IHBpZWNlcyBiYXNlZCBjb21wYXJpc29uIHNjaGVtZS5cbiA1MjI6XHRcbiA1MjM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDUyNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3UzMi5cbiA1MjU6XHRcbiA1MjY6XHRjb25maWcgQ0xTX1UzMl9QRVJGXG4gNTI3Olx0XHRib29sIFwmIzM0O1BlcmZvcm1hbmNlIGNvdW50ZXJzIHN1cHBvcnRcJiMzNDtcbiA1Mjg6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19VMzJcbiA1Mjk6XHRcdGhlbHBcbiA1MzA6XHRcdCAgU2F5IFkgaGVyZSB0byBtYWtlIHUzMiBnYXRoZXIgYWRkaXRpb25hbCBzdGF0aXN0aWNzIHVzZWZ1bCBmb3JcbiA1MzE6XHRcdCAgZmluZSB0dW5pbmcgdTMyIGNsYXNzaWZpZXJzLlxuIDUzMjpcdFxuIDUzMzpcdGNvbmZpZyBDTFNfVTMyX01BUktcbiA1MzQ6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG1hcmtzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB1MzIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgY2xzX3UzMi5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYENPTkZJR19DTFNfVTMyX1BFUkZgIGFuZCBgQ09ORklHX0NMU19VMzJfTUFSS2Agc2VjdGlvbnMuIExldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvZGUgY2hhbmdlcy4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgcGF0Y2ggaXMgcmVwbGFjaW5nIGBfX2FsbG9jX3BlcmNwdWAgYW5kIGBhbGxvY19wZXJjcHVgIHdpdGggYF9fYWxsb2NfcGVyY3B1X2dmcGAgYW5kIGBhbGxvY19wZXJjcHVfZ2ZwYCByZXNwZWN0aXZlbHkuIEl0IGFsc28gYWRkcyBhIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcuIFRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIGxpa2VseSByZWxhdGVkIHRvIGFjY291bnRpbmcgZm9yIHRoZSBtZW1vcnkgdXNlZCBieSB0aGVzZSBwZXItQ1BVIGNvdW50ZXJzLiBUaGUgY2hhbmdlIG9mIGBfX2FsbG9jX3BlcmNwdWAgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGV2YWx1YXRlLgoKVGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBub3cgdXNpbmcgYSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmbGFnIG1lYW5zIHRoZSBzeXN0ZW0gd2lsbCBoYXZlIG1vcmUgYWNjdXJhdGUgaW5mb3JtYXRpb24gb24gd2hhdCBpcyB1c2luZyBob3cgbXVjaCBtZW1vcnksIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nLgoKQmFzZWQgb24gdGhlc2UgY2hhbmdlcywgaXQgbG9va3MgbGlrZSB3ZSYjMzk7bGwgbmVlZCBib3RoIGBDT05GSUdfQ0xTX1UzMl9QRVJGYCBhbmQgYENPTkZJR19DTFNfVTMyX01BUktgIGVuYWJsZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgYE5FVF9DTFNfTUFUQ0hBTExgIGlzIGFsc28gZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0XHQgIGJlIGNhbGxlZCBjbHNfZmxvd2VyLlxuIDU4MTpcdFxuIDU4MjpcdGNvbmZpZyBORVRfQ0xTX01BVENIQUxMXG4gNTgzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXRjaC1hbGwgY2xhc3NpZmllclwmIzM0O1xuIDU4NDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA1ODU6XHRcdGhlbHBcbiA1ODY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvblxuIDU4NzpcdFx0ICBub3RoaW5nLiBFdmVyeSBwYWNrZXQgd2lsbCBtYXRjaC5cbiA1ODg6XHRcbiA1ODk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuIDU5MDpcdFx0ICBiZSBjYWxsZWQgY2xzX21hdGNoYWxsLlxuIDU5MTpcdFxuIDU5MjpcdGNvbmZpZyBORVRfRU1BVENIXG4gNTkzOlx0XHRib29sIFwmIzM0O0V4dGVuZGVkIE1hdGNoZXNcJiMzNDtcbiA1OTQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODgwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgbmV0d29yayBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBzZXQgdXAuIEkgc2VlIGEgcHJldHR5IGNvbXByZWhlbnNpdmUgbGlzdCBoZXJlOiBgTkVUX1NDSEVEYCwgYE5FVF9DTFNgLCBgTkVUX0NMU19CQVNJQ2AsIGBORVRfQ0xTX1JPVVRFNGAsIGBJTkVUYCwgYE5FVF9DTFNfRldgLCBgTkVUX0NMU19VMzJgLCBgQ0xTX1UzMl9QRVJGYCwgYENMU19VMzJfTUFSS2AsIGBORVRfQ0xTX0ZMT1dgLCBhbmQgYE5FVF9DTFNfQ0dST1VQYC4gQW5kIG9mIGNvdXJzZSB0aGUgbW9yZSBhZHZhbmNlZCBzdHVmZiB0b286IGBDR1JPVVBTYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9DTFNfRkxPV0VSYCwgYE5FVF9DTFNfTUFUQ0hBTExgLCBhbmQgYE5FVF9DTFNfQUNUYC4KCkhtbSwgbm93IHRoYXQgSSBsb29rIGF0IHRoaXMgbGlzdCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBDR1JPVVBTYCBpcyBhY3R1YWxseSB0aGUgY29uZmlndXJhdGlvbiBpdGVtIEkgbmVlZC4gSXQgc2hvdWxkIGJlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEkmIzM5O20gZ29pbmcgdG8gY29uZmlybSB0aGF0IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDQ0PWNvbmZpZyBTTEFCX09CSl9FWFRcbi0tXG5pbml0L0tjb25maWctMTA0Ni1cbmluaXQvS2NvbmZpZzoxMDQ3Om1lbnVjb25maWcgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNDgtXHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZmllbGQgb2YgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnMqKgoKQWxyaWdodCwgeWVwLCB0aGF0JiMzOTtzIGl0LiBgQ0dST1VQU2AgaXMgdGhlIGNvcnJlY3QgcGFyYW1ldGVyIHdlJiMzOTtyZSBsb29raW5nIGF0LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgY2hhbmdlcyBvciBhbmFseXNpcywgaXQmIzM5O3MgYWx3YXlzIHNtYXJ0IHRvIGNvbmZpcm0uIExldCYjMzk7cyBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYElORVRgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIHNlY3Rpb24gd2UgbmVlZCB0byBiZSBmb2N1c2luZyBvbi4gQSBkb3VibGUtY2hlY2sgbm93IHNhdmVzIGEgaGVhZGFjaGUgbGF0ZXIsIGVzcGVjaWFsbHkgd2l0aCBzb21ldGhpbmcgdGhpcyBmdW5kYW1lbnRhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzMwPWNvbmZpZyBORVRfRk9VX0lQX1RVTk5FTFNcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cbm5ldC9pcHY0L0tjb25maWc6MzM5OmNvbmZpZyBJTkVUX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzUzLVxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzgxLVxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM5My1cbm5ldC9pcHY0L0tjb25maWc6Mzk0OmNvbmZpZyBJTkVUX0lQQ09NUFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogSVBDb21wIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MDMtXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXG5uZXQvaXB2NC9LY29uZmlnLTQwNS1cdGludCBcJiMzNDtJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MTMtXG5uZXQvaXB2NC9LY29uZmlnOjQxNDpjb25maWcgSU5FVF9YRlJNX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy00MTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNDE4LVxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTQyMC1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MjItXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cdHRyaXN0YXRlIFwmIzM0O0lORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDM0LVxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDM2LVx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzOC1cbm5ldC9pcHY0L0tjb25maWc6NDM5OmNvbmZpZyBJTkVUX1VEUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cdHRyaXN0YXRlIFwmIzM0O1VEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NDYtXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00NDgtXHR0cmlzdGF0ZSBcJiMzNDtSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDU0LVxubmV0L2lwdjQvS2NvbmZpZzo0NTU6Y29uZmlnIElORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC9LY29uZmlnLTQ1Ni1cdGJvb2wgXCYjMzQ7SU5FVDogYWxsb3cgcHJpdmlsZWdlZCBwcm9jZXNzIHRvIGFkbWluaXN0cmF0aXZlbHkgY2xvc2Ugc29ja2V0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMzMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyB0aHJvdWdoIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGEgc3BlY2lmaWMgb3B0aW9uLCBgSU5FVGAsIGlzIGRlZmluZWQuIEluaXRpYWxseSwgSSB3YXMgcHJvYmFibHkgbWVudGFsbHkgc2Nhbm5pbmcgdGhlIG9idmlvdXMgcGxhY2VzLCBtYXliZSB0aGlua2luZyBpdCB3b3VsZCBiZSBpbiBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIHByb3RvY29scyBpbiBnZW5lcmFsLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIGp1c3QgcmVhbGl6ZWQsIGFoYSEsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2shIEl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBuZXQvS2NvbmZpZ2AuIEV4Y2VsbGVudC4gU29tZXRpbWVzLCB5b3UganVzdCBuZWVkIGEgZnJlc2ggcGVyc3BlY3RpdmUsIG9yIGEgcmUtZm9jdXMgdG8gZmluZCB0aGUgb2J2aW91cyBhbnN3ZXIuIEkga25ldyBJJiMzOTtkIGZpbmQgaXQgZXZlbnR1YWxseS4gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1Rcbi0tXG5uZXQvS2NvbmZpZy0xMTMtXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcbm5ldC9LY29uZmlnLTExNS1cdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1OTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRnVuY3Rpb24gU3ltYm9scyBhbmQgQVBJIEVudHJ5cG9pbnRzKioKCk9rYXksIHllcywgYElORVRgIHNlZW1zIHNwb3Qgb24gaGVyZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBJIHNlZTogYGJhc2ljX2NoYW5nZWAsIGBjbHNfYnBmX2NoYW5nZWAsIGBjbHNfY2dyb3VwX2NoYW5nZWAsIGBmbG93X2NoYW5nZWAsIGBmbF9jaGFuZ2VgLCBgZndfY2hhbmdlYCwgYG1hbGxfY2hhbmdlYCwgYHJvdXRlNF9jaGFuZ2VgLCBhbmQgYHUzMl9jaGFuZ2VgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucz8gVGhlIGFuc3dlciBpcyB5ZXMsIHRoZXkgKmFyZSogc3RhdGljIGZ1bmN0aW9ucywgdXNlZCBhcyB0aGUgYC5jaGFuZ2VgIGNhbGxiYWNrcyB3aXRoaW4gYHRjZl9wcm90b19vcHNgLiBXYWl0IGEgbWludXRlLCB0aGUgcHJvbXB0IGVtcGhhc2l6ZXMgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIFRoZXNlICphcmVuJiMzOTt0KiBpbmxpbmVkLCB0aG91Z2gsIGJlY2F1c2UgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGB0Y2ZfcHJvdG9fb3BzYC4gVGhhdOKAmXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyOyB0aGVpciBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFyZSByZXRhaW5lZC4KClRvIGNvbmZpcm0gdGhhdCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhleSBhcmUgaW5kZWVkIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLiBPa2F5LCBnb29kLiBgYmFzaWNfY2hhbmdlYCAqaXMqIGFzc2lnbmVkIHRvIGAuY2hhbmdlYCBpbiBgY2xzX2Jhc2ljX29wc2AsIGZvciBleGFtcGxlLiBTbywgbm8gaW5saW5pbmcuIFRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQsIHRoZSBwcm9tcHQgc3RpbGwgc2F5cyAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMmIzM0Oy4gVGhlIHByaW1hcnkgQVBJIGVudHJ5cG9pbnQgaGVyZSBpcyBgdGNfbmV3X3RmaWx0ZXJgIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVGltZSB0byB0dXJuIG15IGF0dGVudGlvbiB0aGVyZSwgYW5kIG1ha2Ugc3VyZSB0aGF0IGlzIHRoZSBhcHByb3ByaWF0ZSBlbnRyeSBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmM9MjI0Nj1zdGF0aWMgYm9vbCBpc19pbmdyZXNzX29yX2Nsc2FjdChzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaywgc3RydWN0IFFkaXNjICpxKVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjI1MC1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MjI1MTpzdGF0aWMgaW50IHRjX25ld190ZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjI1Mi1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQxMTc9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2ZpbHRlcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L3NjaGVkL2Nsc19hcGkuYzo0MTE4Olx0ey5tc2d0eXBlID0gUlRNX05FV1RGSUxURVIsIC5kb2l0ID0gdGNfbmV3X3RmaWx0ZXIsXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQxMTktXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ4NwoJCQkJCQkJb3V0cHV0OiAzMzAKCQkJCQkJCXRob3VnaHRzOiAxMDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIHRoZSBGdXp6ZXIgb24gVGFyZ2V0ZWQgQ2xhc3NpZmllciBDaGFuZ2VzKioKCk9rYXksIGhlcmUmIzM5O3MgaG93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcy4gVGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZXNlIGNoYW5nZXMgc2VlbXMgdG8gYmUgYHRjX25ld190ZmlsdGVyYCwgYnV0IHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIHJlYWxseSB3aXRoaW4gdGhlIGAuY2hhbmdlYCBjYWxsYmFja3Mgb2Ygc3BlY2lmaWMgY2xhc3NpZmllcnMuIElmIEkgKm9ubHkqIHNwZWNpZnkgYHRjX25ld190ZmlsdGVyYCwgdGhlIGZ1enplciBtaWdodCBub3QgYmUgZGlyZWN0ZWQgZW5vdWdoIHRvIHRoZSBtb3N0IHJlbGV2YW50IGNvZGUuIFRoZSBwcm9tcHQgZG9lcyBtZW50aW9uIGZvY3VzaW5nIG9uIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMsIGFuZCBhdm9pZGluZyBnZW5lcmljIG9uZXMuIGB0Y19uZXdfdGZpbHRlcmAgaXMgbW9yZSBvZiBhIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24sIG5vdCBhIGhvdCBwYXRoLCBzbyBJIHNob3VsZCBiZSBzZWxlY3RpdmUuCgpHaXZlbiB0aGF0LCBJJiMzOTtsbCBpbmNsdWRlIHRoZSBgLmNoYW5nZWAgY2FsbGJhY2tzIGRpcmVjdGx5OiBgYmFzaWNfY2hhbmdlYCwgYGNsc19icGZfY2hhbmdlYCwgYGNsc19jZ3JvdXBfY2hhbmdlYCwgYGZsb3dfY2hhbmdlYCwgYGZsX2NoYW5nZWAsIGBmd19jaGFuZ2VgLCBgbWFsbF9jaGFuZ2VgLCBgcm91dGU0X2NoYW5nZWAsIGFuZCBgdTMyX2NoYW5nZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFsdGVyZWQgYnkgdGhlIHBhdGNoLgoKV2FpdCwgYHRjZl9leHRzX2luaXRfZXhgIGlzIGFsc28gbW9kaWZpZWQsIGFuZCBpdCYjMzk7cyBhbiAqZXhwb3J0ZWQqIGZ1bmN0aW9uLCBkZWZpbmVkIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgYWRkaXRpb24gdG8gdGhlIEZvY3VzU3ltYm9scyBsaXN0LiBJdCYjMzk7cyBhIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50LgoKQ2hlY2tpbmcgYHRjZl9leHRzX2luaXRfZXhgIGNvbmZpcm1zIGl0JiMzOTtzIHJlbGV2YW50LCBhbmQgSSB3aWxsIGFkZCBpdCB0byB0aGUgRm9jdXNTeW1ib2xzLgoKU28sIHRoZSBjdXJyZW50IEZvY3VzU3ltYm9scyBsaXN0IGlzOgoqICAgYGJhc2ljX2NoYW5nZWAKKiAgIGBjbHNfYnBmX2NoYW5nZWAKKiAgIGBjbHNfY2dyb3VwX2NoYW5nZWAKKiAgIGBmbG93X2NoYW5nZWAKKiAgIGBmbF9jaGFuZ2VgCiogICBgZndfY2hhbmdlYAoqICAgYG1hbGxfY2hhbmdlYAoqICAgYHJvdXRlNF9jaGFuZ2VgCiogICBgdTMyX2NoYW5nZWAKKiAgIGB0Y2ZfZXh0c19pbml0X2V4YAoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcsIGB0Y2ZfZXh0c19pbml0X2V4YCBpcyAqbm90KiBzdGF0aWMsIGl0JiMzOTtzIGBFWFBPUlRfU1lNQk9MYC4gVGhlIGAuY2hhbmdlYCBjYWxsYmFja3MgKmFyZSogc3RhdGljLCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgbWVhbmluZyB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZC4gV2hpbGUgU3l6a2FsbGVyICpjYW4qIHVzZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGUgcHJvbXB0IGVuY291cmFnZXMgbm9uLXN0YXRpYy4gSW5jbHVkaW5nIGB0Y19uZXdfdGZpbHRlcmAgbWlnaHQgYmUgdXNlZnVsLCBhbmQgYHRjZl9leHRzX2luaXRfZXhgIGxvb2tzIGdvb2QgYXMgYW4gZXh0ZXJuYWwgZnVuY3Rpb24uCgpIb3dldmVyLCB0aGUga2V5IGlzIGRpcmVjdGluZyB0aGUgZnV6emVyIHRvICpzcGVjaWZpYyogY2hhbmdlcy4gU2luY2UgdGhlIGAuY2hhbmdlYCBjYWxsYmFja3MgYXJlIHRoZSAqZXhhY3QqIGZ1bmN0aW9ucyBtb2RpZmllZCwgSSYjMzk7bGwga2VlcCB0aGVtIGluIHRoZSBsaXN0LiBUaGV5IGFyZSB3aGVyZSB0aGUgY29kZSBjaGFuZ2VzIGFyZSBsb2NhdGVkLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgcGF0Y2ggZm9yIG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcy4KCkluIGBjbHNfYmFzaWMuY2AsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uOiAgdGhlIGFkZGl0aW9uIG9mIGEgbWlzc2luZyBgaWRyX3JlbW92ZWAgb24gYW4gZXJyb3IgcGF0aCB3aGVuIGBhbGxvY19wZXJjcHVfZ2ZwYCBmYWlscy4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQgZml4ZXMgYW4gSURSIGxlYWsuIFRoaXMgaXMgdGhlIG9ubHkgYWRkaXRpb25hbCBmdW5jdGlvbmFsIGNoYW5nZSBJJiMzOTt2ZSBzZWVuLiBUaGlzIHBhdGggY2FuIGJlIHRlc3RlZCB3aXRoIGZhdWx0IGluamVjdGlvbiBkdXJpbmcgZnV6emluZyB0byB2ZXJpZnkgdGhlIGZpeCBhbmQgcHJldmVudCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24uCgpUaGUgY29uZmlncyBhcmU6IGBORVRfU0NIRURgLCBgTkVUX0NMU2AsIGBORVRfQ0xTX0JBU0lDYCwgYE5FVF9DTFNfUk9VVEU0YCwgYElORVRgLCBgTkVUX0NMU19GV2AsIGBORVRfQ0xTX1UzMmAsIGBDTFNfVTMyX1BFUkZgLCBgQ0xTX1UzMl9NQVJLYCwgYE5FVF9DTFNfRkxPV2AsIGBORVRfQ0xTX0NHUk9VUGAsIGBDR1JPVVBTYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9DTFNfRkxPV0VSYCwgYE5FVF9DTFNfTUFUQ0hBTExgLCBhbmQgYE5FVF9DTFNfQUNUYC4KClRoaXMgZXJyb3IgcGF0aCBpcyB3b3J0aCBmdXp6aW5nLCBzbyBJIHdpbGwgc2V0IFdvcnRoRnV6emluZz10cnVlLgoKT2theSwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMUyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0JBU0lDJiMzNDssCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GVyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1UzMiYjMzQ7LAogICAgJiMzNDtDTFNfVTMyX1BFUkYmIzM0OywKICAgICYjMzQ7Q0xTX1UzMl9NQVJLJiMzNDssCiAgICAmIzM0O05FVF9DTFNfRkxPVyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDssCiAgICAmIzM0O05FVF9DTFNfRkxPV0VSJiMzNDssCiAgICAmIzM0O05FVF9DTFNfTUFUQ0hBTEwmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiYXNpY19jaGFuZ2UmIzM0OywKICAgICYjMzQ7Y2xzX2JwZl9jaGFuZ2UmIzM0OywKICAgICYjMzQ7Y2xzX2Nncm91cF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7Zmxvd19jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZmxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2Z3X2NoYW5nZSYjMzQ7LAogICAgJiMzNDttYWxsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfY2hhbmdlJiMzNDssCiAgICAmIzM0O3UzMl9jaGFuZ2UmIzM0OywKICAgICYjMzQ7dGNmX2V4dHNfaW5pdF9leCYjMzQ7LAogICAgJiMzNDt0Y19uZXdfdGZpbHRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEdGUF9LRVJORUxfQUNDT1VOVCB0byB2YXJpb3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBuZXR3b3JrIGNsYXNzaWZpZXJzLiBXaGlsZSBtb3N0bHkgYW4gYWNjb3VudGluZyBjaGFuZ2UsIGl0IGFsc28gaW5jbHVkZXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggaW4gY2xzX2Jhc2ljLmMgKGJhc2ljX2NoYW5nZSkgd2hlcmUgaXQgYWRkcyBhIG1pc3NpbmcgaWRyX3JlbW92ZSBvbiB0aGUgZXJyb3IgcGF0aCB3aGVuIGFsbG9jX3BlcmNwdV9nZnAgZmFpbHMuIFRoaXMgZXJyb3IgcGF0aCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBmYXVsdCBpbmplY3Rpb24gZHVyaW5nIGZ1enppbmcgdG8gZW5zdXJlIG5vIElEUiBsZWFrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFMmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CQVNJQyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1JPVVRFNCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9DTFNfRlcmIzM0OywKICAgICYjMzQ7TkVUX0NMU19VMzImIzM0OywKICAgICYjMzQ7Q0xTX1UzMl9QRVJGJiMzNDssCiAgICAmIzM0O0NMU19VMzJfTUFSSyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZMT1cmIzM0OywKICAgICYjMzQ7TkVUX0NMU19DR1JPVVAmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0JQRiYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZMT1dFUiYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX01BVENIQUxMJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmFzaWNfY2hhbmdlJiMzNDssCiAgICAmIzM0O2Nsc19icGZfY2hhbmdlJiMzNDssCiAgICAmIzM0O2Nsc19jZ3JvdXBfY2hhbmdlJiMzNDssCiAgICAmIzM0O2Zsb3dfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmd19jaGFuZ2UmIzM0OywKICAgICYjMzQ7bWFsbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDt1MzJfY2hhbmdlJiMzNDssCiAgICAmIzM0O3RjZl9leHRzX2luaXRfZXgmIzM0OywKICAgICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBHRlBfS0VSTkVMX0FDQ09VTlQgdG8gdmFyaW91cyBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gbmV0d29yayBjbGFzc2lmaWVycy4gV2hpbGUgbW9zdGx5IGFuIGFjY291bnRpbmcgY2hhbmdlLCBpdCBhbHNvIGluY2x1ZGVzIGEgZnVuY3Rpb25hbCBidWcgZml4IGluIGNsc19iYXNpYy5jIChiYXNpY19jaGFuZ2UpIHdoZXJlIGl0IGFkZHMgYSBtaXNzaW5nIGlkcl9yZW1vdmUgb24gdGhlIGVycm9yIHBhdGggd2hlbiBhbGxvY19wZXJjcHVfZ2ZwIGZhaWxzLiBUaGlzIGVycm9yIHBhdGggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgZmF1bHQgaW5qZWN0aW9uIGR1cmluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBJRFIgbGVha3Mgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgY2xhc3NpZmllcnMgKGBuZXQvc2NoZWQvY2xzXyouY2ApIHRvIHVzZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmb3IgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLiBJdCByZXBsYWNlcyBga3phbGxvY19vYmpgLCBga3phbGxvY19vYmpzYCwgYGt6YWxsb2NfZmxleGAsIGBhbGxvY19wZXJjcHVgLCBga21lbWR1cGAsIGFuZCBgbmxhX21lbWR1cGAgd2l0aCB0aGVpciBgX2dmcGAgb3IgYWNjb3VudGVkIGVxdWl2YWxlbnRzLiBBbGwgYWZmZWN0ZWQgYWxsb2NhdGlvbnMgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkOiBga3phbGxvY2AtYmFzZWQgZnVuY3Rpb25zIGluaGVyZW50bHkgemVybyB0aGUgbWVtb3J5LCBgYWxsb2NfcGVyY3B1X2dmcGAgemVyby1pbml0aWFsaXplcyB0aGUgcGVyLUNQVSBtZW1vcnksIGFuZCBga21lbWR1cGAvYG5sYV9tZW1kdXBgIGNvcHkgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXJzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIG1pbm9yIGVycm9yLXBhdGggZml4IGluIGBjbHNfYmFzaWMuY2AgdG8gcmVtb3ZlIGFuIElEUiBlbnRyeSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgaW52YWxpZCBzdGF0ZSBidXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYWx0ZXJlZCwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc3YjgzY2Q2Yjk0OGFlZDRhZTM0MDkzYjFiYTY2YzFkMTk3MTg0OTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxNTowNTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCmluZGV4IDRlNmEyODEyYTRmMzIuLmJlNjNiMzQ3NjQwYmEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19hcGkuYwpAQCAtMzM2NCw3ICYjNDM7MzM2NCw4IEBAIGludCB0Y2ZfZXh0c19pbml0X2V4KHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cywgc3RydWN0IG5ldCAqbmV0LCBpbnQgYWN0aW9uLAogCSAqIFRoaXMgcmVmZXJlbmNlIG1pZ2h0IGJlIHRha2VuIGxhdGVyIGZyb20gdGNmX2V4dHNfZ2V0X25ldCgpLgogCSAqLwogCWV4dHMtJmd0O25ldCA9IG5ldDsKLQlleHRzLSZndDthY3Rpb25zID0ga3phbGxvY19vYmpzKHN0cnVjdCB0Y19hY3Rpb24gKiwgVENBX0FDVF9NQVhfUFJJTyk7CiYjNDM7CWV4dHMtJmd0O2FjdGlvbnMgPSBremFsbG9jX29ianMoc3RydWN0IHRjX2FjdGlvbiAqLCBUQ0FfQUNUX01BWF9QUklPLAomIzQzOwkJCQkgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFleHRzLSZndDthY3Rpb25zKQogCQlyZXR1cm4gLUVOT01FTTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jIGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jCmluZGV4IDQ5MmNkOWNlOGQ0NmYuLmUyYTk0YmE5ZmJhNzYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYmFzaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Jhc2ljLmMKQEAgLTE5Myw3ICYjNDM7MTkzLDcgQEAgc3RhdGljIGludCBiYXNpY19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3KTsKJiM0MzsJZm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghZm5ldykKIAkJcmV0dXJuIC1FTk9CVUZTOwogCkBAIC0yMTIsOSAmIzQzOzIxMiwxMSBAQCBzdGF0aWMgaW50IGJhc2ljX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJaWYgKGVycikKIAkJZ290byBlcnJvdXQ7CiAJZm5ldy0mZ3Q7aGFuZGxlID0gaGFuZGxlOwotCWZuZXctJmd0O3BmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB0Y19iYXNpY19wY250KTsKJiM0MzsJZm5ldy0mZ3Q7cGYgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCB0Y19iYXNpY19wY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghZm5ldy0mZ3Q7cGYpIHsKIAkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWlmICghZm9sZCkKJiM0MzsJCQlpZHJfcmVtb3ZlKCZhbXA7aGVhZC0mZ3Q7aGFuZGxlX2lkciwgZm5ldy0mZ3Q7aGFuZGxlKTsKIAkJZ290byBlcnJvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2JwZi5jIGIvbmV0L3NjaGVkL2Nsc19icGYuYwppbmRleCA2ZDE5MTU1YmVjYzg2Li4xODhjZjBmOTQ5ZGQ0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2JwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYnBmLmMKQEAgLTM1Miw3ICYjNDM7MzUyLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX3Byb2dfZnJvbV9vcHMoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgY2xzX2JwZl9wcm9nICpwcm9nKQogCWlmIChicGZfc2l6ZSAhPSBubGFfbGVuKHRiW1RDQV9CUEZfT1BTXSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYnBmX29wcyA9IGttZW1kdXAobmxhX2RhdGEodGJbVENBX0JQRl9PUFNdKSwgYnBmX3NpemUsIEdGUF9LRVJORUwpOwomIzQzOwlicGZfb3BzID0ga21lbWR1cChubGFfZGF0YSh0YltUQ0FfQlBGX09QU10pLCBicGZfc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoYnBmX29wcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNDAzLDcgJiM0Mzs0MDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX2VmZChzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2csCiAJfQogCiAJaWYgKHRiW1RDQV9CUEZfTkFNRV0pIHsKLQkJbmFtZSA9IG5sYV9tZW1kdXAodGJbVENBX0JQRl9OQU1FXSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQluYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCQlpZiAoIW5hbWUpIHsKIAkJCWJwZl9wcm9nX3B1dChmcCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ0Myw3ICYjNDM7NDQzLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlwcm9nID0ga3phbGxvY19vYmooKnByb2cpOwomIzQzOwlwcm9nID0ga3phbGxvY19vYmooKnByb2csIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFwcm9nKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jCmluZGV4IDY4MGE1YzMwODA5NGUuLjIxMGZkOWZkMjZkODMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuYwpAQCAtOTUsNyAmIzQzOzk1LDcgQEAgc3RhdGljIGludCBjbHNfY2dyb3VwX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJaWYgKGhlYWQgJmFtcDsmYW1wOyBoYW5kbGUgIT0gaGVhZC0mZ3Q7aGFuZGxlKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCW5ldyA9IGt6YWxsb2Nfb2JqKCpoZWFkKTsKJiM0MzsJbmV3ID0ga3phbGxvY19vYmooKmhlYWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuZXcpCiAJCXJldHVybiAtRU5PQlVGUzsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93LmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3cuYwppbmRleCAzNTZjNjhlYmMzODk1Li5hOWFjM2FjZjZlZGEwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Zsb3cuYwpAQCAtNDM4LDcgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgaW50IGZsb3dfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpOwomIzQzOwlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFmbmV3KQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jCmluZGV4IDg4ZjhhMzJmYWIyYjQuLjBlMjc1YjU4MTUxYzQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYwpAQCAtMjIzMyw3ICYjNDM7MjIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmxfZmxvd19tYXNrICpmbF9jcmVhdGVfbmV3X21hc2soc3RydWN0IGNsc19mbF9oZWFkICpoZWFkLAogCXN0cnVjdCBmbF9mbG93X21hc2sgKm5ld21hc2s7CiAJaW50IGVycjsKIAotCW5ld21hc2sgPSBremFsbG9jX29iaigqbmV3bWFzayk7CiYjNDM7CW5ld21hc2sgPSBremFsbG9jX29iaigqbmV3bWFzaywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW5ld21hc2spCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCkBAIC0yMzk0LDcgJiM0MzsyMzk0LDcgQEAgc3RhdGljIGludCBmbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlnb3RvIGVycm91dF90YjsKIAl9CiAKLQlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpOwomIzQzOwlmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFmbmV3KSB7CiAJCWVyciA9IC1FTk9CVUZTOwogCQlnb3RvIGVycm91dF90YjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZncuYyBiL25ldC9zY2hlZC9jbHNfZncuYwppbmRleCA2NDZhNzMwZGNhOTNjLi5hNDYyYjI2MjcxOWMzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2Z3LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19mdy5jCkBAIC0yNzYsNyAmIzQzOzI3Niw3IEBAIHN0YXRpYyBpbnQgZndfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJaWYgKGYtJmd0O2lkICE9IGhhbmRsZSAmYW1wOyZhbXA7IGhhbmRsZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyKTsKJiM0MzsJCWZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCQlpZiAoIWZuZXcpCiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAKQEAgLTMzMCw3ICYjNDM7MzMwLDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlyY3VfYXNzaWduX3BvaW50ZXIodHAtJmd0O3Jvb3QsIGhlYWQpOwogCX0KIAotCWYgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyKTsKJiM0MzsJZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKGYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMgYi9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMKaW5kZXggNmYxMjY4NzJjMTRhMC4uYzE0ODk5YjkzNWJmZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYwpAQCAtMTg5LDcgJiM0MzsxODksNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW5ldyA9IGt6YWxsb2Nfb2JqKCpuZXcpOwomIzQzOwluZXcgPSBremFsbG9jX29iaigqbmV3LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbmV3KQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKQEAgLTIwMSw3ICYjNDM7MjAxLDcgQEAgc3RhdGljIGludCBtYWxsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCWhhbmRsZSA9IDE7CiAJbmV3LSZndDtoYW5kbGUgPSBoYW5kbGU7CiAJbmV3LSZndDtmbGFncyA9IHVzZXJmbGFnczsKLQluZXctJmd0O3BmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB0Y19tYXRjaGFsbF9wY250KTsKJiM0MzsJbmV3LSZndDtwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX21hdGNoYWxsX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFuZXctJmd0O3BmKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jX3BlcmNwdTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfcm91dGUuYyBiL25ldC9zY2hlZC9jbHNfcm91dGUuYwppbmRleCBlZGVkN2FhY2QzZjcwLi4wZDEzMjRjOTA1ODM3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCkBAIC00NTUsNyAmIzQzOzQ1NSw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCWgxID0gdG9faGFzaChuaGFuZGxlKTsKIAliID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLSZndDt0YWJsZVtoMV0pOwogCWlmICghYikgewotCQliID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQpOwomIzQzOwkJYiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfYnVja2V0LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCQlpZiAoYiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9CVUZTOwogCkBAIC01MjQsNyAmIzQzOzUyNCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IC1FTk9CVUZTOwotCWYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlcik7CiYjNDM7CWYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIWYpCiAJCWdvdG8gZXJyb3V0OwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuYwppbmRleCBjMjk3ZDdkYmNmOTE2Li5hYzZkMGZhNWE0MGUzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKQEAgLTgyNSw3ICYjNDM7ODI1LDcgQEAgc3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCXN0cnVjdCB0Y191MzJfc2VsICpzID0gJmFtcDtuLSZndDtzZWw7CiAJc3RydWN0IHRjX3Vfa25vZGUgKm5ldzsKIAotCW5ldyA9IGt6YWxsb2NfZmxleCgqbmV3LCBzZWwua2V5cywgcy0mZ3Q7bmtleXMpOwomIzQzOwluZXcgPSBremFsbG9jX2ZsZXgoKm5ldywgc2VsLmtleXMsIHMtJmd0O25rZXlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbmV3KQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMTExNCwxNSAmIzQzOzExMTQsMTYgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJZ290byBlcnJpZHI7CiAJfQogCi0JbiA9IGt6YWxsb2NfZmxleCgqbiwgc2VsLmtleXMsIHMtJmd0O25rZXlzKTsKJiM0MzsJbiA9IGt6YWxsb2NfZmxleCgqbiwgc2VsLmtleXMsIHMtJmd0O25rZXlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmIChuID09IE5VTEwpIHsKIAkJZXJyID0gLUVOT0JVRlM7CiAJCWdvdG8gZXJyaWRyOwogCX0KIAogI2lmZGVmIENPTkZJR19DTFNfVTMyX1BFUkYKLQluLSZndDtwZiA9IF9fYWxsb2NfcGVyY3B1KHN0cnVjdF9zaXplKG4tJmd0O3BmLCBrY250cywgcy0mZ3Q7bmtleXMpLAotCQkJICAgICAgIF9fYWxpZ25vZl9fKHN0cnVjdCB0Y191MzJfcGNudCkpOwomIzQzOwluLSZndDtwZiA9IF9fYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3Rfc2l6ZShuLSZndDtwZiwga2NudHMsIHMtJmd0O25rZXlzKSwKJiM0MzsJCQkJICAgX19hbGlnbm9mX18oc3RydWN0IHRjX3UzMl9wY250KSwKJiM0MzsJCQkJICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW4tJmd0O3BmKSB7CiAJCWVyciA9IC1FTk9CVUZTOwogCQlnb3RvIGVycmZyZWU7CkBAIC0xMTQ0LDcgJiM0MzsxMTQ1LDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJZ290byBlcnJvdXQ7CiAKICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9NQVJLCi0Jbi0mZ3Q7cGNwdV9zdWNjZXNzID0gYWxsb2NfcGVyY3B1KHUzMik7CiYjNDM7CW4tJmd0O3BjcHVfc3VjY2VzcyA9IGFsbG9jX3BlcmNwdV9nZnAodTMyLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbi0mZ3Q7cGNwdV9zdWNjZXNzKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2MwoJCQkJCQkJb3V0cHV0OiAyNjUKCQkJCQkJCXRob3VnaHRzOiA4MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2VzIGluIGBuZXQvc2NoZWQvYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCB0d2Vha3MgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIHdpdGhpbiBgbmV0L3NjaGVkL2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCB0byBhIGJ1bmNoIG9mIGNhbGxzOiBga3phbGxvY19vYmpzYCwgYGt6YWxsb2Nfb2JqYCwgYGFsbG9jX3BlcmNwdV9nZnBgLCBga21lbWR1cGAsIGBubGFfbWVtZHVwYCwgYW5kIGBremFsbG9jX2ZsZXhgLiBUaGUgZ29hbCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBiZXR0ZXIgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLgoKRXNzZW50aWFsbHksIHRoZXkmIzM5O3JlIHN3YXBwaW5nIHRoZSBkZWZhdWx0IGZsYWdzIG9yIGBHRlBfS0VSTkVMYCB3aXRoIGBHRlBfS0VSTkVMX0FDQ09VTlRgLiBObyBjaGFuZ2VzIHRvIGhvdyB0aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkLCBubyBuZXcgZmllbGRzLCBubyBtb2RpZmljYXRpb25zIHRvIGFueSBib3VuZHMgY2hlY2tzLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgbm8gY2hhbmdlcyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXTigJlzIGFsbCBga3phbGxvY2AtYmFzZWQgKHplcm8taW5pdGlhbGl6ZWQpIG9yIGBrbWVtZHVwYC9gbmxhX21lbWR1cGAtYmFzZWQgKGNvcHlpbmcgYWxyZWFkeSBpbml0aWFsaXplZCBtZW1vcnkpLiBIb2xkIG9uLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYGFsbG9jX3BlcmNwdV9nZnBgLCBiZWNhdXNlIHRoYXQgaGFzIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCB5ZXMsIGBhbGxvY19wZXJjcHVfZ2ZwYCBzdGlsbCB6ZXJvLWluaXRpYWxpemVzLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGluIGhlcmUuIEFoLCBmb3VuZCBhIGJ1ZyBmaXggaW4gYGNsc19iYXNpYy5jYC4gVGhleSYjMzk7cmUgbm93IHJlbW92aW5nIGFuIElEUiBlbnRyeSBpZiBgYWxsb2NfcGVyY3B1X2dmcGAgZmFpbHMuIFRoaXMgaXMgYSBmaXggZm9yIGEgbWVtb3J5IGxlYWsgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlLCBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KClJpZ2h0LCBzbyBzaW5jZSBhbGwgdGhlc2UgYWxsb2NhdGlvbnMgYXJlICpzdGlsbCogZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgb3IgY29waWVzIG9mIGV4aXN0aW5nIGluaXRpYWxpemVkIGRhdGEsIHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgbWVhbnMgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdGlvbiB0b29scyBhcmUgc3VmZmljaWVudC4KClNvLCBoZXJlJiMzOTtzIG15IHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBzaW1wbHkgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZvciBjZ3JvdXAgYWNjb3VudGluZyB0byBjYWxscyBsaWtlIGBremFsbG9jYCwgYGttZW1kdXBgIGFuZCBgYWxsb2NfcGVyY3B1YC4gQWxsIHRoZXNlIGFsbG9jYXRpb25zIGFyZSAqZnVsbHkqIGluaXRpYWxpemVkLCBlaXRoZXIgemVyb2VkIChieSBga3phbGxvY2Agb3Igc2ltaWxhcikgb3IgY29waWVkIGZyb20gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgc291cmNlcy4gVGhlIGJ1ZyBmaXggaW4gYGNsc19iYXNpYy5jYCBpcyB1bnJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYW5kIG5vIGNvbXBsZXggaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYmVpbmcgY2hhbmdlZCwgdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBpbnRyb2R1Y2UgS01TQU4gZnV6emluZy4gV2UmIzM5O3JlIGdvb2Qgd2l0aCBLQVNBTiBhbmQgdGhlIHJlZ3VsYXIgdG9vbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscyBpbiB0aGUgbmV0d29yayBzY2hlZHVsaW5nIGNsYXNzaWZpZXJzIChgbmV0L3NjaGVkL2Nsc18qLmNgKSB0byB1c2UgYEdGUF9LRVJORUxfQUNDT1VOVGAgZm9yIGNncm91cCBtZW1vcnkgYWNjb3VudGluZy4gSXQgcmVwbGFjZXMgYGt6YWxsb2Nfb2JqYCwgYGt6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX2ZsZXhgLCBgYWxsb2NfcGVyY3B1YCwgYGttZW1kdXBgLCBhbmQgYG5sYV9tZW1kdXBgIHdpdGggdGhlaXIgYF9nZnBgIG9yIGFjY291bnRlZCBlcXVpdmFsZW50cy4gQWxsIGFmZmVjdGVkIGFsbG9jYXRpb25zIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZDogYGt6YWxsb2NgLWJhc2VkIGZ1bmN0aW9ucyBpbmhlcmVudGx5IHplcm8gdGhlIG1lbW9yeSwgYGFsbG9jX3BlcmNwdV9nZnBgIHplcm8taW5pdGlhbGl6ZXMgdGhlIHBlci1DUFUgbWVtb3J5LCBhbmQgYGttZW1kdXBgL2BubGFfbWVtZHVwYCBjb3B5IGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBzb3VyY2UgYnVmZmVycy4gVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgYSBtaW5vciBlcnJvci1wYXRoIGZpeCBpbiBgY2xzX2Jhc2ljLmNgIHRvIHJlbW92ZSBhbiBJRFIgZW50cnkgb24gYWxsb2NhdGlvbiBmYWlsdXJlLCB3aGljaCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIGludmFsaWQgc3RhdGUgYnV0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGlzIGFsdGVyZWQsIHRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycyBhcmUgcGVyZmVjdGx5IGFkZXF1YXRlIGZvciB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgY2xhc3NpZmllcnMgKGBuZXQvc2NoZWQvY2xzXyouY2ApIHRvIHVzZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmb3IgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLiBJdCByZXBsYWNlcyBga3phbGxvY19vYmpgLCBga3phbGxvY19vYmpzYCwgYGt6YWxsb2NfZmxleGAsIGBhbGxvY19wZXJjcHVgLCBga21lbWR1cGAsIGFuZCBgbmxhX21lbWR1cGAgd2l0aCB0aGVpciBgX2dmcGAgb3IgYWNjb3VudGVkIGVxdWl2YWxlbnRzLiBBbGwgYWZmZWN0ZWQgYWxsb2NhdGlvbnMgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkOiBga3phbGxvY2AtYmFzZWQgZnVuY3Rpb25zIGluaGVyZW50bHkgemVybyB0aGUgbWVtb3J5LCBgYWxsb2NfcGVyY3B1X2dmcGAgemVyby1pbml0aWFsaXplcyB0aGUgcGVyLUNQVSBtZW1vcnksIGFuZCBga21lbWR1cGAvYG5sYV9tZW1kdXBgIGNvcHkgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXJzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIG1pbm9yIGVycm9yLXBhdGggZml4IGluIGBjbHNfYmFzaWMuY2AgdG8gcmVtb3ZlIGFuIElEUiBlbnRyeSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgaW52YWxpZCBzdGF0ZSBidXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYWx0ZXJlZCwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjQ2LjQ5MjcwNDY1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjk3ODA3MTQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNcIixcbiAgICBcIk5FVF9DTFNfQkFTSUNcIixcbiAgICBcIk5FVF9DTFNfUk9VVEU0XCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfQ0xTX0ZXXCIsXG4gICAgXCJORVRfQ0xTX1UzMlwiLFxuICAgIFwiQ0xTX1UzMl9QRVJGXCIsXG4gICAgXCJDTFNfVTMyX01BUktcIixcbiAgICBcIk5FVF9DTFNfRkxPV1wiLFxuICAgIFwiTkVUX0NMU19DR1JPVVBcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk5FVF9DTFNfQlBGXCIsXG4gICAgXCJORVRfQ0xTX0ZMT1dFUlwiLFxuICAgIFwiTkVUX0NMU19NQVRDSEFMTFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYXNpY19jaGFuZ2VcIixcbiAgICBcImNsc19icGZfY2hhbmdlXCIsXG4gICAgXCJjbHNfY2dyb3VwX2NoYW5nZVwiLFxuICAgIFwiZmxvd19jaGFuZ2VcIixcbiAgICBcImZsX2NoYW5nZVwiLFxuICAgIFwiZndfY2hhbmdlXCIsXG4gICAgXCJtYWxsX2NoYW5nZVwiLFxuICAgIFwicm91dGU0X2NoYW5nZVwiLFxuICAgIFwidTMyX2NoYW5nZVwiLFxuICAgIFwidGNmX2V4dHNfaW5pdF9leFwiLFxuICAgIFwidGNfbmV3X3RmaWx0ZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscyBpbiB0aGUgbmV0d29yayBzY2hlZHVsaW5nIGNsYXNzaWZpZXJzIChgbmV0L3NjaGVkL2Nsc18qLmNgKSB0byB1c2UgYEdGUF9LRVJORUxfQUNDT1VOVGAgZm9yIGNncm91cCBtZW1vcnkgYWNjb3VudGluZy4gSXQgcmVwbGFjZXMgYGt6YWxsb2Nfb2JqYCwgYGt6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX2ZsZXhgLCBgYWxsb2NfcGVyY3B1YCwgYGttZW1kdXBgLCBhbmQgYG5sYV9tZW1kdXBgIHdpdGggdGhlaXIgYF9nZnBgIG9yIGFjY291bnRlZCBlcXVpdmFsZW50cy4gQWxsIGFmZmVjdGVkIGFsbG9jYXRpb25zIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZDogYGt6YWxsb2NgLWJhc2VkIGZ1bmN0aW9ucyBpbmhlcmVudGx5IHplcm8gdGhlIG1lbW9yeSwgYGFsbG9jX3BlcmNwdV9nZnBgIHplcm8taW5pdGlhbGl6ZXMgdGhlIHBlci1DUFUgbWVtb3J5LCBhbmQgYGttZW1kdXBgL2BubGFfbWVtZHVwYCBjb3B5IGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBzb3VyY2UgYnVmZmVycy4gVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgYSBtaW5vciBlcnJvci1wYXRoIGZpeCBpbiBgY2xzX2Jhc2ljLmNgIHRvIHJlbW92ZSBhbiBJRFIgZW50cnkgb24gYWxsb2NhdGlvbiBmYWlsdXJlLCB3aGljaCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIGludmFsaWQgc3RhdGUgYnV0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGlzIGFsdGVyZWQsIHRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycyBhcmUgcGVyZmVjdGx5IGFkZXF1YXRlIGZvciB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgR0ZQX0tFUk5FTF9BQ0NPVU5UIHRvIHZhcmlvdXMgbWVtb3J5IGFsbG9jYXRpb25zIGluIG5ldHdvcmsgY2xhc3NpZmllcnMuIFdoaWxlIG1vc3RseSBhbiBhY2NvdW50aW5nIGNoYW5nZSwgaXQgYWxzbyBpbmNsdWRlcyBhIGZ1bmN0aW9uYWwgYnVnIGZpeCBpbiBjbHNfYmFzaWMuYyAoYmFzaWNfY2hhbmdlKSB3aGVyZSBpdCBhZGRzIGEgbWlzc2luZyBpZHJfcmVtb3ZlIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYWxsb2NfcGVyY3B1X2dmcCBmYWlscy4gVGhpcyBlcnJvciBwYXRoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIGZhdWx0IGluamVjdGlvbiBkdXJpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gSURSIGxlYWtzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNTo0Ni40OTI3MTIyNDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTgwNDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc3YjgzY2Q2Yjk0OGFlZDRhZTM0MDkzYjFiYTY2YzFkMTk3MTg0OTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTU6MDU6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcXG5pbmRleCA0ZTZhMjgxMmE0ZjMyLi5iZTYzYjM0NzY0MGJhIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXFxuQEAgLTMzNjQsNyArMzM2NCw4IEBAIGludCB0Y2ZfZXh0c19pbml0X2V4KHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cywgc3RydWN0IG5ldCAqbmV0LCBpbnQgYWN0aW9uLFxcbiBcXHQgKiBUaGlzIHJlZmVyZW5jZSBtaWdodCBiZSB0YWtlbiBsYXRlciBmcm9tIHRjZl9leHRzX2dldF9uZXQoKS5cXG4gXFx0ICovXFxuIFxcdGV4dHMtXFx1MDAzZW5ldCA9IG5ldDtcXG4tXFx0ZXh0cy1cXHUwMDNlYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdGNfYWN0aW9uICosIFRDQV9BQ1RfTUFYX1BSSU8pO1xcbitcXHRleHRzLVxcdTAwM2VhY3Rpb25zID0ga3phbGxvY19vYmpzKHN0cnVjdCB0Y19hY3Rpb24gKiwgVENBX0FDVF9NQVhfUFJJTyxcXG4rXFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWV4dHMtXFx1MDAzZWFjdGlvbnMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jIGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jXFxuaW5kZXggNDkyY2Q5Y2U4ZDQ2Zi4uZTJhOTRiYTlmYmE3NiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Jhc2ljLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Jhc2ljLmNcXG5AQCAtMTkzLDcgKzE5Myw3IEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7XFxuK1xcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFmbmV3KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIFxcbkBAIC0yMTIsOSArMjEyLDExIEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcdGZuZXctXFx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcXG4tXFx0Zm5ldy1cXHUwMDNlcGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX2Jhc2ljX3BjbnQpO1xcbitcXHRmbmV3LVxcdTAwM2VwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX2Jhc2ljX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghZm5ldy1cXHUwMDNlcGYpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0aWYgKCFmb2xkKVxcbitcXHRcXHRcXHRpZHJfcmVtb3ZlKFxcdTAwMjZoZWFkLVxcdTAwM2VoYW5kbGVfaWRyLCBmbmV3LVxcdTAwM2VoYW5kbGUpO1xcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19icGYuYyBiL25ldC9zY2hlZC9jbHNfYnBmLmNcXG5pbmRleCA2ZDE5MTU1YmVjYzg2Li4xODhjZjBmOTQ5ZGQ0IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfYnBmLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX2JwZi5jXFxuQEAgLTM1Miw3ICszNTIsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX29wcyhzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2cpXFxuIFxcdGlmIChicGZfc2l6ZSAhPSBubGFfbGVuKHRiW1RDQV9CUEZfT1BTXSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0YnBmX29wcyA9IGttZW1kdXAobmxhX2RhdGEodGJbVENBX0JQRl9PUFNdKSwgYnBmX3NpemUsIEdGUF9LRVJORUwpO1xcbitcXHRicGZfb3BzID0ga21lbWR1cChubGFfZGF0YSh0YltUQ0FfQlBGX09QU10pLCBicGZfc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKGJwZl9vcHMgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC00MDMsNyArNDAzLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX3Byb2dfZnJvbV9lZmQoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgY2xzX2JwZl9wcm9nICpwcm9nLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAodGJbVENBX0JQRl9OQU1FXSkge1xcbi1cXHRcXHRuYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0bmFtZSA9IG5sYV9tZW1kdXAodGJbVENBX0JQRl9OQU1FXSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0aWYgKCFuYW1lKSB7XFxuIFxcdFxcdFxcdGJwZl9wcm9nX3B1dChmcCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC00NDMsNyArNDQzLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cHJvZyA9IGt6YWxsb2Nfb2JqKCpwcm9nKTtcXG4rXFx0cHJvZyA9IGt6YWxsb2Nfb2JqKCpwcm9nLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIXByb2cpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXFxuaW5kZXggNjgwYTVjMzA4MDk0ZS4uMjEwZmQ5ZmQyNmQ4MyAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuY1xcbkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyBpbnQgY2xzX2Nncm91cF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRpZiAoaGVhZCBcXHUwMDI2XFx1MDAyNiBoYW5kbGUgIT0gaGVhZC1cXHUwMDNlaGFuZGxlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuLVxcdG5ldyA9IGt6YWxsb2Nfb2JqKCpoZWFkKTtcXG4rXFx0bmV3ID0ga3phbGxvY19vYmooKmhlYWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghbmV3KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Zsb3cuYyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jXFxuaW5kZXggMzU2YzY4ZWJjMzg5NS4uYTlhYzNhY2Y2ZWRhMCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3cuY1xcbisrKyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jXFxuQEAgLTQzOCw3ICs0MzgsNyBAQCBzdGF0aWMgaW50IGZsb3dfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuIFxcbi1cXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcpO1xcbitcXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghZm5ldylcXG4gXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcXG5pbmRleCA4OGY4YTMyZmFiMmI0Li4wZTI3NWI1ODE1MWM0IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXFxuQEAgLTIyMzMsNyArMjIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmxfZmxvd19tYXNrICpmbF9jcmVhdGVfbmV3X21hc2soc3RydWN0IGNsc19mbF9oZWFkICpoZWFkLFxcbiBcXHRzdHJ1Y3QgZmxfZmxvd19tYXNrICpuZXdtYXNrO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0bmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrKTtcXG4rXFx0bmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIW5ld21hc2spXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXG5AQCAtMjM5NCw3ICsyMzk0LDcgQEAgc3RhdGljIGludCBmbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRcXHRnb3RvIGVycm91dF90YjtcXG4gXFx0fVxcbiBcXG4tXFx0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3KTtcXG4rXFx0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWZuZXcpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT0JVRlM7XFxuIFxcdFxcdGdvdG8gZXJyb3V0X3RiO1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Z3LmMgYi9uZXQvc2NoZWQvY2xzX2Z3LmNcXG5pbmRleCA2NDZhNzMwZGNhOTNjLi5hNDYyYjI2MjcxOWMzIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfZncuY1xcbisrKyBiL25ldC9zY2hlZC9jbHNfZncuY1xcbkBAIC0yNzYsNyArMjc2LDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRcXHRpZiAoZi1cXHUwMDNlaWQgIT0gaGFuZGxlIFxcdTAwMjZcXHUwMDI2IGhhbmRsZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRmbmV3ID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlcik7XFxuK1xcdFxcdGZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRcXHRpZiAoIWZuZXcpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuQEAgLTMzMCw3ICszMzAsNyBAQCBzdGF0aWMgaW50IGZ3X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0cC1cXHUwMDNlcm9vdCwgaGVhZCk7XFxuIFxcdH1cXG4gXFxuLVxcdGYgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyKTtcXG4rXFx0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmIChmID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYyBiL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuY1xcbmluZGV4IDZmMTI2ODcyYzE0YTAuLmMxNDg5OWI5MzViZmQgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXFxuQEAgLTE4OSw3ICsxODksNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdG5ldyA9IGt6YWxsb2Nfb2JqKCpuZXcpO1xcbitcXHRuZXcgPSBremFsbG9jX29iaigqbmV3LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIW5ldylcXG4gXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG5AQCAtMjAxLDcgKzIwMSw3IEBAIHN0YXRpYyBpbnQgbWFsbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRcXHRoYW5kbGUgPSAxO1xcbiBcXHRuZXctXFx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcXG4gXFx0bmV3LVxcdTAwM2VmbGFncyA9IHVzZXJmbGFncztcXG4tXFx0bmV3LVxcdTAwM2VwZiA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgdGNfbWF0Y2hhbGxfcGNudCk7XFxuK1xcdG5ldy1cXHUwMDNlcGYgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCB0Y19tYXRjaGFsbF9wY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIW5ldy1cXHUwMDNlcGYpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBlcnJfYWxsb2NfcGVyY3B1O1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcXG5pbmRleCBlZGVkN2FhY2QzZjcwLi4wZDEzMjRjOTA1ODM3IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuY1xcbisrKyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xcbkBAIC00NTUsNyArNDU1LDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuIFxcdGgxID0gdG9faGFzaChuaGFuZGxlKTtcXG4gXFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cXHUwMDNldGFibGVbaDFdKTtcXG4gXFx0aWYgKCFiKSB7XFxuLVxcdFxcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCk7XFxuK1xcdFxcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0XFx0aWYgKGIgPT0gTlVMTClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG5AQCAtNTI0LDcgKzUyNCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0ZXJyID0gLUVOT0JVRlM7XFxuLVxcdGYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlcik7XFxuK1xcdGYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFmKVxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXFxuaW5kZXggYzI5N2Q3ZGJjZjkxNi4uYWM2ZDBmYTVhNDBlMyAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xcbkBAIC04MjUsNyArODI1LDcgQEAgc3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiBcXHRzdHJ1Y3QgdGNfdTMyX3NlbCAqcyA9IFxcdTAwMjZuLVxcdTAwM2VzZWw7XFxuIFxcdHN0cnVjdCB0Y191X2tub2RlICpuZXc7XFxuIFxcbi1cXHRuZXcgPSBremFsbG9jX2ZsZXgoKm5ldywgc2VsLmtleXMsIHMtXFx1MDAzZW5rZXlzKTtcXG4rXFx0bmV3ID0ga3phbGxvY19mbGV4KCpuZXcsIHNlbC5rZXlzLCBzLVxcdTAwM2Vua2V5cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFuZXcpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG5AQCAtMTExNCwxNSArMTExNCwxNiBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRcXHRnb3RvIGVycmlkcjtcXG4gXFx0fVxcbiBcXG4tXFx0biA9IGt6YWxsb2NfZmxleCgqbiwgc2VsLmtleXMsIHMtXFx1MDAzZW5rZXlzKTtcXG4rXFx0biA9IGt6YWxsb2NfZmxleCgqbiwgc2VsLmtleXMsIHMtXFx1MDAzZW5rZXlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAobiA9PSBOVUxMKSB7XFxuIFxcdFxcdGVyciA9IC1FTk9CVUZTO1xcbiBcXHRcXHRnb3RvIGVycmlkcjtcXG4gXFx0fVxcbiBcXG4gI2lmZGVmIENPTkZJR19DTFNfVTMyX1BFUkZcXG4tXFx0bi1cXHUwMDNlcGYgPSBfX2FsbG9jX3BlcmNwdShzdHJ1Y3Rfc2l6ZShuLVxcdTAwM2VwZiwga2NudHMsIHMtXFx1MDAzZW5rZXlzKSxcXG4tXFx0XFx0XFx0ICAgICAgIF9fYWxpZ25vZl9fKHN0cnVjdCB0Y191MzJfcGNudCkpO1xcbitcXHRuLVxcdTAwM2VwZiA9IF9fYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3Rfc2l6ZShuLVxcdTAwM2VwZiwga2NudHMsIHMtXFx1MDAzZW5rZXlzKSxcXG4rXFx0XFx0XFx0XFx0ICAgX19hbGlnbm9mX18oc3RydWN0IHRjX3UzMl9wY250KSxcXG4rXFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFuLVxcdTAwM2VwZikge1xcbiBcXHRcXHRlcnIgPSAtRU5PQlVGUztcXG4gXFx0XFx0Z290byBlcnJmcmVlO1xcbkBAIC0xMTQ0LDcgKzExNDUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9NQVJLXFxuLVxcdG4tXFx1MDAzZXBjcHVfc3VjY2VzcyA9IGFsbG9jX3BlcmNwdSh1MzIpO1xcbitcXHRuLVxcdTAwM2VwY3B1X3N1Y2Nlc3MgPSBhbGxvY19wZXJjcHVfZ2ZwKHUzMiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFuLVxcdTAwM2VwY3B1X3N1Y2Nlc3MpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjQ3LjAwOTQ5NTE1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMzk1ODgyMDQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNcIixcbiAgICBcIk5FVF9DTFNfQkFTSUNcIixcbiAgICBcIk5FVF9DTFNfUk9VVEU0XCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfQ0xTX0ZXXCIsXG4gICAgXCJORVRfQ0xTX1UzMlwiLFxuICAgIFwiQ0xTX1UzMl9QRVJGXCIsXG4gICAgXCJDTFNfVTMyX01BUktcIixcbiAgICBcIk5FVF9DTFNfRkxPV1wiLFxuICAgIFwiTkVUX0NMU19DR1JPVVBcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk5FVF9DTFNfQlBGXCIsXG4gICAgXCJORVRfQ0xTX0ZMT1dFUlwiLFxuICAgIFwiTkVUX0NMU19NQVRDSEFMTFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYXNpY19jaGFuZ2VcIixcbiAgICBcImNsc19icGZfY2hhbmdlXCIsXG4gICAgXCJjbHNfY2dyb3VwX2NoYW5nZVwiLFxuICAgIFwiZmxvd19jaGFuZ2VcIixcbiAgICBcImZsX2NoYW5nZVwiLFxuICAgIFwiZndfY2hhbmdlXCIsXG4gICAgXCJtYWxsX2NoYW5nZVwiLFxuICAgIFwicm91dGU0X2NoYW5nZVwiLFxuICAgIFwidTMyX2NoYW5nZVwiLFxuICAgIFwidGNmX2V4dHNfaW5pdF9leFwiLFxuICAgIFwidGNfbmV3X3RmaWx0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEdGUF9LRVJORUxfQUNDT1VOVCB0byB2YXJpb3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBuZXR3b3JrIGNsYXNzaWZpZXJzLiBXaGlsZSBtb3N0bHkgYW4gYWNjb3VudGluZyBjaGFuZ2UsIGl0IGFsc28gaW5jbHVkZXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggaW4gY2xzX2Jhc2ljLmMgKGJhc2ljX2NoYW5nZSkgd2hlcmUgaXQgYWRkcyBhIG1pc3NpbmcgaWRyX3JlbW92ZSBvbiB0aGUgZXJyb3IgcGF0aCB3aGVuIGFsbG9jX3BlcmNwdV9nZnAgZmFpbHMuIFRoaXMgZXJyb3IgcGF0aCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBmYXVsdCBpbmplY3Rpb24gZHVyaW5nIGZ1enppbmcgdG8gZW5zdXJlIG5vIElEUiBsZWFrcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzdiODNjZDZiOTQ4YWVkNGFlMzQwOTNiMWJhNjZjMWQxOTcxODQ5NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDE1OjA1OjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcbmluZGV4IDRlNmEyODEyYTRmMzIuLmJlNjNiMzQ3NjQwYmEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5AQCAtMzM2NCw3ICszMzY0LDggQEAgaW50IHRjZl9leHRzX2luaXRfZXgoc3RydWN0IHRjZl9leHRzICpleHRzLCBzdHJ1Y3QgbmV0ICpuZXQsIGludCBhY3Rpb24sXG4gXHQgKiBUaGlzIHJlZmVyZW5jZSBtaWdodCBiZSB0YWtlbiBsYXRlciBmcm9tIHRjZl9leHRzX2dldF9uZXQoKS5cbiBcdCAqL1xuIFx0ZXh0cy1cdTAwM2VuZXQgPSBuZXQ7XG4tXHRleHRzLVx1MDAzZWFjdGlvbnMgPSBremFsbG9jX29ianMoc3RydWN0IHRjX2FjdGlvbiAqLCBUQ0FfQUNUX01BWF9QUklPKTtcbitcdGV4dHMtXHUwMDNlYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdGNfYWN0aW9uICosIFRDQV9BQ1RfTUFYX1BSSU8sXG4rXHRcdFx0XHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWV4dHMtXHUwMDNlYWN0aW9ucylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jIGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jXG5pbmRleCA0OTJjZDljZThkNDZmLi5lMmE5NGJhOWZiYTc2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Jhc2ljLmNcbkBAIC0xOTMsNyArMTkzLDcgQEAgc3RhdGljIGludCBiYXNpY19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3KTtcbitcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTIxMiw5ICsyMTIsMTEgQEAgc3RhdGljIGludCBiYXNpY19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvdXQ7XG4gXHRmbmV3LVx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcbi1cdGZuZXctXHUwMDNlcGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX2Jhc2ljX3BjbnQpO1xuK1x0Zm5ldy1cdTAwM2VwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX2Jhc2ljX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWZuZXctXHUwMDNlcGYpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0aWYgKCFmb2xkKVxuK1x0XHRcdGlkcl9yZW1vdmUoXHUwMDI2aGVhZC1cdTAwM2VoYW5kbGVfaWRyLCBmbmV3LVx1MDAzZWhhbmRsZSk7XG4gXHRcdGdvdG8gZXJyb3V0O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYnBmLmMgYi9uZXQvc2NoZWQvY2xzX2JwZi5jXG5pbmRleCA2ZDE5MTU1YmVjYzg2Li4xODhjZjBmOTQ5ZGQ0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19icGYuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19icGYuY1xuQEAgLTM1Miw3ICszNTIsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX29wcyhzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2cpXG4gXHRpZiAoYnBmX3NpemUgIT0gbmxhX2xlbih0YltUQ0FfQlBGX09QU10pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGJwZl9vcHMgPSBrbWVtZHVwKG5sYV9kYXRhKHRiW1RDQV9CUEZfT1BTXSksIGJwZl9zaXplLCBHRlBfS0VSTkVMKTtcbitcdGJwZl9vcHMgPSBrbWVtZHVwKG5sYV9kYXRhKHRiW1RDQV9CUEZfT1BTXSksIGJwZl9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKGJwZl9vcHMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNDAzLDcgKzQwMyw3IEBAIHN0YXRpYyBpbnQgY2xzX2JwZl9wcm9nX2Zyb21fZWZkKHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGNsc19icGZfcHJvZyAqcHJvZyxcbiBcdH1cbiBcbiBcdGlmICh0YltUQ0FfQlBGX05BTUVdKSB7XG4tXHRcdG5hbWUgPSBubGFfbWVtZHVwKHRiW1RDQV9CUEZfTkFNRV0sIEdGUF9LRVJORUwpO1xuK1x0XHRuYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0XHRpZiAoIW5hbWUpIHtcbiBcdFx0XHRicGZfcHJvZ19wdXQoZnApO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTQ0Myw3ICs0NDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwcm9nID0ga3phbGxvY19vYmooKnByb2cpO1xuK1x0cHJvZyA9IGt6YWxsb2Nfb2JqKCpwcm9nLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFwcm9nKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuYyBiL25ldC9zY2hlZC9jbHNfY2dyb3VwLmNcbmluZGV4IDY4MGE1YzMwODA5NGUuLjIxMGZkOWZkMjZkODMgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXG5AQCAtOTUsNyArOTUsNyBAQCBzdGF0aWMgaW50IGNsc19jZ3JvdXBfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdGlmIChoZWFkIFx1MDAyNlx1MDAyNiBoYW5kbGUgIT0gaGVhZC1cdTAwM2VoYW5kbGUpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuLVx0bmV3ID0ga3phbGxvY19vYmooKmhlYWQpO1xuK1x0bmV3ID0ga3phbGxvY19vYmooKmhlYWQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvdy5jIGIvbmV0L3NjaGVkL2Nsc19mbG93LmNcbmluZGV4IDM1NmM2OGViYzM4OTUuLmE5YWMzYWNmNmVkYTAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3cuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19mbG93LmNcbkBAIC00MzgsNyArNDM4LDcgQEAgc3RhdGljIGludCBmbG93X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuLVx0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3KTtcbitcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG5pbmRleCA4OGY4YTMyZmFiMmI0Li4wZTI3NWI1ODE1MWM0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xuQEAgLTIyMzMsNyArMjIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmxfZmxvd19tYXNrICpmbF9jcmVhdGVfbmV3X21hc2soc3RydWN0IGNsc19mbF9oZWFkICpoZWFkLFxuIFx0c3RydWN0IGZsX2Zsb3dfbWFzayAqbmV3bWFzaztcbiBcdGludCBlcnI7XG4gXG4tXHRuZXdtYXNrID0ga3phbGxvY19vYmooKm5ld21hc2spO1xuK1x0bmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFuZXdtYXNrKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbkBAIC0yMzk0LDcgKzIzOTQsNyBAQCBzdGF0aWMgaW50IGZsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdGdvdG8gZXJyb3V0X3RiO1xuIFx0fVxuIFxuLVx0Zm5ldyA9IGt6YWxsb2Nfb2JqKCpmbmV3KTtcbitcdGZuZXcgPSBremFsbG9jX29iaigqZm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghZm5ldykge1xuIFx0XHRlcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byBlcnJvdXRfdGI7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mdy5jIGIvbmV0L3NjaGVkL2Nsc19mdy5jXG5pbmRleCA2NDZhNzMwZGNhOTNjLi5hNDYyYjI2MjcxOWMzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19mdy5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Z3LmNcbkBAIC0yNzYsNyArMjc2LDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRpZiAoZi1cdTAwM2VpZCAhPSBoYW5kbGUgXHUwMDI2XHUwMDI2IGhhbmRsZSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0Zm5ldyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIpO1xuK1x0XHRmbmV3ID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKCFmbmV3KVxuIFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcbkBAIC0zMzAsNyArMzMwLDcgQEAgc3RhdGljIGludCBmd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHAtXHUwMDNlcm9vdCwgaGVhZCk7XG4gXHR9XG4gXG4tXHRmID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlcik7XG4rXHRmID0ga3phbGxvY19vYmooc3RydWN0IGZ3X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChmID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMgYi9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmNcbmluZGV4IDZmMTI2ODcyYzE0YTAuLmMxNDg5OWI5MzViZmQgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuY1xuQEAgLTE4OSw3ICsxODksNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdG5ldyA9IGt6YWxsb2Nfb2JqKCpuZXcpO1xuK1x0bmV3ID0ga3phbGxvY19vYmooKm5ldywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5AQCAtMjAxLDcgKzIwMSw3IEBAIHN0YXRpYyBpbnQgbWFsbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRoYW5kbGUgPSAxO1xuIFx0bmV3LVx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcbiBcdG5ldy1cdTAwM2VmbGFncyA9IHVzZXJmbGFncztcbi1cdG5ldy1cdTAwM2VwZiA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgdGNfbWF0Y2hhbGxfcGNudCk7XG4rXHRuZXctXHUwMDNlcGYgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCB0Y19tYXRjaGFsbF9wY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFuZXctXHUwMDNlcGYpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBlcnJfYWxsb2NfcGVyY3B1O1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfcm91dGUuYyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuaW5kZXggZWRlZDdhYWNkM2Y3MC4uMGQxMzI0YzkwNTgzNyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG5AQCAtNDU1LDcgKzQ1NSw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0aDEgPSB0b19oYXNoKG5oYW5kbGUpO1xuIFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVtoMV0pO1xuIFx0aWYgKCFiKSB7XG4tXHRcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCk7XG4rXHRcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKGIgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5AQCAtNTI0LDcgKzUyNCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlcnIgPSAtRU5PQlVGUztcbi1cdGYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlcik7XG4rXHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWYpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCBjMjk3ZDdkYmNmOTE2Li5hYzZkMGZhNWE0MGUzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTgyNSw3ICs4MjUsNyBAQCBzdGF0aWMgc3RydWN0IHRjX3Vfa25vZGUgKnUzMl9pbml0X2tub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRzdHJ1Y3QgdGNfdTMyX3NlbCAqcyA9IFx1MDAyNm4tXHUwMDNlc2VsO1xuIFx0c3RydWN0IHRjX3Vfa25vZGUgKm5ldztcbiBcbi1cdG5ldyA9IGt6YWxsb2NfZmxleCgqbmV3LCBzZWwua2V5cywgcy1cdTAwM2Vua2V5cyk7XG4rXHRuZXcgPSBremFsbG9jX2ZsZXgoKm5ldywgc2VsLmtleXMsIHMtXHUwMDNlbmtleXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5AQCAtMTExNCwxNSArMTExNCwxNiBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRnb3RvIGVycmlkcjtcbiBcdH1cbiBcbi1cdG4gPSBremFsbG9jX2ZsZXgoKm4sIHNlbC5rZXlzLCBzLVx1MDAzZW5rZXlzKTtcbitcdG4gPSBremFsbG9jX2ZsZXgoKm4sIHNlbC5rZXlzLCBzLVx1MDAzZW5rZXlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKG4gPT0gTlVMTCkge1xuIFx0XHRlcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byBlcnJpZHI7XG4gXHR9XG4gXG4gI2lmZGVmIENPTkZJR19DTFNfVTMyX1BFUkZcbi1cdG4tXHUwMDNlcGYgPSBfX2FsbG9jX3BlcmNwdShzdHJ1Y3Rfc2l6ZShuLVx1MDAzZXBmLCBrY250cywgcy1cdTAwM2Vua2V5cyksXG4tXHRcdFx0ICAgICAgIF9fYWxpZ25vZl9fKHN0cnVjdCB0Y191MzJfcGNudCkpO1xuK1x0bi1cdTAwM2VwZiA9IF9fYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3Rfc2l6ZShuLVx1MDAzZXBmLCBrY250cywgcy1cdTAwM2Vua2V5cyksXG4rXHRcdFx0XHQgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdGNfdTMyX3BjbnQpLFxuK1x0XHRcdFx0ICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbi1cdTAwM2VwZikge1xuIFx0XHRlcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byBlcnJmcmVlO1xuQEAgLTExNDQsNyArMTE0NSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9NQVJLXG4tXHRuLVx1MDAzZXBjcHVfc3VjY2VzcyA9IGFsbG9jX3BlcmNwdSh1MzIpO1xuK1x0bi1cdTAwM2VwY3B1X3N1Y2Nlc3MgPSBhbGxvY19wZXJjcHVfZ2ZwKHUzMiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbi1cdTAwM2VwY3B1X3N1Y2Nlc3MpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBlcnJvdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNTo0Ny4wMDk0OTcwODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDY3Mzg0Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTmV0d29yayBTY2hlZHVsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2Nsc18qLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGp1c3QgYW5vdGhlciBtZW1vcnkgYWNjb3VudGluZyBjaGFuZ2UsIGFkZGluZyBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCB0byBhIGJ1bmNoIG9mIGFsbG9jYXRpb24gY2FsbHMuIFRoaXMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC5cIiAgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byB0aGluZ3MgbGlrZSBga3phbGxvY19vYmpzYCwgYGt6YWxsb2Nfb2JqYCwgYGFsbG9jX3BlcmNwdWAsIGFuZCBvdGhlciBhbGxvY2F0aW9uIHJvdXRpbmVzLlxuXG5NeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBwdXJlbHkgZGVjb3JhdGl2ZSwganVzdCB0cmFja2luZyBtZW1vcnkgdXNhZ2Ugd2l0aGluIGNncm91cHMgYW5kIG5vdCBjaGFuZ2luZyBob3cgdGhlc2UgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBjYXNlLCBhcyBpZiBpdCBjaGFuZ2VzIHRoZSBleGVjdXRpb24gb2YgdGhlIGtlcm5lbCBJIG5lZWQgdG8ga25vdy4gTWVtb3J5IGFjY291bnRpbmcgY2hhbmdlcyAqY2FuKiBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSBpZiB0aGV5IGludHJvZHVjZSBuZXcgYmVoYXZpb3JzLlxuXG5JIGNoZWNrIGZvciBhbnkgY2hhbmdlcyB0byBsb2dpYyBvciB0aGUgZXhlY3V0aW9uIGZsb3cuICBJIGtub3cgYmFzZWQgb24gcHJpb3IgZXhwZXJpZW5jZSB0aGF0IFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlc1wiIHNob3VsZCBoYXZlIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBBZGRpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgdG8gYGt6YWxsb2NgIGNhbGxzIGlzLCBnZW5lcmFsbHksIGp1c3QgY2hhbmdpbmcgdGhlIEdGUCBmbGFncywgbm90IGFmZmVjdGluZyBmbG93LCBleGNlcHQgbWF5YmUgYWRkaW5nIGEgY2hlY2sgaWYgYSBjZ3JvdXAgbWVtb3J5IGxpbWl0IGlzIGhpdC4gSSBjb25maXJtIHRoYXQgdGhpbmdzIGxpa2UgYGt6YWxsb2Nfb2Jqc2AgYW5kIGBremFsbG9jX29iamAgYXJlIG1hY3Jvcy4gVGhlIGNoYW5nZXMgc2hvd24gY29uZmlybSB0aGlzIGFzIHdlbGwsIGp1c3QgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHRvIHRoZSBjYWxscy4gU28sIHVwIHVudGlsIGhlcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLCBhbmQgSSB3b3VsZCBoYXZlIHJldHVybmVkIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Ib3dldmVyLCBhcyBJIGRpdmUgZGVlcGVyLCBJIHN0dW1ibGUgdXBvbiBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEkgbG9vayBhdCB0aGUgYGNsc19iYXNpYy5jYCBmaWxlIGFuZCBzZWUgdGhpcyBhZGRpdGlvbjpcblxuYGBgY1xuIFx0Zm5ldy1cdTAwM2VwZiA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IHRjX2Jhc2ljX3BjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWZuZXctXHUwMDNlcGYpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0aWYgKCFmb2xkKVxuK1x0XHRcdGlkcl9yZW1vdmUoXHUwMDI2aGVhZC1cdTAwM2VoYW5kbGVfaWRyLCBmbmV3LVx1MDAzZWhhbmRsZSk7XG4gXHRcdGdvdG8gZXJyb3V0O1xuIFx0fVxuYGBgXG5cbldhaXQgYSBzZWNvbmQuLi4gIE5vdyB0aGF0J3Mgbm90IGp1c3QgYWNjb3VudGluZyEgSXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgY29uZGl0aW9uYWwgcmVtb3ZhbCBmcm9tIHRoZSBgaGVhZC1cdTAwM2VoYW5kbGVfaWRyYCEgVGhpcyBpcyBhICpmdW5jdGlvbmFsIGNoYW5nZSouIEl0J3MgYSBmaXggZm9yIGEgcG90ZW50aWFsIG1lbW9yeSBvciBJRFIgbGVhayBvbiB0aGUgZXJyb3IgcGF0aCBpZiBgYWxsb2NfcGVyY3B1X2dmcGAgZmFpbHMuIFRoaXMgaXMgYSBiaWcgZGVhbCEgT24gZXJyb3IsIGl0IG5vdyBjbGVhbnMgdXAgYW4gSURSIGVudHJ5IGlmIGBmb2xkYCBpcyBub3Qgc2V0LiBUaGlzIGlzIGdvb2QsIGdvb2QsIGdvb2QuXG5cbk15IGV4cGVydCBtaW5kIHNheXMgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBhIGZ1enplciBjYW4gaGl0IHVzaW5nIGZhdWx0IGluamVjdGlvbi4gVGhpcyB2ZXJpZmllcyB0aGF0IGEgbWVtb3J5IGxlYWsgb3IgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24gaXMgYXZvaWRlZC4gSXQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LlxuXG5JIGNoZWNrIGBjbHNfdTMyLmNgIGFuZCBjb25maXJtIHRoYXQgdGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoZXJlLlxuXG5TbywgaW4gc3VtbWFyeTogSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGlzIGNoYW5nZSBpbiB0aGUgZXJyb3IgcGF0aCBmb3IgYGNsc19iYXNpYy5jYCBpcyBzaWduaWZpY2FudCBhbmQgd2FycmFudHMgZnV6emluZy4gSSdsbCBuZWVkIHRvIGZvY3VzIHRlc3Rpbmcgb24gdGhlIGVycm9yIHNjZW5hcmlvcyBpbiBgbmV0L3NjaGVkL2Nsc19iYXNpYy5jYC4gSSB3aWxsIHRoZW4gZ28gb24gYW5kIHJ1biB0aGUgZnV6emVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjY2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjAxLjY4MzM0MzQwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTU1NzMzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFzaWNfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfYmFzaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2Jhc2ljLmM9MTQ3PXN0YXRpYyBpbnQgYmFzaWNfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMTcxLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoxNzI6c3RhdGljIGludCBiYXNpY19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0xNzMtXFx0XFx0XFx0c3RydWN0IHRjZl9wcm90byAqdHAsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdTMyIGhhbmRsZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYz0zMjA9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19iYXNpY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0zMjUtXFx0LmdldFxcdFxcdD1cXHRiYXNpY19nZXQsXFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jOjMyNjpcXHQuY2hhbmdlXFx0XFx0PVxcdGJhc2ljX2NoYW5nZSxcXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMzI3LVxcdC5kZWxldGVcXHRcXHQ9XFx0YmFzaWNfZGVsZXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjowMS45OTg5MjE1NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTY0NTQzMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IEEgU3BlY2lmaWMgRXJyb3IgUGF0aCBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBgYmFzaWNfY2hhbmdlYCBmdW5jdGlvbiwgd2hpY2ggSSBrbm93IGlzIGEgYC5jaGFuZ2VgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHRjZl9wcm90b19vcHNgIHN0cnVjdHVyZS4gSXQncyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGB0Y2AgbmV0bGluayBpbnRlcmZhY2UgKFJUTV9ORVdURklMVEVSKS4gVGhlIGNvcmUgb2YgdGhlIGZpeCBhcHBlYXJzIHRvIGJlIGFkZGluZyBgaWRyX3JlbW92ZShcdTAwMjZoZWFkLVx1MDAzZWhhbmRsZV9pZHIsIGZuZXctXHUwMDNlaGFuZGxlKTtgIG9uIGFuIGVycm9yIHBhdGgsIHNwZWNpZmljYWxseSB3aGVuIGBhbGxvY19wZXJjcHVfZ2ZwYCBmYWlscy4gVGhpcyBsb29rcyBsaWtlIGEgc3BlY2lmaWMgZml4IHRvIHByZXZlbnQgYW4gSURSIGxlYWsuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFllcywgZGVmaW5pdGVseS4gRmF1bHQgaW5qZWN0aW9uIGR1cmluZyBmdXp6aW5nIGNvdWxkIGJlIGlkZWFsIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXJyb3IgcGF0aC4gSWYgd2UgdHJpZ2dlciB0aGUgZXJyb3IgcGF0aCB2aWEgZmF1bHQgaW5qZWN0aW9uLCB0aGVuIHdlIGNhbiB2ZXJpZnkgdGhlIElEUiBlbnRyeSBpcyByZW1vdmVkIGNvcnJlY3RseS4gUHJldmVudGluZyBhIGxlYWsgKm9yKiBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uIGxhdGVyIGlzIGEgc3Ryb25nIHJlYXNvbiB0byBmdXp6LlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHJlY2FsbCB0aGUgZnV6emluZyBndWlkZWxpbmVzIG1lbnRpb24gc29tZXRoaW5nIGFib3V0IFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlc1wiIG9yIG1vZGlmaWNhdGlvbnMgdG8gbnVtZXJpYyBjb25zdGFudHMuIFRoZXkgd2FudCBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgdGhvc2UuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggKmRvZXMqIGNvbnRhaW4gYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgdGhhdCBgaWRyX3JlbW92ZWAgY2FsbCEgSXQgYWN0aXZlbHkgbW9kaWZpZXMgcHJvZ3JhbSBiZWhhdmlvci5cblxuQWxyaWdodCwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcy4gSSBzZWUgc29tZSBjaGFuZ2VzIGluIGBjbHNfYnBmLmNgLCBgY2xzX2Nncm91cC5jYCwgYGNsc19mbG93LmNgLCBgY2xzX2Zsb3dlci5jYCwgYGNsc19mdy5jYCwgYGNsc19tYXRjaGFsbC5jYCwgYGNsc19yb3V0ZS5jYCwgYW5kIGBjbHNfdTMyLmNgLCBidXQgaXQganVzdCBsb29rcyBsaWtlIHRoZXkgYXJlIGNoYW5naW5nIGBremFsbG9jX29iamAgdG8gdXNlIGBHRlBfS0VSTkVMX0FDQ09VTlRgIG9yIGBhbGxvY19wZXJjcHVgIHRvIGBhbGxvY19wZXJjcHVfZ2ZwYC4gTm93LCB0aGVzZSBga3phbGxvY19vYmpgIGNhbGxzIC0gdGhvc2UgYXJlbid0IGZhbWlsaWFyIHRvIG1lIGFzIHN0YW5kYXJkIGtlcm5lbCBtYWNyb3MuIEFyZSB0aGV5IGRlZmluZWQgaW4gYSBoZWFkZXIgc29tZXdoZXJlPyBJIHNob3VsZCBwcm9iYWJseSBncmVwIGZvciB0aG9zZSBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjA4Ljk2MzQ2NzY4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM5OTEzMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBremFsbG9jX29ialwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zbGFiLmg9MTA3MD12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUxLS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTI6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUzLVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU0OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU1LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgQ09VTlQpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoxMS4yMDMzOTA1MTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODg1Nzc5MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldCBTY2hlZHVsZXIgQ2xhc3NpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHRvIGEgYnVuY2ggb2YgYGt6YWxsb2Nfb2JqYCBjYWxscyB3aXRoaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIGNsYXNzaWZpZXIgY29kZSAoYG5ldC9zY2hlZC9jbHNfKi5jYCkuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZ29hbCBoZXJlIGlzIHJlc291cmNlIGFjY291bnRpbmcuIFRoZSBvbmx5ICpmdW5jdGlvbmFsKiBjaGFuZ2UgYXBwZWFycyB0byBiZSBhbiBgaWRyX3JlbW92ZWAgY2FsbCBpbiBgY2xzX2Jhc2ljLmNgLlxuXG5HaXZlbiBteSBleHBlcmllbmNlLCBJJ2Qgc2F5IHRoaXMgd2FycmFudHMgZnV6emluZy4gSXQncyB0b3VjaGluZyBjb3JlIGtlcm5lbCBsb2dpYyByZWxhdGVkIHRvIG5ldHdvcmsgc2NoZWR1bGVycywgYW5kIHdoaWxlIHRoZSBjaGFuZ2UgaXMgc3VidGxlLCBhbnkgYnVnIGluIHRoaXMgYXJlYSBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGltcGFjdC4gU28sIHllcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBJJ2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZm9jdXMgYXJlYXMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGFza3MgbWUgdG8gaWRlbnRpZnkga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiwgYW5kIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHNrZXdlZCBmdXp6aW5nLiBMb29raW5nIGF0IHRoZSBjb2RlLCB0aGVzZSBmdW5jdGlvbnMgc3RhbmQgb3V0OlxuXG4qICAgYGJhc2ljX2NoYW5nZWBcbiogICBgY2xzX2JwZl9jaGFuZ2VgXG4qICAgYGNsc19jZ3JvdXBfY2hhbmdlYFxuKiAgIGBmbG93X2NoYW5nZWBcbiogICBgZmxfY2hhbmdlYFxuKiAgIGBmd19jaGFuZ2VgXG4qICAgYG1hbGxfY2hhbmdlYFxuKiAgIGByb3V0ZTRfY2hhbmdlYFxuKiAgIGB1MzJfY2hhbmdlYFxuXG5UaGVzZSBhcmUgdGhlIGAuY2hhbmdlYCBjYWxsYmFja3MsIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4gVGhlc2UgYXJlICpwZXJmZWN0KiBmb3IgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRoZXkgYXJlbid0IGluIHRoZSBob3QgcGF0aCAoYC5jbGFzc2lmeWAgd291bGQgYmUpLCBidXQgdGhleSBhcmUgKmNyaXRpY2FsKiBmb3IgY29udHJvbGxpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBjbGFzc2lmaWVycy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWdzIGZvciB0aGVzZSBzeW1ib2xzLlxuXG4qICAgYE5FVF9TQ0hfQkFTSUNgXG4qICAgYE5FVF9TQ0hfQlBGYFxuKiAgIGBORVRfQ0dST1VQX0JQRmAgb3IgYE5FVF9DTFNfQ0dST1VQYFxuKiAgIGBORVRfQ0xTX0ZMT1dgXG4qICAgYE5FVF9DTFNfRkxPV0VSYFxuKiAgIGBORVRfQ0xTX0ZXYFxuKiAgIGBORVRfQ0xTX01BVENIQUxMYFxuKiAgIGBORVRfQ0xTX1JPVVRFNGBcbiogICBgTkVUX0NMU19VMzJgXG5cbk9rYXksIHRob3NlIGxvb2sgcmlnaHQuIEdvb2QuIEkgc2hvdWxkIHZlcmlmeSB0aGUgY29uZmlnIG5hbWVzIHRvIGJlIDEwMCUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoxOS4wODkxNzUwNjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4ODM1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9DTFNfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTQ4MT1jb25maWcgTkVUX0NMU1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNDgzLVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ4NDpjb25maWcgTkVUX0NMU19CQVNJQ1xcbm5ldC9zY2hlZC9LY29uZmlnLTQ4NS1cXHR0cmlzdGF0ZSBcXFwiRWxlbWVudGFyeSBjbGFzc2lmaWNhdGlvbiAoQkFTSUMpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNDkzLVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ5NDpjb25maWcgTkVUX0NMU19ST1VURTRcXG5uZXQvc2NoZWQvS2NvbmZpZy00OTUtXFx0dHJpc3RhdGUgXFxcIlJvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTUwNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1MDY6Y29uZmlnIE5FVF9DTFNfRldcXG5uZXQvc2NoZWQvS2NvbmZpZy01MDctXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBtYXJrIChGVylcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXFxubmV0L3NjaGVkL0tjb25maWc6NTE2OmNvbmZpZyBORVRfQ0xTX1UzMlxcbm5ldC9zY2hlZC9LY29uZmlnLTUxNy1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz01MzM9Y29uZmlnIENMU19VMzJfTUFSS1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTM4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjUzOTpjb25maWcgTkVUX0NMU19GTE9XXFxubmV0L3NjaGVkL0tjb25maWctNTQwLVxcdHRyaXN0YXRlIFxcXCJGbG93IGNsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01NDktXFxubmV0L3NjaGVkL0tjb25maWc6NTUwOmNvbmZpZyBORVRfQ0xTX0NHUk9VUFxcbm5ldC9zY2hlZC9LY29uZmlnLTU1MS1cXHR0cmlzdGF0ZSBcXFwiQ29udHJvbCBHcm91cCBDbGFzc2lmaWVyXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTYxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjU2Mjpjb25maWcgTkVUX0NMU19CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXFx0dHJpc3RhdGUgXFxcIkJQRi1iYXNlZCBjbGFzc2lmaWVyXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTcxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjU3Mjpjb25maWcgTkVUX0NMU19GTE9XRVJcXG5uZXQvc2NoZWQvS2NvbmZpZy01NzMtXFx0dHJpc3RhdGUgXFxcIkZsb3dlciBjbGFzc2lmaWVyXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTgxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjU4Mjpjb25maWcgTkVUX0NMU19NQVRDSEFMTFxcbm5ldC9zY2hlZC9LY29uZmlnLTU4My1cXHR0cmlzdGF0ZSBcXFwiTWF0Y2gtYWxsIGNsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXFxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoxOS4xNTEwNjg3OTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQyNjk5NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgTkVUX0NMU19CQVNJQ2AsIGBORVRfQ0xTX1JPVVRFNGAsIGBORVRfQ0xTX0ZXYCwgYE5FVF9DTFNfVTMyYCwgYE5FVF9DTFNfRkxPV2AsIGBORVRfQ0xTX0NHUk9VUGAsIGBORVRfQ0xTX0JQRmAsIGBORVRfQ0xTX0ZMT1dFUmAsIGFuZCBgTkVUX0NMU19NQVRDSEFMTGAuIFRoZXNlIGFsbCBsb29rIGxpa2UgdmFyaW91cyBjbGFzc2lmaWVyIG1vZHVsZXMgYmVpbmcgZW5hYmxlZC4gUHJldHR5IHN0YW5kYXJkIHN0dWZmLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyB0byB0aGUgY29yZSBjbGFzc2lmaWVyIEFQSS5cblxuQWhhLCBhbmQgbm93IEkgc2VlIHRoYXQgYGNsc19hcGkuY2AgaXMgYWxzbyBtb2RpZmllZC4gVGhhdCdzIGEgcmVkIGZsYWcuIElmIHRoZSBjb3JlIEFQSSBpcyB0b3VjaGVkLCBJIG5lZWQgdG8gcGF5ICp2ZXJ5KiBjbG9zZSBhdHRlbnRpb24uIFRoaXMgaW1wYWN0cyB0aGUgZ2VuZXJhbCBmcmFtZXdvcmssIHNvIHRoZSByaXBwbGUgZWZmZWN0cyB3aWxsIG5lZWQgdG8gYmUgYW5hbHl6ZWQuIEkgc2VlIGB0Y2ZfZXh0c19pbml0X2V4YCBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gaW4gYGNsc19hcGkuY2AgdGhhdCdzIGJlZW4gYWx0ZXJlZC4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgTkVUX0NMU19BQ1RgIGlzIG5lZWRlZCBmb3IgYHRjZl9leHRzX2luaXRfZXhgIGFzIHdlbGwsIG9yIGFueSBvdGhlciBvZiB0aGVzZSBvcHRpb25zIGZvciB0aGF0IG1hdHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICdkb2VzIHRoaXMgY2hhbmdlIHJlcXVpcmUgYSBjaGFuZ2UgdG8gdGhlIGFjdGlvbiBzdWJzeXN0ZW0gYXMgd2VsbD8nLiBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IGhhbmRsZXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGV4dGVuZGVkIGNsYXNzaWZpZXIgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhhdCB3b3VsZCBiZSBjcml0aWNhbCBpZiBhbnkgYWN0aW9ucyBhcmUgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjI1Ljk5Mzc3MTE2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0MTgxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2V4dHNfaW5pdF9leFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmM9MzI2MD1zdGF0aWMgaW50IHRjX2R1bXBfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zMzUyLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzM1MzppbnQgdGNmX2V4dHNfaW5pdF9leChzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMsIHN0cnVjdCBuZXQgKm5ldCwgaW50IGFjdGlvbixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMzNTQtXFx0XFx0ICAgICBpbnQgcG9saWNlLCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdTMyIGhhbmRsZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzM5MS19XFxubmV0L3NjaGVkL2Nsc19hcGkuYzozMzkyOkVYUE9SVF9TWU1CT0wodGNmX2V4dHNfaW5pdF9leCk7XFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zMzkzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoyNi4wNTYyMzYzODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDQyMTI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgQ29yZSBGdW5jdGlvbioqXG5cblJpZ2h0LCBgdGNmX2V4dHNfaW5pdF9leGAgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIgaGVyZSwgYXMgSSBleHBlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgYE5FVF9DTFNgIHJlcXVpcmVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uPyBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQncyBpbmRlZWQgdGhlIHBhcmVudCBjb25maWd1cmF0aW9uIGZvciB3aGF0IEknbSBkZWFsaW5nIHdpdGguIEdvb2QsIHRoYXQgY29uZmlybXMgYSBkZXBlbmRlbmN5LiBBbmQsIHNpbmNlIEknbSBhbHJlYWR5IGRpZ2dpbmcgaW50byByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgYE5FVF9TQ0hFRGAgYXMgd2VsbCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgc2VlIGhvdyBpdCBtaWdodCBmYWN0b3IgaW4uIEl0J3MgYmVzdCB0byBjb25zaWRlciB0aGVzZSBjb25maWd1cmF0aW9ucyB0b2dldGhlciBzaW5jZSB0aGV5J3JlIHRpZ2h0bHkgY291cGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoyOS42OTA2NjI3MTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwODM5NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjI5Ljc1MTUxOTU5M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY0NjM5MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9uczpcblxuKipBbmFseXppbmcgdGhlIE5ldHdvcmsgVHJhZmZpYyBDb250cm9sIENvbmZpZ3VyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgYSB3aG9sZSBzdWl0ZSBvZiBuZXR3b3JrIHNjaGVkdWxlciBhbmQgY2xhc3NpZmllciBjb25maWd1cmF0aW9uczogYE5FVF9TQ0hFRGAsIGBORVRfQ0xTYCwgYE5FVF9DTFNfQkFTSUNgLCBgTkVUX0NMU19ST1VURTRgLCBgTkVUX0NMU19GV2AsIGBORVRfQ0xTX1UzMmAsIGBORVRfQ0xTX0ZMT1dgLCBgTkVUX0NMU19DR1JPVVBgLCBgTkVUX0NMU19CUEZgLCBgTkVUX0NMU19GTE9XRVJgLCBgTkVUX0NMU19NQVRDSEFMTGAsIGFuZCBgTkVUX0NMU19BQ1RgLiBTZWVtcyBsaWtlIGEgcHJldHR5IGNvbXByZWhlbnNpdmUgc2V0LiBXZSd2ZSBnb3QgdGhlIGJhc2ljcyBjb3ZlcmVkLCBzb21lIG1vcmUgYWR2YW5jZWQgY2xhc3NpZmllcnMgbGlrZSBCUEYgYW5kIEZMT1csIGFuZCBzb21lIHNwZWNpZmljIG9uZXMgbGlrZSBDR1JPVVAgYW5kIEZMT1dFUi4gQW5kIG9mIGNvdXJzZSwgdGhlIGV2ZXItaW1wb3J0YW50IGFjdGlvbiBjb21wb25lbnQgYE5FVF9DTFNfQUNUYC5cblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGBORVRfQ0xTX1JPVVRFNGAuLi4gdGhhdCBvbmUgcmluZ3MgYSBiZWxsLiBJdCdzIGEgYml0IHNwZWNpZmljLCBhbmQgSSdtIHByZXR0eSBzdXJlIGl0IHJlbGllcyBvbiBzb21ldGhpbmcgZWxzZSBiZWluZyBlbmFibGVkLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyB0aGVyZS4gTWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueSBjcnVjaWFsIHByZXJlcXVpc2l0ZXMsIGFuZCB3aGF0IHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbCB3ZSBhcmUgdXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDc3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjM0LjExNjE2Mjk1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2NDg5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9DTFNfUk9VVEU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTQ4ND1jb25maWcgTkVUX0NMU19CQVNJQ1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNDkzLVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ5NDpjb25maWcgTkVUX0NMU19ST1VURTRcXG5uZXQvc2NoZWQvS2NvbmZpZy00OTUtXFx0dHJpc3RhdGUgXFxcIlJvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MzQuMTc5ODI3NjkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTEwNzIxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgRmlsZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSByb3V0ZTQgY2xhc3NpZmllciB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc2NoZWR1bGVyLiBUaW1lIHRvIHB1bGwgdXAgYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBhcm91bmQgdGhlIGBORVRfQ0xTX1JPVVRFNGAgZGVmaW5lLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjbGFzc2lmaWVyIGlzIGV4cG9zZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCBhbnkgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcXVldWluZyBkaXNjaXBsaW5lcyBvciBjbGFzc2lmaWVyIG9wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gdXAgdG8gc3BlZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MzguMDMwOTAzOTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA0OTI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Jhc2ljLlxcbiA0OTM6XFx0XFxuIDQ5NDpcXHRjb25maWcgTkVUX0NMU19ST1VURTRcXG4gNDk1OlxcdFxcdHRyaXN0YXRlIFxcXCJSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcXFwiXFxuIDQ5NjpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNDk3OlxcdFxcdHNlbGVjdCBJUF9ST1VURV9DTEFTU0lEXFxuIDQ5ODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA0OTk6XFx0XFx0aGVscFxcbiA1MDA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXFxuIDUwMTpcXHRcXHQgIGFjY29yZGluZyB0byB0aGUgcm91dGUgdGFibGUgZW50cnkgdGhleSBtYXRjaGVkLlxcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTA0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19yb3V0ZS5cXG4gNTA1OlxcdFxcbiA1MDY6XFx0Y29uZmlnIE5FVF9DTFNfRldcXG4gNTA3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbWFyayAoRlcpXFxcIlxcbiA1MDg6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTA5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MzguMDMxMDQ0NzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyNjAyMjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTmV0d29yayBDbGFzc2lmaWVycyBhbmQgQ2dyb3VwcyoqXG5cbk9rYXksIHNvIHRoZSBiZWhhdmlvciBoZXJlIGhpbmdlcyBvbiBob3cgYElORVRgIGlzIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgdGhlIGNsYXNzaWZpY2F0aW9uIG1lY2hhbmlzbXMuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJMZXQncyBzdGFydCBieSBleGFtaW5pbmcgYE5FVF9DTFNfQ0dST1VQYC5cIiBUaGlzIGZlZWxzIGxpa2UgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCwgdGhlIGNncm91cCBpbnRlZ3JhdGlvbiBtaWdodCBwcm92aWRlIHRoZSBjb3JlIGxpbmsgaGVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6NDEuODU3MDcxNDc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0XFx0ICBpbiBjb21iaW5hdGlvbiB3aXRoIFNGUS5cXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDU0ODpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfZmxvdy5cXG4gNTQ5OlxcdFxcbiA1NTA6XFx0Y29uZmlnIE5FVF9DTFNfQ0dST1VQXFxuIDU1MTpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29udHJvbCBHcm91cCBDbGFzc2lmaWVyXFxcIlxcbiA1NTI6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTUzOlxcdFxcdHNlbGVjdCBDR1JPVVBfTkVUX0NMQVNTSURcXG4gNTU0OlxcdFxcdGRlcGVuZHMgb24gQ0dST1VQU1xcbiA1NTU6XFx0XFx0aGVscFxcbiA1NTY6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb24gdGhlIGNvbnRyb2xcXG4gNTU3OlxcdFxcdCAgY2dyb3VwIG9mIHRoZWlyIHByb2Nlc3MuXFxuIDU1ODpcXHRcXG4gNTU5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1NjA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Nncm91cC5cXG4gNTYxOlxcdFxcbiA1NjI6XFx0Y29uZmlnIE5FVF9DTFNfQlBGXFxuIDU2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiQlBGLWJhc2VkIGNsYXNzaWZpZXJcXFwiXFxuIDU2NDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo0MS44NTcyOTMxNThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkzODIyNDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvbnRyb2wgR3JvdXAgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2Ygd2hhdCBJJ20gdGhpbmtpbmcgYWJvdXQgaGluZ2VzIG9uIHRoZSBgQ0dST1VQU2Agc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGltcGFjdC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGZvdW5kYXRpb24gSSdtIG9wZXJhdGluZyBvbi5cblxuTm93LCBmcm9tIHRoZXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgTkVUX0NMU19CUEZgLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgY29uc2lkZXJhdGlvbjsgaXQncyBjZW50cmFsIHRvIGhvdyBJIGFwcHJvYWNoIHRoaXMgcGFydGljdWxhciBwcm9ibGVtLiBJdHMgYXZhaWxhYmlsaXR5IG9yIGltcGxlbWVudGF0aW9uIHNpZ25pZmljYW50bHkgY2hhbmdlcyB0aGUgbGFuZHNjYXBlLiBUaGF0J3Mgd2hlcmUgbXkgZm9jdXMgc2hpZnRzIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo0Ny43OTU1MjE4MTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU2MDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfY2dyb3VwLlxcbiA1NjE6XFx0XFxuIDU2MjpcXHRjb25maWcgTkVUX0NMU19CUEZcXG4gNTYzOlxcdFxcdHRyaXN0YXRlIFxcXCJCUEYtYmFzZWQgY2xhc3NpZmllclxcXCJcXG4gNTY0OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDU2NTpcXHRcXHRoZWxwXFxuIDU2NjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb25cXG4gNTY3OlxcdFxcdCAgcHJvZ3JhbW1hYmxlIEJQRiAoSklUJ2VkKSBmaWx0ZXJzIGFzIGFuIGFsdGVybmF0aXZlIHRvIGVtYXRjaGVzLlxcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gNTcwOlxcdFxcdCAgYmUgY2FsbGVkIGNsc19icGYuXFxuIDU3MTpcXHRcXG4gNTcyOlxcdGNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxcbiA1NzM6XFx0XFx0dHJpc3RhdGUgXFxcIkZsb3dlciBjbGFzc2lmaWVyXFxcIlxcbiA1NzQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTc1OlxcdFxcdGhlbHBcXG4gNTc2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvblxcbiA1Nzc6XFx0XFx0ICBhIGNvbmZpZ3VyYWJsZSBjb21iaW5hdGlvbiBvZiBwYWNrZXQga2V5cyBhbmQgbWFza3MuXFxuIDU3ODpcXHRcXG4gNTc5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo0Ny43OTU3MTAyMzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NTIyODc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0cywgc3VtbWFyaXplZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duLCBwcmVzZW50ZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERlcGVuZGVuY2llcyBhbmQgTmV0ZmlsdGVyIEhvb2tzKipcblxuQWxyaWdodCwgaW5pdGlhbCBjb25zaWRlcmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gd29yayB3aXRob3V0IGludHJvZHVjaW5nIGFueSB1bm5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMuIEkgYWx3YXlzIHRyeSB0byBrZWVwIHRoaW5ncyBsZWFuIGFuZCBtZWFuIOKAkyBsZXNzIGJhZ2dhZ2UsIGZld2VyIHBvaW50cyBvZiBmYWlsdXJlLCBhbmQgZWFzaWVyIHBvcnRhYmlsaXR5LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgbmV0ZmlsdGVyIGhvb2ssIGFuZCBgTkVUX0NMU19BQ1RgIGp1bXBzIHRvIG1pbmQuIFRoaXMgaG9vayBpcyB3ZWxsLXN1aXRlZCBmb3IgYSB2YXJpZXR5IG9mIHBhY2tldCBtYW5pcHVsYXRpb24gdGFza3MuIFRpbWUgdG8gZ28gZGVlcGVyIGFuZCBldmFsdWF0ZSBpdHMgc3VpdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo1MS42NTA5NDM2NDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5ODpcXHRcXG4gNjk5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA3MDA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZW1faXB0LlxcbiA3MDE6XFx0XFxuIDcwMjpcXHRjb25maWcgTkVUX0NMU19BQ1RcXG4gNzAzOlxcdFxcdGJvb2wgXFxcIkFjdGlvbnNcXFwiXFxuIDcwNDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA3MDU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1NcXG4gNzA2OlxcdFxcdGhlbHBcXG4gNzA3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMuIEFjdGlvbnNcXG4gNzA4OlxcdFxcdCAgZ2V0IGF0dGFjaGVkIHRvIGNsYXNzaWZpZXJzIGFuZCBhcmUgaW52b2tlZCBhZnRlciBhIHN1Y2Nlc3NmdWxcXG4gNzA5OlxcdFxcdCAgY2xhc3NpZmljYXRpb24uIFRoZXkgYXJlIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBjbGFzc2lmaWNhdGlvblxcbiA3MTA6XFx0XFx0ICByZXN1bHQsIGluc3RhbnRseSBkcm9wIG9yIHJlZGlyZWN0IHBhY2tldHMsIGV0Yy5cXG4gNzExOlxcdFxcbiA3MTI6XFx0XFx0ICBBIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBpcHJvdXRlMiBwYWNrYWdlIGlzIHJlcXVpcmVkIHRvIHVzZVxcbiA3MTM6XFx0XFx0ICBleHRlbmRlZCBtYXRjaGVzLlxcbiA3MTQ6XFx0XFxuIDcxNTpcXHRjb25maWcgTkVUX0FDVF9QT0xJQ0VcXG4gNzE2OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFmZmljIFBvbGljaW5nXFxcIlxcbiA3MTc6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo1MS42NTEwNDY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Njk5Mzk4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIENsYXNzaWZpY2F0aW9uIEFjdGl2YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgTkVUX0NMU19BQ1RgLiBJdCdzIGEgc2ltcGxlIGJvb2xlYW4sIGVzc2VudGlhbGx5IGp1c3QgYSBmbGFnLCB3aGljaCBtYWtlcyBzZW5zZSBmcm9tIGEgZnVuZGFtZW50YWwgZGVzaWduIHBlcnNwZWN0aXZlLiBUaGF0IGtlZXBzIHRoaW5ncyBjbGVhbiBhbmQgYXZvaWRzIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuIE5vdywgZ2l2ZW4gdGhhdCdzIHRoZSBjYXNlLCBJIG5lZWQgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgZG93bnN0cmVhbSBmcm9tIHRoYXQuIE15IGZvY3VzIGlzIG5vdyBvbiBgTkVUX0NMU19VMzJgLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSB1bmRlcmx5aW5nIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGlzIGJlaW5nIGludGVycHJldGVkIGFuZCB1c2VkLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgdXNhZ2Ugb2YgYE5FVF9DTFNfVTMyYCBhbmQgbG9va2luZyBmb3IgcmVsYXRlZCBjb2RlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGludGVyZXN0aW5nIHN0dWZmIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6NTYuNDIwOTkyMTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxNTpcXHRcXG4gNTE2OlxcdGNvbmZpZyBORVRfQ0xTX1UzMlxcbiA1MTc6XFx0XFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXFxcIlxcbiA1MTg6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTE5OlxcdFxcdGhlbHBcXG4gNTIwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgdXNpbmcgYSB1bml2ZXJzYWxcXG4gNTIxOlxcdFxcdCAgMzJiaXQgcGllY2VzIGJhc2VkIGNvbXBhcmlzb24gc2NoZW1lLlxcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTI0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc191MzIuXFxuIDUyNTpcXHRcXG4gNTI2OlxcdGNvbmZpZyBDTFNfVTMyX1BFUkZcXG4gNTI3OlxcdFxcdGJvb2wgXFxcIlBlcmZvcm1hbmNlIGNvdW50ZXJzIHN1cHBvcnRcXFwiXFxuIDUyODpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfVTMyXFxuIDUyOTpcXHRcXHRoZWxwXFxuIDUzMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gbWFrZSB1MzIgZ2F0aGVyIGFkZGl0aW9uYWwgc3RhdGlzdGljcyB1c2VmdWwgZm9yXFxuIDUzMTpcXHRcXHQgIGZpbmUgdHVuaW5nIHUzMiBjbGFzc2lmaWVycy5cXG4gNTMyOlxcdFxcbiA1MzM6XFx0Y29uZmlnIENMU19VMzJfTUFSS1xcbiA1MzQ6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG1hcmtzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjU2LjQyMTEyMzkzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MjM4MTYwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB1MzIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBjbHNfdTMyLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgQ09ORklHX0NMU19VMzJfUEVSRmAgYW5kIGBDT05GSUdfQ0xTX1UzMl9NQVJLYCBzZWN0aW9ucy4gTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBjb2RlIGNoYW5nZXMuIEknbSBzZWVpbmcgdGhhdCB0aGUgcGF0Y2ggaXMgcmVwbGFjaW5nIGBfX2FsbG9jX3BlcmNwdWAgYW5kIGBhbGxvY19wZXJjcHVgIHdpdGggYF9fYWxsb2NfcGVyY3B1X2dmcGAgYW5kIGBhbGxvY19wZXJjcHVfZ2ZwYCByZXNwZWN0aXZlbHkuIEl0IGFsc28gYWRkcyBhIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcuIFRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIGxpa2VseSByZWxhdGVkIHRvIGFjY291bnRpbmcgZm9yIHRoZSBtZW1vcnkgdXNlZCBieSB0aGVzZSBwZXItQ1BVIGNvdW50ZXJzLiBUaGUgY2hhbmdlIG9mIGBfX2FsbG9jX3BlcmNwdWAgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGV2YWx1YXRlLlxuXG5UaGUgZmFjdCB0aGF0IHRoZXkgYXJlIG5vdyB1c2luZyBhIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcgbWVhbnMgdGhlIHN5c3RlbSB3aWxsIGhhdmUgbW9yZSBhY2N1cmF0ZSBpbmZvcm1hdGlvbiBvbiB3aGF0IGlzIHVzaW5nIGhvdyBtdWNoIG1lbW9yeSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIGZvciBkZWJ1Z2dpbmcgYW5kIG1vbml0b3JpbmcuXG5cbkJhc2VkIG9uIHRoZXNlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2Ugd2UnbGwgbmVlZCBib3RoIGBDT05GSUdfQ0xTX1UzMl9QRVJGYCBhbmQgYENPTkZJR19DTFNfVTMyX01BUktgIGVuYWJsZWQuIExldCdzIG1ha2Ugc3VyZSBgTkVUX0NMU19NQVRDSEFMTGAgaXMgYWxzbyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjA1LjE0NDk0MzY2NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdFxcdCAgYmUgY2FsbGVkIGNsc19mbG93ZXIuXFxuIDU4MTpcXHRcXG4gNTgyOlxcdGNvbmZpZyBORVRfQ0xTX01BVENIQUxMXFxuIDU4MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWF0Y2gtYWxsIGNsYXNzaWZpZXJcXFwiXFxuIDU4NDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1ODU6XFx0XFx0aGVscFxcbiA1ODY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIGJhc2VkIG9uXFxuIDU4NzpcXHRcXHQgIG5vdGhpbmcuIEV2ZXJ5IHBhY2tldCB3aWxsIG1hdGNoLlxcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gNTkwOlxcdFxcdCAgYmUgY2FsbGVkIGNsc19tYXRjaGFsbC5cXG4gNTkxOlxcdFxcbiA1OTI6XFx0Y29uZmlnIE5FVF9FTUFUQ0hcXG4gNTkzOlxcdFxcdGJvb2wgXFxcIkV4dGVuZGVkIE1hdGNoZXNcXFwiXFxuIDU5NDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzowNS4xNDUwNjQwNTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgxNTU1MjY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHNldCB1cC4gSSBzZWUgYSBwcmV0dHkgY29tcHJlaGVuc2l2ZSBsaXN0IGhlcmU6IGBORVRfU0NIRURgLCBgTkVUX0NMU2AsIGBORVRfQ0xTX0JBU0lDYCwgYE5FVF9DTFNfUk9VVEU0YCwgYElORVRgLCBgTkVUX0NMU19GV2AsIGBORVRfQ0xTX1UzMmAsIGBDTFNfVTMyX1BFUkZgLCBgQ0xTX1UzMl9NQVJLYCwgYE5FVF9DTFNfRkxPV2AsIGFuZCBgTkVUX0NMU19DR1JPVVBgLiBBbmQgb2YgY291cnNlIHRoZSBtb3JlIGFkdmFuY2VkIHN0dWZmIHRvbzogYENHUk9VUFNgLCBgTkVUX0NMU19CUEZgLCBgTkVUX0NMU19GTE9XRVJgLCBgTkVUX0NMU19NQVRDSEFMTGAsIGFuZCBgTkVUX0NMU19BQ1RgLlxuXG5IbW0sIG5vdyB0aGF0IEkgbG9vayBhdCB0aGlzIGxpc3QsIEknbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBDR1JPVVBTYCBpcyBhY3R1YWxseSB0aGUgY29uZmlndXJhdGlvbiBpdGVtIEkgbmVlZC4gSXQgc2hvdWxkIGJlLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4gSSdtIGdvaW5nIHRvIGNvbmZpcm0gdGhhdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg4MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjE0Ljk2MDYyMDU5OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MzAwMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA0ND1jb25maWcgU0xBQl9PQkpfRVhUXFxuLS1cXG5pbml0L0tjb25maWctMTA0Ni1cXG5pbml0L0tjb25maWc6MTA0NzptZW51Y29uZmlnIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA0OC1cXHRib29sIFxcXCJDb250cm9sIEdyb3VwIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjE1LjQ4ODkyNzY1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE4NDQ0NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBmaWVsZCBvZiBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzKipcblxuQWxyaWdodCwgeWVwLCB0aGF0J3MgaXQuIGBDR1JPVVBTYCBpcyB0aGUgY29ycmVjdCBwYXJhbWV0ZXIgd2UncmUgbG9va2luZyBhdC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IGNoYW5nZXMgb3IgYW5hbHlzaXMsIGl0J3MgYWx3YXlzIHNtYXJ0IHRvIGNvbmZpcm0uIExldCdzIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgSU5FVGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gc2VjdGlvbiB3ZSBuZWVkIHRvIGJlIGZvY3VzaW5nIG9uLiBBIGRvdWJsZS1jaGVjayBub3cgc2F2ZXMgYSBoZWFkYWNoZSBsYXRlciwgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyB0aGlzIGZ1bmRhbWVudGFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjE4LjcwNzM3NjA2OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MzQ2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXFxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxubmV0L2lwdjQvS2NvbmZpZy00MDUtXFx0aW50IFxcXCJJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTgtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDIyLVxcbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cXHR0cmlzdGF0ZSBcXFwiSU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzgtXFxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cXHR0cmlzdGF0ZSBcXFwiVURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDU0LVxcbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L0tjb25maWctNDU2LVxcdGJvb2wgXFxcIklORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjE4Ljc4NjExODAyNloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzY4NDQ2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIHRocm91Z2ggdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBhIHNwZWNpZmljIG9wdGlvbiwgYElORVRgLCBpcyBkZWZpbmVkLiBJbml0aWFsbHksIEkgd2FzIHByb2JhYmx5IG1lbnRhbGx5IHNjYW5uaW5nIHRoZSBvYnZpb3VzIHBsYWNlcywgbWF5YmUgdGhpbmtpbmcgaXQgd291bGQgYmUgaW4gc29tZXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBwcm90b2NvbHMgaW4gZ2VuZXJhbC4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBqdXN0IHJlYWxpemVkLCBhaGEhLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2shIEl0J3MgcmlnaHQgdGhlcmUgaW4gYG5ldC9LY29uZmlnYC4gRXhjZWxsZW50LiBTb21ldGltZXMsIHlvdSBqdXN0IG5lZWQgYSBmcmVzaCBwZXJzcGVjdGl2ZSwgb3IgYSByZS1mb2N1cyB0byBmaW5kIHRoZSBvYnZpb3VzIGFuc3dlci4gSSBrbmV3IEknZCBmaW5kIGl0IGV2ZW50dWFsbHkuIFRpbWUgdG8gZHJpbGwgZG93biBpbnRvIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMzMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzoyNy4xNTQ1Njc2NzFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTM5OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjI3LjIzMjUxNTQ5OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDk0NTQ4MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEZ1bmN0aW9uIFN5bWJvbHMgYW5kIEFQSSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHllcywgYElORVRgIHNlZW1zIHNwb3Qgb24gaGVyZS4gTGV0J3MgZGlnIGludG8gdGhlc2UgYEZvY3VzU3ltYm9sc2AuIEkgc2VlOiBgYmFzaWNfY2hhbmdlYCwgYGNsc19icGZfY2hhbmdlYCwgYGNsc19jZ3JvdXBfY2hhbmdlYCwgYGZsb3dfY2hhbmdlYCwgYGZsX2NoYW5nZWAsIGBmd19jaGFuZ2VgLCBgbWFsbF9jaGFuZ2VgLCBgcm91dGU0X2NoYW5nZWAsIGFuZCBgdTMyX2NoYW5nZWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgYXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnM/IFRoZSBhbnN3ZXIgaXMgeWVzLCB0aGV5ICphcmUqIHN0YXRpYyBmdW5jdGlvbnMsIHVzZWQgYXMgdGhlIGAuY2hhbmdlYCBjYWxsYmFja3Mgd2l0aGluIGB0Y2ZfcHJvdG9fb3BzYC4gV2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBUaGVzZSAqYXJlbid0KiBpbmxpbmVkLCB0aG91Z2gsIGJlY2F1c2UgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGB0Y2ZfcHJvdG9fb3BzYC4gVGhhdOKAmXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyOyB0aGVpciBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFyZSByZXRhaW5lZC5cblxuVG8gY29uZmlybSB0aGF0LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGV5IGFyZSBpbmRlZWQgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMuIE9rYXksIGdvb2QuIGBiYXNpY19jaGFuZ2VgICppcyogYXNzaWduZWQgdG8gYC5jaGFuZ2VgIGluIGBjbHNfYmFzaWNfb3BzYCwgZm9yIGV4YW1wbGUuIFNvLCBubyBpbmxpbmluZy4gVGhleSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgdGhlIHByb21wdCBzdGlsbCBzYXlzIFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9uc1wiLiBUaGUgcHJpbWFyeSBBUEkgZW50cnlwb2ludCBoZXJlIGlzIGB0Y19uZXdfdGZpbHRlcmAgaW4gYG5ldC9zY2hlZC9jbHNfYXBpLmNgLiBUaW1lIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRoZXJlLCBhbmQgbWFrZSBzdXJlIHRoYXQgaXMgdGhlIGFwcHJvcHJpYXRlIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzozNC4zMjcwNjcyMzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjI0MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX25ld190ZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc19hcGkuYz0yMjQ2PXN0YXRpYyBib29sIGlzX2luZ3Jlc3Nfb3JfY2xzYWN0KHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrLCBzdHJ1Y3QgUWRpc2MgKnEpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyNTAtXFxubmV0L3NjaGVkL2Nsc19hcGkuYzoyMjUxOnN0YXRpYyBpbnQgdGNfbmV3X3RmaWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjI1Mi1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM9NDExNz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgdGNfZmlsdGVyX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XFxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MTE4OlxcdHsubXNndHlwZSA9IFJUTV9ORVdURklMVEVSLCAuZG9pdCA9IHRjX25ld190ZmlsdGVyLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDExOS1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzozNC40MDk3MDQwNDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY0NTQwNDkxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgdGhlIEZ1enplciBvbiBUYXJnZXRlZCBDbGFzc2lmaWVyIENoYW5nZXMqKlxuXG5Pa2F5LCBoZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCB0aGlzLiBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlc2UgY2hhbmdlcyBzZWVtcyB0byBiZSBgdGNfbmV3X3RmaWx0ZXJgLCBidXQgdGhlIGNvcmUgbW9kaWZpY2F0aW9ucyBhcmUgcmVhbGx5IHdpdGhpbiB0aGUgYC5jaGFuZ2VgIGNhbGxiYWNrcyBvZiBzcGVjaWZpYyBjbGFzc2lmaWVycy4gSWYgSSAqb25seSogc3BlY2lmeSBgdGNfbmV3X3RmaWx0ZXJgLCB0aGUgZnV6emVyIG1pZ2h0IG5vdCBiZSBkaXJlY3RlZCBlbm91Z2ggdG8gdGhlIG1vc3QgcmVsZXZhbnQgY29kZS4gVGhlIHByb21wdCBkb2VzIG1lbnRpb24gZm9jdXNpbmcgb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucywgYW5kIGF2b2lkaW5nIGdlbmVyaWMgb25lcy4gYHRjX25ld190ZmlsdGVyYCBpcyBtb3JlIG9mIGEgY29uZmlndXJhdGlvbiBmdW5jdGlvbiwgbm90IGEgaG90IHBhdGgsIHNvIEkgc2hvdWxkIGJlIHNlbGVjdGl2ZS5cblxuR2l2ZW4gdGhhdCwgSSdsbCBpbmNsdWRlIHRoZSBgLmNoYW5nZWAgY2FsbGJhY2tzIGRpcmVjdGx5OiBgYmFzaWNfY2hhbmdlYCwgYGNsc19icGZfY2hhbmdlYCwgYGNsc19jZ3JvdXBfY2hhbmdlYCwgYGZsb3dfY2hhbmdlYCwgYGZsX2NoYW5nZWAsIGBmd19jaGFuZ2VgLCBgbWFsbF9jaGFuZ2VgLCBgcm91dGU0X2NoYW5nZWAsIGFuZCBgdTMyX2NoYW5nZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFsdGVyZWQgYnkgdGhlIHBhdGNoLlxuXG5XYWl0LCBgdGNmX2V4dHNfaW5pdF9leGAgaXMgYWxzbyBtb2RpZmllZCwgYW5kIGl0J3MgYW4gKmV4cG9ydGVkKiBmdW5jdGlvbiwgZGVmaW5lZCBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGFkZGl0aW9uIHRvIHRoZSBGb2N1c1N5bWJvbHMgbGlzdC4gSXQncyBhIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50LlxuXG5DaGVja2luZyBgdGNmX2V4dHNfaW5pdF9leGAgY29uZmlybXMgaXQncyByZWxldmFudCwgYW5kIEkgd2lsbCBhZGQgaXQgdG8gdGhlIEZvY3VzU3ltYm9scy5cblxuU28sIHRoZSBjdXJyZW50IEZvY3VzU3ltYm9scyBsaXN0IGlzOlxuKiAgIGBiYXNpY19jaGFuZ2VgXG4qICAgYGNsc19icGZfY2hhbmdlYFxuKiAgIGBjbHNfY2dyb3VwX2NoYW5nZWBcbiogICBgZmxvd19jaGFuZ2VgXG4qICAgYGZsX2NoYW5nZWBcbiogICBgZndfY2hhbmdlYFxuKiAgIGBtYWxsX2NoYW5nZWBcbiogICBgcm91dGU0X2NoYW5nZWBcbiogICBgdTMyX2NoYW5nZWBcbiogICBgdGNmX2V4dHNfaW5pdF9leGBcblxuSSdtIGRvdWJsZS1jaGVja2luZywgYHRjZl9leHRzX2luaXRfZXhgIGlzICpub3QqIHN0YXRpYywgaXQncyBgRVhQT1JUX1NZTUJPTGAuIFRoZSBgLmNoYW5nZWAgY2FsbGJhY2tzICphcmUqIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4sIG1lYW5pbmcgdGhleSBhcmVuJ3QgaW5saW5lZC4gV2hpbGUgU3l6a2FsbGVyICpjYW4qIHVzZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGUgcHJvbXB0IGVuY291cmFnZXMgbm9uLXN0YXRpYy4gSW5jbHVkaW5nIGB0Y19uZXdfdGZpbHRlcmAgbWlnaHQgYmUgdXNlZnVsLCBhbmQgYHRjZl9leHRzX2luaXRfZXhgIGxvb2tzIGdvb2QgYXMgYW4gZXh0ZXJuYWwgZnVuY3Rpb24uXG5cbkhvd2V2ZXIsIHRoZSBrZXkgaXMgZGlyZWN0aW5nIHRoZSBmdXp6ZXIgdG8gKnNwZWNpZmljKiBjaGFuZ2VzLiBTaW5jZSB0aGUgYC5jaGFuZ2VgIGNhbGxiYWNrcyBhcmUgdGhlICpleGFjdCogZnVuY3Rpb25zIG1vZGlmaWVkLCBJJ2xsIGtlZXAgdGhlbSBpbiB0aGUgbGlzdC4gVGhleSBhcmUgd2hlcmUgdGhlIGNvZGUgY2hhbmdlcyBhcmUgbG9jYXRlZC5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZSBwYXRjaCBmb3Igb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzLlxuXG5JbiBgY2xzX2Jhc2ljLmNgLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uOiAgdGhlIGFkZGl0aW9uIG9mIGEgbWlzc2luZyBgaWRyX3JlbW92ZWAgb24gYW4gZXJyb3IgcGF0aCB3aGVuIGBhbGxvY19wZXJjcHVfZ2ZwYCBmYWlscy4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQgZml4ZXMgYW4gSURSIGxlYWsuIFRoaXMgaXMgdGhlIG9ubHkgYWRkaXRpb25hbCBmdW5jdGlvbmFsIGNoYW5nZSBJJ3ZlIHNlZW4uIFRoaXMgcGF0aCBjYW4gYmUgdGVzdGVkIHdpdGggZmF1bHQgaW5qZWN0aW9uIGR1cmluZyBmdXp6aW5nIHRvIHZlcmlmeSB0aGUgZml4IGFuZCBwcmV2ZW50IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbi5cblxuVGhlIGNvbmZpZ3MgYXJlOiBgTkVUX1NDSEVEYCwgYE5FVF9DTFNgLCBgTkVUX0NMU19CQVNJQ2AsIGBORVRfQ0xTX1JPVVRFNGAsIGBJTkVUYCwgYE5FVF9DTFNfRldgLCBgTkVUX0NMU19VMzJgLCBgQ0xTX1UzMl9QRVJGYCwgYENMU19VMzJfTUFSS2AsIGBORVRfQ0xTX0ZMT1dgLCBgTkVUX0NMU19DR1JPVVBgLCBgQ0dST1VQU2AsIGBORVRfQ0xTX0JQRmAsIGBORVRfQ0xTX0ZMT1dFUmAsIGBORVRfQ0xTX01BVENIQUxMYCwgYW5kIGBORVRfQ0xTX0FDVGAuXG5cblRoaXMgZXJyb3IgcGF0aCBpcyB3b3J0aCBmdXp6aW5nLCBzbyBJIHdpbGwgc2V0IFdvcnRoRnV6emluZz10cnVlLlxuXG5Pa2F5LCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ4NywiT3V0cHV0VG9rZW5zIjozMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjUwLjg2Mzc1NTc5N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDU1NjIzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTXCIsXG4gICAgXCJORVRfQ0xTX0JBU0lDXCIsXG4gICAgXCJORVRfQ0xTX1JPVVRFNFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0NMU19GV1wiLFxuICAgIFwiTkVUX0NMU19VMzJcIixcbiAgICBcIkNMU19VMzJfUEVSRlwiLFxuICAgIFwiQ0xTX1UzMl9NQVJLXCIsXG4gICAgXCJORVRfQ0xTX0ZMT1dcIixcbiAgICBcIk5FVF9DTFNfQ0dST1VQXCIsXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiLFxuICAgIFwiTkVUX0NMU19GTE9XRVJcIixcbiAgICBcIk5FVF9DTFNfTUFUQ0hBTExcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmFzaWNfY2hhbmdlXCIsXG4gICAgXCJjbHNfYnBmX2NoYW5nZVwiLFxuICAgIFwiY2xzX2Nncm91cF9jaGFuZ2VcIixcbiAgICBcImZsb3dfY2hhbmdlXCIsXG4gICAgXCJmbF9jaGFuZ2VcIixcbiAgICBcImZ3X2NoYW5nZVwiLFxuICAgIFwibWFsbF9jaGFuZ2VcIixcbiAgICBcInJvdXRlNF9jaGFuZ2VcIixcbiAgICBcInUzMl9jaGFuZ2VcIixcbiAgICBcInRjZl9leHRzX2luaXRfZXhcIixcbiAgICBcInRjX25ld190ZmlsdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBHRlBfS0VSTkVMX0FDQ09VTlQgdG8gdmFyaW91cyBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gbmV0d29yayBjbGFzc2lmaWVycy4gV2hpbGUgbW9zdGx5IGFuIGFjY291bnRpbmcgY2hhbmdlLCBpdCBhbHNvIGluY2x1ZGVzIGEgZnVuY3Rpb25hbCBidWcgZml4IGluIGNsc19iYXNpYy5jIChiYXNpY19jaGFuZ2UpIHdoZXJlIGl0IGFkZHMgYSBtaXNzaW5nIGlkcl9yZW1vdmUgb24gdGhlIGVycm9yIHBhdGggd2hlbiBhbGxvY19wZXJjcHVfZ2ZwIGZhaWxzLiBUaGlzIGVycm9yIHBhdGggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgZmF1bHQgaW5qZWN0aW9uIGR1cmluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBJRFIgbGVha3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTXCIsXG4gICAgXCJORVRfQ0xTX0JBU0lDXCIsXG4gICAgXCJORVRfQ0xTX1JPVVRFNFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0NMU19GV1wiLFxuICAgIFwiTkVUX0NMU19VMzJcIixcbiAgICBcIkNMU19VMzJfUEVSRlwiLFxuICAgIFwiQ0xTX1UzMl9NQVJLXCIsXG4gICAgXCJORVRfQ0xTX0ZMT1dcIixcbiAgICBcIk5FVF9DTFNfQ0dST1VQXCIsXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiLFxuICAgIFwiTkVUX0NMU19GTE9XRVJcIixcbiAgICBcIk5FVF9DTFNfTUFUQ0hBTExcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmFzaWNfY2hhbmdlXCIsXG4gICAgXCJjbHNfYnBmX2NoYW5nZVwiLFxuICAgIFwiY2xzX2Nncm91cF9jaGFuZ2VcIixcbiAgICBcImZsb3dfY2hhbmdlXCIsXG4gICAgXCJmbF9jaGFuZ2VcIixcbiAgICBcImZ3X2NoYW5nZVwiLFxuICAgIFwibWFsbF9jaGFuZ2VcIixcbiAgICBcInJvdXRlNF9jaGFuZ2VcIixcbiAgICBcInUzMl9jaGFuZ2VcIixcbiAgICBcInRjZl9leHRzX2luaXRfZXhcIixcbiAgICBcInRjX25ld190ZmlsdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBHRlBfS0VSTkVMX0FDQ09VTlQgdG8gdmFyaW91cyBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gbmV0d29yayBjbGFzc2lmaWVycy4gV2hpbGUgbW9zdGx5IGFuIGFjY291bnRpbmcgY2hhbmdlLCBpdCBhbHNvIGluY2x1ZGVzIGEgZnVuY3Rpb25hbCBidWcgZml4IGluIGNsc19iYXNpYy5jIChiYXNpY19jaGFuZ2UpIHdoZXJlIGl0IGFkZHMgYSBtaXNzaW5nIGlkcl9yZW1vdmUgb24gdGhlIGVycm9yIHBhdGggd2hlbiBhbGxvY19wZXJjcHVfZ2ZwIGZhaWxzLiBUaGlzIGVycm9yIHBhdGggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgZmF1bHQgaW5qZWN0aW9uIGR1cmluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBJRFIgbGVha3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjUwLjk2ODMxOTk5M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MDI0NDEzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzo1MC45Njg5NTU0NTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI1MDE4MDExNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscyBpbiB0aGUgbmV0d29yayBzY2hlZHVsaW5nIGNsYXNzaWZpZXJzIChgbmV0L3NjaGVkL2Nsc18qLmNgKSB0byB1c2UgYEdGUF9LRVJORUxfQUNDT1VOVGAgZm9yIGNncm91cCBtZW1vcnkgYWNjb3VudGluZy4gSXQgcmVwbGFjZXMgYGt6YWxsb2Nfb2JqYCwgYGt6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX2ZsZXhgLCBgYWxsb2NfcGVyY3B1YCwgYGttZW1kdXBgLCBhbmQgYG5sYV9tZW1kdXBgIHdpdGggdGhlaXIgYF9nZnBgIG9yIGFjY291bnRlZCBlcXVpdmFsZW50cy4gQWxsIGFmZmVjdGVkIGFsbG9jYXRpb25zIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZDogYGt6YWxsb2NgLWJhc2VkIGZ1bmN0aW9ucyBpbmhlcmVudGx5IHplcm8gdGhlIG1lbW9yeSwgYGFsbG9jX3BlcmNwdV9nZnBgIHplcm8taW5pdGlhbGl6ZXMgdGhlIHBlci1DUFUgbWVtb3J5LCBhbmQgYGttZW1kdXBgL2BubGFfbWVtZHVwYCBjb3B5IGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBzb3VyY2UgYnVmZmVycy4gVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgYSBtaW5vciBlcnJvci1wYXRoIGZpeCBpbiBgY2xzX2Jhc2ljLmNgIHRvIHJlbW92ZSBhbiBJRFIgZW50cnkgb24gYWxsb2NhdGlvbiBmYWlsdXJlLCB3aGljaCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIGludmFsaWQgc3RhdGUgYnV0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGlzIGFsdGVyZWQsIHRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycyBhcmUgcGVyZmVjdGx5IGFkZXF1YXRlIGZvciB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc3YjgzY2Q2Yjk0OGFlZDRhZTM0MDkzYjFiYTY2YzFkMTk3MTg0OTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxNTowNTo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5pbmRleCA0ZTZhMjgxMmE0ZjMyLi5iZTYzYjM0NzY0MGJhIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xuQEAgLTMzNjQsNyArMzM2NCw4IEBAIGludCB0Y2ZfZXh0c19pbml0X2V4KHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cywgc3RydWN0IG5ldCAqbmV0LCBpbnQgYWN0aW9uLFxuIFx0ICogVGhpcyByZWZlcmVuY2UgbWlnaHQgYmUgdGFrZW4gbGF0ZXIgZnJvbSB0Y2ZfZXh0c19nZXRfbmV0KCkuXG4gXHQgKi9cbiBcdGV4dHMtXHUwMDNlbmV0ID0gbmV0O1xuLVx0ZXh0cy1cdTAwM2VhY3Rpb25zID0ga3phbGxvY19vYmpzKHN0cnVjdCB0Y19hY3Rpb24gKiwgVENBX0FDVF9NQVhfUFJJTyk7XG4rXHRleHRzLVx1MDAzZWFjdGlvbnMgPSBremFsbG9jX29ianMoc3RydWN0IHRjX2FjdGlvbiAqLCBUQ0FfQUNUX01BWF9QUklPLFxuK1x0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFleHRzLVx1MDAzZWFjdGlvbnMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYmFzaWMuYyBiL25ldC9zY2hlZC9jbHNfYmFzaWMuY1xuaW5kZXggNDkyY2Q5Y2U4ZDQ2Zi4uZTJhOTRiYTlmYmE3NiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYmFzaWMuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jXG5AQCAtMTkzLDcgKzE5Myw3IEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdGZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7XG4rXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWZuZXcpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbkBAIC0yMTIsOSArMjEyLDExIEBAIHN0YXRpYyBpbnQgYmFzaWNfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFx0Zm5ldy1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4tXHRmbmV3LVx1MDAzZXBmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB0Y19iYXNpY19wY250KTtcbitcdGZuZXctXHUwMDNlcGYgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCB0Y19iYXNpY19wY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFmbmV3LVx1MDAzZXBmKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGlmICghZm9sZClcbitcdFx0XHRpZHJfcmVtb3ZlKFx1MDAyNmhlYWQtXHUwMDNlaGFuZGxlX2lkciwgZm5ldy1cdTAwM2VoYW5kbGUpO1xuIFx0XHRnb3RvIGVycm91dDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2JwZi5jIGIvbmV0L3NjaGVkL2Nsc19icGYuY1xuaW5kZXggNmQxOTE1NWJlY2M4Ni4uMTg4Y2YwZjk0OWRkNCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYnBmLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfYnBmLmNcbkBAIC0zNTIsNyArMzUyLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX3Byb2dfZnJvbV9vcHMoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgY2xzX2JwZl9wcm9nICpwcm9nKVxuIFx0aWYgKGJwZl9zaXplICE9IG5sYV9sZW4odGJbVENBX0JQRl9PUFNdKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRicGZfb3BzID0ga21lbWR1cChubGFfZGF0YSh0YltUQ0FfQlBGX09QU10pLCBicGZfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRicGZfb3BzID0ga21lbWR1cChubGFfZGF0YSh0YltUQ0FfQlBGX09QU10pLCBicGZfc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChicGZfb3BzID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTQwMyw3ICs0MDMsNyBAQCBzdGF0aWMgaW50IGNsc19icGZfcHJvZ19mcm9tX2VmZChzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBjbHNfYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gXG4gXHRpZiAodGJbVENBX0JQRl9OQU1FXSkge1xuLVx0XHRuYW1lID0gbmxhX21lbWR1cCh0YltUQ0FfQlBGX05BTUVdLCBHRlBfS0VSTkVMKTtcbitcdFx0bmFtZSA9IG5sYV9tZW1kdXAodGJbVENBX0JQRl9OQU1FXSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFx0aWYgKCFuYW1lKSB7XG4gXHRcdFx0YnBmX3Byb2dfcHV0KGZwKTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC00NDMsNyArNDQzLDcgQEAgc3RhdGljIGludCBjbHNfYnBmX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cHJvZyA9IGt6YWxsb2Nfb2JqKCpwcm9nKTtcbitcdHByb2cgPSBremFsbG9jX29iaigqcHJvZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghcHJvZylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMgYi9uZXQvc2NoZWQvY2xzX2Nncm91cC5jXG5pbmRleCA2ODBhNWMzMDgwOTRlLi4yMTBmZDlmZDI2ZDgzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuY1xuQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIGludCBjbHNfY2dyb3VwX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRpZiAoaGVhZCBcdTAwMjZcdTAwMjYgaGFuZGxlICE9IGhlYWQtXHUwMDNlaGFuZGxlKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdG5ldyA9IGt6YWxsb2Nfb2JqKCpoZWFkKTtcbitcdG5ldyA9IGt6YWxsb2Nfb2JqKCpoZWFkLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFuZXcpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Zsb3cuYyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jXG5pbmRleCAzNTZjNjhlYmMzODk1Li5hOWFjM2FjZjZlZGEwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19mbG93LmNcbisrKyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jXG5AQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyBpbnQgZmxvd19jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbi1cdGZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7XG4rXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWZuZXcpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jIGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xuaW5kZXggODhmOGEzMmZhYjJiNC4uMGUyNzViNTgxNTFjNCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcbkBAIC0yMjMzLDcgKzIyMzMsNyBAQCBzdGF0aWMgc3RydWN0IGZsX2Zsb3dfbWFzayAqZmxfY3JlYXRlX25ld19tYXNrKHN0cnVjdCBjbHNfZmxfaGVhZCAqaGVhZCxcbiBcdHN0cnVjdCBmbF9mbG93X21hc2sgKm5ld21hc2s7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bmV3bWFzayA9IGt6YWxsb2Nfb2JqKCpuZXdtYXNrKTtcbitcdG5ld21hc2sgPSBremFsbG9jX29iaigqbmV3bWFzaywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3bWFzaylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG5AQCAtMjM5NCw3ICsyMzk0LDcgQEAgc3RhdGljIGludCBmbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRnb3RvIGVycm91dF90YjtcbiBcdH1cbiBcbi1cdGZuZXcgPSBremFsbG9jX29iaigqZm5ldyk7XG4rXHRmbmV3ID0ga3phbGxvY19vYmooKmZuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWZuZXcpIHtcbiBcdFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRcdGdvdG8gZXJyb3V0X3RiO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZncuYyBiL25ldC9zY2hlZC9jbHNfZncuY1xuaW5kZXggNjQ2YTczMGRjYTkzYy4uYTQ2MmIyNjI3MTljMyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfZncuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19mdy5jXG5AQCAtMjc2LDcgKzI3Niw3IEBAIHN0YXRpYyBpbnQgZndfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0aWYgKGYtXHUwMDNlaWQgIT0gaGFuZGxlIFx1MDAyNlx1MDAyNiBoYW5kbGUpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdGZuZXcgPSBremFsbG9jX29iaihzdHJ1Y3QgZndfZmlsdGVyKTtcbitcdFx0Zm5ldyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmICghZm5ldylcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5AQCAtMzMwLDcgKzMzMCw3IEBAIHN0YXRpYyBpbnQgZndfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRwLVx1MDAzZXJvb3QsIGhlYWQpO1xuIFx0fVxuIFxuLVx0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIpO1xuK1x0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBmd19maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoZiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jIGIvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXG5pbmRleCA2ZjEyNjg3MmMxNGEwLi5jMTQ4OTliOTM1YmZkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmNcbkBAIC0xODksNyArMTg5LDcgQEAgc3RhdGljIGludCBtYWxsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRuZXcgPSBremFsbG9jX29iaigqbmV3KTtcbitcdG5ldyA9IGt6YWxsb2Nfb2JqKCpuZXcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTIwMSw3ICsyMDEsNyBAQCBzdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0aGFuZGxlID0gMTtcbiBcdG5ldy1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4gXHRuZXctXHUwMDNlZmxhZ3MgPSB1c2VyZmxhZ3M7XG4tXHRuZXctXHUwMDNlcGYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjX21hdGNoYWxsX3BjbnQpO1xuK1x0bmV3LVx1MDAzZXBmID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgdGNfbWF0Y2hhbGxfcGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbmV3LVx1MDAzZXBmKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gZXJyX2FsbG9jX3BlcmNwdTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbmluZGV4IGVkZWQ3YWFjZDNmNzAuLjBkMTMyNGM5MDU4MzcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuQEAgLTQ1NSw3ICs0NTUsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdGgxID0gdG9faGFzaChuaGFuZGxlKTtcbiBcdGIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtXHUwMDNldGFibGVbaDFdKTtcbiBcdGlmICghYikge1xuLVx0XHRiID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQpO1xuK1x0XHRiID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRcdGlmIChiID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuQEAgLTUyNCw3ICs1MjQsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZXJyID0gLUVOT0JVRlM7XG4tXHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIpO1xuK1x0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFmKVxuIFx0XHRnb3RvIGVycm91dDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuaW5kZXggYzI5N2Q3ZGJjZjkxNi4uYWM2ZDBmYTVhNDBlMyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcbkBAIC04MjUsNyArODI1LDcgQEAgc3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0c3RydWN0IHRjX3UzMl9zZWwgKnMgPSBcdTAwMjZuLVx1MDAzZXNlbDtcbiBcdHN0cnVjdCB0Y191X2tub2RlICpuZXc7XG4gXG4tXHRuZXcgPSBremFsbG9jX2ZsZXgoKm5ldywgc2VsLmtleXMsIHMtXHUwMDNlbmtleXMpO1xuK1x0bmV3ID0ga3phbGxvY19mbGV4KCpuZXcsIHNlbC5rZXlzLCBzLVx1MDAzZW5rZXlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFuZXcpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuQEAgLTExMTQsMTUgKzExMTQsMTYgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0Z290byBlcnJpZHI7XG4gXHR9XG4gXG4tXHRuID0ga3phbGxvY19mbGV4KCpuLCBzZWwua2V5cywgcy1cdTAwM2Vua2V5cyk7XG4rXHRuID0ga3phbGxvY19mbGV4KCpuLCBzZWwua2V5cywgcy1cdTAwM2Vua2V5cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmIChuID09IE5VTEwpIHtcbiBcdFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRcdGdvdG8gZXJyaWRyO1xuIFx0fVxuIFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9QRVJGXG4tXHRuLVx1MDAzZXBmID0gX19hbGxvY19wZXJjcHUoc3RydWN0X3NpemUobi1cdTAwM2VwZiwga2NudHMsIHMtXHUwMDNlbmtleXMpLFxuLVx0XHRcdCAgICAgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdGNfdTMyX3BjbnQpKTtcbitcdG4tXHUwMDNlcGYgPSBfX2FsbG9jX3BlcmNwdV9nZnAoc3RydWN0X3NpemUobi1cdTAwM2VwZiwga2NudHMsIHMtXHUwMDNlbmtleXMpLFxuK1x0XHRcdFx0ICAgX19hbGlnbm9mX18oc3RydWN0IHRjX3UzMl9wY250KSxcbitcdFx0XHRcdCAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW4tXHUwMDNlcGYpIHtcbiBcdFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRcdGdvdG8gZXJyZnJlZTtcbkBAIC0xMTQ0LDcgKzExNDUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiAjaWZkZWYgQ09ORklHX0NMU19VMzJfTUFSS1xuLVx0bi1cdTAwM2VwY3B1X3N1Y2Nlc3MgPSBhbGxvY19wZXJjcHUodTMyKTtcbitcdG4tXHUwMDNlcGNwdV9zdWNjZXNzID0gYWxsb2NfcGVyY3B1X2dmcCh1MzIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIW4tXHUwMDNlcGNwdV9zdWNjZXNzKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gZXJyb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDc6NTAuOTY4OTU2NTkzWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTAxNzcyMTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlcyBpbiBgbmV0L3NjaGVkL2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IHR3ZWFrcyBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd2l0aGluIGBuZXQvc2NoZWQvYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHRvIGEgYnVuY2ggb2YgY2FsbHM6IGBremFsbG9jX29ianNgLCBga3phbGxvY19vYmpgLCBgYWxsb2NfcGVyY3B1X2dmcGAsIGBrbWVtZHVwYCwgYG5sYV9tZW1kdXBgLCBhbmQgYGt6YWxsb2NfZmxleGAuIFRoZSBnb2FsIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGJldHRlciBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3JlIHN3YXBwaW5nIHRoZSBkZWZhdWx0IGZsYWdzIG9yIGBHRlBfS0VSTkVMYCB3aXRoIGBHRlBfS0VSTkVMX0FDQ09VTlRgLiBObyBjaGFuZ2VzIHRvIGhvdyB0aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkLCBubyBuZXcgZmllbGRzLCBubyBtb2RpZmljYXRpb25zIHRvIGFueSBib3VuZHMgY2hlY2tzLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgbm8gY2hhbmdlcyB0byBob3cgZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXTigJlzIGFsbCBga3phbGxvY2AtYmFzZWQgKHplcm8taW5pdGlhbGl6ZWQpIG9yIGBrbWVtZHVwYC9gbmxhX21lbWR1cGAtYmFzZWQgKGNvcHlpbmcgYWxyZWFkeSBpbml0aWFsaXplZCBtZW1vcnkpLiBIb2xkIG9uLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYGFsbG9jX3BlcmNwdV9nZnBgLCBiZWNhdXNlIHRoYXQgaGFzIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCB5ZXMsIGBhbGxvY19wZXJjcHVfZ2ZwYCBzdGlsbCB6ZXJvLWluaXRpYWxpemVzLlxuXG5MZXQncyBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIGluIGhlcmUuIEFoLCBmb3VuZCBhIGJ1ZyBmaXggaW4gYGNsc19iYXNpYy5jYC4gVGhleSdyZSBub3cgcmVtb3ZpbmcgYW4gSURSIGVudHJ5IGlmIGBhbGxvY19wZXJjcHVfZ2ZwYCBmYWlscy4gVGhpcyBpcyBhIGZpeCBmb3IgYSBtZW1vcnkgbGVhayBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5SaWdodCwgc28gc2luY2UgYWxsIHRoZXNlIGFsbG9jYXRpb25zIGFyZSAqc3RpbGwqIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGNvcGllcyBvZiBleGlzdGluZyBpbml0aWFsaXplZCBkYXRhLCB0aGVyZSdzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgbWVhbnMgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIEtBU0FOIGFuZCBvdXIgc3RhbmRhcmQgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uIHRvb2xzIGFyZSBzdWZmaWNpZW50LlxuXG5TbywgaGVyZSdzIG15IHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBzaW1wbHkgYWRkaW5nIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZvciBjZ3JvdXAgYWNjb3VudGluZyB0byBjYWxscyBsaWtlIGBremFsbG9jYCwgYGttZW1kdXBgIGFuZCBgYWxsb2NfcGVyY3B1YC4gQWxsIHRoZXNlIGFsbG9jYXRpb25zIGFyZSAqZnVsbHkqIGluaXRpYWxpemVkLCBlaXRoZXIgemVyb2VkIChieSBga3phbGxvY2Agb3Igc2ltaWxhcikgb3IgY29waWVkIGZyb20gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgc291cmNlcy4gVGhlIGJ1ZyBmaXggaW4gYGNsc19iYXNpYy5jYCBpcyB1bnJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYW5kIG5vIGNvbXBsZXggaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYmVpbmcgY2hhbmdlZCwgdGhlcmUncyBubyBuZWVkIHRvIGludHJvZHVjZSBLTVNBTiBmdXp6aW5nLiBXZSdyZSBnb29kIHdpdGggS0FTQU4gYW5kIHRoZSByZWd1bGFyIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYzLCJPdXRwdXRUb2tlbnMiOjI2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA4OjAzLjQ3MDczMjQ0N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgY2xhc3NpZmllcnMgKGBuZXQvc2NoZWQvY2xzXyouY2ApIHRvIHVzZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmb3IgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLiBJdCByZXBsYWNlcyBga3phbGxvY19vYmpgLCBga3phbGxvY19vYmpzYCwgYGt6YWxsb2NfZmxleGAsIGBhbGxvY19wZXJjcHVgLCBga21lbWR1cGAsIGFuZCBgbmxhX21lbWR1cGAgd2l0aCB0aGVpciBgX2dmcGAgb3IgYWNjb3VudGVkIGVxdWl2YWxlbnRzLiBBbGwgYWZmZWN0ZWQgYWxsb2NhdGlvbnMgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkOiBga3phbGxvY2AtYmFzZWQgZnVuY3Rpb25zIGluaGVyZW50bHkgemVybyB0aGUgbWVtb3J5LCBgYWxsb2NfcGVyY3B1X2dmcGAgemVyby1pbml0aWFsaXplcyB0aGUgcGVyLUNQVSBtZW1vcnksIGFuZCBga21lbWR1cGAvYG5sYV9tZW1kdXBgIGNvcHkgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXJzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIG1pbm9yIGVycm9yLXBhdGggZml4IGluIGBjbHNfYmFzaWMuY2AgdG8gcmVtb3ZlIGFuIElEUiBlbnRyeSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgaW52YWxpZCBzdGF0ZSBidXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYWx0ZXJlZCwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgY2xhc3NpZmllcnMgKGBuZXQvc2NoZWQvY2xzXyouY2ApIHRvIHVzZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmb3IgY2dyb3VwIG1lbW9yeSBhY2NvdW50aW5nLiBJdCByZXBsYWNlcyBga3phbGxvY19vYmpgLCBga3phbGxvY19vYmpzYCwgYGt6YWxsb2NfZmxleGAsIGBhbGxvY19wZXJjcHVgLCBga21lbWR1cGAsIGFuZCBgbmxhX21lbWR1cGAgd2l0aCB0aGVpciBgX2dmcGAgb3IgYWNjb3VudGVkIGVxdWl2YWxlbnRzLiBBbGwgYWZmZWN0ZWQgYWxsb2NhdGlvbnMgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkOiBga3phbGxvY2AtYmFzZWQgZnVuY3Rpb25zIGluaGVyZW50bHkgemVybyB0aGUgbWVtb3J5LCBgYWxsb2NfcGVyY3B1X2dmcGAgemVyby1pbml0aWFsaXplcyB0aGUgcGVyLUNQVSBtZW1vcnksIGFuZCBga21lbWR1cGAvYG5sYV9tZW1kdXBgIGNvcHkgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHNvdXJjZSBidWZmZXJzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIG1pbm9yIGVycm9yLXBhdGggZml4IGluIGBjbHNfYmFzaWMuY2AgdG8gcmVtb3ZlIGFuIElEUiBlbnRyeSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgaW52YWxpZCBzdGF0ZSBidXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gbG9naWMgaXMgYWx0ZXJlZCwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxjpd2[1] Phase: Succeeded StartedAt: 2026-08-19 15:08:14 +0000 UTC FinishedAt: 2026-08-19 15:08:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 15:08:14 +0000 UTC FinishedAt: 2026-08-19 15:08:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2] Phase: Succeeded StartedAt: 2026-08-19 15:08:14 +0000 UTC FinishedAt: 2026-08-19 18:56:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-19 15:08:14 +0000 UTC FinishedAt: 2026-08-19 18:56:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-19 15:08:14 +0000 UTC FinishedAt: 2026-08-19 15:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-19 15:08:14 +0000 UTC FinishedAt: 2026-08-19 15:08:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowxjpd2/series-workflowxjpd2-convert-artifact-411729803/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-19 15:08:24 +0000 UTC FinishedAt: 2026-08-19 15:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-19 15:08:24 +0000 UTC FinishedAt: 2026-08-19 15:28:48 +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:*31dd4cc1-3db3-4365-82d2-bb077c5b527a,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-workflowxjpd2/series-workflowxjpd2-convert-artifact-411729803/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": "76177484-40dd-42b2-a3ee-622731b9d0fa", "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-workflowxjpd2/series-workflowxjpd2-build-action-2915990153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-19 15:08:24 +0000 UTC FinishedAt: 2026-08-19 15:28:38 +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:*31dd4cc1-3db3-4365-82d2-bb077c5b527a,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-workflowxjpd2/series-workflowxjpd2-convert-artifact-411729803/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": "76177484-40dd-42b2-a3ee-622731b9d0fa", "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-workflowxjpd2/series-workflowxjpd2-build-action-2915990153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-19 15:28:48 +0000 UTC FinishedAt: 2026-08-19 15:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-19 15:28:48 +0000 UTC FinishedAt: 2026-08-19 15:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-19 15:28:48 +0000 UTC FinishedAt: 2026-08-19 15:28:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-19 15:28:48 +0000 UTC FinishedAt: 2026-08-19 15:28:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowxjpd2/series-workflowxjpd2-convert-artifact-3240764386/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-19 15:28:58 +0000 UTC FinishedAt: 2026-08-19 15:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-19 15:28:58 +0000 UTC FinishedAt: 2026-08-19 15:30:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76177484-40dd-42b2-a3ee-622731b9d0fa,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-workflowxjpd2/series-workflowxjpd2-build-action-2915990153/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-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-19 15:31:09 +0000 UTC FinishedAt: 2026-08-19 15:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-19 15:31:09 +0000 UTC FinishedAt: 2026-08-19 15:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-19 15:31:09 +0000 UTC FinishedAt: 2026-08-19 15:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-19 15:31:09 +0000 UTC FinishedAt: 2026-08-19 15:49:21 +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:*31dd4cc1-3db3-4365-82d2-bb077c5b527a,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-workflowxjpd2/series-workflowxjpd2-convert-artifact-3240764386/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": "cc3431b9-f175-45a5-a78c-e9f81eb9e68e", "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-workflowxjpd2/series-workflowxjpd2-build-action-556568630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-19 15:31:09 +0000 UTC FinishedAt: 2026-08-19 15:49:11 +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:*31dd4cc1-3db3-4365-82d2-bb077c5b527a,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-workflowxjpd2/series-workflowxjpd2-convert-artifact-3240764386/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": "cc3431b9-f175-45a5-a78c-e9f81eb9e68e", "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-workflowxjpd2/series-workflowxjpd2-build-action-556568630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-19 15:49:21 +0000 UTC FinishedAt: 2026-08-19 15:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-19 15:49:21 +0000 UTC FinishedAt: 2026-08-19 15:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-19 15:49:21 +0000 UTC FinishedAt: 2026-08-19 15:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-19 15:49:21 +0000 UTC FinishedAt: 2026-08-19 15:51:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc3431b9-f175-45a5-a78c-e9f81eb9e68e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxjpd2/series-workflowxjpd2-build-action-556568630/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-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-19 15:51:31 +0000 UTC FinishedAt: 2026-08-19 18:56:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-19 15:51:31 +0000 UTC FinishedAt: 2026-08-19 18:56:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*76177484-40dd-42b2-a3ee-622731b9d0fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc3431b9-f175-45a5-a78c-e9f81eb9e68e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxjpd2/series-workflowxjpd2-build-action-2915990153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxjpd2/series-workflowxjpd2-build-action-556568630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-19 15:51:31 +0000 UTC FinishedAt: 2026-08-19 15:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-19 15:51:31 +0000 UTC FinishedAt: 2026-08-19 15:51:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxjpd2/series-workflowxjpd2-convert-artifact-3189415447/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-19 15:51:31 +0000 UTC FinishedAt: 2026-08-19 15:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-19 15:51:31 +0000 UTC FinishedAt: 2026-08-19 15:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-19 15:51:31 +0000 UTC FinishedAt: 2026-08-19 15:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-19 15:51:41 +0000 UTC FinishedAt: 2026-08-19 18:56:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjpd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["basic_change","cls_bpf_change","cls_cgroup_change","flow_change","fl_change","fw_change","mall_change","route4_change","u32_change","tcf_exts_init_ex","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS","NET_CLS_BASIC","NET_CLS_ROUTE4","INET","NET_CLS_FW","NET_CLS_U32","CLS_U32_PERF","CLS_U32_MARK","NET_CLS_FLOW","NET_CLS_CGROUP","CGROUPS","NET_CLS_BPF","NET_CLS_FLOWER","NET_CLS_MATCHALL","NET_CLS_ACT"],"series_id":"464a2b7d-4d6c-4593-aa29-510031f4d40d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-19 15:51:41 +0000 UTC FinishedAt: 2026-08-19 18:56:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76177484-40dd-42b2-a3ee-622731b9d0fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc3431b9-f175-45a5-a78c-e9f81eb9e68e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxjpd2/series-workflowxjpd2-build-action-2915990153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxjpd2/series-workflowxjpd2-build-action-556568630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxjpd2/series-workflowxjpd2-convert-artifact-3189415447/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,}