Name: series-workflowhjdr7 Phase: Succeeded StartedAt: 2026-07-24 10:54:30 +0000 UTC FinishedAt: 2026-07-24 16:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[0] Phase: Succeeded StartedAt: 2026-07-24 10:54:30 +0000 UTC FinishedAt: 2026-07-24 11:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 10:54:30 +0000 UTC FinishedAt: 2026-07-24 11:37:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SOCK_MSG", "BPF_STREAM_PARSER", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SOCK_MSG", "BPF_STREAM_PARSER", "BPF_SYSCALL" ], "series_id": "aeefb1be-60f3-485d-a98a-698baee92375" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sk_psock_verdict_apply", "sk_psock_skb_ingress_self", "sk_psock_skb_ingress", "sk_psock_strp_read", "sk_psock_verdict_recv", "sk_psock_backlog" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZiYjMzQ7LAogICAgJiMzNDtza19wc29ja19za2JfaW5ncmVzcyYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdHJwX3JlYWQmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9yZWN2JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX2JhY2tsb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhY2NvdW50aW5nIGxvZ2ljIGZvciBza2JzIGluIHRoZSBCUEYgcHNvY2sgaW5ncmVzcyBwYXRoLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBjaGFyZ2Vfc2tiYCBwYXJhbWV0ZXIgdG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCBgc2tiX3NldF9vd25lcl9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZy9CUEYgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjMzYjY5NGRmODcwMDY0NzQwNzJiMDdlNjA2MWMzZWFjMTRkNTFjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDExOjM1OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkNC4uMTcyNjA2ODE0NzlhM2YgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za21zZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za21zZy5jXG5AQCAtNTg2LDcgJiM0Mzs1ODYsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xuJiM0MztcdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbiYjNDM7XHRcdFx0XHQgICAgIGJvb2wgY2hhcmdlX3NrYik7XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0dTMyIG9mZiwgdTMyIGxlbilcbkBAIC01OTUsMTIgJiM0Mzs1OTYsOSBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi1cdTAwM2VzayBpcyBhbHJlYWR5IGFzc2lnbmVkLFxuLVx0ICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXRcbi1cdCAqIGNvcnJlY3RseS5cbi1cdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG4tXHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlKTtcbiYjNDM7XHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlLFxuJiM0MztcdFx0XHRcdFx0XHQgdHJ1ZSk7XG4gXHRtc2cgPSBza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc2ssIHNrYik7XG4gXHRpZiAoIW1zZylcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG5AQCAtNjE4LDEyICYjNDM7NjE2LDE0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGVcbi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfclxuLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS5cbiYjNDM7LyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgZm9yIHBzb2NrLVx1MDAzZXNrLlxuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIGNoYXJnZV9za2IgaXMgZmFsc2UsIHRoZSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgcGF0aCBrZWVwcyB0aGUgVENQXG4mIzQzOyAqIHJlY2VpdmUgcXVldWUgYWNjb3VudGluZyBpbiBwbGFjZSBhbmQgbXVzdCBub3QgY2FsbCBza2Jfc2V0X293bmVyX3IoKS5cbiAgKi9cbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZilcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4mIzQzO1x0XHRcdFx0ICAgICBib29sIGNoYXJnZV9za2IpXG4ge1xuIFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXHUwMDNlc2s7XG5AQCAtNjMxLDcgJiM0Mzs2MzEsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYlxuIFxuIFx0aWYgKHVubGlrZWx5KCFtc2cpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbi1cdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbiYjNDM7XHRpZiAoY2hhcmdlX3NrYilcbiYjNDM7XHRcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0JiMzOTtzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0b1xuQEAgLTEwMTcsNiAmIzQzOzEwMTgsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkge1xuJiM0MztcdFx0XHRib29sIGNoYXJnZV9za2IgPSB0cnVlO1xuJiM0MztcbiBcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdG9mZiA9IDA7XG4gXHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbkBAIC0xMDI0LDggJiM0MzsxMDI3LDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0XHRcdFx0b2ZmID0gc3RtLVx1MDAzZW9mZnNldDtcbiBcdFx0XHRcdGxlbiA9IHN0bS1cdTAwM2VmdWxsX2xlbjtcbiYjNDM7XHRcdFx0XHRjaGFyZ2Vfc2tiID0gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbiYjNDM7XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcbiYjNDM7XHRcdFx0XHRcdFx0XHRmYWxzZSwgY2hhcmdlX3NrYik7XG4gXHRcdH1cbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU09DS19NU0cmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19wc29ja192ZXJkaWN0X2FwcGx5JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc2tiX2luZ3Jlc3MmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICAgJiMzNDtza19wc29ja19iYWNrbG9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWNjb3VudGluZyBsb2dpYyBmb3Igc2ticyBpbiB0aGUgQlBGIHBzb2NrIGluZ3Jlc3MgcGF0aC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgY2hhcmdlX3NrYmAgcGFyYW1ldGVyIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCB0byBjb25kaXRpb25hbGx5IGNhbGwgYHNrYl9zZXRfb3duZXJfcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjMzYjY5NGRmODcwMDY0NzQwNzJiMDdlNjA2MWMzZWFjMTRkNTFjOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDI0IDExOjM1OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2ttc2cuYyBiL25ldC9jb3JlL3NrbXNnLmMKaW5kZXggMjUyMWI2NDNmYTA1ZDQuLjE3MjYwNjgxNDc5YTNmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za21zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmMKQEAgLTU4Niw3ICYjNDM7NTg2LDggQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsCiB9CiAKIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7CiYjNDM7CQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZiwKJiM0MzsJCQkJICAgICBib29sIGNoYXJnZV9za2IpOwogCiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJdTMyIG9mZiwgdTMyIGxlbikKQEAgLTU5NSwxMiAmIzQzOzU5Niw5IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3Qgc2tfbXNnICptc2c7CiAJaW50IGVycjsKIAotCS8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItJmd0O3NrIGlzIGFscmVhZHkgYXNzaWduZWQsCi0JICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXQKLQkgKiBjb3JyZWN0bHkuCi0JICovCiAJaWYgKHVubGlrZWx5KHNrYi0mZ3Q7c2sgPT0gc2spKQotCQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSk7CiYjNDM7CQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSwKJiM0MzsJCQkJCQkgdHJ1ZSk7CiAJbXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpOwogCWlmICghbXNnKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTYxOCwxMiAmIzQzOzYxNiwxNCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIGVycjsKIH0KIAotLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZQotICogc2tiLiBJbiB0aGlzIGNhc2Ugd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgbWVtb3J5IGxpbWl0cyBvciBza2Jfc2V0X293bmVyX3IKLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS4KJiM0MzsvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stJmd0O3NrLgomIzQzOyAqCiYjNDM7ICogV2hlbiBjaGFyZ2Vfc2tiIGlzIGZhbHNlLCB0aGUgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIHBhdGgga2VlcHMgdGhlIFRDUAomIzQzOyAqIHJlY2VpdmUgcXVldWUgYWNjb3VudGluZyBpbiBwbGFjZSBhbmQgbXVzdCBub3QgY2FsbCBza2Jfc2V0X293bmVyX3IoKS4KICAqLwogc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKQomIzQzOwkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsCiYjNDM7CQkJCSAgICAgYm9vbCBjaGFyZ2Vfc2tiKQogewogCXN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay0mZ3Q7c2s7CkBAIC02MzEsNyAmIzQzOzYzMSw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiCiAKIAlpZiAodW5saWtlbHkoIW1zZykpCiAJCXJldHVybiAtRUFHQUlOOwotCXNrYl9zZXRfb3duZXJfcihza2IsIHNrKTsKJiM0MzsJaWYgKGNoYXJnZV9za2IpCiYjNDM7CQlza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7CiAKIAkvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZQogCSAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQmIzM5O3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvCkBAIC0xMDE3LDYgJiM0MzsxMDE4LDggQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLgogCQkgKi8KIAkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmYW1wO3Bzb2NrLSZndDtpbmdyZXNzX3NrYikpIHsKJiM0MzsJCQlib29sIGNoYXJnZV9za2IgPSB0cnVlOwomIzQzOwogCQkJbGVuID0gc2tiLSZndDtsZW47CiAJCQlvZmYgPSAwOwogCQkJaWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHsKQEAgLTEwMjQsOCAmIzQzOzEwMjcsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAKIAkJCQlvZmYgPSBzdG0tJmd0O29mZnNldDsKIAkJCQlsZW4gPSBzdG0tJmd0O2Z1bGxfbGVuOwomIzQzOwkJCQljaGFyZ2Vfc2tiID0gZmFsc2U7CiAJCQl9Ci0JCQllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7CiYjNDM7CQkJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwKJiM0MzsJCQkJCQkJZmFsc2UsIGNoYXJnZV9za2IpOwogCQl9CiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlzcGluX2xvY2tfYmgoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRoaXMgTmV0d29ya2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHR3ZWFraW5nIGBuZXQvY29yZS9za21zZy5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIHdoaWNoIG5vdyB0YWtlcyBhbiBleHRyYSBib29sZWFuIGFyZ3VtZW50LCBgY2hhcmdlX3NrYmAuIEEgcXVpY2sgZ2xhbmNlIHNob3dzIGlmIGBjaGFyZ2Vfc2tiYCBpcyB0cnVlLCB0aGVuIGBza2Jfc2V0X293bmVyX3Ioc2tiLCBzaylgIGdldHMgY2FsbGVkLiBJIHNlZSB0aGF0IGBza19wc29ja19za2JfaW5ncmVzc2AganVzdCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdpdGggYGNoYXJnZV9za2IgPSB0cnVlYC4gSG93ZXZlciwgd2hlbiB3ZSBnZXQgdG8gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCB0aGluZ3MgZ2V0IGEgbGl0dGxlIG1vcmUgaW50ZXJlc3RpbmcuIFRoYXQgY29kZSBzZWVtcyB0byBjb25kaXRpb24gYGNoYXJnZV9za2JgLiBJZiBgc2tiX2JwZl9zdHJwYXJzZXIoc2tiKWAgcmV0dXJucyB0cnVlLCBgY2hhcmdlX3NrYmAgaXMgZmFsc2UsIG90aGVyd2lzZSBgY2hhcmdlX3NrYmAgaXMgdHJ1ZSBiZWZvcmUgcGFzc2luZyBpdCBpbnRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYC4KClRoaXMgaXMgYSBwcmV0dHkgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGxvZ2ljIGludm9sdmluZyBgc2ttc2dgIGFuZCBgcHNvY2tgLiBHaXZlbiBob3cgbG93LWxldmVsIHRoaXMgaXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBwYWNrZXQgb3duZXJzaGlwLCBJIGltbWVkaWF0ZWx5IHRoaW5rIHRoYXQgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGZ1enogdGhpcyBhcmVhLiBUaGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncywgZXNwZWNpYWxseSBhcm91bmQgcmVzb3VyY2UgYWNjb3VudGluZyBvciBvd25lcnNoaXAgY29uZmxpY3RzLCBpcyBoaWdoLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIG9mIGBuZXQvY29yZS9za21zZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGNvZGUgcGF0aC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBmaW5kIHdoZXJlIGBza21zZy5vYCBpcyBidWlsdCBpbiB0aGUgTWFrZWZpbGUgd2l0aGluIGBuZXQvY29yZWAgYW5kIGhvcGVmdWxseSBmaW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBzZXR0aW5nLiBJdCBzZWVtcyBpbXBvcnRhbnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoZSBjb25uZWN0aW9uIHRvIGBzb2NrX21hcC5vYCBtYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBvZiBgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgaXQmIzM5O3Mgb2Z0ZW4gZW50YW5nbGVkIHdpdGggQlBGIGZ1bmN0aW9uYWxpdGllcywgYW5kIHRob3NlIGFyZSByZWxldmFudCB0byBzb2NrZXQgbWVzc2FnaW5nLiBJIHdhbnQgYSBjb21wbGV0ZSBwaWN0dXJlLiBOb3csIHRvIGRpZyBkZWVwZXIsIEkgdGhpbmsgdGhlIGJlc3QgYXBwcm9hY2ggd291bGQgYmUgdG8gZXhhbWluZSB0aGUgY29kZSBpbiBgbmV0L2NvcmUvc2ttc2cuY2AuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGZpbGUgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGVzZSBjb25maWdzIGludGVycmVsYXRlIGFuZCByZXZlYWwgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIHNldHRpbmdzIHRoYXQgSSYjMzk7bSBvdmVybG9va2luZy4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBlbnRpcmUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz01NDU9c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy01NzMtXG5uZXQvY29yZS9za21zZy5jOjU3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jLTU3NS1cdHBzb2NrLVx1MDAzZWluZ3Jlc3NfYnl0ZXMgJiM0Mzs9IGxlbjtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEwNjI9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA3OC1cbm5ldC9jb3JlL3NrbXNnLmM6MTA3OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jLTEwODAtc3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMTk4PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTIwMC19XG5uZXQvY29yZS9za21zZy5jOjEyMDE6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xubmV0L2NvcmUvc2ttc2cuYy0xMjAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTdHJlYW0gUGFyc2VyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmV0L2NvcmUvc2ttc2cuY2AgYW5kIHNwZWNpZmljYWxseSB0aGlzIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBjbGVhcmx5IHRpZWQgdG8gdGhlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGtleSBoZXJlLiBUaGUgY29kZSBjYWxscyBgc2tiX2JwZl9zdHJwYXJzZXIoc2tiKWAsIGFuZCB0aGF0JiMzOTtzIHRoZSBiaXQgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kLiBXaGVyZSBpcyAqdGhhdCogZGVmaW5lZD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYmFjayBhbmQgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgaXQgZG9lcyBleGFjdGx5LiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBjaGVjayByZWxhdGVkIHRvIHRoZSBCUEYgc3RyZWFtIHBhcnNlciBmdW5jdGlvbmFsaXR5LCBhbmQgSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSB2ZXJkaWN0cy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHBhcnNlciBhZmZlY3RzIHRoZSBwYWNrZXQgYW5kIHRoZSB2ZXJkaWN0IGFuZCBob3cgdGhlIHZlcmRpY3QgaXMgdGhlbiBhcHBsaWVkIHRvIHRoZSBzb2NrZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX2JwZl9zdHJwYXJzZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za21zZy5oPTU1NT1zdGF0aWMgaW5saW5lIHNzaXplX3Qgc2tfbXNnX2ZpcnN0X2xlbihzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9saW51eC9za21zZy5oLTU3OS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaDo1ODA6c3RhdGljIGlubGluZSBib29sIHNrYl9icGZfc3RycGFyc2VyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNTgxLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTY3Mj1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTY5OS1cdFx0b2ZmID0gMDtcbm5ldC9jb3JlL3NrbXNnLmM6NzAwOlx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xubmV0L2NvcmUvc2ttc2cuYy03MDEtXHRcdFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9OTk3PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAyNC1cdFx0XHRvZmYgPSAwO1xubmV0L2NvcmUvc2ttc2cuYzoxMDI1Olx0XHRcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XG5uZXQvY29yZS9za21zZy5jLTEwMjYtXHRcdFx0XHRzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTE1PXZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0yMi1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMzpcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKVxubmV0L2lwdjQvdGNwX2JwZi5jLTI0LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgdGhpbmtlcjoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBTdHJpbmcgUGFyc2VyIGluIHNrbXNnLmgqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGBza2JfYnBmX3N0cnBhcnNlcmAgZnVuY3Rpb24sIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBwYXJzaW5nIG9mIHN0cmluZyBkYXRhIHdpdGhpbiBza19idWZmcywgaXMgaW1wbGVtZW50ZWQuIFRoYXQgdXN1YWxseSBtZWFucyBoZWFkaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIGFuZCBpbiB0aGlzIGNhc2UsIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgaW5jbHVkZS9saW51eC9za21zZy5oYCBoZWFkZXIgZmlsZS4gSXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsaWtlbHkgdGhlIGRlY2xhcmF0aW9ucyBmb3IgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBzb2NrZXQgbWVzc2FnZSBoYW5kbGluZyBhbmQgQlBGIGludGVyYWN0aW9uIHNob3VsZCByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCBleGlzdHMgdGhlcmUgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gc3RyaW5nIGRhdGEgcHJvY2Vzc2luZy4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za21zZy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdHJldHVybiBpbnE7XG4gNTcxOlx0fVxuIDU3MjpcdFxuIDU3MzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfU09DS19NU0cpXG4gNTc0Olx0XG4gNTc1Olx0I2RlZmluZSBCUEZfRl9TVFJQQVJTRVJcdCgxVUwgXHUwMDNjXHUwMDNjIDEpXG4gNTc2Olx0XG4gNTc3Olx0LyogV2Ugb25seSBoYXZlIHR3byBiaXRzIHNvIGZhci4gKi9cbiA1Nzg6XHQjZGVmaW5lIEJQRl9GX1BUUl9NQVNLIH4oQlBGX0ZfSU5HUkVTUyB8IEJQRl9GX1NUUlBBUlNFUilcbiA1Nzk6XHRcbiA1ODA6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2JwZl9zdHJwYXJzZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA1ODE6XHR7XG4gNTgyOlx0XHR1bnNpZ25lZCBsb25nIHNrX3JlZGlyID0gc2tiLVx1MDAzZV9za19yZWRpcjtcbiA1ODM6XHRcbiA1ODQ6XHRcdHJldHVybiBza19yZWRpciBcdTAwMjYgQlBGX0ZfU1RSUEFSU0VSO1xuIDU4NTpcdH1cbiA1ODY6XHRcbiA1ODc6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2JwZl9zZXRfc3RycGFyc2VyKHN0cnVjdCBza19idWZmICpza2IpXG4gNTg4Olx0e1xuIDU4OTpcdFx0c2tiLVx1MDAzZV9za19yZWRpciB8PSBCUEZfRl9TVFJQQVJTRVI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIEJQRiBTb2NrZXQgTWVzc2FnZSBDaGFuZ2VzKioKClJpZ2h0LCBzbyBgc2tiX2JwZl9zdHJwYXJzZXJgIGlzIG9ubHkgZ29pbmcgdG8gYmUgYXZhaWxhYmxlIGlmIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgd2l0aCBgQ09ORklHX05FVF9TT0NLX01TR2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIE5vdywgdGhlIHBhdGNoIGZvY3VzZXMgb24gbW9kaWZ5aW5nIGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYW5kIHRob3NlIGFyZSBib3RoIHNpdHRpbmcgaW4gYG5ldC9jb3JlL3NrbXNnLmNgLiBJdCBsb29rcyBsaWtlIHdlIHdpbGwgd2FudCB0byBkaXZlIGluIGRlZXAgb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGluIGBuZXQvY29yZS9za21zZy5jYC4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBCUEYgdmVyZGljdCBpbXBhY3RzIHBhY2tldCBoYW5kbGluZyB3aXRoaW4gdGhlIHNvY2tldCBtZXNzYWdlIGZyYW1ld29yaywgZ2l2ZW4gdGhlIGNvbnRleHQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgbW9kaWZpY2F0aW9uIGlzIGdvaW5nIHRvIGFmZmVjdCB0aGUgdmVyZGljdCBhcHBsaWNhdGlvbiBiYXNlZCBvbiB0aGUgQlBGIHByb2dyYW0mIzM5O3Mgb3V0cHV0LCBhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBzb2NrZXQtbGV2ZWwgcHJvY2Vzc2luZyBhbmQgdGhlIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5OTc6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA5OTg6XHRcdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4gOTk5Olx0e1xuMTAwMDpcdFx0c3RydWN0IHNvY2sgKnNrX290aGVyO1xuMTAwMTpcdFx0aW50IGVyciA9IDA7XG4xMDAyOlx0XHR1MzIgbGVuLCBvZmY7XG4xMDAzOlx0XG4xMDA0Olx0XHRzd2l0Y2ggKHZlcmRpY3QpIHtcbjEwMDU6XHRcdGNhc2UgX19TS19QQVNTOlxuMTAwNjpcdFx0XHRlcnIgPSAtRUlPO1xuMTAwNzpcdFx0XHRza19vdGhlciA9IHBzb2NrLVx1MDAzZXNrO1xuMTAwODpcdFx0XHRpZiAoc29ja19mbGFnKHNrX290aGVyLCBTT0NLX0RFQUQpIHx8XG4xMDA5Olx0XHRcdCAgICAhc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpXG4xMDEwOlx0XHRcdFx0Z290byBvdXRfZnJlZTtcbjEwMTE6XHRcbjEwMTI6XHRcdFx0c2tiX2JwZl9zZXRfaW5ncmVzcyhza2IpO1xuMTAxMzpcdFxuMTAxNDpcdFx0XHQvKiBJZiB0aGUgcXVldWUgaXMgZW1wdHkgdGhlbiB3ZSBjYW4gc3VibWl0IGRpcmVjdGx5XG4xMDE1Olx0XHRcdCAqIGludG8gdGhlIG1zZyBxdWV1ZS4gSWYgaXRzIG5vdCBlbXB0eSB3ZSBoYXZlIHRvXG4xMDE2Olx0XHRcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcbjEwMTc6XHRcdFx0ICogaWYgc2tfcHNvY2tfc2tiX2luZ3Jlc3MgZXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieVxuMTAxODpcdFx0XHQgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS5cbjEwMTk6XHRcdFx0ICovXG4xMDIwOlx0XHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IpKSB7XG4xMDIxOlx0XHRcdFx0Ym9vbCBjaGFyZ2Vfc2tiID0gdHJ1ZTtcbjEwMjI6XHRcbjEwMjM6XHRcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuMTAyNDpcdFx0XHRcdG9mZiA9IDA7XG4xMDI1Olx0XHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbjEwMjY6XHRcdFx0XHRcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcbjEwMjc6XHRcbjEwMjg6XHRcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4xMDI5Olx0XHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4xMDMwOlx0XHRcdFx0XHRjaGFyZ2Vfc2tiID0gZmFsc2U7XG4xMDMxOlx0XHRcdFx0fVxuMTAzMjpcdFx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sXG4xMDMzOlx0XHRcdFx0XHRcdFx0XHRmYWxzZSwgY2hhcmdlX3NrYik7XG4xMDM0Olx0XHRcdH1cbjEwMzU6XHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMTAzNjpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuMTAzNzpcdFx0XHRcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xuMTAzODpcdFx0XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XG4xMDM5Olx0XHRcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cHNvY2stXHUwMDNld29yaywgMCk7XG4xMDQwOlx0XHRcdFx0XHRlcnIgPSAwO1xuMTA0MTpcdFx0XHRcdH1cbjEwNDI6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuMTA0MzpcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMDQ0Olx0XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuMTA0NTpcdFx0XHR9XG4xMDQ2Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGRpdmVzIGludG8gdGhlIGNvcmUgb2YgQlBGIHNvY2tldCBtZXNzYWdlIGhhbmRsaW5nLiBJdCYjMzk7cyB0b3VjaGluZyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAg4oCTIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcml0aWNhbCB0byBob3cgd2UgcHJvY2VzcyBzb2NrZXQgbWVzc2FnZXMgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgZGVwZW5kZW5jeSBvbiBgQ09ORklHX05FVF9TT0NLX01TR2AsIHdoaWNoIGlzIG5vIHN1cnByaXNlIGdpdmVuIHRoZSBjb250ZXh0LiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgbGlrZWx5IG5lZWRlZCwgb3IgYXQgbGVhc3QgaGlnaGx5IGFkdmlzYWJsZSwgdG8gYWN0dWFsbHkgKnVzZSogQlBGLgoKQnV0LCBnaXZlbiB0aGUgdXNlIG9mIGBza2JfYnBmX3N0cnBhcnNlcihza2IpYCBpbiB0aGUgY29kZSwgSSYjMzk7bSBnZXR0aW5nIGEgaHVuY2ggdGhhdCBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBtaWdodCBiZSBpbXBsaWNhdGVkIGhlcmUgYXMgd2VsbC4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTtsbCBjaGVjayBgbmV0L0tjb25maWdgIGFuZCBgbmV0L2NvcmUvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgTkVUX1NPQ0tfTVNHYCBhbmQgcmVsYXRlZCBjb25maWdzIGFyZSBkZWZpbmVkIGFuZCB3aGF0IHRoZWlyIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBhc3Nlc3NpbmcgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHBhdGNoJiMzOTtzIGltcGFjdCBhbmQgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgZm9yIGl0cyBwcm9wZXIgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NPQ0tfTVNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xuLS1cbm5ldC9LY29uZmlnLTQ3OC1cbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy00ODAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxOTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYE5FVF9TT0NLX01TR2AgU2VsZWN0b3JzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIGhvdyBgTkVUX1NPQ0tfTVNHYCBpcyBiZWluZyB1dGlsaXplZCwgc3BlY2lmaWNhbGx5LCB3aGVyZSBpdCYjMzk7cyBiZWluZyAqc2VsZWN0ZWQqLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBpbnN0YW5jZXMgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIG1lc3NhZ2UgdHlwZSBpcyB0aGUgdGFyZ2V0IG9mIGEgc2VsZWN0aW9uIG9wZXJhdGlvbi4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIHNlbGVjdG9yIGlzIHVzZWQsIHdoaWNoIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIGNvcmUgbWVjaGFuaXNtcyB0aGF0IGFyZSBtYWtpbmcgdXNlIG9mIHRoaXMuIFdlJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBjb2RlIGFuZCB0cmFjZSBiYWNrIGFzIG11Y2ggYXMgcG9zc2libGUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVyZSBJIGNhbiBpZGVudGlmeSB3aGF0JiMzOTtzIHNlbGVjdGluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE5FVF9TT0NLX01TRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTMzLVx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbmtlcm5lbC9icGYvS2NvbmZpZzozNDpcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbi0tXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4tLVxubmV0L0tjb25maWctMzY2LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnOjM2NzpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTM2OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg1LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY0L0tjb25maWc6Mzg2Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZy0zODctXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05My1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2Ni9LY29uZmlnOjk0Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZy05NS1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE9fR0NNXG5uZXQvdGxzL0tjb25maWc6MTE6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvdGxzL0tjb25maWctMTItXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc4NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBORVRfU09DS19NU0dgIEJQRiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBgTkVUX1NPQ0tfTVNHYCBjb2RlcGF0aCBqdW1wcyBvdXQuIEkgc2VlIHRoYXQgYEJQRl9TWVNDQUxMYCBzZWxlY3RzIGl0IHdoZW4gdGhlIGBORVRgIG9wdGlvbiBpcyBlbmFibGVkLCBhbmQgYWxzbyB0aGF0IGl0JiMzOTtzIGxldmVyYWdlZCBieSBgQlBGX1NUUkVBTV9QQVJTRVJgLCBgSU5FVF9FU1BJTlRDUGAsIGBJTkVUNl9FU1BJTlRDUGAsIGFuZCBgVExTYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBjZW50cmFsIHRvIGhvdyBhIGxvdCBvZiBuZXR3b3JrIHRyYWZmaWMgaXMgYmVpbmcgaGFuZGxlZCBieSBCUEYsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGhvbmluZyBpbiBvbiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgYW5kIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYXMgd2VsbCBhcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByb2JhYmx5IHRoZSBjb3JlIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgdmVyZGljdCBhcHBsaWNhdGlvbiBsb2dpYyByZWxhdGVkIHRvICYjMzQ7cGVyLXNvY2tldCBCUEYmIzM0Oywgb3IgcHNvY2suIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyB0cnVlLi4uCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBhcmUgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgc3RhdGljPyBZZXMsIHRoZXkgYWxsIGFyZSwgc28gdGhleSYjMzk7cmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0LiBUaGF0IG1ha2VzIGl0IGVhc2llciwgYnV0IG5vdyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZW0uIFRoaXMgd2lsbCBwcm9iYWJseSBsZWFkIG1lIHRvIHRoZSBrZXkgZW50cnlwb2ludHMgb2YgdGhlIEJQRiBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja192ZXJkaWN0X2FwcGx5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9OTU5PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTk5Ni1cbm5ldC9jb3JlL3NrbXNnLmM6OTk3OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy05OTgtXHRcdFx0XHQgIGludCB2ZXJkaWN0KVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA4MD1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTExMDMtXHR9XG5uZXQvY29yZS9za21zZy5jOjExMDQ6XHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XG5uZXQvY29yZS9za21zZy5jLTExMDUtb3V0OlxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIwMz1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjI2LVx0fVxubmV0L2NvcmUvc2ttc2cuYzoxMjI3Olx0cmV0ID0gc2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjI4LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcwMgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBQYWNrZXQgU29ja2V0IFZlcmRpY3QgQXBwbGljYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZXNlIHBhY2tldCBzb2NrZXQgdmVyZGljdHMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNydWNpYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgdGhlIGNvcmUgZnVuY3Rpb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZXNlIHR3byBmdW5jdGlvbnMsIGBza19wc29ja19zdHJwX3JlYWRgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYXJlIHRoZSBjb25kdWl0cyB0aGF0IGV2ZW50dWFsbHkgcGFzcyB0aGUgdmVyZGljdHMgYWxvbmcgdG8gYmUgYXBwbGllZCBieSB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgY2xhc3NpYyBwcm9kdWNlci1jb25zdW1lciBwYXR0ZXJuLCB3aGVyZSB0aGUgcmVhZCBhbmQgcmVjZWl2ZSBmdW5jdGlvbnMgYWN0IGFzIHRoZSBwcm9kdWNlcnMsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgdGhlIGNvbnN1bWVyIG9mIHRoZSB2ZXJkaWN0IGRhdGEuIFRoZSBrZXkgaGVyZSBpcyB0byBzZWUgaG93IHRoZSBkYXRhIGZsb3dzIGZyb20gdGhlIHJlYWQgYW5kIHJlY2VpdmUgcGF0aCB0byB0aGUgYXBwbHkgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIGJvdW5kYXJ5IG9mIGVhY2ggb2YgdGhlc2UgdGhyZWUgZnVuY3Rpb25zLCBob3cgdGhlIGRhdGEgYW5kIG1ldGFkYXRhIGFyZSBiZWluZyBwYXNzZWQsIGFuZCB3aGF0IGRlY2lzaW9ucyBhcmUgYmVpbmcgbWFkZS4KClRoaXMgZmxvdyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIHdpdGggYSBob2xpc3RpYyB2aWV3LiBJIHNob3VsZCBub3cgY2hlY2sgdGhlIGBza19wc29ja19za2JfaW5ncmVzc2AgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgaW5ncmVzcyBwYXRoLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBvdXIgb3RoZXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja19za2JfaW5ncmVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTUzMz1zdGF0aWMgc3RydWN0IHNrX21zZyAqc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9za21zZy5jLTU0NC1cbm5ldC9jb3JlL3NrbXNnLmM6NTQ1OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01NDYtXHRcdFx0XHRcdHUzMiBvZmYsIHUzMiBsZW4sXG4tLVxubmV0L2NvcmUvc2ttc2cuYy01ODctXG5uZXQvY29yZS9za21zZy5jOjU4ODpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrbXNnLmMtNTg5LVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTkxLVxubmV0L2NvcmUvc2ttc2cuYzo1OTI6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01OTMtXHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTk5LVx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG5uZXQvY29yZS9za21zZy5jOjYwMDpcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXG5uZXQvY29yZS9za21zZy5jLTYwMS1cdFx0XHRcdFx0XHQgdHJ1ZSk7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy02MTItXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG5uZXQvY29yZS9za21zZy5jOjYxMzpcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csIHRydWUpO1xubmV0L2NvcmUvc2ttc2cuYy02MTQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNjIzLSAqL1xubmV0L2NvcmUvc2ttc2cuYzo2MjQ6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za21zZy5jLTYyNS1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbi0tXG5uZXQvY29yZS9za21zZy5jLTY0MS1cdG1zZy1cdTAwM2VzayA9IHNrO1xubmV0L2NvcmUvc2ttc2cuYzo2NDI6XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0YWtlX3JlZik7XG5uZXQvY29yZS9za21zZy5jLTY0My1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2NvcmUvc2ttc2cuYz02NDg9c3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy02NTYtXG5uZXQvY29yZS9za21zZy5jOjY1NzpcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbik7XG5uZXQvY29yZS9za21zZy5jLTY1OC19XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05OTc9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDE2LVx0XHQgKiBxdWV1ZSB3b3JrIG90aGVyd2lzZSB3ZSBtYXkgZ2V0IE9PTyBkYXRhLiBPdGhlcndpc2UsXG5uZXQvY29yZS9za21zZy5jOjEwMTc6XHRcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcbm5ldC9jb3JlL3NrbXNnLmMtMTAxOC1cdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDMxLVx0XHRcdH1cbm5ldC9jb3JlL3NrbXNnLmM6MTAzMjpcdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLFxubmV0L2NvcmUvc2ttc2cuYy0xMDMzLVx0XHRcdFx0XHRcdFx0ZmFsc2UsIGNoYXJnZV9za2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBlQlBGIFBhY2tldCBTb2NrZXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBza19wc29ja19oYW5kbGVfc2tiYC4gTXkgbWVudGFsIG1vZGVsIHRlbGxzIG1lIHRoYXQgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGtleSByb2xlIGluIGhhbmRsaW5nIFNLQnMgKFNvY2tldCBCdWZmZXIpIHdpdGhpbiB0aGUgcGFja2V0IHNvY2tldCBjb250ZXh0LiBUaGUga2V5IHBvaW50IGlzOiB0aGlzIGZ1bmN0aW9uIGNhbGxzIGBza19wc29ja19za2JfaW5ncmVzc2AuIE5hdHVyYWxseSwgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhY2tldCBmbG93IGFuZCBlQlBGIGludGVncmF0aW9uLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsIHNpdGVzIG9mIGBza19wc29ja19oYW5kbGVfc2tiYC4gVW5kZXJzdGFuZGluZyAqaG93KiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCBob3cgZUJQRiBwcm9ncmFtcyBpbnRlcmFjdCB3aXRoIHBhY2tldCBzb2NrZXRzLiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMsIGFuZCB0aGVuIEkmIzM5O2xsIGJlIGFibGUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGl0c2VsZiBhbmQgd2hhdCBpdCBkb2VzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja19oYW5kbGVfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9NjI0PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNjQ3LVxubmV0L2NvcmUvc2ttc2cuYzo2NDg6c3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za21zZy5jLTY0OS1cdFx0XHQgICAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBpbmdyZXNzKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9NjcyPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNzE3LVx0XHRcdGlmICghc29ja19mbGFnKHBzb2NrLVx1MDAzZXNrLCBTT0NLX0RFQUQpKVxubmV0L2NvcmUvc2ttc2cuYzo3MTg6XHRcdFx0XHRyZXQgPSBza19wc29ja19oYW5kbGVfc2tiKHBzb2NrLCBza2IsIG9mZixcbm5ldC9jb3JlL3NrbXNnLmMtNzE5LVx0XHRcdFx0XHRcdFx0ICBsZW4sIGluZ3Jlc3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU4MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYWNrZXQgU29ja2V0IEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIHBhY2tldCBzb2NrZXQgaW1wbGVtZW50YXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIGBza19wc29ja19iYWNrbG9nYCBpcyB0aGUgY29yZSBvZiBob3cgdGhpbmdzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgY2FsbGluZyBgc2tfcHNvY2tfaGFuZGxlX3NrYmAuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgdGhyZWUga2V5IGZ1bmN0aW9uczogYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgYHNrX3Bzb2NrX2JhY2tsb2dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBmbG93cyB0aHJvdWdoIHRoZXNlLgoKRmlyc3QgdGhpbmdzIGZpcnN0OiBsZXQmIzM5O3Mgc2VlIGhvdyB2aXNpYmxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUuIFRoZSBmYWN0IHRoYXQgdGhleSYjMzk7cmUgZGVjbGFyZWQgYXMgc3RhdGljIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhleSYjMzk7cmUgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgbWVhbnMgdGhleSYjMzk7cmUgdXNlZCBvbmx5IHdpdGhpbiB0aGUgcGFja2V0IHNvY2tldCBjb2RlLiBUaGlzIGluIHR1cm4sIG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBmaW5kIGhvdyB0aGV5JiMzOTtyZSAqaW52b2tlZCogdmlhIG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG5vdyBmaW5kIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZ1bmN0aW9ucywgb3IgYW55IGNhbGxiYWNrcyB0aGF0ICpkbyogZXhpc3QsIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9MTA2Mj1zdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDc5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmM6MTA4MDpzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrbXNnLmMtMTA4MS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTA4LVxubmV0L2NvcmUvc2ttc2cuYzoxMTA5OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgaW50IGVycilcbm5ldC9jb3JlL3NrbXNnLmMtMTExMC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMTQ4PWludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE1Mi1cdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RycF9jYWxsYmFja3MgY2IgPSB7XG5uZXQvY29yZS9za21zZy5jOjExNTM6XHRcdC5yY3ZfbXNnXHQ9IHNrX3Bzb2NrX3N0cnBfcmVhZCxcbm5ldC9jb3JlL3NrbXNnLmM6MTE1NDpcdFx0LnJlYWRfc29ja19kb25lXHQ9IHNrX3Bzb2NrX3N0cnBfcmVhZF9kb25lLFxubmV0L2NvcmUvc2ttc2cuYy0xMTU1LVx0XHQucGFyc2VfbXNnXHQ9IHNrX3Bzb2NrX3N0cnBfcGFyc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjkxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipEZWx2aW5nIGludG8gdGhlIGBza19wc29ja2AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgc2tfcHNvY2tfc3RycF9yZWFkYCBpcyBiZWluZyB1c2VkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aGluIGBza19wc29ja19pbml0X3N0cnBgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIGhvb2suIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGRvZXMgdGhpcyByZWFkIGZ1bmN0aW9uIGFjdHVhbGx5ICpnZXQqIHVzZWQgYW5kIHdoYXQmIzM5O3MgdGhlIHB1cnBvc2U/JiMzNDsgVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdy4gYHNrX3Bzb2NrX2luaXRfc3RycGAgc2V0cyBpdCB1cCwgYnV0IGl0JiMzOTtzIHRoZSAqdXNhZ2UqIHRoYXQgbWF0dGVycy4gV2hlcmUgYW5kIGhvdyBpcyB0aGUgcmVhZCBwZXJmb3JtZWQ/CgpTaW5jZSBpdCYjMzk7cyBhIGBza19wc29ja2AgZnVuY3Rpb24sIEnigJltIGd1ZXNzaW5nIGl0IGhhcyB0byBkZWFsIHdpdGggcGFja2V0IHNvY2tldCB2ZXJkaWN0cy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJlYWQgb3BlcmF0aW9uIHdvcmtzLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgaG93IGFuZCB3aGVyZSBpdCBtaWdodCBoYW5kbGUgdmVyZGljdHMuIFNvLCBsZXTigJlzIGdvIGRpcmVjdGx5IHRvIGBza19wc29ja192ZXJkaWN0X3JlY3ZgIGFuZCBzZWUgaG93IGl0IGlzIHdvcmtpbmcsIG5vdy4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIGFuIGFuc3dlciB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9yZWN2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9MTE5OD1zdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMDItXG5uZXQvY29yZS9za21zZy5jOjEyMDM6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMjA0LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEyMzU9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNTEtXG5uZXQvY29yZS9za21zZy5jOjEyNTI6XHRjb3BpZWQgPSBvcHMtXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XG5uZXQvY29yZS9za21zZy5jLTEyNTMtXHRpZiAoY29waWVkIFx1MDAzZT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgyMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgUGFja2V0IFNvY2tldCBWZXJkaWN0IFBhdGgqKgoKQWxyaWdodCwgSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhpcyBwYWNrZXQgc29ja2V0IGNvZGUsIGFuZCBJIHNlZSB0aGF0IGBza19wc29ja192ZXJkaWN0X3JlY3ZgIGlzIGJlaW5nIHBhc3NlZCBpbnRvIGBvcHMtJmd0O3JlYWRfc2tiYCB3aXRoaW4gdGhlIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgZGlyZWN0IGxpbmsgYmV0d2VlbiByZWNlaXZpbmcgZGF0YSBhbmQgbWFraW5nIGEgdmVyZGljdCBvbiBpdCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBwYWNrZXQgc29ja2V0JiMzOTtzIHJvbGUuCgpOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHNrX3Bzb2NrX2JhY2tsb2dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJhY2tsb2cgaXMgaW52b2x2ZWQgaGVyZS4gSXMgdGhpcyB3aGVyZSB0aGUgdmVyZGljdCBpbmZvcm1hdGlvbiBpcyBxdWV1ZWQgb3IgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYG9wcy0mZ3Q7cmVhZF9za2JgPyBJcyB0aGlzIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCB0aGUgdmVyZGljdCBkYXRhIHRoYXQgaXMgaW4gdGhlIGJhY2tsb2c/IFBlcmhhcHMgdGhlIGJhY2tsb2cgaXMgd2hlcmUgcGFja2V0cyBhcmUgYnVmZmVyZWQsIGFuZCBub3cgd2UmIzM5O3JlIHB1bGxpbmcgdGhlbSBvZmYsIGp1ZGdpbmcgdGhlbSwgYW5kIHRoZW4gZmVlZGluZyB0aGVtIGludG8gdGhlIHJlYWQgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gdG8gZnVsbHkgZ3Jhc3AgdGhlIHdvcmtmbG93LiBLbm93aW5nIGhvdyB0aGUgYmFja2xvZyBmdW5jdGlvbnMgaW4gdGhlIGNvbnRleHQgb2YgdmVyZGljdHMgaXMgY3J1Y2lhbCwgb3RoZXJ3aXNlLCBJIGRvbiYjMzk7dCByZWFsbHkga25vdyBob3cgdGhlIHZlcmRpY3QgZnVuY3Rpb25zIGluIGEgcGFja2V0IHNvY2tldC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgbG9va2luZyBhdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGFuZCB0aGVuIHRoZSBmdW5jdGlvbiBjYWxscyB0byBmaW5kIG91dCB3aGVyZSB0aGUgdmVyZGljdCBkZWNpc2lvbnMgYXJlIG1hZGUsIHNvIEkgY2FuIHN0YXJ0IHRyYWNpbmcgYmFja3dhcmQgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfYmFja2xvZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTY2MD1zdGF0aWMgdm9pZCBza19wc29ja19za2Jfc3RhdGUoc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvY29yZS9za21zZy5jLTY3MS1cbm5ldC9jb3JlL3NrbXNnLmM6NjcyOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L2NvcmUvc2ttc2cuYy02NzMte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9NzUxPXN0cnVjdCBza19wc29jayAqc2tfcHNvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGludCBub2RlKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNzg1LVxubmV0L2NvcmUvc2ttc2cuYzo3ODY6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwc29jay1cdTAwM2V3b3JrLCBza19wc29ja19iYWNrbG9nKTtcbm5ldC9jb3JlL3NrbXNnLmMtNzg3LVx0bXV0ZXhfaW5pdChcdTAwMjZwc29jay1cdTAwM2V3b3JrX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhY2tldCBTb2NrZXQgV29ya3F1ZXVlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBza19wc29ja19iYWNrbG9nYCB0aGluZy4gUmlnaHQsIGl0JiMzOTtzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLiBUaGF0IHRlbGxzIG1lIHRoZSBjb3JlIGludGVyYWN0aW9uIHBvaW50cyBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgZnVuY3Rpb25zIEkganVzdCBoaWdobGlnaHRlZDogYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBgc2tfcHNvY2tfYmFja2xvZ2AgaXRzZWxmLCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCwgYW5kIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhcmUgc3RhdGljLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IHJlbGV2YW50IGJlY2F1c2UgU3l6a2FsbGVyIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGRpcmVjdGx5IGNhbGwgdGhlbS4gSG93ZXZlciwgaWYgdGhleSYjMzk7cmUgdGhlIG9uZXMgYmVpbmcgbW9kaWZpZWQsIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgdGFyZ2V0cyBJIG5lZWQgdG8gd2F0Y2guIEkmIzM5O2xsIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBsaXN0ZWQgaW4gYEZvY3VzU3ltYm9sc2AuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBpcyB0aGUgYmlnIG9uZSwgdGhhdCYjMzk7cyBleHBlY3RlZC4gQW5kLCBhcyBzdXNwZWN0ZWQsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgbXVzdC4gVGhlbiwgdGhlcmUmIzM5O3MgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAuIEkgbmVlZCB0aGF0IGJlY2F1c2UgaXQgZW5hYmxlcyBgc2tiX2JwZl9zdHJwYXJzZXJgLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSB2aWV3IG9mIHRoZSBkZXBlbmRlbmN5IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxuLS1cbm5ldC9LY29uZmlnLTM2MC1cbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnLTM2Mi1cdGJvb2wgXCYjMzQ7ZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTI1CgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoYXQgYEJQRl9TVFJFQU1fUEFSU0VSYCBpcyBlbmFibGVkIGluIGBuZXQvS2NvbmZpZ2AuIEV4Y2VsbGVudC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGBORVRfU09DS19NU0dgIGFuZCBgQlBGX1NUUkVBTV9QQVJTRVJgIGFsb25lIGNvdmVyIHRoZSBjaGFuZ2VzLiBZZXAsIGxvb2tzIGdvb2Q7IHRoZXkgZW5jb21wYXNzIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIFNpbmNlIHRoaXMgcGF0Y2ggdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBsb2dpYywgaXQmIzM5O3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCBkZXNlcnZlcyBhIGZ1enppbmcgY2FtcGFpZ24uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGBGb2N1c1N5bWJvbHNgLiBJIHNlZSB0aGVzZSBmdW5jdGlvbnMgcmlnaHQgYXdheTogYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGBza19wc29ja19zdHJwX3JlYWRgLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYW5kIGBza19wc29ja19iYWNrbG9nYC4gV2FpdCwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBpbiB0aGUgZGlmZj8gQWgsIGBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlYCBpcyBuZWFyYnksIGFsdGhvdWdoIG5vdCBtb2RpZmllZC4gSSYjMzk7bGwgc3RpY2sgdG8gdGhlIGRpcmVjdGx5IG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlaXIgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgbWVhbnMgZm9jdXNpbmcgb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLgoKTGV0IG1lIHZlcmlmeSBhIHF1aWNrIGRldGFpbDogQXJlIHRoZXNlIHN0YXRpYz8gWWVzLCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYW5kIGBza19wc29ja19za2JfaW5ncmVzc2AgYXJlIGFsbCBzdGF0aWMuIEdvb2QuIEkmIzM5O2xsIGluY2x1ZGUgdGhlc2UgYXMgdGhlIGBGb2N1c1N5bWJvbHNgLgoKTm93IGZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBgTkVUX1NPQ0tfTVNHYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBCUEZfU1lTQ0FMTGAgd2lsbCBkbyB0aGUgdHJpY2suCgpKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBzaWduaWZpY2FudC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCB0byB0YWtlIGEgYGJvb2wgY2hhcmdlX3NrYmAuIElmIHRoaXMgaXMgdHJ1ZSwgaXQgY2FsbHMgYHNrYl9zZXRfb3duZXJfcihza2IsIHNrKWAuIEFoLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgYWNjb3VudGluZyBmb3IgU0tCcyBpbiBwc29jayBpbmdyZXNzISBBYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU09DS19NU0cmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19wc29ja192ZXJkaWN0X2FwcGx5JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc2tiX2luZ3Jlc3MmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICAgJiMzNDtza19wc29ja19iYWNrbG9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWNjb3VudGluZyBsb2dpYyBmb3Igc2ticyBpbiB0aGUgQlBGIHBzb2NrIGluZ3Jlc3MgcGF0aC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgY2hhcmdlX3NrYmAgcGFyYW1ldGVyIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCB0byBjb25kaXRpb25hbGx5IGNhbGwgYHNrYl9zZXRfb3duZXJfcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9hcHBseSYjMzQ7LAogICAgJiMzNDtza19wc29ja19za2JfaW5ncmVzc19zZWxmJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3NrYl9pbmdyZXNzJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0cnBfcmVhZCYjMzQ7LAogICAgJiMzNDtza19wc29ja192ZXJkaWN0X3JlY3YmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfYmFja2xvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgbG9naWMgZm9yIHNrYnMgaW4gdGhlIEJQRiBwc29jayBpbmdyZXNzIHBhdGguIEl0IGludHJvZHVjZXMgYSBuZXcgYGNoYXJnZV9za2JgIHBhcmFtZXRlciB0byBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgdG8gY29uZGl0aW9uYWxseSBjYWxsIGBza2Jfc2V0X293bmVyX3JgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nL0JQRiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNTo1NS4xNTIzNzk4MjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjM3NjczMzM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU09DS19NU0dcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlcIixcbiAgICBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZcIixcbiAgICBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzXCIsXG4gICAgXCJza19wc29ja19zdHJwX3JlYWRcIixcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfcmVjdlwiLFxuICAgIFwic2tfcHNvY2tfYmFja2xvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWNjb3VudGluZyBsb2dpYyBmb3Igc2ticyBpbiB0aGUgQlBGIHBzb2NrIGluZ3Jlc3MgcGF0aC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgY2hhcmdlX3NrYmAgcGFyYW1ldGVyIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCB0byBjb25kaXRpb25hbGx5IGNhbGwgYHNrYl9zZXRfb3duZXJfcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzU6NTUuMTUyMzg3MzIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE2MzcyOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMzNiNjk0ZGY4NzAwNjQ3NDA3MmIwN2U2MDYxYzNlYWMxNGQ1MWM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDExOjM1OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXFxuaW5kZXggMjUyMWI2NDNmYTA1ZDQuLjE3MjYwNjgxNDc5YTNmIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcXG4rKysgYi9uZXQvY29yZS9za21zZy5jXFxuQEAgLTU4Niw3ICs1ODYsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7XFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcXG4rXFx0XFx0XFx0XFx0ICAgICBib29sIGNoYXJnZV9za2IpO1xcbiBcXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHR1MzIgb2ZmLCB1MzIgbGVuKVxcbkBAIC01OTUsMTIgKzU5Niw5IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IHNrX21zZyAqbXNnO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0LyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi1cXHUwMDNlc2sgaXMgYWxyZWFkeSBhc3NpZ25lZCxcXG4tXFx0ICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXRcXG4tXFx0ICogY29ycmVjdGx5Llxcbi1cXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNlc2sgPT0gc2spKVxcbi1cXHRcXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSk7XFxuK1xcdFxcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgdHJ1ZSk7XFxuIFxcdG1zZyA9IHNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzaywgc2tiKTtcXG4gXFx0aWYgKCFtc2cpXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbkBAIC02MTgsMTIgKzYxNiwxNCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGVcXG4tICogc2tiLiBJbiB0aGlzIGNhc2Ugd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgbWVtb3J5IGxpbWl0cyBvciBza2Jfc2V0X293bmVyX3JcXG4tICogYmVjYXVzZSB0aGUgc2tiIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBoZXJlLlxcbisvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stXFx1MDAzZXNrLlxcbisgKlxcbisgKiBXaGVuIGNoYXJnZV9za2IgaXMgZmFsc2UsIHRoZSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgcGF0aCBrZWVwcyB0aGUgVENQXFxuKyAqIHJlY2VpdmUgcXVldWUgYWNjb3VudGluZyBpbiBwbGFjZSBhbmQgbXVzdCBub3QgY2FsbCBza2Jfc2V0X293bmVyX3IoKS5cXG4gICovXFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcXG4rXFx0XFx0XFx0XFx0ICAgICBib29sIGNoYXJnZV9za2IpXFxuIHtcXG4gXFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cXHUwMDNlc2s7XFxuQEAgLTYzMSw3ICs2MzEsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYlxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCFtc2cpKVxcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4tXFx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xcbitcXHRpZiAoY2hhcmdlX3NrYilcXG4rXFx0XFx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xcbiBcXG4gXFx0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcXG4gXFx0ICogZGF0YSBvcmlnaW5hdGVzIGZyb20gdGhlIHNvY2tldCdzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0b1xcbkBAIC0xMDE3LDYgKzEwMTgsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuK1xcdFxcdFxcdGJvb2wgY2hhcmdlX3NrYiA9IHRydWU7XFxuK1xcbiBcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0XFx0XFx0b2ZmID0gMDtcXG4gXFx0XFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcXG5AQCAtMTAyNCw4ICsxMDI3LDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0XFx0XFx0XFx0b2ZmID0gc3RtLVxcdTAwM2VvZmZzZXQ7XFxuIFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuK1xcdFxcdFxcdFxcdGNoYXJnZV9za2IgPSBmYWxzZTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuK1xcdFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlLCBjaGFyZ2Vfc2tiKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNTo1NS42MDQ4OTc3NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NTkyNDIwNjc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU09DS19NU0dcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlcIixcbiAgICBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZcIixcbiAgICBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzXCIsXG4gICAgXCJza19wc29ja19zdHJwX3JlYWRcIixcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfcmVjdlwiLFxuICAgIFwic2tfcHNvY2tfYmFja2xvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWNjb3VudGluZyBsb2dpYyBmb3Igc2ticyBpbiB0aGUgQlBGIHBzb2NrIGluZ3Jlc3MgcGF0aC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgY2hhcmdlX3NrYmAgcGFyYW1ldGVyIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCB0byBjb25kaXRpb25hbGx5IGNhbGwgYHNrYl9zZXRfb3duZXJfcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMzNiNjk0ZGY4NzAwNjQ3NDA3MmIwN2U2MDYxYzNlYWMxNGQ1MWM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTE6MzU6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xuaW5kZXggMjUyMWI2NDNmYTA1ZDQuLjE3MjYwNjgxNDc5YTNmIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTU4Niw3ICs1ODYsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIGNoYXJnZV9za2IpO1xuIFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHUzMiBvZmYsIHUzMiBsZW4pXG5AQCAtNTk1LDEyICs1OTYsOSBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi1cdTAwM2VzayBpcyBhbHJlYWR5IGFzc2lnbmVkLFxuLVx0ICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXRcbi1cdCAqIGNvcnJlY3RseS5cbi1cdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG4tXHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlKTtcbitcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXG4rXHRcdFx0XHRcdFx0IHRydWUpO1xuIFx0bXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpO1xuIFx0aWYgKCFtc2cpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuQEAgLTYxOCwxMiArNjE2LDE0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGVcbi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfclxuLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS5cbisvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stXHUwMDNlc2suXG4rICpcbisgKiBXaGVuIGNoYXJnZV9za2IgaXMgZmFsc2UsIHRoZSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgcGF0aCBrZWVwcyB0aGUgVENQXG4rICogcmVjZWl2ZSBxdWV1ZSBhY2NvdW50aW5nIGluIHBsYWNlIGFuZCBtdXN0IG5vdCBjYWxsIHNrYl9zZXRfb3duZXJfcigpLlxuICAqL1xuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKVxuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIGNoYXJnZV9za2IpXG4ge1xuIFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXHUwMDNlc2s7XG5AQCAtNjMxLDcgKzYzMSw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiXG4gXG4gXHRpZiAodW5saWtlbHkoIW1zZykpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuLVx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xuK1x0aWYgKGNoYXJnZV9za2IpXG4rXHRcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0J3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvXG5AQCAtMTAxNyw2ICsxMDE4LDggQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYikpIHtcbitcdFx0XHRib29sIGNoYXJnZV9za2IgPSB0cnVlO1xuK1xuIFx0XHRcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRcdFx0b2ZmID0gMDtcbiBcdFx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xuQEAgLTEwMjQsOCArMTAyNywxMCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4gXHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4rXHRcdFx0XHRjaGFyZ2Vfc2tiID0gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbitcdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLFxuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGNoYXJnZV9za2IpO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19sb2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM1OjU1LjYwNDg5OTI2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTc0ODI4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUaGlzIE5ldHdvcmtpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgdHdlYWtpbmcgYG5ldC9jb3JlL3NrbXNnLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgd2hpY2ggbm93IHRha2VzIGFuIGV4dHJhIGJvb2xlYW4gYXJndW1lbnQsIGBjaGFyZ2Vfc2tiYC4gQSBxdWljayBnbGFuY2Ugc2hvd3MgaWYgYGNoYXJnZV9za2JgIGlzIHRydWUsIHRoZW4gYHNrYl9zZXRfb3duZXJfcihza2IsIHNrKWAgZ2V0cyBjYWxsZWQuIEkgc2VlIHRoYXQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBqdXN0IGNhbGxzIHRoaXMgZnVuY3Rpb24gd2l0aCBgY2hhcmdlX3NrYiA9IHRydWVgLiBIb3dldmVyLCB3aGVuIHdlIGdldCB0byBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIHRoaW5ncyBnZXQgYSBsaXR0bGUgbW9yZSBpbnRlcmVzdGluZy4gVGhhdCBjb2RlIHNlZW1zIHRvIGNvbmRpdGlvbiBgY2hhcmdlX3NrYmAuIElmIGBza2JfYnBmX3N0cnBhcnNlcihza2IpYCByZXR1cm5zIHRydWUsIGBjaGFyZ2Vfc2tiYCBpcyBmYWxzZSwgb3RoZXJ3aXNlIGBjaGFyZ2Vfc2tiYCBpcyB0cnVlIGJlZm9yZSBwYXNzaW5nIGl0IGludG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLlxuXG5UaGlzIGlzIGEgcHJldHR5IGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyBpbnZvbHZpbmcgYHNrbXNnYCBhbmQgYHBzb2NrYC4gR2l2ZW4gaG93IGxvdy1sZXZlbCB0aGlzIGlzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggcGFja2V0IG93bmVyc2hpcCwgSSBpbW1lZGlhdGVseSB0aGluayB0aGF0IHdlIGFic29sdXRlbHkgbmVlZCB0byBmdXp6IHRoaXMgYXJlYS4gVGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MsIGVzcGVjaWFsbHkgYXJvdW5kIHJlc291cmNlIGFjY291bnRpbmcgb3Igb3duZXJzaGlwIGNvbmZsaWN0cywgaXMgaGlnaC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIG9mIGBuZXQvY29yZS9za21zZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGNvZGUgcGF0aC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGZpbmQgd2hlcmUgYHNrbXNnLm9gIGlzIGJ1aWx0IGluIHRoZSBNYWtlZmlsZSB3aXRoaW4gYG5ldC9jb3JlYCBhbmQgaG9wZWZ1bGx5IGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MDAuOTIyMzg0NDI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjQ5ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MDAuOTgxMDM5ODA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyMDYyNzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENPTkZJR19ORVRfU09DS19NU0dgIHNldHRpbmcuIEl0IHNlZW1zIGltcG9ydGFudCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhlIGNvbm5lY3Rpb24gdG8gYHNvY2tfbWFwLm9gIG1ha2VzIG1lIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGBDT05GSUdfQlBGX1NZU0NBTExgIOKAkyBpdCdzIG9mdGVuIGVudGFuZ2xlZCB3aXRoIEJQRiBmdW5jdGlvbmFsaXRpZXMsIGFuZCB0aG9zZSBhcmUgcmVsZXZhbnQgdG8gc29ja2V0IG1lc3NhZ2luZy4gSSB3YW50IGEgY29tcGxldGUgcGljdHVyZS4gTm93LCB0byBkaWcgZGVlcGVyLCBJIHRoaW5rIHRoZSBiZXN0IGFwcHJvYWNoIHdvdWxkIGJlIHRvIGV4YW1pbmUgdGhlIGNvZGUgaW4gYG5ldC9jb3JlL3NrbXNnLmNgLiBJdCdzIGxpa2VseSB0aGF0IGZpbGUgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGVzZSBjb25maWdzIGludGVycmVsYXRlIGFuZCByZXZlYWwgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIHNldHRpbmdzIHRoYXQgSSdtIG92ZXJsb29raW5nLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgbW9yZSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIGVudGlyZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjA3LjIwMTY3MDA2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk3ODIxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NTQ1PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01NzMtXFxubmV0L2NvcmUvc2ttc2cuYzo1NzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxcbm5ldC9jb3JlL3NrbXNnLmMtNTc1LVxcdHBzb2NrLVxcdTAwM2VpbmdyZXNzX2J5dGVzICs9IGxlbjtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTA2Mj1zdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwNzgtXFxubmV0L2NvcmUvc2ttc2cuYzoxMDc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jLTEwODAtc3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTExOTg9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMDAtfVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIwMTojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXFxubmV0L2NvcmUvc2ttc2cuYy0xMjAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNjowNy40MTE0NTgzMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg0MjEzMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFN0cmVhbSBQYXJzZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L2NvcmUvc2ttc2cuY2AgYW5kIHNwZWNpZmljYWxseSB0aGlzIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCdzIGNsZWFybHkgdGllZCB0byB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUga2V5IGhlcmUuIFRoZSBjb2RlIGNhbGxzIGBza2JfYnBmX3N0cnBhcnNlcihza2IpYCwgYW5kIHRoYXQncyB0aGUgYml0IEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZC4gV2hlcmUgaXMgKnRoYXQqIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGJhY2sgYW5kIGdldCBhIGhhbmRsZSBvbiB3aGF0IGl0IGRvZXMgZXhhY3RseS4gVGhpcyBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgY2hlY2sgcmVsYXRlZCB0byB0aGUgQlBGIHN0cmVhbSBwYXJzZXIgZnVuY3Rpb25hbGl0eSwgYW5kIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGF0IGZ1bmN0aW9uIGFuZCB0aGUgdmVyZGljdHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBwYXJzZXIgYWZmZWN0cyB0aGUgcGFja2V0IGFuZCB0aGUgdmVyZGljdCBhbmQgaG93IHRoZSB2ZXJkaWN0IGlzIHRoZW4gYXBwbGllZCB0byB0aGUgc29ja2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MTEuNDk1NjczNjg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDA4MDk2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX2JwZl9zdHJwYXJzZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za21zZy5oPTU1NT1zdGF0aWMgaW5saW5lIHNzaXplX3Qgc2tfbXNnX2ZpcnN0X2xlbihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNTc5LVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo1ODA6c3RhdGljIGlubGluZSBib29sIHNrYl9icGZfc3RycGFyc2VyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za21zZy5oLTU4MS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTY3Mj1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjk5LVxcdFxcdG9mZiA9IDA7XFxubmV0L2NvcmUvc2ttc2cuYzo3MDA6XFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcXG5uZXQvY29yZS9za21zZy5jLTcwMS1cXHRcXHRcXHRzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTk5Nz1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTAyNC1cXHRcXHRcXHRvZmYgPSAwO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTAyNTpcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbm5ldC9jb3JlL3NrbXNnLmMtMTAyNi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9MTU9dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjItXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIzOlxcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yNC1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjEzLjM5NjQ4OTAyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTk4NTczNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBTdHJpbmcgUGFyc2VyIGluIHNrbXNnLmgqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBgc2tiX2JwZl9zdHJwYXJzZXJgIGZ1bmN0aW9uLCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgcGFyc2luZyBvZiBzdHJpbmcgZGF0YSB3aXRoaW4gc2tfYnVmZnMsIGlzIGltcGxlbWVudGVkLiBUaGF0IHVzdWFsbHkgbWVhbnMgaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYGluY2x1ZGUvbGludXgvc2ttc2cuaGAgaGVhZGVyIGZpbGUuIEl0J3Mgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsaWtlbHkgdGhlIGRlY2xhcmF0aW9ucyBmb3IgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBzb2NrZXQgbWVzc2FnZSBoYW5kbGluZyBhbmQgQlBGIGludGVyYWN0aW9uIHNob3VsZCByZXNpZGUuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0IGV4aXN0cyB0aGVyZSBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBzdHJpbmcgZGF0YSBwcm9jZXNzaW5nLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjE2LjQ1NjM0ODAzNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrbXNnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdFxcdHJldHVybiBpbnE7XFxuIDU3MTpcXHR9XFxuIDU3MjpcXHRcXG4gNTczOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfU09DS19NU0cpXFxuIDU3NDpcXHRcXG4gNTc1OlxcdCNkZWZpbmUgQlBGX0ZfU1RSUEFSU0VSXFx0KDFVTCBcXHUwMDNjXFx1MDAzYyAxKVxcbiA1NzY6XFx0XFxuIDU3NzpcXHQvKiBXZSBvbmx5IGhhdmUgdHdvIGJpdHMgc28gZmFyLiAqL1xcbiA1Nzg6XFx0I2RlZmluZSBCUEZfRl9QVFJfTUFTSyB+KEJQRl9GX0lOR1JFU1MgfCBCUEZfRl9TVFJQQVJTRVIpXFxuIDU3OTpcXHRcXG4gNTgwOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfYnBmX3N0cnBhcnNlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA1ODE6XFx0e1xcbiA1ODI6XFx0XFx0dW5zaWduZWQgbG9uZyBza19yZWRpciA9IHNrYi1cXHUwMDNlX3NrX3JlZGlyO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRyZXR1cm4gc2tfcmVkaXIgXFx1MDAyNiBCUEZfRl9TVFJQQVJTRVI7XFxuIDU4NTpcXHR9XFxuIDU4NjpcXHRcXG4gNTg3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfYnBmX3NldF9zdHJwYXJzZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNTg4OlxcdHtcXG4gNTg5OlxcdFxcdHNrYi1cXHUwMDNlX3NrX3JlZGlyIHw9IEJQRl9GX1NUUlBBUlNFUjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MTYuNDU2NDE0OTY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTU5Mjc1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFNvY2tldCBNZXNzYWdlIENoYW5nZXMqKlxuXG5SaWdodCwgc28gYHNrYl9icGZfc3RycGFyc2VyYCBpcyBvbmx5IGdvaW5nIHRvIGJlIGF2YWlsYWJsZSBpZiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19ORVRfU09DS19NU0dgIOKAkyB0aGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIE5vdywgdGhlIHBhdGNoIGZvY3VzZXMgb24gbW9kaWZ5aW5nIGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYW5kIHRob3NlIGFyZSBib3RoIHNpdHRpbmcgaW4gYG5ldC9jb3JlL3NrbXNnLmNgLiBJdCBsb29rcyBsaWtlIHdlIHdpbGwgd2FudCB0byBkaXZlIGluIGRlZXAgb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGluIGBuZXQvY29yZS9za21zZy5jYC4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIEJQRiB2ZXJkaWN0IGltcGFjdHMgcGFja2V0IGhhbmRsaW5nIHdpdGhpbiB0aGUgc29ja2V0IG1lc3NhZ2UgZnJhbWV3b3JrLCBnaXZlbiB0aGUgY29udGV4dC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIG1vZGlmaWNhdGlvbiBpcyBnb2luZyB0byBhZmZlY3QgdGhlIHZlcmRpY3QgYXBwbGljYXRpb24gYmFzZWQgb24gdGhlIEJQRiBwcm9ncmFtJ3Mgb3V0cHV0LCBhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBzb2NrZXQtbGV2ZWwgcHJvY2Vzc2luZyBhbmQgdGhlIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUzNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MjAuNDUyMzQ0Njg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTk3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTk3OlxcdHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA5OTg6XFx0XFx0XFx0XFx0XFx0ICBpbnQgdmVyZGljdClcXG4gOTk5OlxcdHtcXG4xMDAwOlxcdFxcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcXG4xMDAxOlxcdFxcdGludCBlcnIgPSAwO1xcbjEwMDI6XFx0XFx0dTMyIGxlbiwgb2ZmO1xcbjEwMDM6XFx0XFxuMTAwNDpcXHRcXHRzd2l0Y2ggKHZlcmRpY3QpIHtcXG4xMDA1OlxcdFxcdGNhc2UgX19TS19QQVNTOlxcbjEwMDY6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4xMDA3OlxcdFxcdFxcdHNrX290aGVyID0gcHNvY2stXFx1MDAzZXNrO1xcbjEwMDg6XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxcbjEwMDk6XFx0XFx0XFx0ICAgICFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSlcXG4xMDEwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTAxMTpcXHRcXG4xMDEyOlxcdFxcdFxcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcXG4xMDEzOlxcdFxcbjEwMTQ6XFx0XFx0XFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxcbjEwMTU6XFx0XFx0XFx0ICogaW50byB0aGUgbXNnIHF1ZXVlLiBJZiBpdHMgbm90IGVtcHR5IHdlIGhhdmUgdG9cXG4xMDE2OlxcdFxcdFxcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcXG4xMDE3OlxcdFxcdFxcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcXG4xMDE4OlxcdFxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbjEwMTk6XFx0XFx0XFx0ICovXFxuMTAyMDpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuMTAyMTpcXHRcXHRcXHRcXHRib29sIGNoYXJnZV9za2IgPSB0cnVlO1xcbjEwMjI6XFx0XFxuMTAyMzpcXHRcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDI0OlxcdFxcdFxcdFxcdG9mZiA9IDA7XFxuMTAyNTpcXHRcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbjEwMjY6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHRcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG4xMDI5OlxcdFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuMTAzMDpcXHRcXHRcXHRcXHRcXHRjaGFyZ2Vfc2tiID0gZmFsc2U7XFxuMTAzMTpcXHRcXHRcXHRcXHR9XFxuMTAzMjpcXHRcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLFxcbjEwMzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UsIGNoYXJnZV9za2IpO1xcbjEwMzQ6XFx0XFx0XFx0fVxcbjEwMzU6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4xMDM2OlxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuMTAzNzpcXHRcXHRcXHRcXHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XFxuMTAzOTpcXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnBzb2NrLVxcdTAwM2V3b3JrLCAwKTtcXG4xMDQwOlxcdFxcdFxcdFxcdFxcdGVyciA9IDA7XFxuMTA0MTpcXHRcXHRcXHRcXHR9XFxuMTA0MjpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuMTA0MzpcXHRcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDQ0OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTA0NTpcXHRcXHRcXHR9XFxuMTA0NjpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MjAuNDUyNDM5OTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxOTA4NTA5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBkaXZlcyBpbnRvIHRoZSBjb3JlIG9mIEJQRiBzb2NrZXQgbWVzc2FnZSBoYW5kbGluZy4gSXQncyB0b3VjaGluZyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAg4oCTIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcml0aWNhbCB0byBob3cgd2UgcHJvY2VzcyBzb2NrZXQgbWVzc2FnZXMgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgZGVwZW5kZW5jeSBvbiBgQ09ORklHX05FVF9TT0NLX01TR2AsIHdoaWNoIGlzIG5vIHN1cnByaXNlIGdpdmVuIHRoZSBjb250ZXh0LiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgbGlrZWx5IG5lZWRlZCwgb3IgYXQgbGVhc3QgaGlnaGx5IGFkdmlzYWJsZSwgdG8gYWN0dWFsbHkgKnVzZSogQlBGLlxuXG5CdXQsIGdpdmVuIHRoZSB1c2Ugb2YgYHNrYl9icGZfc3RycGFyc2VyKHNrYilgIGluIHRoZSBjb2RlLCBJJ20gZ2V0dGluZyBhIGh1bmNoIHRoYXQgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgbWlnaHQgYmUgaW1wbGljYXRlZCBoZXJlIGFzIHdlbGwuIExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gSSdsbCBjaGVjayBgbmV0L0tjb25maWdgIGFuZCBgbmV0L2NvcmUvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgTkVUX1NPQ0tfTVNHYCBhbmQgcmVsYXRlZCBjb25maWdzIGFyZSBkZWZpbmVkIGFuZCB3aGF0IHRoZWlyIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBhc3Nlc3NpbmcgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHBhdGNoJ3MgaW1wYWN0IGFuZCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBmb3IgaXRzIHByb3BlciBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNjoyNS42NDMyOTMzMzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTg0ODAxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TT0NLX01TR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ3OC1cXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTQ4MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjI3LjcwMTc4MjA0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTAzMTI3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBORVRfU09DS19NU0dgIFNlbGVjdG9ycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBORVRfU09DS19NU0dgIGlzIGJlaW5nIHV0aWxpemVkLCBzcGVjaWZpY2FsbHksIHdoZXJlIGl0J3MgYmVpbmcgKnNlbGVjdGVkKi4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGluc3RhbmNlcyB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgbWVzc2FnZSB0eXBlIGlzIHRoZSB0YXJnZXQgb2YgYSBzZWxlY3Rpb24gb3BlcmF0aW9uLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGNvbnRleHRzIGluIHdoaWNoIHRoaXMgc2VsZWN0b3IgaXMgdXNlZCwgd2hpY2ggd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB0aGUgY29yZSBtZWNoYW5pc21zIHRoYXQgYXJlIG1ha2luZyB1c2Ugb2YgdGhpcy4gV2UnbGwgc3RhcnQgd2l0aCB0aGUgY29kZSBhbmQgdHJhY2UgYmFjayBhcyBtdWNoIGFzIHBvc3NpYmxlLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGVyZSBJIGNhbiBpZGVudGlmeSB3aGF0J3Mgc2VsZWN0aW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTkyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MzAuNjkyMDk4MjQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI1MjU3MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBORVRfU09DS19NU0dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTMzLVxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxua2VybmVsL2JwZi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbi0tXFxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbi0tXFxubmV0L0tjb25maWctMzY2LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L0tjb25maWc6MzY3OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy0zNjgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg1LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjQvS2NvbmZpZzozODY6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWctMzg3LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy05My1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY2L0tjb25maWc6OTQ6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWctOTUtXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbm5ldC90bHMvS2NvbmZpZzoxMTpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L3Rscy9LY29uZmlnLTEyLVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNjozMi40MTczNjUxMDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyNTU3ODc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBORVRfU09DS19NU0dgIEJQRiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgYE5FVF9TT0NLX01TR2AgY29kZXBhdGgganVtcHMgb3V0LiBJIHNlZSB0aGF0IGBCUEZfU1lTQ0FMTGAgc2VsZWN0cyBpdCB3aGVuIHRoZSBgTkVUYCBvcHRpb24gaXMgZW5hYmxlZCwgYW5kIGFsc28gdGhhdCBpdCdzIGxldmVyYWdlZCBieSBgQlBGX1NUUkVBTV9QQVJTRVJgLCBgSU5FVF9FU1BJTlRDUGAsIGBJTkVUNl9FU1BJTlRDUGAsIGFuZCBgVExTYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBjZW50cmFsIHRvIGhvdyBhIGxvdCBvZiBuZXR3b3JrIHRyYWZmaWMgaXMgYmVpbmcgaGFuZGxlZCBieSBCUEYsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgaG9uaW5nIGluIG9uIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBhcyB3ZWxsIGFzIGBza19wc29ja19za2JfaW5ncmVzc2AuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvYmFibHkgdGhlIGNvcmUgb2YgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCB2ZXJkaWN0IGFwcGxpY2F0aW9uIGxvZ2ljIHJlbGF0ZWQgdG8gXCJwZXItc29ja2V0IEJQRlwiLCBvciBwc29jay4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyB0cnVlLi4uXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYXJlIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIHN0YXRpYz8gWWVzLCB0aGV5IGFsbCBhcmUsIHNvIHRoZXkncmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0LiBUaGF0IG1ha2VzIGl0IGVhc2llciwgYnV0IG5vdyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZW0uIFRoaXMgd2lsbCBwcm9iYWJseSBsZWFkIG1lIHRvIHRoZSBrZXkgZW50cnlwb2ludHMgb2YgdGhlIEJQRiBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzg2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjM3Ljk0Mjk0NTg1MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NzE3MTMwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X2FwcGx5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9OTU5PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTk2LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTk3OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtOTk4LVxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEwODA9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExMDMtXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTEwNDpcXHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMTA1LW91dDpcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIwMz1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMjYtXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIyNzpcXHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjI4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNjozOS41OTAxMjQxMDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwMTIyNTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFBhY2tldCBTb2NrZXQgVmVyZGljdCBBcHBsaWNhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZXNlIHBhY2tldCBzb2NrZXQgdmVyZGljdHMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNydWNpYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgdGhlIGNvcmUgZnVuY3Rpb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBJdCdzIGNsZWFyIHRoYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYHNrX3Bzb2NrX3N0cnBfcmVhZGAgYW5kIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhcmUgdGhlIGNvbmR1aXRzIHRoYXQgZXZlbnR1YWxseSBwYXNzIHRoZSB2ZXJkaWN0cyBhbG9uZyB0byBiZSBhcHBsaWVkIGJ5IHRoZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZnVuY3Rpb24uIFRoaXMgc3VnZ2VzdHMgYSBjbGFzc2ljIHByb2R1Y2VyLWNvbnN1bWVyIHBhdHRlcm4sIHdoZXJlIHRoZSByZWFkIGFuZCByZWNlaXZlIGZ1bmN0aW9ucyBhY3QgYXMgdGhlIHByb2R1Y2VycywgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyB0aGUgY29uc3VtZXIgb2YgdGhlIHZlcmRpY3QgZGF0YS4gVGhlIGtleSBoZXJlIGlzIHRvIHNlZSBob3cgdGhlIGRhdGEgZmxvd3MgZnJvbSB0aGUgcmVhZCBhbmQgcmVjZWl2ZSBwYXRoIHRvIHRoZSBhcHBseSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBib3VuZGFyeSBvZiBlYWNoIG9mIHRoZXNlIHRocmVlIGZ1bmN0aW9ucywgaG93IHRoZSBkYXRhIGFuZCBtZXRhZGF0YSBhcmUgYmVpbmcgcGFzc2VkLCBhbmQgd2hhdCBkZWNpc2lvbnMgYXJlIGJlaW5nIG1hZGUuXG5cblRoaXMgZmxvdyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIHdpdGggYSBob2xpc3RpYyB2aWV3LiBJIHNob3VsZCBub3cgY2hlY2sgdGhlIGBza19wc29ja19za2JfaW5ncmVzc2AgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgaW5ncmVzcyBwYXRoLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBvdXIgb3RoZXIgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzAyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6NDQuMTkxMzUxODkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk3MDkyNTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NTMzPXN0YXRpYyBzdHJ1Y3Qgc2tfbXNnICpza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01NDQtXFxubmV0L2NvcmUvc2ttc2cuYzo1NDU6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy01NDYtXFx0XFx0XFx0XFx0XFx0dTMyIG9mZiwgdTMyIGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTg3LVxcbm5ldC9jb3JlL3NrbXNnLmM6NTg4OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTg5LVxcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTkxLVxcbm5ldC9jb3JlL3NrbXNnLmM6NTkyOnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za21zZy5jLTU5My1cXHRcXHRcXHRcXHR1MzIgb2ZmLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01OTktXFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNlc2sgPT0gc2spKVxcbm5ldC9jb3JlL3NrbXNnLmM6NjAwOlxcdFxcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlLFxcbm5ldC9jb3JlL3NrbXNnLmMtNjAxLVxcdFxcdFxcdFxcdFxcdFxcdCB0cnVlKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjEyLVxcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcXG5uZXQvY29yZS9za21zZy5jOjYxMzpcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0cnVlKTtcXG5uZXQvY29yZS9za21zZy5jLTYxNC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjIzLSAqL1xcbm5ldC9jb3JlL3NrbXNnLmM6NjI0OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtNjI1LVxcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjQxLVxcdG1zZy1cXHUwMDNlc2sgPSBzaztcXG5uZXQvY29yZS9za21zZy5jOjY0MjpcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0YWtlX3JlZik7XFxubmV0L2NvcmUvc2ttc2cuYy02NDMtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTY0OD1zdGF0aWMgaW50IHNrX3Bzb2NrX2hhbmRsZV9za2Ioc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjU2LVxcbm5ldC9jb3JlL3NrbXNnLmM6NjU3OlxcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbik7XFxubmV0L2NvcmUvc2ttc2cuYy02NTgtfVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05OTc9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwMTYtXFx0XFx0ICogcXVldWUgd29yayBvdGhlcndpc2Ugd2UgbWF5IGdldCBPT08gZGF0YS4gT3RoZXJ3aXNlLFxcbm5ldC9jb3JlL3NrbXNnLmM6MTAxNzpcXHRcXHQgKiBpZiBza19wc29ja19za2JfaW5ncmVzcyBlcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5XFxubmV0L2NvcmUvc2ttc2cuYy0xMDE4LVxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDMxLVxcdFxcdFxcdH1cXG5uZXQvY29yZS9za21zZy5jOjEwMzI6XFx0XFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcXG5uZXQvY29yZS9za21zZy5jLTEwMzMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UsIGNoYXJnZV9za2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNjo0NS44ODg0NTMzNTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY2MDU0NTgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGVCUEYgUGFja2V0IFNvY2tldCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBza19wc29ja19oYW5kbGVfc2tiYC4gTXkgbWVudGFsIG1vZGVsIHRlbGxzIG1lIHRoYXQgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGtleSByb2xlIGluIGhhbmRsaW5nIFNLQnMgKFNvY2tldCBCdWZmZXIpIHdpdGhpbiB0aGUgcGFja2V0IHNvY2tldCBjb250ZXh0LiBUaGUga2V5IHBvaW50IGlzOiB0aGlzIGZ1bmN0aW9uIGNhbGxzIGBza19wc29ja19za2JfaW5ncmVzc2AuIE5hdHVyYWxseSwgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhY2tldCBmbG93IGFuZCBlQlBGIGludGVncmF0aW9uLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGNhbGwgc2l0ZXMgb2YgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLiBVbmRlcnN0YW5kaW5nICpob3cqIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIGhvdyBlQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggcGFja2V0IHNvY2tldHMuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzLCBhbmQgdGhlbiBJJ2xsIGJlIGFibGUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGl0c2VsZiBhbmQgd2hhdCBpdCBkb2VzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA1OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjUxLjU0OTAwMTYwNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczOTM1MjA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19oYW5kbGVfc2tiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NjI0PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02NDctXFxubmV0L2NvcmUvc2ttc2cuYzo2NDg6c3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy02NDktXFx0XFx0XFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NjcyPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy03MTctXFx0XFx0XFx0aWYgKCFzb2NrX2ZsYWcocHNvY2stXFx1MDAzZXNrLCBTT0NLX0RFQUQpKVxcbm5ldC9jb3JlL3NrbXNnLmM6NzE4OlxcdFxcdFxcdFxcdHJldCA9IHNrX3Bzb2NrX2hhbmRsZV9za2IocHNvY2ssIHNrYiwgb2ZmLFxcbm5ldC9jb3JlL3NrbXNnLmMtNzE5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbGVuLCBpbmdyZXNzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6NTMuMjg4MzYwNTgzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzMwMjUyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhY2tldCBTb2NrZXQgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIHBhY2tldCBzb2NrZXQgaW1wbGVtZW50YXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIGBza19wc29ja19iYWNrbG9nYCBpcyB0aGUgY29yZSBvZiBob3cgdGhpbmdzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgY2FsbGluZyBgc2tfcHNvY2tfaGFuZGxlX3NrYmAuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgdGhyZWUga2V5IGZ1bmN0aW9uczogYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgYHNrX3Bzb2NrX2JhY2tsb2dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBmbG93cyB0aHJvdWdoIHRoZXNlLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3Q6IGxldCdzIHNlZSBob3cgdmlzaWJsZSB0aGVzZSBmdW5jdGlvbnMgYXJlLiBUaGUgZmFjdCB0aGF0IHRoZXkncmUgZGVjbGFyZWQgYXMgc3RhdGljIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhleSdyZSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBtZWFucyB0aGV5J3JlIHVzZWQgb25seSB3aXRoaW4gdGhlIHBhY2tldCBzb2NrZXQgY29kZS4gVGhpcyBpbiB0dXJuLCBtZWFucyBJJ20gZ29pbmcgdG8gaGF2ZSB0byBmaW5kIGhvdyB0aGV5J3JlICppbnZva2VkKiB2aWEgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gbm93IGZpbmQgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb25zLCBvciBhbnkgY2FsbGJhY2tzIHRoYXQgKmRvKiBleGlzdCwgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU4MCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjU3LjM2MTM4ODQ1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ4MTAwNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3N0cnBfcmVhZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEwNjI9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDc5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jOjEwODA6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2ttc2cuYy0xMDgxLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTEwOC1cXG5uZXQvY29yZS9za21zZy5jOjExMDk6c3RhdGljIGludCBza19wc29ja19zdHJwX3JlYWRfZG9uZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTExMC17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTExNDg9aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNTItXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdHJwX2NhbGxiYWNrcyBjYiA9IHtcXG5uZXQvY29yZS9za21zZy5jOjExNTM6XFx0XFx0LnJjdl9tc2dcXHQ9IHNrX3Bzb2NrX3N0cnBfcmVhZCxcXG5uZXQvY29yZS9za21zZy5jOjExNTQ6XFx0XFx0LnJlYWRfc29ja19kb25lXFx0PSBza19wc29ja19zdHJwX3JlYWRfZG9uZSxcXG5uZXQvY29yZS9za21zZy5jLTExNTUtXFx0XFx0LnBhcnNlX21zZ1xcdD0gc2tfcHNvY2tfc3RycF9wYXJzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6NTkuMTA5NDk1MDU5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDI0MTM5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06XG5cbioqRGVsdmluZyBpbnRvIHRoZSBgc2tfcHNvY2tgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgc2tfcHNvY2tfc3RycF9yZWFkYCBpcyBiZWluZyB1c2VkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aGluIGBza19wc29ja19pbml0X3N0cnBgLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgaG9vay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgZG9lcyB0aGlzIHJlYWQgZnVuY3Rpb24gYWN0dWFsbHkgKmdldCogdXNlZCBhbmQgd2hhdCdzIHRoZSBwdXJwb3NlP1wiIFRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cuIGBza19wc29ja19pbml0X3N0cnBgIHNldHMgaXQgdXAsIGJ1dCBpdCdzIHRoZSAqdXNhZ2UqIHRoYXQgbWF0dGVycy4gV2hlcmUgYW5kIGhvdyBpcyB0aGUgcmVhZCBwZXJmb3JtZWQ/XG5cblNpbmNlIGl0J3MgYSBgc2tfcHNvY2tgIGZ1bmN0aW9uLCBJ4oCZbSBndWVzc2luZyBpdCBoYXMgdG8gZGVhbCB3aXRoIHBhY2tldCBzb2NrZXQgdmVyZGljdHMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZWFkIG9wZXJhdGlvbiB3b3JrcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIGhvdyBhbmQgd2hlcmUgaXQgbWlnaHQgaGFuZGxlIHZlcmRpY3RzLiBTbywgbGV04oCZcyBnbyBkaXJlY3RseSB0byBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCBhbmQgc2VlIGhvdyBpdCBpcyB3b3JraW5nLCBub3cuIEhvcGVmdWxseSwgSSdsbCBmaW5kIGFuIGFuc3dlciB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNzowNS42NTE5MTIwMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzE5NTcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X3JlY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz0xMTk4PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjAyLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIwMzpzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2ttc2cuYy0xMjA0LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIzNT1zdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjUxLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTI1MjpcXHRjb3BpZWQgPSBvcHMtXFx1MDAzZXJlYWRfc2tiKHNrLCBza19wc29ja192ZXJkaWN0X3JlY3YpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTI1My1cXHRpZiAoY29waWVkIFxcdTAwM2U9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6Mzc6MDcuMzI1MTEzMDIxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTQxMjQzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgU29ja2V0IFZlcmRpY3QgUGF0aCoqXG5cbkFscmlnaHQsIEknbSB0cmFjaW5nIHRocm91Z2ggdGhpcyBwYWNrZXQgc29ja2V0IGNvZGUsIGFuZCBJIHNlZSB0aGF0IGBza19wc29ja192ZXJkaWN0X3JlY3ZgIGlzIGJlaW5nIHBhc3NlZCBpbnRvIGBvcHMtXHUwMDNlcmVhZF9za2JgIHdpdGhpbiB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAgZnVuY3Rpb24uIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIGRpcmVjdCBsaW5rIGJldHdlZW4gcmVjZWl2aW5nIGRhdGEgYW5kIG1ha2luZyBhIHZlcmRpY3Qgb24gaXQsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgcGFja2V0IHNvY2tldCdzIHJvbGUuXG5cbk5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgc2tfcHNvY2tfYmFja2xvZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYmFja2xvZyBpcyBpbnZvbHZlZCBoZXJlLiBJcyB0aGlzIHdoZXJlIHRoZSB2ZXJkaWN0IGluZm9ybWF0aW9uIGlzIHF1ZXVlZCBvciBwcm9jZXNzZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgb3BzLVx1MDAzZXJlYWRfc2tiYD8gSXMgdGhpcyBmdW5jdGlvbiBkZWFsaW5nIHdpdGggdGhlIHZlcmRpY3QgZGF0YSB0aGF0IGlzIGluIHRoZSBiYWNrbG9nPyBQZXJoYXBzIHRoZSBiYWNrbG9nIGlzIHdoZXJlIHBhY2tldHMgYXJlIGJ1ZmZlcmVkLCBhbmQgbm93IHdlJ3JlIHB1bGxpbmcgdGhlbSBvZmYsIGp1ZGdpbmcgdGhlbSwgYW5kIHRoZW4gZmVlZGluZyB0aGVtIGludG8gdGhlIHJlYWQgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gdG8gZnVsbHkgZ3Jhc3AgdGhlIHdvcmtmbG93LiBLbm93aW5nIGhvdyB0aGUgYmFja2xvZyBmdW5jdGlvbnMgaW4gdGhlIGNvbnRleHQgb2YgdmVyZGljdHMgaXMgY3J1Y2lhbCwgb3RoZXJ3aXNlLCBJIGRvbid0IHJlYWxseSBrbm93IGhvdyB0aGUgdmVyZGljdCBmdW5jdGlvbnMgaW4gYSBwYWNrZXQgc29ja2V0LiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBsb29raW5nIGF0IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgYW5kIHRoZW4gdGhlIGZ1bmN0aW9uIGNhbGxzIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSB2ZXJkaWN0IGRlY2lzaW9ucyBhcmUgbWFkZSwgc28gSSBjYW4gc3RhcnQgdHJhY2luZyBiYWNrd2FyZCBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgyMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM3OjEyLjExOTI0MDIyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MTIwNTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19iYWNrbG9nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NjYwPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3NrYl9zdGF0ZShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02NzEtXFxubmV0L2NvcmUvc2ttc2cuYzo2NzI6c3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L2NvcmUvc2ttc2cuYy02NzMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz03NTE9c3RydWN0IHNrX3Bzb2NrICpza19wc29ja19pbml0KHN0cnVjdCBzb2NrICpzaywgaW50IG5vZGUpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTc4NS1cXG5uZXQvY29yZS9za21zZy5jOjc4NjpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmssIHNrX3Bzb2NrX2JhY2tsb2cpO1xcbm5ldC9jb3JlL3NrbXNnLmMtNzg3LVxcdG11dGV4X2luaXQoXFx1MDAyNnBzb2NrLVxcdTAwM2V3b3JrX211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6Mzc6MTMuODAwNDUxNjk0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDg0MjEzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhY2tldCBTb2NrZXQgV29ya3F1ZXVlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc2tfcHNvY2tfYmFja2xvZ2AgdGhpbmcuIFJpZ2h0LCBpdCdzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLiBUaGF0IHRlbGxzIG1lIHRoZSBjb3JlIGludGVyYWN0aW9uIHBvaW50cyBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgZnVuY3Rpb25zIEkganVzdCBoaWdobGlnaHRlZDogYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBgc2tfcHNvY2tfYmFja2xvZ2AgaXRzZWxmLCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIGJpdC4gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFyZSBzdGF0aWMuIFRoYXQncyBpbW1lZGlhdGVseSByZWxldmFudCBiZWNhdXNlIFN5emthbGxlciBtaWdodCBub3QgYmUgYWJsZSB0byBkaXJlY3RseSBjYWxsIHRoZW0uIEhvd2V2ZXIsIGlmIHRoZXkncmUgdGhlIG9uZXMgYmVpbmcgbW9kaWZpZWQsIHRoZXkncmUgZGVmaW5pdGVseSB0YXJnZXRzIEkgbmVlZCB0byB3YXRjaC4gSSdsbCBtYWtlIHN1cmUgdGhleSdyZSBsaXN0ZWQgaW4gYEZvY3VzU3ltYm9sc2AuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19ORVRfU09DS19NU0dgIGlzIHRoZSBiaWcgb25lLCB0aGF0J3MgZXhwZWN0ZWQuIEFuZCwgYXMgc3VzcGVjdGVkLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIG11c3QuIFRoZW4sIHRoZXJlJ3MgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAuIEkgbmVlZCB0aGF0IGJlY2F1c2UgaXQgZW5hYmxlcyBgc2tiX2JwZl9zdHJwYXJzZXJgLiBJJ2xsIHF1aWNrbHkgY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGV0YWlscyBhcm91bmQgYEJQRl9TVFJFQU1fUEFSU0VSYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHZpZXcgb2YgdGhlIGRlcGVuZGVuY3kgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6Mzc6MTkuNDA4ODc2MTg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI4NzY0NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxcbi0tXFxubmV0L0tjb25maWctMzYwLVxcbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZy0zNjItXFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNzoyMS4yMzc2NDg1NDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMTczNjM1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhhdCBgQlBGX1NUUkVBTV9QQVJTRVJgIGlzIGVuYWJsZWQgaW4gYG5ldC9LY29uZmlnYC4gRXhjZWxsZW50LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgTkVUX1NPQ0tfTVNHYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhbG9uZSBjb3ZlciB0aGUgY2hhbmdlcy4gWWVwLCBsb29rcyBnb29kOyB0aGV5IGVuY29tcGFzcyB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBTaW5jZSB0aGlzIHBhdGNoIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMsIGl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCBkZXNlcnZlcyBhIGZ1enppbmcgY2FtcGFpZ24uXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBzZWUgdGhlc2UgZnVuY3Rpb25zIHJpZ2h0IGF3YXk6IGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLCBgc2tfcHNvY2tfc3RycF9yZWFkYCwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAsIGFuZCBgc2tfcHNvY2tfYmFja2xvZ2AuIFdhaXQsIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgaW4gdGhlIGRpZmY/IEFoLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZWAgaXMgbmVhcmJ5LCBhbHRob3VnaCBub3QgbW9kaWZpZWQuIEknbGwgc3RpY2sgdG8gdGhlIGRpcmVjdGx5IG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlaXIgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgbWVhbnMgZm9jdXNpbmcgb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLlxuXG5MZXQgbWUgdmVyaWZ5IGEgcXVpY2sgZGV0YWlsOiBBcmUgdGhlc2Ugc3RhdGljPyBZZXMsIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhcmUgYWxsIHN0YXRpYy4gR29vZC4gSSdsbCBpbmNsdWRlIHRoZXNlIGFzIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuTm93IGZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBgTkVUX1NPQ0tfTVNHYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBCUEZfU1lTQ0FMTGAgd2lsbCBkbyB0aGUgdHJpY2suXG5cbkp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc2lnbmlmaWNhbnQuIFRoZSBwYXRjaCBtb2RpZmllcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgdG8gdGFrZSBhIGBib29sIGNoYXJnZV9za2JgLiBJZiB0aGlzIGlzIHRydWUsIGl0IGNhbGxzIGBza2Jfc2V0X293bmVyX3Ioc2tiLCBzaylgLiBBaCwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY291bnRpbmcgZm9yIFNLQnMgaW4gcHNvY2sgaW5ncmVzcyEgQWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEyNSwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6Mzc6MzEuNDU1MDE0NzA2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwODY2MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TT0NLX01TR1wiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tfcHNvY2tfdmVyZGljdF9hcHBseVwiLFxuICAgIFwic2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZlwiLFxuICAgIFwic2tfcHNvY2tfc2tiX2luZ3Jlc3NcIixcbiAgICBcInNrX3Bzb2NrX3N0cnBfcmVhZFwiLFxuICAgIFwic2tfcHNvY2tfdmVyZGljdF9yZWN2XCIsXG4gICAgXCJza19wc29ja19iYWNrbG9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhY2NvdW50aW5nIGxvZ2ljIGZvciBza2JzIGluIHRoZSBCUEYgcHNvY2sgaW5ncmVzcyBwYXRoLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBjaGFyZ2Vfc2tiYCBwYXJhbWV0ZXIgdG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCBgc2tiX3NldF9vd25lcl9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZy9CUEYgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TT0NLX01TR1wiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tfcHNvY2tfdmVyZGljdF9hcHBseVwiLFxuICAgIFwic2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZlwiLFxuICAgIFwic2tfcHNvY2tfc2tiX2luZ3Jlc3NcIixcbiAgICBcInNrX3Bzb2NrX3N0cnBfcmVhZFwiLFxuICAgIFwic2tfcHNvY2tfdmVyZGljdF9yZWN2XCIsXG4gICAgXCJza19wc29ja19iYWNrbG9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhY2NvdW50aW5nIGxvZ2ljIGZvciBza2JzIGluIHRoZSBCUEYgcHNvY2sgaW5ncmVzcyBwYXRoLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBjaGFyZ2Vfc2tiYCBwYXJhbWV0ZXIgdG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCBgc2tiX3NldF9vd25lcl9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZy9CUEYgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhjdr7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 10:54:30 +0000 UTC FinishedAt: 2026-07-24 11:37:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SOCK_MSG", "BPF_STREAM_PARSER", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SOCK_MSG", "BPF_STREAM_PARSER", "BPF_SYSCALL" ], "series_id": "aeefb1be-60f3-485d-a98a-698baee92375" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sk_psock_verdict_apply", "sk_psock_skb_ingress_self", "sk_psock_skb_ingress", "sk_psock_strp_read", "sk_psock_verdict_recv", "sk_psock_backlog" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZiYjMzQ7LAogICAgJiMzNDtza19wc29ja19za2JfaW5ncmVzcyYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdHJwX3JlYWQmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9yZWN2JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX2JhY2tsb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhY2NvdW50aW5nIGxvZ2ljIGZvciBza2JzIGluIHRoZSBCUEYgcHNvY2sgaW5ncmVzcyBwYXRoLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBjaGFyZ2Vfc2tiYCBwYXJhbWV0ZXIgdG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCBgc2tiX3NldF9vd25lcl9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZy9CUEYgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjMzYjY5NGRmODcwMDY0NzQwNzJiMDdlNjA2MWMzZWFjMTRkNTFjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDExOjM1OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkNC4uMTcyNjA2ODE0NzlhM2YgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za21zZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za21zZy5jXG5AQCAtNTg2LDcgJiM0Mzs1ODYsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xuJiM0MztcdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbiYjNDM7XHRcdFx0XHQgICAgIGJvb2wgY2hhcmdlX3NrYik7XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0dTMyIG9mZiwgdTMyIGxlbilcbkBAIC01OTUsMTIgJiM0Mzs1OTYsOSBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi1cdTAwM2VzayBpcyBhbHJlYWR5IGFzc2lnbmVkLFxuLVx0ICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXRcbi1cdCAqIGNvcnJlY3RseS5cbi1cdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG4tXHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlKTtcbiYjNDM7XHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlLFxuJiM0MztcdFx0XHRcdFx0XHQgdHJ1ZSk7XG4gXHRtc2cgPSBza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc2ssIHNrYik7XG4gXHRpZiAoIW1zZylcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG5AQCAtNjE4LDEyICYjNDM7NjE2LDE0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGVcbi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfclxuLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS5cbiYjNDM7LyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgZm9yIHBzb2NrLVx1MDAzZXNrLlxuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIGNoYXJnZV9za2IgaXMgZmFsc2UsIHRoZSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgcGF0aCBrZWVwcyB0aGUgVENQXG4mIzQzOyAqIHJlY2VpdmUgcXVldWUgYWNjb3VudGluZyBpbiBwbGFjZSBhbmQgbXVzdCBub3QgY2FsbCBza2Jfc2V0X293bmVyX3IoKS5cbiAgKi9cbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZilcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4mIzQzO1x0XHRcdFx0ICAgICBib29sIGNoYXJnZV9za2IpXG4ge1xuIFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXHUwMDNlc2s7XG5AQCAtNjMxLDcgJiM0Mzs2MzEsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYlxuIFxuIFx0aWYgKHVubGlrZWx5KCFtc2cpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbi1cdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbiYjNDM7XHRpZiAoY2hhcmdlX3NrYilcbiYjNDM7XHRcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0JiMzOTtzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0b1xuQEAgLTEwMTcsNiAmIzQzOzEwMTgsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkge1xuJiM0MztcdFx0XHRib29sIGNoYXJnZV9za2IgPSB0cnVlO1xuJiM0MztcbiBcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdG9mZiA9IDA7XG4gXHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbkBAIC0xMDI0LDggJiM0MzsxMDI3LDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0XHRcdFx0b2ZmID0gc3RtLVx1MDAzZW9mZnNldDtcbiBcdFx0XHRcdGxlbiA9IHN0bS1cdTAwM2VmdWxsX2xlbjtcbiYjNDM7XHRcdFx0XHRjaGFyZ2Vfc2tiID0gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbiYjNDM7XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcbiYjNDM7XHRcdFx0XHRcdFx0XHRmYWxzZSwgY2hhcmdlX3NrYik7XG4gXHRcdH1cbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU09DS19NU0cmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19wc29ja192ZXJkaWN0X2FwcGx5JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc2tiX2luZ3Jlc3MmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICAgJiMzNDtza19wc29ja19iYWNrbG9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWNjb3VudGluZyBsb2dpYyBmb3Igc2ticyBpbiB0aGUgQlBGIHBzb2NrIGluZ3Jlc3MgcGF0aC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgY2hhcmdlX3NrYmAgcGFyYW1ldGVyIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCB0byBjb25kaXRpb25hbGx5IGNhbGwgYHNrYl9zZXRfb3duZXJfcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjMzYjY5NGRmODcwMDY0NzQwNzJiMDdlNjA2MWMzZWFjMTRkNTFjOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDI0IDExOjM1OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2ttc2cuYyBiL25ldC9jb3JlL3NrbXNnLmMKaW5kZXggMjUyMWI2NDNmYTA1ZDQuLjE3MjYwNjgxNDc5YTNmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za21zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmMKQEAgLTU4Niw3ICYjNDM7NTg2LDggQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsCiB9CiAKIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7CiYjNDM7CQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZiwKJiM0MzsJCQkJICAgICBib29sIGNoYXJnZV9za2IpOwogCiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJdTMyIG9mZiwgdTMyIGxlbikKQEAgLTU5NSwxMiAmIzQzOzU5Niw5IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3Qgc2tfbXNnICptc2c7CiAJaW50IGVycjsKIAotCS8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItJmd0O3NrIGlzIGFscmVhZHkgYXNzaWduZWQsCi0JICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXQKLQkgKiBjb3JyZWN0bHkuCi0JICovCiAJaWYgKHVubGlrZWx5KHNrYi0mZ3Q7c2sgPT0gc2spKQotCQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSk7CiYjNDM7CQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSwKJiM0MzsJCQkJCQkgdHJ1ZSk7CiAJbXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpOwogCWlmICghbXNnKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTYxOCwxMiAmIzQzOzYxNiwxNCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIGVycjsKIH0KIAotLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZQotICogc2tiLiBJbiB0aGlzIGNhc2Ugd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgbWVtb3J5IGxpbWl0cyBvciBza2Jfc2V0X293bmVyX3IKLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS4KJiM0MzsvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stJmd0O3NrLgomIzQzOyAqCiYjNDM7ICogV2hlbiBjaGFyZ2Vfc2tiIGlzIGZhbHNlLCB0aGUgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIHBhdGgga2VlcHMgdGhlIFRDUAomIzQzOyAqIHJlY2VpdmUgcXVldWUgYWNjb3VudGluZyBpbiBwbGFjZSBhbmQgbXVzdCBub3QgY2FsbCBza2Jfc2V0X293bmVyX3IoKS4KICAqLwogc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKQomIzQzOwkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsCiYjNDM7CQkJCSAgICAgYm9vbCBjaGFyZ2Vfc2tiKQogewogCXN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay0mZ3Q7c2s7CkBAIC02MzEsNyAmIzQzOzYzMSw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiCiAKIAlpZiAodW5saWtlbHkoIW1zZykpCiAJCXJldHVybiAtRUFHQUlOOwotCXNrYl9zZXRfb3duZXJfcihza2IsIHNrKTsKJiM0MzsJaWYgKGNoYXJnZV9za2IpCiYjNDM7CQlza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7CiAKIAkvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZQogCSAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQmIzM5O3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvCkBAIC0xMDE3LDYgJiM0MzsxMDE4LDggQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLgogCQkgKi8KIAkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmYW1wO3Bzb2NrLSZndDtpbmdyZXNzX3NrYikpIHsKJiM0MzsJCQlib29sIGNoYXJnZV9za2IgPSB0cnVlOwomIzQzOwogCQkJbGVuID0gc2tiLSZndDtsZW47CiAJCQlvZmYgPSAwOwogCQkJaWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHsKQEAgLTEwMjQsOCAmIzQzOzEwMjcsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAKIAkJCQlvZmYgPSBzdG0tJmd0O29mZnNldDsKIAkJCQlsZW4gPSBzdG0tJmd0O2Z1bGxfbGVuOwomIzQzOwkJCQljaGFyZ2Vfc2tiID0gZmFsc2U7CiAJCQl9Ci0JCQllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7CiYjNDM7CQkJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwKJiM0MzsJCQkJCQkJZmFsc2UsIGNoYXJnZV9za2IpOwogCQl9CiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlzcGluX2xvY2tfYmgoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRoaXMgTmV0d29ya2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHR3ZWFraW5nIGBuZXQvY29yZS9za21zZy5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIHdoaWNoIG5vdyB0YWtlcyBhbiBleHRyYSBib29sZWFuIGFyZ3VtZW50LCBgY2hhcmdlX3NrYmAuIEEgcXVpY2sgZ2xhbmNlIHNob3dzIGlmIGBjaGFyZ2Vfc2tiYCBpcyB0cnVlLCB0aGVuIGBza2Jfc2V0X293bmVyX3Ioc2tiLCBzaylgIGdldHMgY2FsbGVkLiBJIHNlZSB0aGF0IGBza19wc29ja19za2JfaW5ncmVzc2AganVzdCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdpdGggYGNoYXJnZV9za2IgPSB0cnVlYC4gSG93ZXZlciwgd2hlbiB3ZSBnZXQgdG8gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCB0aGluZ3MgZ2V0IGEgbGl0dGxlIG1vcmUgaW50ZXJlc3RpbmcuIFRoYXQgY29kZSBzZWVtcyB0byBjb25kaXRpb24gYGNoYXJnZV9za2JgLiBJZiBgc2tiX2JwZl9zdHJwYXJzZXIoc2tiKWAgcmV0dXJucyB0cnVlLCBgY2hhcmdlX3NrYmAgaXMgZmFsc2UsIG90aGVyd2lzZSBgY2hhcmdlX3NrYmAgaXMgdHJ1ZSBiZWZvcmUgcGFzc2luZyBpdCBpbnRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYC4KClRoaXMgaXMgYSBwcmV0dHkgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGxvZ2ljIGludm9sdmluZyBgc2ttc2dgIGFuZCBgcHNvY2tgLiBHaXZlbiBob3cgbG93LWxldmVsIHRoaXMgaXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBwYWNrZXQgb3duZXJzaGlwLCBJIGltbWVkaWF0ZWx5IHRoaW5rIHRoYXQgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGZ1enogdGhpcyBhcmVhLiBUaGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncywgZXNwZWNpYWxseSBhcm91bmQgcmVzb3VyY2UgYWNjb3VudGluZyBvciBvd25lcnNoaXAgY29uZmxpY3RzLCBpcyBoaWdoLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIG9mIGBuZXQvY29yZS9za21zZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGNvZGUgcGF0aC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBmaW5kIHdoZXJlIGBza21zZy5vYCBpcyBidWlsdCBpbiB0aGUgTWFrZWZpbGUgd2l0aGluIGBuZXQvY29yZWAgYW5kIGhvcGVmdWxseSBmaW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBzZXR0aW5nLiBJdCBzZWVtcyBpbXBvcnRhbnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoZSBjb25uZWN0aW9uIHRvIGBzb2NrX21hcC5vYCBtYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBvZiBgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgaXQmIzM5O3Mgb2Z0ZW4gZW50YW5nbGVkIHdpdGggQlBGIGZ1bmN0aW9uYWxpdGllcywgYW5kIHRob3NlIGFyZSByZWxldmFudCB0byBzb2NrZXQgbWVzc2FnaW5nLiBJIHdhbnQgYSBjb21wbGV0ZSBwaWN0dXJlLiBOb3csIHRvIGRpZyBkZWVwZXIsIEkgdGhpbmsgdGhlIGJlc3QgYXBwcm9hY2ggd291bGQgYmUgdG8gZXhhbWluZSB0aGUgY29kZSBpbiBgbmV0L2NvcmUvc2ttc2cuY2AuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGZpbGUgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGVzZSBjb25maWdzIGludGVycmVsYXRlIGFuZCByZXZlYWwgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIHNldHRpbmdzIHRoYXQgSSYjMzk7bSBvdmVybG9va2luZy4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBlbnRpcmUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz01NDU9c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy01NzMtXG5uZXQvY29yZS9za21zZy5jOjU3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jLTU3NS1cdHBzb2NrLVx1MDAzZWluZ3Jlc3NfYnl0ZXMgJiM0Mzs9IGxlbjtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEwNjI9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA3OC1cbm5ldC9jb3JlL3NrbXNnLmM6MTA3OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jLTEwODAtc3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMTk4PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTIwMC19XG5uZXQvY29yZS9za21zZy5jOjEyMDE6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xubmV0L2NvcmUvc2ttc2cuYy0xMjAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTdHJlYW0gUGFyc2VyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmV0L2NvcmUvc2ttc2cuY2AgYW5kIHNwZWNpZmljYWxseSB0aGlzIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBjbGVhcmx5IHRpZWQgdG8gdGhlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGtleSBoZXJlLiBUaGUgY29kZSBjYWxscyBgc2tiX2JwZl9zdHJwYXJzZXIoc2tiKWAsIGFuZCB0aGF0JiMzOTtzIHRoZSBiaXQgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kLiBXaGVyZSBpcyAqdGhhdCogZGVmaW5lZD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYmFjayBhbmQgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgaXQgZG9lcyBleGFjdGx5LiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBjaGVjayByZWxhdGVkIHRvIHRoZSBCUEYgc3RyZWFtIHBhcnNlciBmdW5jdGlvbmFsaXR5LCBhbmQgSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSB2ZXJkaWN0cy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHBhcnNlciBhZmZlY3RzIHRoZSBwYWNrZXQgYW5kIHRoZSB2ZXJkaWN0IGFuZCBob3cgdGhlIHZlcmRpY3QgaXMgdGhlbiBhcHBsaWVkIHRvIHRoZSBzb2NrZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX2JwZl9zdHJwYXJzZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za21zZy5oPTU1NT1zdGF0aWMgaW5saW5lIHNzaXplX3Qgc2tfbXNnX2ZpcnN0X2xlbihzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9saW51eC9za21zZy5oLTU3OS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaDo1ODA6c3RhdGljIGlubGluZSBib29sIHNrYl9icGZfc3RycGFyc2VyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNTgxLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTY3Mj1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTY5OS1cdFx0b2ZmID0gMDtcbm5ldC9jb3JlL3NrbXNnLmM6NzAwOlx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xubmV0L2NvcmUvc2ttc2cuYy03MDEtXHRcdFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9OTk3PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAyNC1cdFx0XHRvZmYgPSAwO1xubmV0L2NvcmUvc2ttc2cuYzoxMDI1Olx0XHRcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XG5uZXQvY29yZS9za21zZy5jLTEwMjYtXHRcdFx0XHRzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTE1PXZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0yMi1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMzpcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKVxubmV0L2lwdjQvdGNwX2JwZi5jLTI0LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgdGhpbmtlcjoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBTdHJpbmcgUGFyc2VyIGluIHNrbXNnLmgqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGBza2JfYnBmX3N0cnBhcnNlcmAgZnVuY3Rpb24sIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBwYXJzaW5nIG9mIHN0cmluZyBkYXRhIHdpdGhpbiBza19idWZmcywgaXMgaW1wbGVtZW50ZWQuIFRoYXQgdXN1YWxseSBtZWFucyBoZWFkaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIGFuZCBpbiB0aGlzIGNhc2UsIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgaW5jbHVkZS9saW51eC9za21zZy5oYCBoZWFkZXIgZmlsZS4gSXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsaWtlbHkgdGhlIGRlY2xhcmF0aW9ucyBmb3IgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBzb2NrZXQgbWVzc2FnZSBoYW5kbGluZyBhbmQgQlBGIGludGVyYWN0aW9uIHNob3VsZCByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCBleGlzdHMgdGhlcmUgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gc3RyaW5nIGRhdGEgcHJvY2Vzc2luZy4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za21zZy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdHJldHVybiBpbnE7XG4gNTcxOlx0fVxuIDU3MjpcdFxuIDU3MzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfU09DS19NU0cpXG4gNTc0Olx0XG4gNTc1Olx0I2RlZmluZSBCUEZfRl9TVFJQQVJTRVJcdCgxVUwgXHUwMDNjXHUwMDNjIDEpXG4gNTc2Olx0XG4gNTc3Olx0LyogV2Ugb25seSBoYXZlIHR3byBiaXRzIHNvIGZhci4gKi9cbiA1Nzg6XHQjZGVmaW5lIEJQRl9GX1BUUl9NQVNLIH4oQlBGX0ZfSU5HUkVTUyB8IEJQRl9GX1NUUlBBUlNFUilcbiA1Nzk6XHRcbiA1ODA6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2JwZl9zdHJwYXJzZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA1ODE6XHR7XG4gNTgyOlx0XHR1bnNpZ25lZCBsb25nIHNrX3JlZGlyID0gc2tiLVx1MDAzZV9za19yZWRpcjtcbiA1ODM6XHRcbiA1ODQ6XHRcdHJldHVybiBza19yZWRpciBcdTAwMjYgQlBGX0ZfU1RSUEFSU0VSO1xuIDU4NTpcdH1cbiA1ODY6XHRcbiA1ODc6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2JwZl9zZXRfc3RycGFyc2VyKHN0cnVjdCBza19idWZmICpza2IpXG4gNTg4Olx0e1xuIDU4OTpcdFx0c2tiLVx1MDAzZV9za19yZWRpciB8PSBCUEZfRl9TVFJQQVJTRVI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIEJQRiBTb2NrZXQgTWVzc2FnZSBDaGFuZ2VzKioKClJpZ2h0LCBzbyBgc2tiX2JwZl9zdHJwYXJzZXJgIGlzIG9ubHkgZ29pbmcgdG8gYmUgYXZhaWxhYmxlIGlmIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgd2l0aCBgQ09ORklHX05FVF9TT0NLX01TR2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIE5vdywgdGhlIHBhdGNoIGZvY3VzZXMgb24gbW9kaWZ5aW5nIGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYW5kIHRob3NlIGFyZSBib3RoIHNpdHRpbmcgaW4gYG5ldC9jb3JlL3NrbXNnLmNgLiBJdCBsb29rcyBsaWtlIHdlIHdpbGwgd2FudCB0byBkaXZlIGluIGRlZXAgb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGluIGBuZXQvY29yZS9za21zZy5jYC4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBCUEYgdmVyZGljdCBpbXBhY3RzIHBhY2tldCBoYW5kbGluZyB3aXRoaW4gdGhlIHNvY2tldCBtZXNzYWdlIGZyYW1ld29yaywgZ2l2ZW4gdGhlIGNvbnRleHQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgbW9kaWZpY2F0aW9uIGlzIGdvaW5nIHRvIGFmZmVjdCB0aGUgdmVyZGljdCBhcHBsaWNhdGlvbiBiYXNlZCBvbiB0aGUgQlBGIHByb2dyYW0mIzM5O3Mgb3V0cHV0LCBhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBzb2NrZXQtbGV2ZWwgcHJvY2Vzc2luZyBhbmQgdGhlIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5OTc6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA5OTg6XHRcdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4gOTk5Olx0e1xuMTAwMDpcdFx0c3RydWN0IHNvY2sgKnNrX290aGVyO1xuMTAwMTpcdFx0aW50IGVyciA9IDA7XG4xMDAyOlx0XHR1MzIgbGVuLCBvZmY7XG4xMDAzOlx0XG4xMDA0Olx0XHRzd2l0Y2ggKHZlcmRpY3QpIHtcbjEwMDU6XHRcdGNhc2UgX19TS19QQVNTOlxuMTAwNjpcdFx0XHRlcnIgPSAtRUlPO1xuMTAwNzpcdFx0XHRza19vdGhlciA9IHBzb2NrLVx1MDAzZXNrO1xuMTAwODpcdFx0XHRpZiAoc29ja19mbGFnKHNrX290aGVyLCBTT0NLX0RFQUQpIHx8XG4xMDA5Olx0XHRcdCAgICAhc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpXG4xMDEwOlx0XHRcdFx0Z290byBvdXRfZnJlZTtcbjEwMTE6XHRcbjEwMTI6XHRcdFx0c2tiX2JwZl9zZXRfaW5ncmVzcyhza2IpO1xuMTAxMzpcdFxuMTAxNDpcdFx0XHQvKiBJZiB0aGUgcXVldWUgaXMgZW1wdHkgdGhlbiB3ZSBjYW4gc3VibWl0IGRpcmVjdGx5XG4xMDE1Olx0XHRcdCAqIGludG8gdGhlIG1zZyBxdWV1ZS4gSWYgaXRzIG5vdCBlbXB0eSB3ZSBoYXZlIHRvXG4xMDE2Olx0XHRcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcbjEwMTc6XHRcdFx0ICogaWYgc2tfcHNvY2tfc2tiX2luZ3Jlc3MgZXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieVxuMTAxODpcdFx0XHQgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS5cbjEwMTk6XHRcdFx0ICovXG4xMDIwOlx0XHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IpKSB7XG4xMDIxOlx0XHRcdFx0Ym9vbCBjaGFyZ2Vfc2tiID0gdHJ1ZTtcbjEwMjI6XHRcbjEwMjM6XHRcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuMTAyNDpcdFx0XHRcdG9mZiA9IDA7XG4xMDI1Olx0XHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbjEwMjY6XHRcdFx0XHRcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcbjEwMjc6XHRcbjEwMjg6XHRcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4xMDI5Olx0XHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4xMDMwOlx0XHRcdFx0XHRjaGFyZ2Vfc2tiID0gZmFsc2U7XG4xMDMxOlx0XHRcdFx0fVxuMTAzMjpcdFx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sXG4xMDMzOlx0XHRcdFx0XHRcdFx0XHRmYWxzZSwgY2hhcmdlX3NrYik7XG4xMDM0Olx0XHRcdH1cbjEwMzU6XHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMTAzNjpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuMTAzNzpcdFx0XHRcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xuMTAzODpcdFx0XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XG4xMDM5Olx0XHRcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cHNvY2stXHUwMDNld29yaywgMCk7XG4xMDQwOlx0XHRcdFx0XHRlcnIgPSAwO1xuMTA0MTpcdFx0XHRcdH1cbjEwNDI6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuMTA0MzpcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMDQ0Olx0XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuMTA0NTpcdFx0XHR9XG4xMDQ2Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGRpdmVzIGludG8gdGhlIGNvcmUgb2YgQlBGIHNvY2tldCBtZXNzYWdlIGhhbmRsaW5nLiBJdCYjMzk7cyB0b3VjaGluZyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAg4oCTIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcml0aWNhbCB0byBob3cgd2UgcHJvY2VzcyBzb2NrZXQgbWVzc2FnZXMgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgZGVwZW5kZW5jeSBvbiBgQ09ORklHX05FVF9TT0NLX01TR2AsIHdoaWNoIGlzIG5vIHN1cnByaXNlIGdpdmVuIHRoZSBjb250ZXh0LiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgbGlrZWx5IG5lZWRlZCwgb3IgYXQgbGVhc3QgaGlnaGx5IGFkdmlzYWJsZSwgdG8gYWN0dWFsbHkgKnVzZSogQlBGLgoKQnV0LCBnaXZlbiB0aGUgdXNlIG9mIGBza2JfYnBmX3N0cnBhcnNlcihza2IpYCBpbiB0aGUgY29kZSwgSSYjMzk7bSBnZXR0aW5nIGEgaHVuY2ggdGhhdCBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBtaWdodCBiZSBpbXBsaWNhdGVkIGhlcmUgYXMgd2VsbC4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTtsbCBjaGVjayBgbmV0L0tjb25maWdgIGFuZCBgbmV0L2NvcmUvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgTkVUX1NPQ0tfTVNHYCBhbmQgcmVsYXRlZCBjb25maWdzIGFyZSBkZWZpbmVkIGFuZCB3aGF0IHRoZWlyIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBhc3Nlc3NpbmcgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHBhdGNoJiMzOTtzIGltcGFjdCBhbmQgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgZm9yIGl0cyBwcm9wZXIgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NPQ0tfTVNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xuLS1cbm5ldC9LY29uZmlnLTQ3OC1cbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy00ODAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxOTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYE5FVF9TT0NLX01TR2AgU2VsZWN0b3JzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIGhvdyBgTkVUX1NPQ0tfTVNHYCBpcyBiZWluZyB1dGlsaXplZCwgc3BlY2lmaWNhbGx5LCB3aGVyZSBpdCYjMzk7cyBiZWluZyAqc2VsZWN0ZWQqLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBpbnN0YW5jZXMgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIG1lc3NhZ2UgdHlwZSBpcyB0aGUgdGFyZ2V0IG9mIGEgc2VsZWN0aW9uIG9wZXJhdGlvbi4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIHNlbGVjdG9yIGlzIHVzZWQsIHdoaWNoIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIGNvcmUgbWVjaGFuaXNtcyB0aGF0IGFyZSBtYWtpbmcgdXNlIG9mIHRoaXMuIFdlJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBjb2RlIGFuZCB0cmFjZSBiYWNrIGFzIG11Y2ggYXMgcG9zc2libGUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVyZSBJIGNhbiBpZGVudGlmeSB3aGF0JiMzOTtzIHNlbGVjdGluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE5FVF9TT0NLX01TRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTMzLVx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbmtlcm5lbC9icGYvS2NvbmZpZzozNDpcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbi0tXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4tLVxubmV0L0tjb25maWctMzY2LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnOjM2NzpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTM2OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg1LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY0L0tjb25maWc6Mzg2Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZy0zODctXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05My1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2Ni9LY29uZmlnOjk0Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZy05NS1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE9fR0NNXG5uZXQvdGxzL0tjb25maWc6MTE6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvdGxzL0tjb25maWctMTItXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc4NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBORVRfU09DS19NU0dgIEJQRiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBgTkVUX1NPQ0tfTVNHYCBjb2RlcGF0aCBqdW1wcyBvdXQuIEkgc2VlIHRoYXQgYEJQRl9TWVNDQUxMYCBzZWxlY3RzIGl0IHdoZW4gdGhlIGBORVRgIG9wdGlvbiBpcyBlbmFibGVkLCBhbmQgYWxzbyB0aGF0IGl0JiMzOTtzIGxldmVyYWdlZCBieSBgQlBGX1NUUkVBTV9QQVJTRVJgLCBgSU5FVF9FU1BJTlRDUGAsIGBJTkVUNl9FU1BJTlRDUGAsIGFuZCBgVExTYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBjZW50cmFsIHRvIGhvdyBhIGxvdCBvZiBuZXR3b3JrIHRyYWZmaWMgaXMgYmVpbmcgaGFuZGxlZCBieSBCUEYsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGhvbmluZyBpbiBvbiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgYW5kIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYXMgd2VsbCBhcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByb2JhYmx5IHRoZSBjb3JlIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgdmVyZGljdCBhcHBsaWNhdGlvbiBsb2dpYyByZWxhdGVkIHRvICYjMzQ7cGVyLXNvY2tldCBCUEYmIzM0Oywgb3IgcHNvY2suIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyB0cnVlLi4uCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBhcmUgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgc3RhdGljPyBZZXMsIHRoZXkgYWxsIGFyZSwgc28gdGhleSYjMzk7cmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0LiBUaGF0IG1ha2VzIGl0IGVhc2llciwgYnV0IG5vdyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZW0uIFRoaXMgd2lsbCBwcm9iYWJseSBsZWFkIG1lIHRvIHRoZSBrZXkgZW50cnlwb2ludHMgb2YgdGhlIEJQRiBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja192ZXJkaWN0X2FwcGx5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9OTU5PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTk5Ni1cbm5ldC9jb3JlL3NrbXNnLmM6OTk3OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy05OTgtXHRcdFx0XHQgIGludCB2ZXJkaWN0KVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA4MD1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTExMDMtXHR9XG5uZXQvY29yZS9za21zZy5jOjExMDQ6XHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XG5uZXQvY29yZS9za21zZy5jLTExMDUtb3V0OlxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIwMz1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjI2LVx0fVxubmV0L2NvcmUvc2ttc2cuYzoxMjI3Olx0cmV0ID0gc2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjI4LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcwMgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBQYWNrZXQgU29ja2V0IFZlcmRpY3QgQXBwbGljYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZXNlIHBhY2tldCBzb2NrZXQgdmVyZGljdHMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNydWNpYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgdGhlIGNvcmUgZnVuY3Rpb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZXNlIHR3byBmdW5jdGlvbnMsIGBza19wc29ja19zdHJwX3JlYWRgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYXJlIHRoZSBjb25kdWl0cyB0aGF0IGV2ZW50dWFsbHkgcGFzcyB0aGUgdmVyZGljdHMgYWxvbmcgdG8gYmUgYXBwbGllZCBieSB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgY2xhc3NpYyBwcm9kdWNlci1jb25zdW1lciBwYXR0ZXJuLCB3aGVyZSB0aGUgcmVhZCBhbmQgcmVjZWl2ZSBmdW5jdGlvbnMgYWN0IGFzIHRoZSBwcm9kdWNlcnMsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgdGhlIGNvbnN1bWVyIG9mIHRoZSB2ZXJkaWN0IGRhdGEuIFRoZSBrZXkgaGVyZSBpcyB0byBzZWUgaG93IHRoZSBkYXRhIGZsb3dzIGZyb20gdGhlIHJlYWQgYW5kIHJlY2VpdmUgcGF0aCB0byB0aGUgYXBwbHkgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIGJvdW5kYXJ5IG9mIGVhY2ggb2YgdGhlc2UgdGhyZWUgZnVuY3Rpb25zLCBob3cgdGhlIGRhdGEgYW5kIG1ldGFkYXRhIGFyZSBiZWluZyBwYXNzZWQsIGFuZCB3aGF0IGRlY2lzaW9ucyBhcmUgYmVpbmcgbWFkZS4KClRoaXMgZmxvdyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIHdpdGggYSBob2xpc3RpYyB2aWV3LiBJIHNob3VsZCBub3cgY2hlY2sgdGhlIGBza19wc29ja19za2JfaW5ncmVzc2AgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgaW5ncmVzcyBwYXRoLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBvdXIgb3RoZXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja19za2JfaW5ncmVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTUzMz1zdGF0aWMgc3RydWN0IHNrX21zZyAqc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9za21zZy5jLTU0NC1cbm5ldC9jb3JlL3NrbXNnLmM6NTQ1OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01NDYtXHRcdFx0XHRcdHUzMiBvZmYsIHUzMiBsZW4sXG4tLVxubmV0L2NvcmUvc2ttc2cuYy01ODctXG5uZXQvY29yZS9za21zZy5jOjU4ODpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrbXNnLmMtNTg5LVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTkxLVxubmV0L2NvcmUvc2ttc2cuYzo1OTI6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01OTMtXHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTk5LVx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG5uZXQvY29yZS9za21zZy5jOjYwMDpcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXG5uZXQvY29yZS9za21zZy5jLTYwMS1cdFx0XHRcdFx0XHQgdHJ1ZSk7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy02MTItXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG5uZXQvY29yZS9za21zZy5jOjYxMzpcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csIHRydWUpO1xubmV0L2NvcmUvc2ttc2cuYy02MTQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNjIzLSAqL1xubmV0L2NvcmUvc2ttc2cuYzo2MjQ6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za21zZy5jLTYyNS1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbi0tXG5uZXQvY29yZS9za21zZy5jLTY0MS1cdG1zZy1cdTAwM2VzayA9IHNrO1xubmV0L2NvcmUvc2ttc2cuYzo2NDI6XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0YWtlX3JlZik7XG5uZXQvY29yZS9za21zZy5jLTY0My1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2NvcmUvc2ttc2cuYz02NDg9c3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy02NTYtXG5uZXQvY29yZS9za21zZy5jOjY1NzpcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbik7XG5uZXQvY29yZS9za21zZy5jLTY1OC19XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05OTc9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDE2LVx0XHQgKiBxdWV1ZSB3b3JrIG90aGVyd2lzZSB3ZSBtYXkgZ2V0IE9PTyBkYXRhLiBPdGhlcndpc2UsXG5uZXQvY29yZS9za21zZy5jOjEwMTc6XHRcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcbm5ldC9jb3JlL3NrbXNnLmMtMTAxOC1cdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDMxLVx0XHRcdH1cbm5ldC9jb3JlL3NrbXNnLmM6MTAzMjpcdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLFxubmV0L2NvcmUvc2ttc2cuYy0xMDMzLVx0XHRcdFx0XHRcdFx0ZmFsc2UsIGNoYXJnZV9za2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBlQlBGIFBhY2tldCBTb2NrZXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBza19wc29ja19oYW5kbGVfc2tiYC4gTXkgbWVudGFsIG1vZGVsIHRlbGxzIG1lIHRoYXQgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGtleSByb2xlIGluIGhhbmRsaW5nIFNLQnMgKFNvY2tldCBCdWZmZXIpIHdpdGhpbiB0aGUgcGFja2V0IHNvY2tldCBjb250ZXh0LiBUaGUga2V5IHBvaW50IGlzOiB0aGlzIGZ1bmN0aW9uIGNhbGxzIGBza19wc29ja19za2JfaW5ncmVzc2AuIE5hdHVyYWxseSwgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhY2tldCBmbG93IGFuZCBlQlBGIGludGVncmF0aW9uLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsIHNpdGVzIG9mIGBza19wc29ja19oYW5kbGVfc2tiYC4gVW5kZXJzdGFuZGluZyAqaG93KiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCBob3cgZUJQRiBwcm9ncmFtcyBpbnRlcmFjdCB3aXRoIHBhY2tldCBzb2NrZXRzLiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMsIGFuZCB0aGVuIEkmIzM5O2xsIGJlIGFibGUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGl0c2VsZiBhbmQgd2hhdCBpdCBkb2VzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja19oYW5kbGVfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9NjI0PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNjQ3LVxubmV0L2NvcmUvc2ttc2cuYzo2NDg6c3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za21zZy5jLTY0OS1cdFx0XHQgICAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBpbmdyZXNzKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9NjcyPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNzE3LVx0XHRcdGlmICghc29ja19mbGFnKHBzb2NrLVx1MDAzZXNrLCBTT0NLX0RFQUQpKVxubmV0L2NvcmUvc2ttc2cuYzo3MTg6XHRcdFx0XHRyZXQgPSBza19wc29ja19oYW5kbGVfc2tiKHBzb2NrLCBza2IsIG9mZixcbm5ldC9jb3JlL3NrbXNnLmMtNzE5LVx0XHRcdFx0XHRcdFx0ICBsZW4sIGluZ3Jlc3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU4MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYWNrZXQgU29ja2V0IEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIHBhY2tldCBzb2NrZXQgaW1wbGVtZW50YXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIGBza19wc29ja19iYWNrbG9nYCBpcyB0aGUgY29yZSBvZiBob3cgdGhpbmdzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgY2FsbGluZyBgc2tfcHNvY2tfaGFuZGxlX3NrYmAuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgdGhyZWUga2V5IGZ1bmN0aW9uczogYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgYHNrX3Bzb2NrX2JhY2tsb2dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBmbG93cyB0aHJvdWdoIHRoZXNlLgoKRmlyc3QgdGhpbmdzIGZpcnN0OiBsZXQmIzM5O3Mgc2VlIGhvdyB2aXNpYmxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUuIFRoZSBmYWN0IHRoYXQgdGhleSYjMzk7cmUgZGVjbGFyZWQgYXMgc3RhdGljIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhleSYjMzk7cmUgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgbWVhbnMgdGhleSYjMzk7cmUgdXNlZCBvbmx5IHdpdGhpbiB0aGUgcGFja2V0IHNvY2tldCBjb2RlLiBUaGlzIGluIHR1cm4sIG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBmaW5kIGhvdyB0aGV5JiMzOTtyZSAqaW52b2tlZCogdmlhIG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG5vdyBmaW5kIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZ1bmN0aW9ucywgb3IgYW55IGNhbGxiYWNrcyB0aGF0ICpkbyogZXhpc3QsIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9MTA2Mj1zdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDc5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmM6MTA4MDpzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrbXNnLmMtMTA4MS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTA4LVxubmV0L2NvcmUvc2ttc2cuYzoxMTA5OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgaW50IGVycilcbm5ldC9jb3JlL3NrbXNnLmMtMTExMC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMTQ4PWludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE1Mi1cdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RycF9jYWxsYmFja3MgY2IgPSB7XG5uZXQvY29yZS9za21zZy5jOjExNTM6XHRcdC5yY3ZfbXNnXHQ9IHNrX3Bzb2NrX3N0cnBfcmVhZCxcbm5ldC9jb3JlL3NrbXNnLmM6MTE1NDpcdFx0LnJlYWRfc29ja19kb25lXHQ9IHNrX3Bzb2NrX3N0cnBfcmVhZF9kb25lLFxubmV0L2NvcmUvc2ttc2cuYy0xMTU1LVx0XHQucGFyc2VfbXNnXHQ9IHNrX3Bzb2NrX3N0cnBfcGFyc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjkxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipEZWx2aW5nIGludG8gdGhlIGBza19wc29ja2AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgc2tfcHNvY2tfc3RycF9yZWFkYCBpcyBiZWluZyB1c2VkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aGluIGBza19wc29ja19pbml0X3N0cnBgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIGhvb2suIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGRvZXMgdGhpcyByZWFkIGZ1bmN0aW9uIGFjdHVhbGx5ICpnZXQqIHVzZWQgYW5kIHdoYXQmIzM5O3MgdGhlIHB1cnBvc2U/JiMzNDsgVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdy4gYHNrX3Bzb2NrX2luaXRfc3RycGAgc2V0cyBpdCB1cCwgYnV0IGl0JiMzOTtzIHRoZSAqdXNhZ2UqIHRoYXQgbWF0dGVycy4gV2hlcmUgYW5kIGhvdyBpcyB0aGUgcmVhZCBwZXJmb3JtZWQ/CgpTaW5jZSBpdCYjMzk7cyBhIGBza19wc29ja2AgZnVuY3Rpb24sIEnigJltIGd1ZXNzaW5nIGl0IGhhcyB0byBkZWFsIHdpdGggcGFja2V0IHNvY2tldCB2ZXJkaWN0cy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJlYWQgb3BlcmF0aW9uIHdvcmtzLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgaG93IGFuZCB3aGVyZSBpdCBtaWdodCBoYW5kbGUgdmVyZGljdHMuIFNvLCBsZXTigJlzIGdvIGRpcmVjdGx5IHRvIGBza19wc29ja192ZXJkaWN0X3JlY3ZgIGFuZCBzZWUgaG93IGl0IGlzIHdvcmtpbmcsIG5vdy4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIGFuIGFuc3dlciB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9yZWN2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9MTE5OD1zdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMDItXG5uZXQvY29yZS9za21zZy5jOjEyMDM6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMjA0LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEyMzU9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNTEtXG5uZXQvY29yZS9za21zZy5jOjEyNTI6XHRjb3BpZWQgPSBvcHMtXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XG5uZXQvY29yZS9za21zZy5jLTEyNTMtXHRpZiAoY29waWVkIFx1MDAzZT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgyMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgUGFja2V0IFNvY2tldCBWZXJkaWN0IFBhdGgqKgoKQWxyaWdodCwgSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhpcyBwYWNrZXQgc29ja2V0IGNvZGUsIGFuZCBJIHNlZSB0aGF0IGBza19wc29ja192ZXJkaWN0X3JlY3ZgIGlzIGJlaW5nIHBhc3NlZCBpbnRvIGBvcHMtJmd0O3JlYWRfc2tiYCB3aXRoaW4gdGhlIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgZGlyZWN0IGxpbmsgYmV0d2VlbiByZWNlaXZpbmcgZGF0YSBhbmQgbWFraW5nIGEgdmVyZGljdCBvbiBpdCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBwYWNrZXQgc29ja2V0JiMzOTtzIHJvbGUuCgpOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHNrX3Bzb2NrX2JhY2tsb2dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJhY2tsb2cgaXMgaW52b2x2ZWQgaGVyZS4gSXMgdGhpcyB3aGVyZSB0aGUgdmVyZGljdCBpbmZvcm1hdGlvbiBpcyBxdWV1ZWQgb3IgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYG9wcy0mZ3Q7cmVhZF9za2JgPyBJcyB0aGlzIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCB0aGUgdmVyZGljdCBkYXRhIHRoYXQgaXMgaW4gdGhlIGJhY2tsb2c/IFBlcmhhcHMgdGhlIGJhY2tsb2cgaXMgd2hlcmUgcGFja2V0cyBhcmUgYnVmZmVyZWQsIGFuZCBub3cgd2UmIzM5O3JlIHB1bGxpbmcgdGhlbSBvZmYsIGp1ZGdpbmcgdGhlbSwgYW5kIHRoZW4gZmVlZGluZyB0aGVtIGludG8gdGhlIHJlYWQgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gdG8gZnVsbHkgZ3Jhc3AgdGhlIHdvcmtmbG93LiBLbm93aW5nIGhvdyB0aGUgYmFja2xvZyBmdW5jdGlvbnMgaW4gdGhlIGNvbnRleHQgb2YgdmVyZGljdHMgaXMgY3J1Y2lhbCwgb3RoZXJ3aXNlLCBJIGRvbiYjMzk7dCByZWFsbHkga25vdyBob3cgdGhlIHZlcmRpY3QgZnVuY3Rpb25zIGluIGEgcGFja2V0IHNvY2tldC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgbG9va2luZyBhdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGFuZCB0aGVuIHRoZSBmdW5jdGlvbiBjYWxscyB0byBmaW5kIG91dCB3aGVyZSB0aGUgdmVyZGljdCBkZWNpc2lvbnMgYXJlIG1hZGUsIHNvIEkgY2FuIHN0YXJ0IHRyYWNpbmcgYmFja3dhcmQgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfYmFja2xvZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTY2MD1zdGF0aWMgdm9pZCBza19wc29ja19za2Jfc3RhdGUoc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvY29yZS9za21zZy5jLTY3MS1cbm5ldC9jb3JlL3NrbXNnLmM6NjcyOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L2NvcmUvc2ttc2cuYy02NzMte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9NzUxPXN0cnVjdCBza19wc29jayAqc2tfcHNvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGludCBub2RlKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNzg1LVxubmV0L2NvcmUvc2ttc2cuYzo3ODY6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwc29jay1cdTAwM2V3b3JrLCBza19wc29ja19iYWNrbG9nKTtcbm5ldC9jb3JlL3NrbXNnLmMtNzg3LVx0bXV0ZXhfaW5pdChcdTAwMjZwc29jay1cdTAwM2V3b3JrX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhY2tldCBTb2NrZXQgV29ya3F1ZXVlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBza19wc29ja19iYWNrbG9nYCB0aGluZy4gUmlnaHQsIGl0JiMzOTtzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLiBUaGF0IHRlbGxzIG1lIHRoZSBjb3JlIGludGVyYWN0aW9uIHBvaW50cyBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgZnVuY3Rpb25zIEkganVzdCBoaWdobGlnaHRlZDogYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBgc2tfcHNvY2tfYmFja2xvZ2AgaXRzZWxmLCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCwgYW5kIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhcmUgc3RhdGljLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IHJlbGV2YW50IGJlY2F1c2UgU3l6a2FsbGVyIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGRpcmVjdGx5IGNhbGwgdGhlbS4gSG93ZXZlciwgaWYgdGhleSYjMzk7cmUgdGhlIG9uZXMgYmVpbmcgbW9kaWZpZWQsIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgdGFyZ2V0cyBJIG5lZWQgdG8gd2F0Y2guIEkmIzM5O2xsIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBsaXN0ZWQgaW4gYEZvY3VzU3ltYm9sc2AuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBpcyB0aGUgYmlnIG9uZSwgdGhhdCYjMzk7cyBleHBlY3RlZC4gQW5kLCBhcyBzdXNwZWN0ZWQsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgbXVzdC4gVGhlbiwgdGhlcmUmIzM5O3MgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAuIEkgbmVlZCB0aGF0IGJlY2F1c2UgaXQgZW5hYmxlcyBgc2tiX2JwZl9zdHJwYXJzZXJgLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSB2aWV3IG9mIHRoZSBkZXBlbmRlbmN5IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxuLS1cbm5ldC9LY29uZmlnLTM2MC1cbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnLTM2Mi1cdGJvb2wgXCYjMzQ7ZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTI1CgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoYXQgYEJQRl9TVFJFQU1fUEFSU0VSYCBpcyBlbmFibGVkIGluIGBuZXQvS2NvbmZpZ2AuIEV4Y2VsbGVudC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGBORVRfU09DS19NU0dgIGFuZCBgQlBGX1NUUkVBTV9QQVJTRVJgIGFsb25lIGNvdmVyIHRoZSBjaGFuZ2VzLiBZZXAsIGxvb2tzIGdvb2Q7IHRoZXkgZW5jb21wYXNzIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIFNpbmNlIHRoaXMgcGF0Y2ggdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBsb2dpYywgaXQmIzM5O3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCBkZXNlcnZlcyBhIGZ1enppbmcgY2FtcGFpZ24uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGBGb2N1c1N5bWJvbHNgLiBJIHNlZSB0aGVzZSBmdW5jdGlvbnMgcmlnaHQgYXdheTogYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGBza19wc29ja19zdHJwX3JlYWRgLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYW5kIGBza19wc29ja19iYWNrbG9nYC4gV2FpdCwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBpbiB0aGUgZGlmZj8gQWgsIGBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlYCBpcyBuZWFyYnksIGFsdGhvdWdoIG5vdCBtb2RpZmllZC4gSSYjMzk7bGwgc3RpY2sgdG8gdGhlIGRpcmVjdGx5IG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlaXIgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgbWVhbnMgZm9jdXNpbmcgb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLgoKTGV0IG1lIHZlcmlmeSBhIHF1aWNrIGRldGFpbDogQXJlIHRoZXNlIHN0YXRpYz8gWWVzLCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYW5kIGBza19wc29ja19za2JfaW5ncmVzc2AgYXJlIGFsbCBzdGF0aWMuIEdvb2QuIEkmIzM5O2xsIGluY2x1ZGUgdGhlc2UgYXMgdGhlIGBGb2N1c1N5bWJvbHNgLgoKTm93IGZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBgTkVUX1NPQ0tfTVNHYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBCUEZfU1lTQ0FMTGAgd2lsbCBkbyB0aGUgdHJpY2suCgpKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBzaWduaWZpY2FudC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCB0byB0YWtlIGEgYGJvb2wgY2hhcmdlX3NrYmAuIElmIHRoaXMgaXMgdHJ1ZSwgaXQgY2FsbHMgYHNrYl9zZXRfb3duZXJfcihza2IsIHNrKWAuIEFoLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgYWNjb3VudGluZyBmb3IgU0tCcyBpbiBwc29jayBpbmdyZXNzISBBYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU09DS19NU0cmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19wc29ja192ZXJkaWN0X2FwcGx5JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc2tiX2luZ3Jlc3MmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICAgJiMzNDtza19wc29ja19iYWNrbG9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWNjb3VudGluZyBsb2dpYyBmb3Igc2ticyBpbiB0aGUgQlBGIHBzb2NrIGluZ3Jlc3MgcGF0aC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgY2hhcmdlX3NrYmAgcGFyYW1ldGVyIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCB0byBjb25kaXRpb25hbGx5IGNhbGwgYHNrYl9zZXRfb3duZXJfcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9hcHBseSYjMzQ7LAogICAgJiMzNDtza19wc29ja19za2JfaW5ncmVzc19zZWxmJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3NrYl9pbmdyZXNzJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0cnBfcmVhZCYjMzQ7LAogICAgJiMzNDtza19wc29ja192ZXJkaWN0X3JlY3YmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfYmFja2xvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgbG9naWMgZm9yIHNrYnMgaW4gdGhlIEJQRiBwc29jayBpbmdyZXNzIHBhdGguIEl0IGludHJvZHVjZXMgYSBuZXcgYGNoYXJnZV9za2JgIHBhcmFtZXRlciB0byBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgdG8gY29uZGl0aW9uYWxseSBjYWxsIGBza2Jfc2V0X293bmVyX3JgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nL0JQRiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNTo1NS4xNTIzNzk4MjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjM3NjczMzM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU09DS19NU0dcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlcIixcbiAgICBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZcIixcbiAgICBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzXCIsXG4gICAgXCJza19wc29ja19zdHJwX3JlYWRcIixcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfcmVjdlwiLFxuICAgIFwic2tfcHNvY2tfYmFja2xvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWNjb3VudGluZyBsb2dpYyBmb3Igc2ticyBpbiB0aGUgQlBGIHBzb2NrIGluZ3Jlc3MgcGF0aC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgY2hhcmdlX3NrYmAgcGFyYW1ldGVyIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCB0byBjb25kaXRpb25hbGx5IGNhbGwgYHNrYl9zZXRfb3duZXJfcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzU6NTUuMTUyMzg3MzIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE2MzcyOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMzNiNjk0ZGY4NzAwNjQ3NDA3MmIwN2U2MDYxYzNlYWMxNGQ1MWM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDExOjM1OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXFxuaW5kZXggMjUyMWI2NDNmYTA1ZDQuLjE3MjYwNjgxNDc5YTNmIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcXG4rKysgYi9uZXQvY29yZS9za21zZy5jXFxuQEAgLTU4Niw3ICs1ODYsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7XFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcXG4rXFx0XFx0XFx0XFx0ICAgICBib29sIGNoYXJnZV9za2IpO1xcbiBcXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHR1MzIgb2ZmLCB1MzIgbGVuKVxcbkBAIC01OTUsMTIgKzU5Niw5IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IHNrX21zZyAqbXNnO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0LyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi1cXHUwMDNlc2sgaXMgYWxyZWFkeSBhc3NpZ25lZCxcXG4tXFx0ICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXRcXG4tXFx0ICogY29ycmVjdGx5Llxcbi1cXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNlc2sgPT0gc2spKVxcbi1cXHRcXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSk7XFxuK1xcdFxcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgdHJ1ZSk7XFxuIFxcdG1zZyA9IHNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzaywgc2tiKTtcXG4gXFx0aWYgKCFtc2cpXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbkBAIC02MTgsMTIgKzYxNiwxNCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGVcXG4tICogc2tiLiBJbiB0aGlzIGNhc2Ugd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgbWVtb3J5IGxpbWl0cyBvciBza2Jfc2V0X293bmVyX3JcXG4tICogYmVjYXVzZSB0aGUgc2tiIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBoZXJlLlxcbisvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stXFx1MDAzZXNrLlxcbisgKlxcbisgKiBXaGVuIGNoYXJnZV9za2IgaXMgZmFsc2UsIHRoZSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgcGF0aCBrZWVwcyB0aGUgVENQXFxuKyAqIHJlY2VpdmUgcXVldWUgYWNjb3VudGluZyBpbiBwbGFjZSBhbmQgbXVzdCBub3QgY2FsbCBza2Jfc2V0X293bmVyX3IoKS5cXG4gICovXFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcXG4rXFx0XFx0XFx0XFx0ICAgICBib29sIGNoYXJnZV9za2IpXFxuIHtcXG4gXFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cXHUwMDNlc2s7XFxuQEAgLTYzMSw3ICs2MzEsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYlxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCFtc2cpKVxcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4tXFx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xcbitcXHRpZiAoY2hhcmdlX3NrYilcXG4rXFx0XFx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xcbiBcXG4gXFx0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcXG4gXFx0ICogZGF0YSBvcmlnaW5hdGVzIGZyb20gdGhlIHNvY2tldCdzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0b1xcbkBAIC0xMDE3LDYgKzEwMTgsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuK1xcdFxcdFxcdGJvb2wgY2hhcmdlX3NrYiA9IHRydWU7XFxuK1xcbiBcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0XFx0XFx0b2ZmID0gMDtcXG4gXFx0XFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcXG5AQCAtMTAyNCw4ICsxMDI3LDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0XFx0XFx0XFx0b2ZmID0gc3RtLVxcdTAwM2VvZmZzZXQ7XFxuIFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuK1xcdFxcdFxcdFxcdGNoYXJnZV9za2IgPSBmYWxzZTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuK1xcdFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlLCBjaGFyZ2Vfc2tiKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNTo1NS42MDQ4OTc3NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NTkyNDIwNjc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU09DS19NU0dcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlcIixcbiAgICBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZcIixcbiAgICBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzXCIsXG4gICAgXCJza19wc29ja19zdHJwX3JlYWRcIixcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfcmVjdlwiLFxuICAgIFwic2tfcHNvY2tfYmFja2xvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWNjb3VudGluZyBsb2dpYyBmb3Igc2ticyBpbiB0aGUgQlBGIHBzb2NrIGluZ3Jlc3MgcGF0aC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgY2hhcmdlX3NrYmAgcGFyYW1ldGVyIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCB0byBjb25kaXRpb25hbGx5IGNhbGwgYHNrYl9zZXRfb3duZXJfcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMzNiNjk0ZGY4NzAwNjQ3NDA3MmIwN2U2MDYxYzNlYWMxNGQ1MWM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTE6MzU6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xuaW5kZXggMjUyMWI2NDNmYTA1ZDQuLjE3MjYwNjgxNDc5YTNmIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTU4Niw3ICs1ODYsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIGNoYXJnZV9za2IpO1xuIFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHUzMiBvZmYsIHUzMiBsZW4pXG5AQCAtNTk1LDEyICs1OTYsOSBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi1cdTAwM2VzayBpcyBhbHJlYWR5IGFzc2lnbmVkLFxuLVx0ICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXRcbi1cdCAqIGNvcnJlY3RseS5cbi1cdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG4tXHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlKTtcbitcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXG4rXHRcdFx0XHRcdFx0IHRydWUpO1xuIFx0bXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpO1xuIFx0aWYgKCFtc2cpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuQEAgLTYxOCwxMiArNjE2LDE0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGVcbi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfclxuLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS5cbisvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stXHUwMDNlc2suXG4rICpcbisgKiBXaGVuIGNoYXJnZV9za2IgaXMgZmFsc2UsIHRoZSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgcGF0aCBrZWVwcyB0aGUgVENQXG4rICogcmVjZWl2ZSBxdWV1ZSBhY2NvdW50aW5nIGluIHBsYWNlIGFuZCBtdXN0IG5vdCBjYWxsIHNrYl9zZXRfb3duZXJfcigpLlxuICAqL1xuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKVxuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIGNoYXJnZV9za2IpXG4ge1xuIFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXHUwMDNlc2s7XG5AQCAtNjMxLDcgKzYzMSw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiXG4gXG4gXHRpZiAodW5saWtlbHkoIW1zZykpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuLVx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xuK1x0aWYgKGNoYXJnZV9za2IpXG4rXHRcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0J3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvXG5AQCAtMTAxNyw2ICsxMDE4LDggQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYikpIHtcbitcdFx0XHRib29sIGNoYXJnZV9za2IgPSB0cnVlO1xuK1xuIFx0XHRcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRcdFx0b2ZmID0gMDtcbiBcdFx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xuQEAgLTEwMjQsOCArMTAyNywxMCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4gXHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4rXHRcdFx0XHRjaGFyZ2Vfc2tiID0gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbitcdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLFxuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIGNoYXJnZV9za2IpO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19sb2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM1OjU1LjYwNDg5OTI2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTc0ODI4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUaGlzIE5ldHdvcmtpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgdHdlYWtpbmcgYG5ldC9jb3JlL3NrbXNnLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgd2hpY2ggbm93IHRha2VzIGFuIGV4dHJhIGJvb2xlYW4gYXJndW1lbnQsIGBjaGFyZ2Vfc2tiYC4gQSBxdWljayBnbGFuY2Ugc2hvd3MgaWYgYGNoYXJnZV9za2JgIGlzIHRydWUsIHRoZW4gYHNrYl9zZXRfb3duZXJfcihza2IsIHNrKWAgZ2V0cyBjYWxsZWQuIEkgc2VlIHRoYXQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBqdXN0IGNhbGxzIHRoaXMgZnVuY3Rpb24gd2l0aCBgY2hhcmdlX3NrYiA9IHRydWVgLiBIb3dldmVyLCB3aGVuIHdlIGdldCB0byBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIHRoaW5ncyBnZXQgYSBsaXR0bGUgbW9yZSBpbnRlcmVzdGluZy4gVGhhdCBjb2RlIHNlZW1zIHRvIGNvbmRpdGlvbiBgY2hhcmdlX3NrYmAuIElmIGBza2JfYnBmX3N0cnBhcnNlcihza2IpYCByZXR1cm5zIHRydWUsIGBjaGFyZ2Vfc2tiYCBpcyBmYWxzZSwgb3RoZXJ3aXNlIGBjaGFyZ2Vfc2tiYCBpcyB0cnVlIGJlZm9yZSBwYXNzaW5nIGl0IGludG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLlxuXG5UaGlzIGlzIGEgcHJldHR5IGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyBpbnZvbHZpbmcgYHNrbXNnYCBhbmQgYHBzb2NrYC4gR2l2ZW4gaG93IGxvdy1sZXZlbCB0aGlzIGlzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggcGFja2V0IG93bmVyc2hpcCwgSSBpbW1lZGlhdGVseSB0aGluayB0aGF0IHdlIGFic29sdXRlbHkgbmVlZCB0byBmdXp6IHRoaXMgYXJlYS4gVGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MsIGVzcGVjaWFsbHkgYXJvdW5kIHJlc291cmNlIGFjY291bnRpbmcgb3Igb3duZXJzaGlwIGNvbmZsaWN0cywgaXMgaGlnaC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIG9mIGBuZXQvY29yZS9za21zZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGNvZGUgcGF0aC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGZpbmQgd2hlcmUgYHNrbXNnLm9gIGlzIGJ1aWx0IGluIHRoZSBNYWtlZmlsZSB3aXRoaW4gYG5ldC9jb3JlYCBhbmQgaG9wZWZ1bGx5IGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MDAuOTIyMzg0NDI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjQ5ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MDAuOTgxMDM5ODA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyMDYyNzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENPTkZJR19ORVRfU09DS19NU0dgIHNldHRpbmcuIEl0IHNlZW1zIGltcG9ydGFudCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhlIGNvbm5lY3Rpb24gdG8gYHNvY2tfbWFwLm9gIG1ha2VzIG1lIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGBDT05GSUdfQlBGX1NZU0NBTExgIOKAkyBpdCdzIG9mdGVuIGVudGFuZ2xlZCB3aXRoIEJQRiBmdW5jdGlvbmFsaXRpZXMsIGFuZCB0aG9zZSBhcmUgcmVsZXZhbnQgdG8gc29ja2V0IG1lc3NhZ2luZy4gSSB3YW50IGEgY29tcGxldGUgcGljdHVyZS4gTm93LCB0byBkaWcgZGVlcGVyLCBJIHRoaW5rIHRoZSBiZXN0IGFwcHJvYWNoIHdvdWxkIGJlIHRvIGV4YW1pbmUgdGhlIGNvZGUgaW4gYG5ldC9jb3JlL3NrbXNnLmNgLiBJdCdzIGxpa2VseSB0aGF0IGZpbGUgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGVzZSBjb25maWdzIGludGVycmVsYXRlIGFuZCByZXZlYWwgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIHNldHRpbmdzIHRoYXQgSSdtIG92ZXJsb29raW5nLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgbW9yZSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIGVudGlyZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjA3LjIwMTY3MDA2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk3ODIxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NTQ1PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01NzMtXFxubmV0L2NvcmUvc2ttc2cuYzo1NzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxcbm5ldC9jb3JlL3NrbXNnLmMtNTc1LVxcdHBzb2NrLVxcdTAwM2VpbmdyZXNzX2J5dGVzICs9IGxlbjtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTA2Mj1zdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwNzgtXFxubmV0L2NvcmUvc2ttc2cuYzoxMDc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jLTEwODAtc3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTExOTg9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMDAtfVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIwMTojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXFxubmV0L2NvcmUvc2ttc2cuYy0xMjAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNjowNy40MTE0NTgzMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg0MjEzMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFN0cmVhbSBQYXJzZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L2NvcmUvc2ttc2cuY2AgYW5kIHNwZWNpZmljYWxseSB0aGlzIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCdzIGNsZWFybHkgdGllZCB0byB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUga2V5IGhlcmUuIFRoZSBjb2RlIGNhbGxzIGBza2JfYnBmX3N0cnBhcnNlcihza2IpYCwgYW5kIHRoYXQncyB0aGUgYml0IEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZC4gV2hlcmUgaXMgKnRoYXQqIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGJhY2sgYW5kIGdldCBhIGhhbmRsZSBvbiB3aGF0IGl0IGRvZXMgZXhhY3RseS4gVGhpcyBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgY2hlY2sgcmVsYXRlZCB0byB0aGUgQlBGIHN0cmVhbSBwYXJzZXIgZnVuY3Rpb25hbGl0eSwgYW5kIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGF0IGZ1bmN0aW9uIGFuZCB0aGUgdmVyZGljdHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBwYXJzZXIgYWZmZWN0cyB0aGUgcGFja2V0IGFuZCB0aGUgdmVyZGljdCBhbmQgaG93IHRoZSB2ZXJkaWN0IGlzIHRoZW4gYXBwbGllZCB0byB0aGUgc29ja2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MTEuNDk1NjczNjg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDA4MDk2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX2JwZl9zdHJwYXJzZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za21zZy5oPTU1NT1zdGF0aWMgaW5saW5lIHNzaXplX3Qgc2tfbXNnX2ZpcnN0X2xlbihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNTc5LVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo1ODA6c3RhdGljIGlubGluZSBib29sIHNrYl9icGZfc3RycGFyc2VyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za21zZy5oLTU4MS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTY3Mj1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjk5LVxcdFxcdG9mZiA9IDA7XFxubmV0L2NvcmUvc2ttc2cuYzo3MDA6XFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcXG5uZXQvY29yZS9za21zZy5jLTcwMS1cXHRcXHRcXHRzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTk5Nz1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTAyNC1cXHRcXHRcXHRvZmYgPSAwO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTAyNTpcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbm5ldC9jb3JlL3NrbXNnLmMtMTAyNi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9MTU9dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjItXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIzOlxcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yNC1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjEzLjM5NjQ4OTAyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTk4NTczNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBTdHJpbmcgUGFyc2VyIGluIHNrbXNnLmgqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBgc2tiX2JwZl9zdHJwYXJzZXJgIGZ1bmN0aW9uLCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgcGFyc2luZyBvZiBzdHJpbmcgZGF0YSB3aXRoaW4gc2tfYnVmZnMsIGlzIGltcGxlbWVudGVkLiBUaGF0IHVzdWFsbHkgbWVhbnMgaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYGluY2x1ZGUvbGludXgvc2ttc2cuaGAgaGVhZGVyIGZpbGUuIEl0J3Mgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsaWtlbHkgdGhlIGRlY2xhcmF0aW9ucyBmb3IgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBzb2NrZXQgbWVzc2FnZSBoYW5kbGluZyBhbmQgQlBGIGludGVyYWN0aW9uIHNob3VsZCByZXNpZGUuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0IGV4aXN0cyB0aGVyZSBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBzdHJpbmcgZGF0YSBwcm9jZXNzaW5nLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjE2LjQ1NjM0ODAzNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrbXNnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdFxcdHJldHVybiBpbnE7XFxuIDU3MTpcXHR9XFxuIDU3MjpcXHRcXG4gNTczOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfU09DS19NU0cpXFxuIDU3NDpcXHRcXG4gNTc1OlxcdCNkZWZpbmUgQlBGX0ZfU1RSUEFSU0VSXFx0KDFVTCBcXHUwMDNjXFx1MDAzYyAxKVxcbiA1NzY6XFx0XFxuIDU3NzpcXHQvKiBXZSBvbmx5IGhhdmUgdHdvIGJpdHMgc28gZmFyLiAqL1xcbiA1Nzg6XFx0I2RlZmluZSBCUEZfRl9QVFJfTUFTSyB+KEJQRl9GX0lOR1JFU1MgfCBCUEZfRl9TVFJQQVJTRVIpXFxuIDU3OTpcXHRcXG4gNTgwOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfYnBmX3N0cnBhcnNlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA1ODE6XFx0e1xcbiA1ODI6XFx0XFx0dW5zaWduZWQgbG9uZyBza19yZWRpciA9IHNrYi1cXHUwMDNlX3NrX3JlZGlyO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRyZXR1cm4gc2tfcmVkaXIgXFx1MDAyNiBCUEZfRl9TVFJQQVJTRVI7XFxuIDU4NTpcXHR9XFxuIDU4NjpcXHRcXG4gNTg3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfYnBmX3NldF9zdHJwYXJzZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNTg4OlxcdHtcXG4gNTg5OlxcdFxcdHNrYi1cXHUwMDNlX3NrX3JlZGlyIHw9IEJQRl9GX1NUUlBBUlNFUjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MTYuNDU2NDE0OTY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTU5Mjc1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFNvY2tldCBNZXNzYWdlIENoYW5nZXMqKlxuXG5SaWdodCwgc28gYHNrYl9icGZfc3RycGFyc2VyYCBpcyBvbmx5IGdvaW5nIHRvIGJlIGF2YWlsYWJsZSBpZiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19ORVRfU09DS19NU0dgIOKAkyB0aGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIE5vdywgdGhlIHBhdGNoIGZvY3VzZXMgb24gbW9kaWZ5aW5nIGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYW5kIHRob3NlIGFyZSBib3RoIHNpdHRpbmcgaW4gYG5ldC9jb3JlL3NrbXNnLmNgLiBJdCBsb29rcyBsaWtlIHdlIHdpbGwgd2FudCB0byBkaXZlIGluIGRlZXAgb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGluIGBuZXQvY29yZS9za21zZy5jYC4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIEJQRiB2ZXJkaWN0IGltcGFjdHMgcGFja2V0IGhhbmRsaW5nIHdpdGhpbiB0aGUgc29ja2V0IG1lc3NhZ2UgZnJhbWV3b3JrLCBnaXZlbiB0aGUgY29udGV4dC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIG1vZGlmaWNhdGlvbiBpcyBnb2luZyB0byBhZmZlY3QgdGhlIHZlcmRpY3QgYXBwbGljYXRpb24gYmFzZWQgb24gdGhlIEJQRiBwcm9ncmFtJ3Mgb3V0cHV0LCBhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBzb2NrZXQtbGV2ZWwgcHJvY2Vzc2luZyBhbmQgdGhlIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUzNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MjAuNDUyMzQ0Njg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTk3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTk3OlxcdHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA5OTg6XFx0XFx0XFx0XFx0XFx0ICBpbnQgdmVyZGljdClcXG4gOTk5OlxcdHtcXG4xMDAwOlxcdFxcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcXG4xMDAxOlxcdFxcdGludCBlcnIgPSAwO1xcbjEwMDI6XFx0XFx0dTMyIGxlbiwgb2ZmO1xcbjEwMDM6XFx0XFxuMTAwNDpcXHRcXHRzd2l0Y2ggKHZlcmRpY3QpIHtcXG4xMDA1OlxcdFxcdGNhc2UgX19TS19QQVNTOlxcbjEwMDY6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4xMDA3OlxcdFxcdFxcdHNrX290aGVyID0gcHNvY2stXFx1MDAzZXNrO1xcbjEwMDg6XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxcbjEwMDk6XFx0XFx0XFx0ICAgICFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSlcXG4xMDEwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTAxMTpcXHRcXG4xMDEyOlxcdFxcdFxcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcXG4xMDEzOlxcdFxcbjEwMTQ6XFx0XFx0XFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxcbjEwMTU6XFx0XFx0XFx0ICogaW50byB0aGUgbXNnIHF1ZXVlLiBJZiBpdHMgbm90IGVtcHR5IHdlIGhhdmUgdG9cXG4xMDE2OlxcdFxcdFxcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcXG4xMDE3OlxcdFxcdFxcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcXG4xMDE4OlxcdFxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbjEwMTk6XFx0XFx0XFx0ICovXFxuMTAyMDpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuMTAyMTpcXHRcXHRcXHRcXHRib29sIGNoYXJnZV9za2IgPSB0cnVlO1xcbjEwMjI6XFx0XFxuMTAyMzpcXHRcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDI0OlxcdFxcdFxcdFxcdG9mZiA9IDA7XFxuMTAyNTpcXHRcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbjEwMjY6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHRcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG4xMDI5OlxcdFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuMTAzMDpcXHRcXHRcXHRcXHRcXHRjaGFyZ2Vfc2tiID0gZmFsc2U7XFxuMTAzMTpcXHRcXHRcXHRcXHR9XFxuMTAzMjpcXHRcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLFxcbjEwMzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UsIGNoYXJnZV9za2IpO1xcbjEwMzQ6XFx0XFx0XFx0fVxcbjEwMzU6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4xMDM2OlxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuMTAzNzpcXHRcXHRcXHRcXHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XFxuMTAzOTpcXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnBzb2NrLVxcdTAwM2V3b3JrLCAwKTtcXG4xMDQwOlxcdFxcdFxcdFxcdFxcdGVyciA9IDA7XFxuMTA0MTpcXHRcXHRcXHRcXHR9XFxuMTA0MjpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuMTA0MzpcXHRcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDQ0OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTA0NTpcXHRcXHRcXHR9XFxuMTA0NjpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MjAuNDUyNDM5OTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxOTA4NTA5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBkaXZlcyBpbnRvIHRoZSBjb3JlIG9mIEJQRiBzb2NrZXQgbWVzc2FnZSBoYW5kbGluZy4gSXQncyB0b3VjaGluZyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAg4oCTIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcml0aWNhbCB0byBob3cgd2UgcHJvY2VzcyBzb2NrZXQgbWVzc2FnZXMgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgZGVwZW5kZW5jeSBvbiBgQ09ORklHX05FVF9TT0NLX01TR2AsIHdoaWNoIGlzIG5vIHN1cnByaXNlIGdpdmVuIHRoZSBjb250ZXh0LiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgbGlrZWx5IG5lZWRlZCwgb3IgYXQgbGVhc3QgaGlnaGx5IGFkdmlzYWJsZSwgdG8gYWN0dWFsbHkgKnVzZSogQlBGLlxuXG5CdXQsIGdpdmVuIHRoZSB1c2Ugb2YgYHNrYl9icGZfc3RycGFyc2VyKHNrYilgIGluIHRoZSBjb2RlLCBJJ20gZ2V0dGluZyBhIGh1bmNoIHRoYXQgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgbWlnaHQgYmUgaW1wbGljYXRlZCBoZXJlIGFzIHdlbGwuIExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gSSdsbCBjaGVjayBgbmV0L0tjb25maWdgIGFuZCBgbmV0L2NvcmUvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgTkVUX1NPQ0tfTVNHYCBhbmQgcmVsYXRlZCBjb25maWdzIGFyZSBkZWZpbmVkIGFuZCB3aGF0IHRoZWlyIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBhc3Nlc3NpbmcgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHBhdGNoJ3MgaW1wYWN0IGFuZCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBmb3IgaXRzIHByb3BlciBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNjoyNS42NDMyOTMzMzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTg0ODAxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TT0NLX01TR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ3OC1cXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTQ4MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjI3LjcwMTc4MjA0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTAzMTI3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBORVRfU09DS19NU0dgIFNlbGVjdG9ycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBORVRfU09DS19NU0dgIGlzIGJlaW5nIHV0aWxpemVkLCBzcGVjaWZpY2FsbHksIHdoZXJlIGl0J3MgYmVpbmcgKnNlbGVjdGVkKi4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGluc3RhbmNlcyB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgbWVzc2FnZSB0eXBlIGlzIHRoZSB0YXJnZXQgb2YgYSBzZWxlY3Rpb24gb3BlcmF0aW9uLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGNvbnRleHRzIGluIHdoaWNoIHRoaXMgc2VsZWN0b3IgaXMgdXNlZCwgd2hpY2ggd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB0aGUgY29yZSBtZWNoYW5pc21zIHRoYXQgYXJlIG1ha2luZyB1c2Ugb2YgdGhpcy4gV2UnbGwgc3RhcnQgd2l0aCB0aGUgY29kZSBhbmQgdHJhY2UgYmFjayBhcyBtdWNoIGFzIHBvc3NpYmxlLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGVyZSBJIGNhbiBpZGVudGlmeSB3aGF0J3Mgc2VsZWN0aW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTkyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6MzAuNjkyMDk4MjQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI1MjU3MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBORVRfU09DS19NU0dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTMzLVxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxua2VybmVsL2JwZi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbi0tXFxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbi0tXFxubmV0L0tjb25maWctMzY2LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L0tjb25maWc6MzY3OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy0zNjgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg1LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjQvS2NvbmZpZzozODY6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWctMzg3LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy05My1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY2L0tjb25maWc6OTQ6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWctOTUtXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbm5ldC90bHMvS2NvbmZpZzoxMTpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L3Rscy9LY29uZmlnLTEyLVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNjozMi40MTczNjUxMDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyNTU3ODc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBORVRfU09DS19NU0dgIEJQRiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgYE5FVF9TT0NLX01TR2AgY29kZXBhdGgganVtcHMgb3V0LiBJIHNlZSB0aGF0IGBCUEZfU1lTQ0FMTGAgc2VsZWN0cyBpdCB3aGVuIHRoZSBgTkVUYCBvcHRpb24gaXMgZW5hYmxlZCwgYW5kIGFsc28gdGhhdCBpdCdzIGxldmVyYWdlZCBieSBgQlBGX1NUUkVBTV9QQVJTRVJgLCBgSU5FVF9FU1BJTlRDUGAsIGBJTkVUNl9FU1BJTlRDUGAsIGFuZCBgVExTYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBjZW50cmFsIHRvIGhvdyBhIGxvdCBvZiBuZXR3b3JrIHRyYWZmaWMgaXMgYmVpbmcgaGFuZGxlZCBieSBCUEYsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgaG9uaW5nIGluIG9uIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBhcyB3ZWxsIGFzIGBza19wc29ja19za2JfaW5ncmVzc2AuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvYmFibHkgdGhlIGNvcmUgb2YgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCB2ZXJkaWN0IGFwcGxpY2F0aW9uIGxvZ2ljIHJlbGF0ZWQgdG8gXCJwZXItc29ja2V0IEJQRlwiLCBvciBwc29jay4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyB0cnVlLi4uXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYXJlIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIHN0YXRpYz8gWWVzLCB0aGV5IGFsbCBhcmUsIHNvIHRoZXkncmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0LiBUaGF0IG1ha2VzIGl0IGVhc2llciwgYnV0IG5vdyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZW0uIFRoaXMgd2lsbCBwcm9iYWJseSBsZWFkIG1lIHRvIHRoZSBrZXkgZW50cnlwb2ludHMgb2YgdGhlIEJQRiBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzg2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjM3Ljk0Mjk0NTg1MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NzE3MTMwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X2FwcGx5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9OTU5PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTk2LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTk3OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtOTk4LVxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEwODA9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExMDMtXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTEwNDpcXHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMTA1LW91dDpcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIwMz1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMjYtXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIyNzpcXHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjI4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNjozOS41OTAxMjQxMDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwMTIyNTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFBhY2tldCBTb2NrZXQgVmVyZGljdCBBcHBsaWNhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZXNlIHBhY2tldCBzb2NrZXQgdmVyZGljdHMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNydWNpYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgdGhlIGNvcmUgZnVuY3Rpb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBJdCdzIGNsZWFyIHRoYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYHNrX3Bzb2NrX3N0cnBfcmVhZGAgYW5kIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhcmUgdGhlIGNvbmR1aXRzIHRoYXQgZXZlbnR1YWxseSBwYXNzIHRoZSB2ZXJkaWN0cyBhbG9uZyB0byBiZSBhcHBsaWVkIGJ5IHRoZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZnVuY3Rpb24uIFRoaXMgc3VnZ2VzdHMgYSBjbGFzc2ljIHByb2R1Y2VyLWNvbnN1bWVyIHBhdHRlcm4sIHdoZXJlIHRoZSByZWFkIGFuZCByZWNlaXZlIGZ1bmN0aW9ucyBhY3QgYXMgdGhlIHByb2R1Y2VycywgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyB0aGUgY29uc3VtZXIgb2YgdGhlIHZlcmRpY3QgZGF0YS4gVGhlIGtleSBoZXJlIGlzIHRvIHNlZSBob3cgdGhlIGRhdGEgZmxvd3MgZnJvbSB0aGUgcmVhZCBhbmQgcmVjZWl2ZSBwYXRoIHRvIHRoZSBhcHBseSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBib3VuZGFyeSBvZiBlYWNoIG9mIHRoZXNlIHRocmVlIGZ1bmN0aW9ucywgaG93IHRoZSBkYXRhIGFuZCBtZXRhZGF0YSBhcmUgYmVpbmcgcGFzc2VkLCBhbmQgd2hhdCBkZWNpc2lvbnMgYXJlIGJlaW5nIG1hZGUuXG5cblRoaXMgZmxvdyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIHdpdGggYSBob2xpc3RpYyB2aWV3LiBJIHNob3VsZCBub3cgY2hlY2sgdGhlIGBza19wc29ja19za2JfaW5ncmVzc2AgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgaW5ncmVzcyBwYXRoLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBvdXIgb3RoZXIgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzAyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6NDQuMTkxMzUxODkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk3MDkyNTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NTMzPXN0YXRpYyBzdHJ1Y3Qgc2tfbXNnICpza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01NDQtXFxubmV0L2NvcmUvc2ttc2cuYzo1NDU6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy01NDYtXFx0XFx0XFx0XFx0XFx0dTMyIG9mZiwgdTMyIGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTg3LVxcbm5ldC9jb3JlL3NrbXNnLmM6NTg4OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTg5LVxcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTkxLVxcbm5ldC9jb3JlL3NrbXNnLmM6NTkyOnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za21zZy5jLTU5My1cXHRcXHRcXHRcXHR1MzIgb2ZmLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01OTktXFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNlc2sgPT0gc2spKVxcbm5ldC9jb3JlL3NrbXNnLmM6NjAwOlxcdFxcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlLFxcbm5ldC9jb3JlL3NrbXNnLmMtNjAxLVxcdFxcdFxcdFxcdFxcdFxcdCB0cnVlKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjEyLVxcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcXG5uZXQvY29yZS9za21zZy5jOjYxMzpcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0cnVlKTtcXG5uZXQvY29yZS9za21zZy5jLTYxNC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjIzLSAqL1xcbm5ldC9jb3JlL3NrbXNnLmM6NjI0OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtNjI1LVxcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjQxLVxcdG1zZy1cXHUwMDNlc2sgPSBzaztcXG5uZXQvY29yZS9za21zZy5jOjY0MjpcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0YWtlX3JlZik7XFxubmV0L2NvcmUvc2ttc2cuYy02NDMtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTY0OD1zdGF0aWMgaW50IHNrX3Bzb2NrX2hhbmRsZV9za2Ioc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjU2LVxcbm5ldC9jb3JlL3NrbXNnLmM6NjU3OlxcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbik7XFxubmV0L2NvcmUvc2ttc2cuYy02NTgtfVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05OTc9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwMTYtXFx0XFx0ICogcXVldWUgd29yayBvdGhlcndpc2Ugd2UgbWF5IGdldCBPT08gZGF0YS4gT3RoZXJ3aXNlLFxcbm5ldC9jb3JlL3NrbXNnLmM6MTAxNzpcXHRcXHQgKiBpZiBza19wc29ja19za2JfaW5ncmVzcyBlcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5XFxubmV0L2NvcmUvc2ttc2cuYy0xMDE4LVxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDMxLVxcdFxcdFxcdH1cXG5uZXQvY29yZS9za21zZy5jOjEwMzI6XFx0XFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcXG5uZXQvY29yZS9za21zZy5jLTEwMzMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UsIGNoYXJnZV9za2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNjo0NS44ODg0NTMzNTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY2MDU0NTgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGVCUEYgUGFja2V0IFNvY2tldCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBza19wc29ja19oYW5kbGVfc2tiYC4gTXkgbWVudGFsIG1vZGVsIHRlbGxzIG1lIHRoYXQgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGtleSByb2xlIGluIGhhbmRsaW5nIFNLQnMgKFNvY2tldCBCdWZmZXIpIHdpdGhpbiB0aGUgcGFja2V0IHNvY2tldCBjb250ZXh0LiBUaGUga2V5IHBvaW50IGlzOiB0aGlzIGZ1bmN0aW9uIGNhbGxzIGBza19wc29ja19za2JfaW5ncmVzc2AuIE5hdHVyYWxseSwgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhY2tldCBmbG93IGFuZCBlQlBGIGludGVncmF0aW9uLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGNhbGwgc2l0ZXMgb2YgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLiBVbmRlcnN0YW5kaW5nICpob3cqIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIGhvdyBlQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggcGFja2V0IHNvY2tldHMuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzLCBhbmQgdGhlbiBJJ2xsIGJlIGFibGUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGl0c2VsZiBhbmQgd2hhdCBpdCBkb2VzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA1OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjUxLjU0OTAwMTYwNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczOTM1MjA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19oYW5kbGVfc2tiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NjI0PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02NDctXFxubmV0L2NvcmUvc2ttc2cuYzo2NDg6c3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy02NDktXFx0XFx0XFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NjcyPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy03MTctXFx0XFx0XFx0aWYgKCFzb2NrX2ZsYWcocHNvY2stXFx1MDAzZXNrLCBTT0NLX0RFQUQpKVxcbm5ldC9jb3JlL3NrbXNnLmM6NzE4OlxcdFxcdFxcdFxcdHJldCA9IHNrX3Bzb2NrX2hhbmRsZV9za2IocHNvY2ssIHNrYiwgb2ZmLFxcbm5ldC9jb3JlL3NrbXNnLmMtNzE5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbGVuLCBpbmdyZXNzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6NTMuMjg4MzYwNTgzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzMwMjUyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhY2tldCBTb2NrZXQgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIHBhY2tldCBzb2NrZXQgaW1wbGVtZW50YXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIGBza19wc29ja19iYWNrbG9nYCBpcyB0aGUgY29yZSBvZiBob3cgdGhpbmdzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgY2FsbGluZyBgc2tfcHNvY2tfaGFuZGxlX3NrYmAuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgdGhyZWUga2V5IGZ1bmN0aW9uczogYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgYHNrX3Bzb2NrX2JhY2tsb2dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBmbG93cyB0aHJvdWdoIHRoZXNlLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3Q6IGxldCdzIHNlZSBob3cgdmlzaWJsZSB0aGVzZSBmdW5jdGlvbnMgYXJlLiBUaGUgZmFjdCB0aGF0IHRoZXkncmUgZGVjbGFyZWQgYXMgc3RhdGljIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhleSdyZSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBtZWFucyB0aGV5J3JlIHVzZWQgb25seSB3aXRoaW4gdGhlIHBhY2tldCBzb2NrZXQgY29kZS4gVGhpcyBpbiB0dXJuLCBtZWFucyBJJ20gZ29pbmcgdG8gaGF2ZSB0byBmaW5kIGhvdyB0aGV5J3JlICppbnZva2VkKiB2aWEgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gbm93IGZpbmQgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb25zLCBvciBhbnkgY2FsbGJhY2tzIHRoYXQgKmRvKiBleGlzdCwgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU4MCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM2OjU3LjM2MTM4ODQ1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ4MTAwNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3N0cnBfcmVhZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEwNjI9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDc5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jOjEwODA6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2ttc2cuYy0xMDgxLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTEwOC1cXG5uZXQvY29yZS9za21zZy5jOjExMDk6c3RhdGljIGludCBza19wc29ja19zdHJwX3JlYWRfZG9uZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTExMC17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTExNDg9aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNTItXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdHJwX2NhbGxiYWNrcyBjYiA9IHtcXG5uZXQvY29yZS9za21zZy5jOjExNTM6XFx0XFx0LnJjdl9tc2dcXHQ9IHNrX3Bzb2NrX3N0cnBfcmVhZCxcXG5uZXQvY29yZS9za21zZy5jOjExNTQ6XFx0XFx0LnJlYWRfc29ja19kb25lXFx0PSBza19wc29ja19zdHJwX3JlYWRfZG9uZSxcXG5uZXQvY29yZS9za21zZy5jLTExNTUtXFx0XFx0LnBhcnNlX21zZ1xcdD0gc2tfcHNvY2tfc3RycF9wYXJzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6MzY6NTkuMTA5NDk1MDU5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDI0MTM5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06XG5cbioqRGVsdmluZyBpbnRvIHRoZSBgc2tfcHNvY2tgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgc2tfcHNvY2tfc3RycF9yZWFkYCBpcyBiZWluZyB1c2VkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aGluIGBza19wc29ja19pbml0X3N0cnBgLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgaG9vay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgZG9lcyB0aGlzIHJlYWQgZnVuY3Rpb24gYWN0dWFsbHkgKmdldCogdXNlZCBhbmQgd2hhdCdzIHRoZSBwdXJwb3NlP1wiIFRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cuIGBza19wc29ja19pbml0X3N0cnBgIHNldHMgaXQgdXAsIGJ1dCBpdCdzIHRoZSAqdXNhZ2UqIHRoYXQgbWF0dGVycy4gV2hlcmUgYW5kIGhvdyBpcyB0aGUgcmVhZCBwZXJmb3JtZWQ/XG5cblNpbmNlIGl0J3MgYSBgc2tfcHNvY2tgIGZ1bmN0aW9uLCBJ4oCZbSBndWVzc2luZyBpdCBoYXMgdG8gZGVhbCB3aXRoIHBhY2tldCBzb2NrZXQgdmVyZGljdHMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZWFkIG9wZXJhdGlvbiB3b3JrcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIGhvdyBhbmQgd2hlcmUgaXQgbWlnaHQgaGFuZGxlIHZlcmRpY3RzLiBTbywgbGV04oCZcyBnbyBkaXJlY3RseSB0byBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCBhbmQgc2VlIGhvdyBpdCBpcyB3b3JraW5nLCBub3cuIEhvcGVmdWxseSwgSSdsbCBmaW5kIGFuIGFuc3dlciB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNzowNS42NTE5MTIwMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzE5NTcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X3JlY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz0xMTk4PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjAyLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIwMzpzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2ttc2cuYy0xMjA0LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIzNT1zdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjUxLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTI1MjpcXHRjb3BpZWQgPSBvcHMtXFx1MDAzZXJlYWRfc2tiKHNrLCBza19wc29ja192ZXJkaWN0X3JlY3YpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTI1My1cXHRpZiAoY29waWVkIFxcdTAwM2U9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6Mzc6MDcuMzI1MTEzMDIxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTQxMjQzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgU29ja2V0IFZlcmRpY3QgUGF0aCoqXG5cbkFscmlnaHQsIEknbSB0cmFjaW5nIHRocm91Z2ggdGhpcyBwYWNrZXQgc29ja2V0IGNvZGUsIGFuZCBJIHNlZSB0aGF0IGBza19wc29ja192ZXJkaWN0X3JlY3ZgIGlzIGJlaW5nIHBhc3NlZCBpbnRvIGBvcHMtXHUwMDNlcmVhZF9za2JgIHdpdGhpbiB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAgZnVuY3Rpb24uIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIGRpcmVjdCBsaW5rIGJldHdlZW4gcmVjZWl2aW5nIGRhdGEgYW5kIG1ha2luZyBhIHZlcmRpY3Qgb24gaXQsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgcGFja2V0IHNvY2tldCdzIHJvbGUuXG5cbk5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgc2tfcHNvY2tfYmFja2xvZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYmFja2xvZyBpcyBpbnZvbHZlZCBoZXJlLiBJcyB0aGlzIHdoZXJlIHRoZSB2ZXJkaWN0IGluZm9ybWF0aW9uIGlzIHF1ZXVlZCBvciBwcm9jZXNzZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgb3BzLVx1MDAzZXJlYWRfc2tiYD8gSXMgdGhpcyBmdW5jdGlvbiBkZWFsaW5nIHdpdGggdGhlIHZlcmRpY3QgZGF0YSB0aGF0IGlzIGluIHRoZSBiYWNrbG9nPyBQZXJoYXBzIHRoZSBiYWNrbG9nIGlzIHdoZXJlIHBhY2tldHMgYXJlIGJ1ZmZlcmVkLCBhbmQgbm93IHdlJ3JlIHB1bGxpbmcgdGhlbSBvZmYsIGp1ZGdpbmcgdGhlbSwgYW5kIHRoZW4gZmVlZGluZyB0aGVtIGludG8gdGhlIHJlYWQgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gdG8gZnVsbHkgZ3Jhc3AgdGhlIHdvcmtmbG93LiBLbm93aW5nIGhvdyB0aGUgYmFja2xvZyBmdW5jdGlvbnMgaW4gdGhlIGNvbnRleHQgb2YgdmVyZGljdHMgaXMgY3J1Y2lhbCwgb3RoZXJ3aXNlLCBJIGRvbid0IHJlYWxseSBrbm93IGhvdyB0aGUgdmVyZGljdCBmdW5jdGlvbnMgaW4gYSBwYWNrZXQgc29ja2V0LiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBsb29raW5nIGF0IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgYW5kIHRoZW4gdGhlIGZ1bmN0aW9uIGNhbGxzIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSB2ZXJkaWN0IGRlY2lzaW9ucyBhcmUgbWFkZSwgc28gSSBjYW4gc3RhcnQgdHJhY2luZyBiYWNrd2FyZCBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgyMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDExOjM3OjEyLjExOTI0MDIyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MTIwNTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19iYWNrbG9nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NjYwPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3NrYl9zdGF0ZShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02NzEtXFxubmV0L2NvcmUvc2ttc2cuYzo2NzI6c3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L2NvcmUvc2ttc2cuYy02NzMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz03NTE9c3RydWN0IHNrX3Bzb2NrICpza19wc29ja19pbml0KHN0cnVjdCBzb2NrICpzaywgaW50IG5vZGUpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTc4NS1cXG5uZXQvY29yZS9za21zZy5jOjc4NjpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmssIHNrX3Bzb2NrX2JhY2tsb2cpO1xcbm5ldC9jb3JlL3NrbXNnLmMtNzg3LVxcdG11dGV4X2luaXQoXFx1MDAyNnBzb2NrLVxcdTAwM2V3b3JrX211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6Mzc6MTMuODAwNDUxNjk0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDg0MjEzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhY2tldCBTb2NrZXQgV29ya3F1ZXVlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc2tfcHNvY2tfYmFja2xvZ2AgdGhpbmcuIFJpZ2h0LCBpdCdzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLiBUaGF0IHRlbGxzIG1lIHRoZSBjb3JlIGludGVyYWN0aW9uIHBvaW50cyBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgZnVuY3Rpb25zIEkganVzdCBoaWdobGlnaHRlZDogYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBgc2tfcHNvY2tfYmFja2xvZ2AgaXRzZWxmLCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIGJpdC4gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFyZSBzdGF0aWMuIFRoYXQncyBpbW1lZGlhdGVseSByZWxldmFudCBiZWNhdXNlIFN5emthbGxlciBtaWdodCBub3QgYmUgYWJsZSB0byBkaXJlY3RseSBjYWxsIHRoZW0uIEhvd2V2ZXIsIGlmIHRoZXkncmUgdGhlIG9uZXMgYmVpbmcgbW9kaWZpZWQsIHRoZXkncmUgZGVmaW5pdGVseSB0YXJnZXRzIEkgbmVlZCB0byB3YXRjaC4gSSdsbCBtYWtlIHN1cmUgdGhleSdyZSBsaXN0ZWQgaW4gYEZvY3VzU3ltYm9sc2AuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19ORVRfU09DS19NU0dgIGlzIHRoZSBiaWcgb25lLCB0aGF0J3MgZXhwZWN0ZWQuIEFuZCwgYXMgc3VzcGVjdGVkLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIG11c3QuIFRoZW4sIHRoZXJlJ3MgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAuIEkgbmVlZCB0aGF0IGJlY2F1c2UgaXQgZW5hYmxlcyBgc2tiX2JwZl9zdHJwYXJzZXJgLiBJJ2xsIHF1aWNrbHkgY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGV0YWlscyBhcm91bmQgYEJQRl9TVFJFQU1fUEFSU0VSYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHZpZXcgb2YgdGhlIGRlcGVuZGVuY3kgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6Mzc6MTkuNDA4ODc2MTg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI4NzY0NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxcbi0tXFxubmV0L0tjb25maWctMzYwLVxcbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZy0zNjItXFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMTozNzoyMS4yMzc2NDg1NDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMTczNjM1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhhdCBgQlBGX1NUUkVBTV9QQVJTRVJgIGlzIGVuYWJsZWQgaW4gYG5ldC9LY29uZmlnYC4gRXhjZWxsZW50LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgTkVUX1NPQ0tfTVNHYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhbG9uZSBjb3ZlciB0aGUgY2hhbmdlcy4gWWVwLCBsb29rcyBnb29kOyB0aGV5IGVuY29tcGFzcyB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBTaW5jZSB0aGlzIHBhdGNoIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMsIGl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCBkZXNlcnZlcyBhIGZ1enppbmcgY2FtcGFpZ24uXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBzZWUgdGhlc2UgZnVuY3Rpb25zIHJpZ2h0IGF3YXk6IGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLCBgc2tfcHNvY2tfc3RycF9yZWFkYCwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAsIGFuZCBgc2tfcHNvY2tfYmFja2xvZ2AuIFdhaXQsIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgaW4gdGhlIGRpZmY/IEFoLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZWAgaXMgbmVhcmJ5LCBhbHRob3VnaCBub3QgbW9kaWZpZWQuIEknbGwgc3RpY2sgdG8gdGhlIGRpcmVjdGx5IG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlaXIgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgbWVhbnMgZm9jdXNpbmcgb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLlxuXG5MZXQgbWUgdmVyaWZ5IGEgcXVpY2sgZGV0YWlsOiBBcmUgdGhlc2Ugc3RhdGljPyBZZXMsIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhcmUgYWxsIHN0YXRpYy4gR29vZC4gSSdsbCBpbmNsdWRlIHRoZXNlIGFzIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuTm93IGZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBgTkVUX1NPQ0tfTVNHYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBCUEZfU1lTQ0FMTGAgd2lsbCBkbyB0aGUgdHJpY2suXG5cbkp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc2lnbmlmaWNhbnQuIFRoZSBwYXRjaCBtb2RpZmllcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgdG8gdGFrZSBhIGBib29sIGNoYXJnZV9za2JgLiBJZiB0aGlzIGlzIHRydWUsIGl0IGNhbGxzIGBza2Jfc2V0X293bmVyX3Ioc2tiLCBzaylgLiBBaCwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY291bnRpbmcgZm9yIFNLQnMgaW4gcHNvY2sgaW5ncmVzcyEgQWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEyNSwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTE6Mzc6MzEuNDU1MDE0NzA2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwODY2MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TT0NLX01TR1wiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tfcHNvY2tfdmVyZGljdF9hcHBseVwiLFxuICAgIFwic2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZlwiLFxuICAgIFwic2tfcHNvY2tfc2tiX2luZ3Jlc3NcIixcbiAgICBcInNrX3Bzb2NrX3N0cnBfcmVhZFwiLFxuICAgIFwic2tfcHNvY2tfdmVyZGljdF9yZWN2XCIsXG4gICAgXCJza19wc29ja19iYWNrbG9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhY2NvdW50aW5nIGxvZ2ljIGZvciBza2JzIGluIHRoZSBCUEYgcHNvY2sgaW5ncmVzcyBwYXRoLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBjaGFyZ2Vfc2tiYCBwYXJhbWV0ZXIgdG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCBgc2tiX3NldF9vd25lcl9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZy9CUEYgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TT0NLX01TR1wiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tfcHNvY2tfdmVyZGljdF9hcHBseVwiLFxuICAgIFwic2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZlwiLFxuICAgIFwic2tfcHNvY2tfc2tiX2luZ3Jlc3NcIixcbiAgICBcInNrX3Bzb2NrX3N0cnBfcmVhZFwiLFxuICAgIFwic2tfcHNvY2tfdmVyZGljdF9yZWN2XCIsXG4gICAgXCJza19wc29ja19iYWNrbG9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhY2NvdW50aW5nIGxvZ2ljIGZvciBza2JzIGluIHRoZSBCUEYgcHNvY2sgaW5ncmVzcyBwYXRoLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBjaGFyZ2Vfc2tiYCBwYXJhbWV0ZXIgdG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCBgc2tiX3NldF9vd25lcl9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZy9CUEYgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhjdr7[1] Phase: Succeeded StartedAt: 2026-07-24 11:37:43 +0000 UTC FinishedAt: 2026-07-24 11:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 11:37:43 +0000 UTC FinishedAt: 2026-07-24 11:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2] Phase: Succeeded StartedAt: 2026-07-24 11:37:43 +0000 UTC FinishedAt: 2026-07-24 16:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 11:37:43 +0000 UTC FinishedAt: 2026-07-24 16:17:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 11:37:43 +0000 UTC FinishedAt: 2026-07-24 11:37:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 11:37:43 +0000 UTC FinishedAt: 2026-07-24 11:37:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhjdr7/series-workflowhjdr7-convert-artifact-4278117492/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 11:37:53 +0000 UTC FinishedAt: 2026-07-24 12:22:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 11:37:53 +0000 UTC FinishedAt: 2026-07-24 12:22:59 +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:*a9a2f956-7dba-4f8e-8253-789c4d6256c6,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-workflowhjdr7/series-workflowhjdr7-convert-artifact-4278117492/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": "fa585c03-9a4c-4d01-a246-3518e4d934e6", "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-workflowhjdr7/series-workflowhjdr7-build-action-4171811186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 11:37:53 +0000 UTC FinishedAt: 2026-07-24 12:22:49 +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:*a9a2f956-7dba-4f8e-8253-789c4d6256c6,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-workflowhjdr7/series-workflowhjdr7-convert-artifact-4278117492/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": "fa585c03-9a4c-4d01-a246-3518e4d934e6", "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-workflowhjdr7/series-workflowhjdr7-build-action-4171811186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 12:22:59 +0000 UTC FinishedAt: 2026-07-24 12:22:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 12:22:59 +0000 UTC FinishedAt: 2026-07-24 12:22:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 12:22:59 +0000 UTC FinishedAt: 2026-07-24 12:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 12:22:59 +0000 UTC FinishedAt: 2026-07-24 12:23:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhjdr7/series-workflowhjdr7-convert-artifact-3966003507/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 12:23:09 +0000 UTC FinishedAt: 2026-07-24 12:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 12:23:09 +0000 UTC FinishedAt: 2026-07-24 12:25:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fa585c03-9a4c-4d01-a246-3518e4d934e6,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-workflowhjdr7/series-workflowhjdr7-build-action-4171811186/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-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 12:25:11 +0000 UTC FinishedAt: 2026-07-24 12:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 12:25:11 +0000 UTC FinishedAt: 2026-07-24 12:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 12:25:11 +0000 UTC FinishedAt: 2026-07-24 13:12:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 12:25:11 +0000 UTC FinishedAt: 2026-07-24 13:12:10 +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:*a9a2f956-7dba-4f8e-8253-789c4d6256c6,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-workflowhjdr7/series-workflowhjdr7-convert-artifact-3966003507/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": "2e8c2d84-38b9-4271-bf2b-c0ff4fa82719", "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-workflowhjdr7/series-workflowhjdr7-build-action-2621796839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 12:25:11 +0000 UTC FinishedAt: 2026-07-24 13:12:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a9a2f956-7dba-4f8e-8253-789c4d6256c6,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-workflowhjdr7/series-workflowhjdr7-convert-artifact-3966003507/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": "2e8c2d84-38b9-4271-bf2b-c0ff4fa82719", "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-workflowhjdr7/series-workflowhjdr7-build-action-2621796839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 13:12:10 +0000 UTC FinishedAt: 2026-07-24 13:12:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 13:12:10 +0000 UTC FinishedAt: 2026-07-24 13:12:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 13:12:10 +0000 UTC FinishedAt: 2026-07-24 13:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 13:12:10 +0000 UTC FinishedAt: 2026-07-24 13:14:13 +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:*2e8c2d84-38b9-4271-bf2b-c0ff4fa82719,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-workflowhjdr7/series-workflowhjdr7-build-action-2621796839/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-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 13:14:23 +0000 UTC FinishedAt: 2026-07-24 16:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 13:14:23 +0000 UTC FinishedAt: 2026-07-24 16:17:41 +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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"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:*fa585c03-9a4c-4d01-a246-3518e4d934e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2e8c2d84-38b9-4271-bf2b-c0ff4fa82719,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-workflowhjdr7/series-workflowhjdr7-build-action-4171811186/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-workflowhjdr7/series-workflowhjdr7-build-action-2621796839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 13:14:23 +0000 UTC FinishedAt: 2026-07-24 13:14:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 13:14:23 +0000 UTC FinishedAt: 2026-07-24 13:14:28 +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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"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-workflowhjdr7/series-workflowhjdr7-convert-artifact-1421201708/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 13:14:23 +0000 UTC FinishedAt: 2026-07-24 13:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 13:14:23 +0000 UTC FinishedAt: 2026-07-24 13:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 13:14:23 +0000 UTC FinishedAt: 2026-07-24 13:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 13:14:33 +0000 UTC FinishedAt: 2026-07-24 16:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjdr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["sk_psock_verdict_apply","sk_psock_skb_ingress_self","sk_psock_skb_ingress","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_backlog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55c7bd2ddee50fd37b3b4c0b7a76bb0fd565f38b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SOCK_MSG","BPF_STREAM_PARSER","BPF_SYSCALL"],"series_id":"aeefb1be-60f3-485d-a98a-698baee92375","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 13:14:33 +0000 UTC FinishedAt: 2026-07-24 16:17:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fa585c03-9a4c-4d01-a246-3518e4d934e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2e8c2d84-38b9-4271-bf2b-c0ff4fa82719,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-workflowhjdr7/series-workflowhjdr7-build-action-4171811186/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-workflowhjdr7/series-workflowhjdr7-build-action-2621796839/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-workflowhjdr7/series-workflowhjdr7-convert-artifact-1421201708/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,}