Name: series-workflow2d9t2 Phase: Succeeded StartedAt: 2026-09-01 23:55:41 +0000 UTC FinishedAt: 2026-09-02 00:43:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[0] Phase: Succeeded StartedAt: 2026-09-01 23:55:41 +0000 UTC FinishedAt: 2026-09-01 23:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 23:55:41 +0000 UTC FinishedAt: 2026-09-01 23:58:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "64BIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "64BIT" ], "series_id": "baeff589-2b84-4aa1-9616-3c5d6f805138" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_jit_emit_insn", "bpf_int_jit_compile" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7NjRCSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleGNlcHRpb24gdGFibGUgcmVnaXN0cmF0aW9uIGxvZ2ljIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlciAoYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgKS4gSXQgbW92ZXMgb3Bjb2RlIGNoZWNrcyAoYGluc25faXNfcHJvYmVfbGR4KClgLCBgQlBGX1BST0JFX01FTTMyYCwgYEJQRl9QUk9CRV9BVE9NSUNgKSBmcm9tIHdpdGhpbiBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKClgIHRvIGl0cyBjYWxsZXJzIGluIGBicGZfaml0X2VtaXRfaW5zbigpYC5cblxuVGhpcyBpcyBwdXJlbHkgSklUIGNvZGUgZW1pc3Npb24gYW5kIGludGVybmFsIGV4Y2VwdGlvbiB0YWJsZSBib29ra2VlcGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyBoYW5kbGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIgKGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMpLCByZWZhY3RvcmluZyBob3cgYW5kIHdoZW4gZXhjZXB0aW9uIHRhYmxlIGhhbmRsZXJzIGFyZSBhdHRhY2hlZCB0byBwcm9iZSBsb2FkLCBzdG9yZSwgYW5kIGF0b21pYyBpbnN0cnVjdGlvbnMuIFRoaXMgYWZmZWN0cyBmdW5jdGlvbmFsIEJQRiBjb2RlIGdlbmVyYXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGluIFJJU0MtViBKSVQsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUgcmlzY3Y2NCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZmIwNWY1NzI3OGU0ZTEwNjBlMzMwMTQ3N2U2MTlmMTJiNWQ1YTNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMzo1Njo0OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggZTczNzhiZTE3MWE5Zi4uNzI2YzAxNjlmYzYwZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC03MzEsOSAmIzQzOzczMSw4IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tLyogRm9yIGFjY2Vzc2VzIHRvIEJURiBwb2ludGVycywgYWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgKi9cbi1zdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuLVx0XHRcdFx0IHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuJiM0MzsvKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSBmb3IgYSBmYXVsdGluZyBwcm9iZSBpbnNuICovXG4mIzQzO3N0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcbiBcdHVuc2lnbmVkIGxvbmcgcGM7XG5AQCAtNzQ0LDE0ICYjNDM7NzQzLDYgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcbiBcdCAgICBjdHgtXHUwMDNlZXhfaW5zbl9vZmYgXHUwMDNjPSAwIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTVNYIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCBcdTAwMjZcdTAwMjZcbi1cdCAgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MRFgpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cdTAwM2VuZXhlbnRyaWVzIFx1MDAzZT0gY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0xMzYwLDYgJiM0MzsxMzUxLDE1IEBAIGludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLFxuIFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IHNpemU7XG4gfVxuIFxuJiM0MzsvKiBQcm9iZSBsb2FkcyBmYXVsdCBvbiB1bm1hcHBlZCBtZW1vcnkgYW5kIG5lZWQgYW4gZXhjZXB0aW9uIHRhYmxlIGVudHJ5ICovXG4mIzQzO3N0YXRpYyBib29sIGluc25faXNfcHJvYmVfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0gfHxcbiYjNDM7XHQgICAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHxcbiYjNDM7XHQgICAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcbiYjNDM7XHQgICAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdFx0ICAgICAgYm9vbCBleHRyYV9wYXNzKVxuIHtcbkBAIC0xOTI5LDkgJiM0MzsxOTI5LDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFxuIFx0XHRlbWl0X2xkeChyZCwgb2ZmLCBycywgQlBGX1NJWkUoY29kZSksIHNpZ25fZXh0LCBjdHgpO1xuIFxuLVx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgcmQsIGN0eCk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChpbnNuX2lzX3Byb2JlX2xkeChpbnNuKSkge1xuJiM0MztcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIocmQsIGN0eCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0aWYgKEJQRl9TSVpFKGNvZGUpICE9IEJQRl9EVyBcdTAwMjZcdTAwMjYgaW5zbl9pc196ZXh0KFx1MDAyNmluc25bMV0pKVxuIFx0XHRcdHJldHVybiAxO1xuQEAgLTE5NTksOSAmIzQzOzE5NjEsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXG4gXHRcdGVtaXRfc3QocmQsIG9mZiwgaW1tLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4mIzQzO1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXG4gXHQvKiBTVFg6ICooc2l6ZSAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyYyAqL1xuQEAgLTE5ODEsOSAmIzQzOzE5ODUsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXG4gXHRcdGVtaXRfc3R4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4mIzQzO1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXG4gXHQvKiBBdG9taWNzICovXG5AQCAtMjAwMSw3ICYjNDM7MjAwNyw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHRcdHJldCA9IGVtaXRfYXRvbWljX3JtdyhyZCwgcnMsIGluc24sIGN0eCk7XG4gXG4gXHRcdC8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqL1xuLVx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxuIFx0XHRcdCAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50b1xuQEAgLTIwMTAsNyAmIzQzOzIwMTYsNyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdFx0XHQgKi9cbiBcdFx0XHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuIFxuLVx0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBsb2FkX3JlZyBcdTAwM2MgMCA/XG4mIzQzO1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihsb2FkX3JlZyBcdTAwM2MgMCA/XG4gXHRcdFx0XHRcdFJFR19ET05UX0NMRUFSX01BUktFUiA6IHJlZ21hcFtsb2FkX3JlZ10sXG4gXHRcdFx0XHRcdGN0eCkgPzogcmV0O1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDs2NEJJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciAoYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyksIHJlZmFjdG9yaW5nIGhvdyBhbmQgd2hlbiBleGNlcHRpb24gdGFibGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvIHByb2JlIGxvYWQsIHN0b3JlLCBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBhZmZlY3RzIGZ1bmN0aW9uYWwgQlBGIGNvZGUgZ2VuZXJhdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgaW4gUklTQy1WIEpJVCwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVSByaXNjdjY0IGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNmYjA1ZjU3Mjc4ZTRlMTA2MGUzMzAxNDc3ZTYxOWYxMmI1ZDVhM2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjU2OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggZTczNzhiZTE3MWE5Zi4uNzI2YzAxNjlmYzYwZiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCkBAIC03MzEsOSAmIzQzOzczMSw4IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qIEZvciBhY2Nlc3NlcyB0byBCVEYgcG9pbnRlcnMsIGFkZCBhbiBlbnRyeSB0byB0aGUgZXhjZXB0aW9uIHRhYmxlICovCi1zdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLAotCQkJCSBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCkKJiM0MzsvKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSBmb3IgYSBmYXVsdGluZyBwcm9iZSBpbnNuICovCiYjNDM7c3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW50IGRzdF9yZWcsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4OwogCXVuc2lnbmVkIGxvbmcgcGM7CkBAIC03NDQsMTQgJiM0Mzs3NDMsNiBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLAogCSAgICBjdHgtJmd0O2V4X2luc25fb2ZmICZsdDs9IDAgfHwgY3R4LSZndDtleF9qbXBfb2ZmICZsdDs9IDApCiAJCXJldHVybiAwOwogCi0JaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0gJmFtcDsmYW1wOwotCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggJmFtcDsmYW1wOwotCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgJmFtcDsmYW1wOwotCSAgICAhKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYICZhbXA7JmFtcDsKLQkgICAgICBCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0xEWCkgJmFtcDsmYW1wOwotCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKQotCQlyZXR1cm4gMDsKLQogCWlmIChXQVJOX09OX09OQ0UoY3R4LSZndDtuZXhlbnRyaWVzICZndDs9IGN0eC0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDtudW1fZXhlbnRyaWVzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEzNjAsNiAmIzQzOzEzNTEsMTUgQEAgaW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsCiAJcmV0dXJuIHJldCAmbHQ7IDAgPyByZXQgOiBzaXplOwogfQogCiYjNDM7LyogUHJvYmUgbG9hZHMgZmF1bHQgb24gdW5tYXBwZWQgbWVtb3J5IGFuZCBuZWVkIGFuIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSAqLwomIzQzO3N0YXRpYyBib29sIGluc25faXNfcHJvYmVfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKJiM0Mzt7CiYjNDM7CXJldHVybiBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNIHx8CiYjNDM7CSAgICAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHwKJiM0MzsJICAgICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMiB8fAomIzQzOwkgICAgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7CiYjNDM7fQomIzQzOwogaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAJCSAgICAgIGJvb2wgZXh0cmFfcGFzcykKIHsKQEAgLTE5MjksOSAmIzQzOzE5MjksMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAKIAkJZW1pdF9sZHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBzaWduX2V4dCwgY3R4KTsKIAotCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgcmQsIGN0eCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKGluc25faXNfcHJvYmVfbGR4KGluc24pKSB7CiYjNDM7CQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKHJkLCBjdHgpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAKIAkJaWYgKEJQRl9TSVpFKGNvZGUpICE9IEJQRl9EVyAmYW1wOyZhbXA7IGluc25faXNfemV4dCgmYW1wO2luc25bMV0pKQogCQkJcmV0dXJuIDE7CkBAIC0xOTU5LDkgJiM0MzsxOTYxLDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCiAJCWVtaXRfc3QocmQsIG9mZiwgaW1tLCBCUEZfU0laRShjb2RlKSwgY3R4KTsKIAotCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHsKJiM0MzsJCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAJCWJyZWFrOwogCiAJLyogU1RYOiAqKHNpemUgKikoZHN0ICYjNDM7IG9mZikgPSBzcmMgKi8KQEAgLTE5ODEsOSAmIzQzOzE5ODUsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAKIAkJZW1pdF9zdHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBjdHgpOwogCi0JCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMikgewomIzQzOwkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAkJYnJlYWs7CiAKIAkvKiBBdG9taWNzICovCkBAIC0yMDAxLDcgJiM0MzsyMDA3LDcgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAJCQlyZXQgPSBlbWl0X2F0b21pY19ybXcocmQsIHJzLCBpbnNuLCBjdHgpOwogCiAJCS8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqLwotCQlpZiAocmV0ICZndDs9IDApIHsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHsKIAkJCS8qCiAJCQkgKiBBIGxvYWQtYWNxdWlyZSByZWFkcyBpbnRvIGRzdF9yZWcsIGFuZCBhIHJlYWQtbW9kaWZ5LXdyaXRlCiAJCQkgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG8KQEAgLTIwMTAsNyAmIzQzOzIwMTYsNyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwKIAkJCSAqLwogCQkJaW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTsKIAotCQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnICZsdDsgMCA/CiYjNDM7CQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGxvYWRfcmVnICZsdDsgMCA/CiAJCQkJCVJFR19ET05UX0NMRUFSX01BUktFUiA6IHJlZ21hcFtsb2FkX3JlZ10sCiAJCQkJCWN0eCkgPzogcmV0OwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgYSBwYXRjaCwgc3BlY2lmaWNhbGx5IG9uZSBpbXBhY3RpbmcgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlICYjMzQ7d2hhdCYjMzQ7IOKAkyB3aGF0IGlzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgY2hhbmdpbmcgaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgPyBUaGlzIGZpbGUsIGJlaW5nIHdpdGhpbiB0aGUgUklTQy1WIG5ldHdvcmsgc3RhY2sgYW5kIHJlbGF0ZWQgdG8gdGhlIEJQRiBKSVQgY29tcGlsZXIsIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcmVhLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBzb21lIGFjdHVhbCBpbmZvcm1hdGlvbi4gVGltZSB0byBicmluZyBvdXQgdGhlIHRvb2xzLiBJJiMzOTtsbCBuZWVkIHRvIGdhaW4gc29tZSBjb250ZXh0IGZyb20gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRvIGRvIHRoYXQsIEkmIzM5O2xsIGxldmVyYWdlIGBncmVwcGVyYCAob3IgYHJlYWQtZmlsZWAgaWYgdGhhdCYjMzk7cyBtb3JlIGFwcHJvcHJpYXRlKSwgdGFyZ2V0aW5nIGJvdGggdGhlIGBicGZfaml0X2NvbXA2NC5jYCBmaWxlIGl0c2VsZiAqYW5kKiB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBhbmQgYEtjb25maWdgIGZpbGVzIGxvY2F0ZWQgaW4gYGFyY2gvcmlzY3YvbmV0L2AuIFRoZXNlIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZmlsZSBpcyBidWlsdCwgbGlua2VkLCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGxhcmdlciBSSVNDLVYga2VybmVsIG1vZHVsZS4gVGhlbiwgSSBjYW4gc3RhcnQgdG8gZm9ybSBhbiBpZGVhIG9mIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgd2hlcmUgaXQgbGFuZHMsIHNvIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYW4gaW5mb3JtZWQgb3Bpbmlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXA2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU9NT1pZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU6NjpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wNjQubyBicGZfdGltZWRfbWF5X2dvdG8ub1xuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtNy1lbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlcioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgcGlucG9pbnQgYSBzcGVjaWZpYyBhcmVhLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgcmVtZW1iZXIgaXQgaG91c2VzIHRoZSBjb3JlIEpJVCBjb21waWxhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgYnBmX2ppdF9lbWl0X2luc25gIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbmRpdmlkdWFsIEJQRiBpbnN0cnVjdGlvbnMgYXJlIHRyYW5zbGF0ZWQgaW50byBSSVNDLVYgbWFjaGluZSBjb2RlLCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBsb2N1cyBvZiBhbnkgb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBidWdzIGluIEpJVCBlbWlzc2lvbi4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgb3V0IGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLiBUaGF0JiMzOTtzIHdoZXJlIHdlIG1hbmFnZSB0aGUgaGFuZGxpbmcgb2YgZXhjZXB0aW9ucyB0aGF0IG1pZ2h0IG9jY3VyIGR1cmluZyBleGVjdXRpb24gb2YgSklUIGNvbXBpbGVkIGNvZGU7IG9mdGVuIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBpc3N1ZXMgb3IgZGl2aWRlIGJ5IHplcm8gZXJyb3JzLiBCb3RoIG9mIHRob3NlIGFyZSBwcmV0dHkgY3JpdGljYWwgYXJlYXMgdGhhdCBJIHdhbnQgdG8gc3R1ZHkgaW4gZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGluc3RydWN0aW9ucyBhcmUgYmVpbmcgbGFpZCBvdXQsIGhvdyBleGNlcHRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGF0IHRyYW5zbGF0ZWQgY29kZSBhbmQgaG93IHRoYXQgYWxsIHRpZXMgaW4gd2l0aCB0aGUgb3ZlcmFsbCBrZXJuZWwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMwOlx0XG4gNzMxOlx0XHRyZXR1cm4gdHJ1ZTtcbiA3MzI6XHR9XG4gNzMzOlx0XG4gNzM0Olx0LyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqL1xuIDczNTpcdHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiA3MzY6XHR7XG4gNzM3Olx0XHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcbiA3Mzg6XHRcdHVuc2lnbmVkIGxvbmcgcGM7XG4gNzM5Olx0XHRvZmZfdCBpbnNfb2Zmc2V0O1xuIDc0MDpcdFx0b2ZmX3QgZml4dXBfb2Zmc2V0O1xuIDc0MTpcdFxuIDc0MjpcdFx0aWYgKCFjdHgtXHUwMDNlaW5zbnMgfHwgIWN0eC1cdTAwM2Vyb19pbnNucyB8fCAhY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWV4dGFibGUgfHxcbiA3NDM6XHRcdCAgICBjdHgtXHUwMDNlZXhfaW5zbl9vZmYgXHUwMDNjPSAwIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzYz0gMClcbiA3NDQ6XHRcdFx0cmV0dXJuIDA7XG4gNzQ1Olx0XG4gNzQ2Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cdTAwM2VuZXhlbnRyaWVzIFx1MDAzZT0gY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMpKVxuIDc0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NDg6XHRcbiA3NDk6XHRcdGlmIChXQVJOX09OX09OQ0UoY3R4LVx1MDAzZWV4X2luc25fb2ZmIFx1MDAzZSBjdHgtXHUwMDNlbmluc25zIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzZSBjdHgtXHUwMDNlbmluc25zKSlcbiA3NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzUxOlx0XG4gNzUyOlx0XHRleCA9IFx1MDAyNmN0eC1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VleHRhYmxlW2N0eC1cdTAwM2VuZXhlbnRyaWVzXTtcbiA3NTM6XHRcdHBjID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3R4LVx1MDAzZXJvX2luc25zW2N0eC1cdTAwM2VleF9pbnNuX29mZl07XG4gNzU0Olx0XG4gNzU1Olx0XHQvKlxuIDc1NjpcdFx0ICogVGhpcyBpcyB0aGUgcmVsYXRpdmUgb2Zmc2V0IG9mIHRoZSBpbnN0cnVjdGlvbiB0aGF0IG1heSBmYXVsdCBmcm9tXG4gNzU3Olx0XHQgKiB0aGUgZXhjZXB0aW9uIHRhYmxlIGl0c2VsZi4gVGhpcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGV4Y2VwdGlvblxuIDc1ODpcdFx0ICogdGFibGUgYW5kIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2lsbFxuIDc1OTpcdFx0ICogYmUgc2V0IHRvICYjMzk7MCYjMzk7IGFuZCB0aGUgZXhlY3V0aW9uIHdpbGwganVtcCB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbi5cbiA3NjA6XHRcdCAqL1xuIDc2MTpcdFx0aW5zX29mZnNldCA9IHBjIC0gKGxvbmcpXHUwMDI2ZXgtXHUwMDNlaW5zbjtcbiA3NjI6XHRcdGlmIChXQVJOX09OX09OQ0UoaW5zX29mZnNldCBcdTAwM2U9IDAgfHwgaW5zX29mZnNldCBcdTAwM2MgSU5UX01JTikpXG4gNzYzOlx0XHRcdHJldHVybiAtRVJBTkdFO1xuIDc2NDpcdFxuIDc2NTpcdFx0LypcbiA3NjY6XHRcdCAqIFNpbmNlIHRoZSBleHRhYmxlIGZvbGxvd3MgdGhlIHByb2dyYW0sIHRoZSBmaXh1cCBvZmZzZXQgaXMgYWx3YXlzXG4gNzY3Olx0XHQgKiBuZWdhdGl2ZSBhbmQgbGltaXRlZCB0byBCUEZfSklUX1JFR0lPTl9TSVpFLiBTdG9yZSBhIHBvc2l0aXZlIHZhbHVlXG4gNzY4Olx0XHQgKiB0byBrZWVwIHRoaW5ncyBzaW1wbGUsIGFuZCBwdXQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSB1cHBlclxuIDc2OTpcdFx0ICogYml0cy4gV2UgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgYnVpbGR0aW1lIG9yIHJ1bnRpbWUgc29ydFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIEV4Y2VwdGlvbiBIYW5kbGVyIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSByZWZhY3RvcmluZyBpbiBob3cgZXhjZXB0aW9uIGhhbmRsaW5nIGlzIG1hbmFnZWQgd2l0aGluIHRoZSBCUEYgSklUIGNvbXBpbGVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBwcm9iZSBpbnN0cnVjdGlvbnMuIFByZXZpb3VzbHksIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgIGhhZCB0aGUgcmVzcG9uc2liaWxpdHkgb2YgZGV0ZXJtaW5pbmcgaWYgYW4gaW5zdHJ1Y3Rpb24gd2FzIGEgcHJvYmUgaW5zdHJ1Y3Rpb24gYW5kIGhhbmRsaW5nIGFjY29yZGluZ2x5LiBUaGlzIHdhcyBkb25lICphZnRlciogc29tZSBwcmVsaW1pbmFyeSBjaGVja3Mgd2l0aGluIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLgoKTm93LCB0aGUgbG9naWMgZm9yIGlkZW50aWZ5aW5nIHByb2JlIGluc3RydWN0aW9ucyBoYXMgYmVlbiAqcHVzaGVkIHVwKiBpbnRvIHRoZSBjYWxsIHNpdGVzIHdpdGhpbiBgYnBmX2ppdF9lbWl0X2luc25gLiBXZSBzZWUgdGhlc2UgY2hlY2tzIGZvciBMRFgsIFNULCBTVFgsIGFuZCBhdG9taWMgaW5zdHJ1Y3Rpb25zOiBgaW5zbl9pc19wcm9iZV9sZHgoaW5zbilgLCBgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTTMyYCwgZXRjLiAgVGhpcyBtZWFucyBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYCBpcyBub3cgb25seSBjYWxsZWQgKmNvbmRpdGlvbmFsbHkqLCB3aGVuIGEgcHJvYmUgaW5zdHJ1Y3Rpb24gaXMgZGV0ZWN0ZWQsIHJhdGhlciB0aGFuIHVuY29uZGl0aW9uYWxseSBhbmQgdGhlbiBjb25kaXRpb25hbGx5IHdpdGhpbiB0aGUgZnVuY3Rpb24uCgpUaGUgb2xkIGNvZGUsIGV2ZW4gZm9yIG5vbi1wcm9iZSBpbnN0cnVjdGlvbnMsIHdvdWxkIHNvbWV0aW1lcyBjYWxsIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLCB3aGVyZSBhIHNlcmllcyBvZiBjaGVja3MsIGluY2x1ZGluZyB0aGUgYGN0eC0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDtleHRhYmxlYCBjaGVjaywgd291bGQgYmUgcGVyZm9ybWVkLiAgVGhlbiwgaW5zaWRlIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLCB0aGUgQlBGIGluc3RydWN0aW9uIG1vZGUgd291bGQgYmUgY2hlY2tlZCBhZ2Fpbi4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gZWxpbWluYXRlcyB0aG9zZSByZWR1bmRhbnQgY2FsbHMsIG1ha2luZyB0aGUgZmxvdyBtb3JlIGRpcmVjdCBhbmQgaG9wZWZ1bGx5IG1vcmUgZWZmaWNpZW50LgoKVGhlIGtleSBpcyB0aGF0IHRoZSBwcm9iZSBpbnN0cnVjdGlvbiBkZXRlY3Rpb24gaXMgbm93IGRvbmUgKmJlZm9yZSogdGhlIGNhbGwgdG8gYGFkZF9leGNlcHRpb25faGFuZGxlcmAsIHJhdGhlciB0aGFuIHdpdGhpbiBpdCBhZnRlciBzb21lIGNvbmRpdGlvbmFsIGNoZWNrcy4gVGhpcyBpbXBsaWVzIGZld2VyIGNhbGxzIHRvIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgIGFuZCBhIG1vcmUgc3RyZWFtbGluZWQgcGF0aCBmb3Igbm9uLXByb2JlIGluc3RydWN0aW9ucy4KCklzIHRoaXMgcmVsZXZhbnQgaW4gYSByZWFsLXdvcmxkIHNjZW5hcmlvPyBBYnNvbHV0ZWx5LiAgUklTQy1WIHdpdGggUUVNVSAoYHFlbXUtc3lzdGVtLXJpc2N2NjRgKSBpcyBhIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIHBsYXRmb3JtLCBzbyB0aGlzIGNvZGUgKmlzKiBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gIEJQRiBKSVQgaXMgY29yZSB0byB0aGUga2VybmVsIG9uIFJJU0MtViA2NC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIEJQRiBKSVQgZW50cnkgcG9pbnRzIGFuZCBLY29uZmlnIG9wdGlvbnMsIGp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7bGwgc2VhcmNoIHRob3NlIHJlbGV2YW50IEMgZmlsZXMgZm9yIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jPTM5PWJvb2wgYnBmX2ppdF9uZWVkc196ZXh0KHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDMtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzo0NDpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDMKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlciBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIGluc3RydWN0aW9ucyBhcmUgdHJhbnNsYXRlZCBpbnRvIG5hdGl2ZSBSSVNDLVYgY29kZS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpbmdzIGxpa2UgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uLCBhbmQgcG90ZW50aWFsbHksIGFueSBvcHRpbWl6YXRpb25zIGJlaW5nIGVtcGxveWVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpbW1lZGlhdGUgdmFsdWVzLCBtZW1vcnkgYWNjZXNzZXMsIGFuZCBjb250cm9sIGZsb3cgYXJlIG1hbmFnZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29kZSBnZW5lcmF0aW9uIGRldGFpbHMuIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQ7IHRoaXMgc2VjdGlvbiBvZiB0aGUga2VybmVsIGNhbiBnZXQgcXVpdGUgY29tcGxleC4gSSYjMzk7bGwgYWxzbyBjaGVjayBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgZ2VuZXJpYyBCUEYgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBjaGVja2luZyBob3cgdGhvc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGNvbW1vbiBjb3JlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCBJIG5lZWQgdG8gc2VlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4OTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqQW5hbHl6aW5nIFJJU0MtViBCUEYgSklUIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIEJQRiBKSVQgY29tcGlsZXIgaW1wbGVtZW50YXRpb24gZm9yIFJJU0MtVi4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgbm90IHN0YXRpYyAobGlrZWx5IGV4cG9ydGVkIG9yIGV4dGVybmFsbHkgdXNlZCkgb3IgYXJlIHNvbWVob3cgY29uc2lkZXJlZCAqa2V5KiB0byB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyBpdHNlbGYuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIG9uIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCBhbmQgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24uIEtub3dpbmcgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvcmUgbG9naWMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgYW55IHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IHRoZXNlIGZpbGVzLCBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGV5IGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHxib29sfHZvaWR8c3RydWN0fHVuc2lnbmVkKSAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19jcmVnKHU4IHJlZylcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtNzAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6NzE6c3RydWN0IHJ2X2ppdF9jb250ZXh0IHtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC03Mi1cdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg9OTA9c3RhdGljIGlubGluZSBpbnQgbmluc25zX3J2b2ZmKGludCBuaW5zbnMpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTk0LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjk1OnN0cnVjdCBydl9qaXRfZGF0YSB7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtOTYtXHRzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhlYWRlcjtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg9MTI5ND1zdGF0aWMgaW5saW5lIHZvaWQgZW1pdF9jbXB4Y2hnKHU4IHJkLCB1OCBycywgdTggcjAsIGJvb2wgaXM2NCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTEzMjQtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyNTp2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZyk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyNjp2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTEzMjctXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyODppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMzI5LVx0XHQgICAgICBib29sIGV4dHJhX3Bhc3MpO1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM9OTkyPXN0YXRpYyB2b2lkIGVtaXRfemV4dDY0KGNvbnN0IHM4ICpkc3QsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTAwMS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTAwMjppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTAwMy1cdFx0ICAgICAgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTM4MS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTM4Mjp2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTM4My17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNDMxLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNDMyOnZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQzMy17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz02ODc9c3RhdGljIGludCBzaWduX2V4dGVuZCh1OCByZCwgdTggcnMsIHU4IHN6LCBib29sIHNpZ24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNzIwLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo3MjE6Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNzIyLVx0XHQgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz04MDA9c3RhdGljIGludCBnZW5fanVtcF9vcl9ub3BzKHZvaWQgKnRhcmdldCwgdm9pZCAqaXAsIHUzMiAqaW5zbnMsIGJvb2wgaXNfY2FsbClcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTgxNy1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6ODE4OmludCBicGZfYXJjaF90ZXh0X3Bva2Uodm9pZCAqaXAsIGVudW0gYnBmX3RleHRfcG9rZV90eXBlIG9sZF90LFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy04MTktXHRcdCAgICAgICBlbnVtIGJwZl90ZXh0X3Bva2VfdHlwZSBuZXdfdCwgdm9pZCAqb2xkX2FkZHIsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz05ODU9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyOTEtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEyOTI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI5My1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMwNi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMwNzp2b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzA4LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMTEtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzMTI6dm9pZCBhcmNoX2ZyZWVfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzEzLXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMTYtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzMTc6aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMTgtXHRcdFx0XHR2b2lkICpyb19pbWFnZV9lbmQsIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNTU9c3RhdGljIGJvb2wgaW5zbl9pc19wcm9iZV9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2Mi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM2MzppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2NC1cdFx0ICAgICAgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjAzNS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjAzNjp2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjAzNy17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTI3LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTI4OnZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEyOS17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTMyLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTMzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMzQte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzNy1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEzODpib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfcmV0X3JlZ19wYWlyKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMzkte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0Mi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE0Mzpib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0NC17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTQ3LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTQ4OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTQ5LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTItXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxNTM6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTU0LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNjctXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxNjg6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNjkte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE3Mi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE3Mzpib29sIGJwZl9qaXRfaW5saW5lc19oZWxwZXJfY2FsbChzMzIgaW1tKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTc0LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxODQtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxODU6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxODYte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE4OS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE5MDpib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE5MS17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTk0LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTk1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290byh2b2lkKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTk2LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0xOT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgZXh0cmFfcGFzcywgaW50ICpvZmZzZXQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtMzgtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzozOTpib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDAte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQzLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6NDQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQ1LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0xOTQ9dTY0IGJwZl9qaXRfYWxsb2NfZXhlY19saW1pdCh2b2lkKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTE5OC1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jOjE5OTp2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yMDAte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTIxMi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jOjIxMzppbnQgYnBmX2FyY2hfdGV4dF9pbnZhbGlkYXRlKHZvaWQgKmRzdCwgc2l6ZV90IGxlbilcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTIxNC17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtMjIzLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6MjI0OnZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTIyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTkxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipSSVNDLVYgQlBGIEpJVCBLY29uZmlnIERlZXAgRGl2ZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZvciB0aGUgUklTQy1WIEJQRiBKSVQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzIG9yIG92ZXJsb29rZWQgYW55IHBvdGVudGlhbCBnb3RjaGFzLiBGaXJzdCwgSeKAmWxsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSByZWxldmFudCBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9KSVRfUklTQ1ZgIG9wdGlvbnMgYXJlIGVuYWJsZWQsIHRoYXQmIzM5O3MgYmFzZWxpbmUsIG5vIHN1cnByaXNlcyB0aGVyZS4gVGhlbiwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBSSVNDLVYgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIGFueSBwYXJ0aWN1bGFyIGV4dGVuc2lvbnMgb3IgYXJjaGl0ZWN0dXJlIHZlcnNpb25zIHRoYXQgYXJlIG1hbmRhdGVkIG9yIHJlY29tbWVuZGVkPyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgZ2VuZXJhdGlvbiBzdHJhdGVnaWVzLCBpZiBhbnkgYXJlIHVzZWQsIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIGRlZmF1bHQgUklTQy1WIGJhc2VsaW5lIG9yIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIGFueSBhc3NvY2lhdGVkIGFyY2hpdGVjdHVyZSBsZXZlbCBmZWF0dXJlIHNlbGVjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIEpJVCBpc24mIzM5O3QgaW5hZHZlcnRlbnRseSB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIG9yIG1vZGVscy4KCkJleW9uZCB0aGUgY29yZSBvcHRpb25zLCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBLY29uZmlnIGluY2x1ZGVzIG9wdGlvbnMgdG8gaGFuZGxlIHRoaW5ncyBsaWtlIHRoZSByZWxvY2F0aW9uIG1vZGVsLCBtZW1vcnkgcmVnaW9ucywgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgdGhhdCBtYXkgYXJpc2Ugd2l0aGluIHRoZSBSSVNDLVYgY29udGV4dC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gZmxhZ3M/IFdoYXQgYWJvdXQgZGVidWcgb3B0aW9ucyBvciBlcnJvciBoYW5kbGluZz8gSSBzaG91bGQgc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBzdXBwb3J0IGZvciB0aGluZ3MgbGlrZSBleGNlcHRpb24gaGFuZGxpbmcuIEkgYWxzbyBleHBlY3Qgb3B0aW9ucyB0byBiZSBleHBvc2VkIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIHRhcmdldGVkIGZvciBhIGJhcmUtbWV0YWwgZW52aXJvbm1lbnQgdmVyc3VzIGFuIG9wZXJhdGluZyBzeXN0ZW0uIEEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHRvIG90aGVyIFJJU0MtVi1zcGVjaWZpYyBLY29uZmlncyAoZS5nLiwgcmVsYXRlZCB0byB0aGUga2VybmVsIGl0c2VsZiBvciBvdGhlciBzdWJzeXN0ZW1zKSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBpcyBhIG11c3QuIEZpbmFsbHksIGxldCYjMzk7cyBleHBsb3JlIHRoZSBvcHRpb24gZGVzY3JpcHRpb25zIHRob3JvdWdobHkgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggY29uZmlndXJhdGlvbiBjaG9pY2UuIFRoaXMgS2NvbmZpZyBpbnZlc3RpZ2F0aW9uIGlzIGdvaW5nIHRvIGJlIHRob3JvdWdoLCBJIGhhdmUgYSBsb3Qgb2Ygc3BlY2lmaWMgYXNwZWN0cyB0aGF0IEkmIzM5O2QgbGlrZSB0byBjaGVjayBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMTY4LVx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSIGlmIEhBVkVfRFlOQU1JQ19GVFJBQ0VcbmFyY2gvcmlzY3YvS2NvbmZpZzoxNjk6XHRzZWxlY3QgSEFWRV9FQlBGX0pJVCBpZiBNTVVcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNzAtXHRzZWxlY3QgSEFWRV9HRU5FUklDX1RJRl9CSVRTXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9leHRhYmxlLmg9Mzg9c3RhdGljIGlubGluZSBib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gZmFsc2U7IH1cbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaC00MC1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oOjQxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfSklUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9SVjY0SSlcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTQyLWJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC00Ni1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjQ3OiNkZWZpbmUgQlBGX0pJVF9SRUdJT05fU0laRVx0KFNaXzEyOE0pXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC00OC0jaWZkZWYgQ09ORklHXzY0QklUXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo0OTojZGVmaW5lIEJQRl9KSVRfUkVHSU9OX1NUQVJUXHQoQlBGX0pJVF9SRUdJT05fRU5EIC0gQlBGX0pJVF9SRUdJT05fU0laRSlcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjUwOiNkZWZpbmUgQlBGX0pJVF9SRUdJT05fRU5EXHQoTU9EVUxFU19FTkQpXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC01MS0jZWxzZVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6NTI6I2RlZmluZSBCUEZfSklUX1JFR0lPTl9TVEFSVFx0KFBBR0VfT0ZGU0VUIC0gQlBGX0pJVF9SRUdJT05fU0laRSlcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjUzOiNkZWZpbmUgQlBGX0pJVF9SRUdJT05fRU5EXHQoVk1BTExPQ19FTkQpXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC01NC0jZW5kaWZcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0xNDU2PXN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNDcyLVx0XHRcdFtFWEVDTUVNX0JQRl0gPSB7XG5hcmNoL3Jpc2N2L21tL2luaXQuYzoxNDczOlx0XHRcdFx0LnN0YXJ0XHQ9IEJQRl9KSVRfUkVHSU9OX1NUQVJULFxuYXJjaC9yaXNjdi9tbS9pbml0LmM6MTQ3NDpcdFx0XHRcdC5lbmRcdD0gQlBGX0pJVF9SRUdJT05fRU5ELFxuYXJjaC9yaXNjdi9tbS9pbml0LmMtMTQ3NS1cdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4tLVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtMi1cbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvcmUub1xuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtNC1cbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlPTU9aWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSlcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlOjY6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlLTctZWxzZVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU6ODpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wMzIub1xuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtOS1lbmRpZlxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC04LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjk6I2lmbmRlZiBfQlBGX0pJVF9IXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTA6I2RlZmluZSBfQlBGX0pJVF9IXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTEtXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTEzMjg9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTEzMzAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMzMTojZW5kaWYgLyogX0JQRl9KSVRfSCAqL1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMzAtICogIEJQRl9SRUdfRlAgPVx1MDAzZSAgJiM0MzstLS0tLS0tLS0tJiM0MzsgXHUwMDNjPSAoZnAgLSA0ICogTlJfU0FWRURfUkVHSVNURVJTXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjMxOiAqICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgIC0gNCAqIEJQRl9KSVRfU0NSQVRDSF9SRUdTKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0zMi0gKiAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYz00Mz1lbnVtIHtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTU1LVx0LyogU3RhY2sgc3BhY2UgZm9yIEJQRl9SRUdfNiB0aHJvdWdoIEJQRl9SRUdfOSBhbmQgQlBGX1JFR19BWC4gKi9cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6NTY6XHRCUEZfSklUX1NDUkFUQ0hfUkVHUyxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtNTctfTtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTY0LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzo2NTojZGVmaW5lIFRNUF9SRUdfMVx0KE1BWF9CUEZfSklUX1JFRyAmIzQzOyAwKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzo2NjojZGVmaW5lIFRNUF9SRUdfMlx0KE1BWF9CUEZfSklUX1JFRyAmIzQzOyAxKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy02Ny1cbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jPTEzODI9dm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMzkyLVx0LyogTWFrZSBzcGFjZSBmb3IgQlBGIHJlZ2lzdGVycyBvbiBzdGFjay4gKi9cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTM5MzpcdHN0YWNrX2FkanVzdCAmIzQzOz0gQlBGX0pJVF9TQ1JBVENIX1JFR1MgKiBzaXplb2YodTMyKTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTM5NC1cdC8qIE1ha2Ugc3BhY2UgZm9yIEJQRiBzdGFjay4gKi9cbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTczNT1zdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnQgZHN0X3JlZywgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy03NjYtXHQgKiBTaW5jZSB0aGUgZXh0YWJsZSBmb2xsb3dzIHRoZSBwcm9ncmFtLCB0aGUgZml4dXAgb2Zmc2V0IGlzIGFsd2F5c1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo3Njc6XHQgKiBuZWdhdGl2ZSBhbmQgbGltaXRlZCB0byBCUEZfSklUX1JFR0lPTl9TSVpFLiBTdG9yZSBhIHBvc2l0aXZlIHZhbHVlXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTc2OC1cdCAqIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgYW5kIHB1dCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIHVwcGVyXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM9MTk0PXU2NCBicGZfaml0X2FsbG9jX2V4ZWNfbGltaXQodm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTE5NS17XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzoxOTY6XHRyZXR1cm4gQlBGX0pJVF9SRUdJT05fU0laRTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTE5Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTYxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCUEYgSklUIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUbyB1bmRlcnN0YW5kIGhvdyBgQlBGX0pJVGAgaXMgZW5hYmxlZCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGEgZmV3IGtleSBmaWxlcy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVgLCBhcyB0aGUgYXJjaGl0ZWN0dXJlIG1pZ2h0IGluZmx1ZW5jZSBob3cgSklUIGNvbXBpbGF0aW9uIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZXM6IGBrZXJuZWwvYnBmL0tjb25maWdgLCBhbmQgcG90ZW50aWFsbHkgYG5ldC9LY29uZmlnYCBvciBldmVuIGBpbml0L0tjb25maWdgIOKAkyB0aGUgYnJvYWRlciBLY29uZmlnIGxhbmRzY2FwZSB1c3VhbGx5IHJldmVhbHMgdGhlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucy4gVGhvc2Ugc2VlbSBsaWtlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzLCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdvdWxkIGxpa2VseSByZXNpZGUuCgpKdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBxdWlja2x5IGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMsIEkmIzM5O2xsIGFsc28gcnVuIGEgcXVpY2sgZ3JlcCBhY3Jvc3MgdGhlIGVudGlyZSBzb3VyY2UgdHJlZSBmb3IgYGNvbmZpZyBCUEZfSklUYC4gVGhhdCBzaG91bGQgcXVpY2tseSB1bmNvdmVyIGFueSByZWZlcmVuY2VzIHRvIHRoZSBvcHRpb24gYW5kIGl0cyByZWxhdGlvbnNoaXBzLCByZWdhcmRsZXNzIG9mIHRoZSBmaWxlIGxvY2F0aW9uLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIGJpcmQmIzM5O3MtZXllIHZpZXcgb2YgaG93IHRoaXMgY29uZmlndXJhdGlvbiBpcyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDk5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkV4YW1pbmluZyBCUEYgSklUIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGZvY3VzIGlzIG9uIHRoZSBgQlBGX0pJVGAgb3B0aW9uIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBkZXRhaWwgdGhlIEpJVCAoSnVzdC1Jbi1UaW1lKSBjb21waWxlciBmb3IgQlBGIGJ5dGVjb2RlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIEpJVCBpcyBlbmFibGVkLCB3aGF0IGFyY2hpdGVjdHVyZXMgaXQmIzM5O3Mgc3VwcG9ydGVkIG9uLCBhbmQgYW55IHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyB0aGF0IGFyZSBhZGRyZXNzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGJ1aWxkcyBhbmQgbWFuYWdlcyBCUEYgcHJvZ3JhbXMgYXQgcnVudGltZSwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbXkgd29yay4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgd2hlbiBkaWdnaW5nIGludG8gdGhlIEJQRiBKSVQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTA6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1MTpcdFx0ICBwcm9ncmFtcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU0Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1NTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4gIDU2Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbiAgNTk6XHRcdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbiAgNjA6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxuICA2MzpcdFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXG4gIDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJJU0MtViBCUEYgSklUIENvbXBpbGF0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBSSVNDLVYgQlBGIEpJVCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBJIHJlY2FsbCB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBjYWxscyBgYnVpbGRfYm9keWAsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGJwZl9qaXRfZW1pdF9pbnNuKGluc24sIGN0eCwgZXh0cmFfcGFzcylgLiBJdCBsb29rcyBsaWtlIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgY2FsbGVkIGJ5IHRoZSBCUEYgbG9hZGVyL2NvbXBpbGVyIHBpcGVsaW5lLCBzcGVjaWZpY2FsbHkgdmlhIGBicGZfcHJvZ19zZWxlY3RfcnVudGltZWAgYW5kIHRoZW4gdGhlIGBicGZfaW50X2ppdF9jb21waWxlYCBmdW5jdGlvbi4gSSBhbHNvIHNlZSB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgaXMgYSBub24tc3RhdGljIHN5bWJvbDsgdGhhdCYjMzk7cyBnb29kISBJdCYjMzk7cyBkZWNsYXJlZCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oYCBhbmQgZGVmaW5lZCBpbiBgYnBmX2ppdF9jb21wNjQuY2AsIHNvIGl0IHNob3VsZCBiZSBhY2Nlc3NpYmxlLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZXhwb3J0IHN0YXR1cy4gQ2hlY2tpbmcgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLCB0aGUgZGVjbGFyYXRpb24gb2YgYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyBleGFjdGx5IGFzIGV4cGVjdGVkLCBhbmQgaXQgYWxzbyBsaW5lcyB1cCB3aXRoIHRoZSBkZWNsYXJhdGlvbiBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oYC4gIEluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuY2AsIEkgc2VlIGBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKWAgd2hpY2ggaXMgYWxzbyB3aGF0IEkgZXhwZWN0ZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYWxpZ24gdGhpcyB3aXRoIGEgZnV6emluZyBzdHJhdGVneS4gVGhlIGNyaXRlcmlhIHNlZW0gdG8gYWxpZ24gd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgSklUIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCBleGNlcHRpb24gdGFibGUgaGFuZGxpbmcgZm9yIFJJU0MtViA2NC4gIFBlcmZlY3QhIEFuZCB5ZXMsIGEgc3RhbmRhcmQgTGludXgga2VybmVsIHdpdGggQlBGIEpJVCBydW5zIHdpdGhpbiBRRU1VIG9uIFJJU0MtViA2NCwgbWFraW5nIGl0IHJlYWNoYWJsZS4gVGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQ6IEpJVCBjb2RlIGdlbmVyYXRpb24gYW5kIGV4Y2VwdGlvbiBoYW5kbGluZyBidWdzIGNhbiBkZWZpbml0ZWx5IGxlYWQgdG8gY3Jhc2hlcywgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRoYXQgbWFrZXMgaXQgYSBzdHJvbmcgY2FuZGlkYXRlLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90IG9uOiBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgYXJlIGV4YWN0bHkgdGhlIGFyZWFzIEkgd2FudCB0byB0YXJnZXQuIEFzIGZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgLCBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQVJDSF9SVjY0SWAgb3IgZXF1aXZhbGVudCAoYDY0QklUYC9gUklTQ1ZgKSBtYWtlIHNlbnNlLiAgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBBUkNIX1JWNjRJYCBpbiBLY29uZmlnLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29uZmlnIG9wdGlvbnMgYXJlIGNvcnJlY3QgZm9yIG15IHRlc3RpbmcgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX1JWNjRJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWc9NDA2PWNvbmZpZyBBUkNIX1JWMzJJXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMS1cbmFyY2gvcmlzY3YvS2NvbmZpZzo0MTI6Y29uZmlnIEFSQ0hfUlY2NElcbmFyY2gvcmlzY3YvS2NvbmZpZy00MTMtXHRib29sIFwmIzM0O1JWNjRJXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFJJU0MtViBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSBzb21lIGtleSBSSVNDLVYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBMZXQmIzM5O3Mgc2VlLi4uSSYjMzk7bSB0aGlua2luZyB0aGUgcmVsZXZhbnQgc3R1ZmYgaXMgbGlrZWx5IGluIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gQW5kIGJhc2VkIG9uIHdoYXQgSSByZW1lbWJlciwgbGluZSA0MTAgc291bmRzIGxpa2UgYSByZWFzb25hYmxlIGFyZWEgdG8gemVybyBpbiBvbi4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBzb21ld2hlcmUgYXJvdW5kIHRoYXQgbG9jYXRpb24gYW5kIHF1aWNrbHkgZmlndXJlIG91dCB0aGUgc3BlY2lmaWNzIG9mIHRoZSB0YXJnZXRlZCBjb25maWd1cmF0aW9uIGl0ZW0uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDU6XHRcbiA0MDY6XHRjb25maWcgQVJDSF9SVjMySVxuIDQwNzpcdFx0Ym9vbCBcJiMzNDtSVjMySVwmIzM0O1xuIDQwODpcdFx0ZGVwZW5kcyBvbiBOT05QT1JUQUJMRVxuIDQwOTpcdFx0c2VsZWN0IDMyQklUXG4gNDEwOlx0XHRzZWxlY3QgR0VORVJJQ19MSUJfVUNNUERJMlxuIDQxMTpcdFxuIDQxMjpcdGNvbmZpZyBBUkNIX1JWNjRJXG4gNDEzOlx0XHRib29sIFwmIzM0O1JWNjRJXCYjMzQ7XG4gNDE0Olx0XHRzZWxlY3QgNjRCSVRcbiA0MTU6XHRcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0lOVDEyOCBpZiBDQ19IQVNfSU5UMTI4XG4gNDE2Olx0XHRzZWxlY3QgU1dJT1RMQiBpZiBNTVVcbiA0MTc6XHRcbiA0MTg6XHRlbmRjaG9pY2VcbiA0MTk6XHRcbiA0MjA6XHQjIFdlIG11c3QgYmUgYWJsZSB0byBtYXAgYWxsIHBoeXNpY2FsIG1lbW9yeSBpbnRvIHRoZSBrZXJuZWwsIGJ1dCB0aGUgY29tcGlsZXJcbiA0MjE6XHQjIGlzIHN0aWxsIGEgYml0IG1vcmUgZWZmaWNpZW50IHdoZW4gZ2VuZXJhdGluZyBjb2RlIGlmIGl0JiMzOTtzIHNldHVwIGluIGEgbWFubmVyXG4gNDIyOlx0IyBzdWNoIHRoYXQgaXQgY2FuIG9ubHkgbWFwIDJHaUIgb2YgbWVtb3J5LlxuIDQyMzpcdGNob2ljZVxuIDQyNDpcdFx0cHJvbXB0IFwmIzM0O0tlcm5lbCBDb2RlIE1vZGVsXCYjMzQ7XG4gNDI1Olx0XHRkZWZhdWx0IENNT0RFTF9NRURMT1cgaWYgMzJCSVRcbiA0MjY6XHRcdGRlZmF1bHQgQ01PREVMX01FREFOWSBpZiA2NEJJVFxuIDQyNzpcdFxuIDQyODpcdFx0Y29uZmlnIENNT0RFTF9NRURMT1dcbiA0Mjk6XHRcdFx0Ym9vbCBcJiMzNDttZWRpdW0gbG93IGNvZGUgbW9kZWxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMTkKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyLiBJIGtub3cgaW1tZWRpYXRlbHkgdGhhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBBUkNIX1JWNjRJYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBzdHJhaWdodCBiZWZvcmUgSSBkaXZlIGRlZXBlci4KCkkgc2VlIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yIHRoYXQgd2Ugc2hvdWxkIGV4cGxvcmUgdGhpcy4gSSYjMzk7dmUgYWxzbyBnb3QgYSBmb2N1c2VkIHN5bWJvbCBsaXN0OiBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIHdoaWNoIGdpdmVzIG1lIGEgZGlyZWN0IGxpbmUgb2Ygc2lnaHQgdG8gdGhlIGNyaXRpY2FsIGNvZGUgc2VjdGlvbnMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBjb25maXJtcyBteSBpbml0aWFsIGFzc3VtcHRpb25zOiBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBjcnVjaWFsbHksIHRoZSBSSVNDLVYgNjQtYml0IGFyY2hpdGVjdHVyZSBzdXBwb3J0IChgQVJDSF9SVjY0SWApLgoKVGhlIHJlYXNvbmluZyBjbGFyaWZpZXMgdGhlIHB1cnBvc2U6IHRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIHNwZWNpZmljYWxseSBob3cgZXhjZXB0aW9uIHRhYmxlIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkIGZvciBwcm9iZSBtZW1vcnkgbG9hZC9zdG9yZSBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBpcyBmdW5jdGlvbmFsLCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgQlBGIEpJVCBjb2RlLCBtZWFuaW5nIGl0JiMzOTtzIHNvbWV0aGluZyBJIGNhbiB0ZXN0IGVmZmVjdGl2ZWx5IHdpdGhpbiBhIFFFTVUgcmlzY3Y2NCBlbnZpcm9ubWVudC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGFjY2VzcywgaXQgd2FycmFudHMgY2FyZWZ1bCBhdHRlbnRpb24uCgpOb3csIGJlZm9yZSBJIGxhdW5jaCBhbnkgYW5hbHlzaXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHRvb2wgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgY29uZmlndXJlZCBjb3JyZWN0bHkuIFRoaXMgc291bmRzIGxpa2UgYW4gYXJlYSByaXBlIGZvciBwb3RlbnRpYWwgY3Jhc2hlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91ciwgc28gZ2V0dGluZyB0aG9zZSBpbml0aWFsIHNldHRpbmdzIHJpZ2h0IHdpbGwgYmUgY3J1Y2lhbCB0byBnZXR0aW5nIHNvbGlkIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQVJDSF9SVjY0STwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0FSQ0hfUlY2NEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIgKGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMpLCByZWZhY3RvcmluZyBob3cgYW5kIHdoZW4gZXhjZXB0aW9uIHRhYmxlIGhhbmRsZXJzIGFyZSBhdHRhY2hlZCB0byBwcm9iZSBsb2FkLCBzdG9yZSwgYW5kIGF0b21pYyBpbnN0cnVjdGlvbnMuIFRoaXMgYWZmZWN0cyBmdW5jdGlvbmFsIEJQRiBjb2RlIGdlbmVyYXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGluIFJJU0MtViBKSVQsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUgcmlzY3Y2NCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQVJDSF9SVjY0SSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbmZ1c2lvbioqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQmIzM5O3MgdGhpcz8gVGhlIGJ1aWxkIHN5c3RlbSBpcyBjb21wbGFpbmluZyB0aGF0IGBBUkNIX1JWNjRJYCBpc24mIzM5O3QgZGVmaW5lZD8gSSBjb3VsZCBoYXZlIHN3b3JuIHRoYXQgYXJjaGl0ZWN0dXJlIHdhcyBzdXBwb3J0ZWQgYW5kIGluIHRoZSB0cmVlLiBUaGlzIGlzIHVudXN1YWwuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0IG1lIHF1aWNrbHkganVtcCBpbnRvIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGEgc2ltcGxlIHR5cG8gb3Igb3ZlcnNpZ2h0LiBMZXQgbWUgdmVyaWZ5IHRoZSBleGFjdCBzcGVsbGluZyBhbmQgZGVmaW5pdGlvbiBvZiBgQVJDSF9SVjY0SWAgd2l0aGluIHRoYXQgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGl0IHRoZXJlLCBlbmFibGVkIGJ5IHNvbWUgYGRlZl9ib29sYCBvciBgYm9vbGAgc3RhdGVtZW50LCBvciBwZXJoYXBzIGNvbmRpdGlvbmVkIG9uIHNvbWUgb3RoZXIgcHJlLWV4aXN0aW5nIG9wdGlvbi4gVGltZSB0byBlbGltaW5hdGUgdGhlIG1vc3Qgb2J2aW91cyBwb3NzaWJpbGl0aWVzLiBJdCYjMzk7cyBwcm9iYWJseSBqdXN0IGEgc21hbGwgZXJyb3IgdGhhdCBJIG92ZXJsb29rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FSQ0hfUlY2NEkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz0zOTk9Y2hvaWNlXG5hcmNoL3Jpc2N2L0tjb25maWctNDAwLVx0cHJvbXB0IFwmIzM0O0Jhc2UgSVNBXCYjMzQ7XG5hcmNoL3Jpc2N2L0tjb25maWc6NDAxOlx0ZGVmYXVsdCBBUkNIX1JWNjRJXG5hcmNoL3Jpc2N2L0tjb25maWctNDAyLVx0aGVscFxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz00MDY9Y29uZmlnIEFSQ0hfUlYzMklcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctNDExLVxuYXJjaC9yaXNjdi9LY29uZmlnOjQxMjpjb25maWcgQVJDSF9SVjY0SVxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMy1cdGJvb2wgXCYjMzQ7UlY2NElcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L01ha2VmaWxlPTI4PWV4cG9ydCBCSVRTXG5hcmNoL3Jpc2N2L01ha2VmaWxlOjI5OmlmZXEgKCQoQ09ORklHX0FSQ0hfUlY2NEkpLHkpXG5hcmNoL3Jpc2N2L01ha2VmaWxlLTMwLVx0QklUUyA6PSA2NFxuLS1cbmFyY2gvcmlzY3YvTWFrZWZpbGU9NjE9cmlzY3YtbWFyY2gtJChDT05GSUdfQVJDSF9SVjMySSlcdDo9IHJ2MzJpbWFcbmFyY2gvcmlzY3YvTWFrZWZpbGU6NjI6cmlzY3YtbWFyY2gtJChDT05GSUdfQVJDSF9SVjY0SSlcdDo9IHJ2NjRpbWFcbmFyY2gvcmlzY3YvTWFrZWZpbGUtNjMtcmlzY3YtbWFyY2gtJChDT05GSUdfRlBVKVx0XHQ6PSAkKHJpc2N2LW1hcmNoLXkpZmRcbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvNjQtYml0LmNvbmZpZy0xLSMgSGVscDogQnVpbGQgYSA2NC1iaXQgaW1hZ2VcbmFyY2gvcmlzY3YvY29uZmlncy82NC1iaXQuY29uZmlnOjI6Q09ORklHX0FSQ0hfUlY2NEk9eVxuYXJjaC9yaXNjdi9jb25maWdzLzY0LWJpdC5jb25maWctMy1DT05GSUdfNjRCSVQ9eVxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oPTM4PXN0YXRpYyBpbmxpbmUgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9leHRhYmxlLmgtNDAtXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaDo0MTojaWYgZGVmaW5lZChDT05GSUdfQlBGX0pJVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfUlY2NEkpXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaC00Mi1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tLVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29yZS5vXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZS00LVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU6NTppZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtNi1cdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wNjQubyBicGZfdGltZWRfbWF5X2dvdG8ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgyNwoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBFcnJvcioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBXaHkgaXMgYHNldC1yZXN1bHRzYCB0ZWxsaW5nIG1lIHRoYXQgYEFSQ0hfUlY2NElgIGlzbiYjMzk7dCBmb3VuZCB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlPyBUaGF0JiMzOTtz4oCmIHVuZXhwZWN0ZWQuIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MgaXMgbGlrZWx5IGxvb2tpbmcgYXQgS2NvbmZpZyBkZWZpbml0aW9ucyBmcm9tIGEgbW9yZSBjb21tb24gYXJjaGl0ZWN0dXJlLCBsaWtlIHg4Niwgb3IgbWF5YmUgaXQmIzM5O3MgY2hlY2tpbmcgZ2VuZXJhbCBLY29uZmlnIHN5bWJvbHMuIEl0IHNlZW1zIHVubGlrZWx5IHRoYXQgaXQga25vd3MgdGhlIGltcGxpY2F0aW9ucyBmb3IgUklTQy1WIHNwZWNpZmljYWxseSwgYW5kIHRodXMgaXMgYW4gaW5jb21wbGV0ZSB2aWV3LgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgdGVzdCB0aGUgc2l0dWF0aW9uLCBrZWVwaW5nIHRoYXQgaW4gbWluZC4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gZm9yY2UgYEFSQ0hfUlY2NElgIHJpZ2h0IGF3YXksIGxldCYjMzk7cyB0cnkgc29tZSBicm9hZGVyLCBtb3JlIGdlbmVyYWxseSByZWNvZ25pemVkIHN5bWJvbHMgdG8gY2hlY2sgaWYgdGhlIGVycm9yIGxpZXMgaW4gdGhlIHZhbGlkYXRpb24gcHJvY2VzcywgYW5kIGlmIHRob3NlIHN5bWJvbHMgYXJlIGF2YWlsYWJsZS4gVGhlIGFpbSBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGl0JiMzOTtzIHNheWluZyBgQVJDSF9SVjY0SWAgaXNuJiMzOTt0IHRoZXJlLCBhbmQgaWYgaXQmIzM5O3MgYSBmYWxzZSBuZWdhdGl2ZS4gSSYjMzk7bGwgdGVzdCB3aXRoIGA2NEJJVGAsIGBCUEZfSklUYCwgYW5kIGBCUEZfU1lTQ0FMTGAgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc2l0dWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDs2NEJJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciAoYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyksIHJlZmFjdG9yaW5nIGhvdyBhbmQgd2hlbiBleGNlcHRpb24gdGFibGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvIHByb2JlIGxvYWQsIHN0b3JlLCBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBhZmZlY3RzIGZ1bmN0aW9uYWwgQlBGIGNvZGUgZ2VuZXJhdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgaW4gUklTQy1WIEpJVCwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVSByaXNjdjY0IGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDs2NEJJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciAoYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyksIHJlZmFjdG9yaW5nIGhvdyBhbmQgd2hlbiBleGNlcHRpb24gdGFibGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvIHByb2JlIGxvYWQsIHN0b3JlLCBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBhZmZlY3RzIGZ1bmN0aW9uYWwgQlBGIGNvZGUgZ2VuZXJhdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgaW4gUklTQy1WIEpJVCwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVSByaXNjdjY0IGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXhjZXB0aW9uIHRhYmxlIHJlZ2lzdHJhdGlvbiBsb2dpYyBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgKGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCkuIEl0IG1vdmVzIG9wY29kZSBjaGVja3MgKGBpbnNuX2lzX3Byb2JlX2xkeCgpYCwgYEJQRl9QUk9CRV9NRU0zMmAsIGBCUEZfUFJPQkVfQVRPTUlDYCkgZnJvbSB3aXRoaW4gYGFkZF9leGNlcHRpb25faGFuZGxlcigpYCB0byBpdHMgY2FsbGVycyBpbiBgYnBmX2ppdF9lbWl0X2luc24oKWAuXG5cblRoaXMgaXMgcHVyZWx5IEpJVCBjb2RlIGVtaXNzaW9uIGFuZCBpbnRlcm5hbCBleGNlcHRpb24gdGFibGUgYm9va2tlZXBpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgaGFuZGxpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZmIwNWY1NzI3OGU0ZTEwNjBlMzMwMTQ3N2U2MTlmMTJiNWQ1YTNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAyMzo1Njo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCmluZGV4IGU3Mzc4YmUxNzFhOWYuLjcyNmMwMTY5ZmM2MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwpAQCAtNzMxLDkgJiM0Mzs3MzEsOCBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LAogCXJldHVybiB0cnVlOwogfQogCi0vKiBGb3IgYWNjZXNzZXMgdG8gQlRGIHBvaW50ZXJzLCBhZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSAqLwotc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZywKLQkJCQkgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpCiYjNDM7LyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqLwomIzQzO3N0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDsKIAl1bnNpZ25lZCBsb25nIHBjOwpAQCAtNzQ0LDE0ICYjNDM7NzQzLDYgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZywKIAkgICAgY3R4LSZndDtleF9pbnNuX29mZiAmbHQ7PSAwIHx8IGN0eC0mZ3Q7ZXhfam1wX29mZiAmbHQ7PSAwKQogCQlyZXR1cm4gMDsKIAotCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNICZhbXA7JmFtcDsKLQkgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX01FTVNYICZhbXA7JmFtcDsKLQkgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX01FTTMyICZhbXA7JmFtcDsKLQkgICAgIShCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCAmYW1wOyZhbXA7Ci0JICAgICAgQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9MRFgpICZhbXA7JmFtcDsKLQkgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoV0FSTl9PTl9PTkNFKGN0eC0mZ3Q7bmV4ZW50cmllcyAmZ3Q7PSBjdHgtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7bnVtX2V4ZW50cmllcykpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMzYwLDYgJiM0MzsxMzUxLDE1IEBAIGludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLAogCXJldHVybiByZXQgJmx0OyAwID8gcmV0IDogc2l6ZTsKIH0KIAomIzQzOy8qIFByb2JlIGxvYWRzIGZhdWx0IG9uIHVubWFwcGVkIG1lbW9yeSBhbmQgbmVlZCBhbiBleGNlcHRpb24gdGFibGUgZW50cnkgKi8KJiM0MztzdGF0aWMgYm9vbCBpbnNuX2lzX3Byb2JlX2xkeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiYjNDM7ewomIzQzOwlyZXR1cm4gQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTSB8fAomIzQzOwkgICAgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTVNYIHx8CiYjNDM7CSAgICAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHwKJiM0MzsJICAgICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYOwomIzQzO30KJiM0MzsKIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCQkgICAgICBib29sIGV4dHJhX3Bhc3MpCiB7CkBAIC0xOTI5LDkgJiM0MzsxOTI5LDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCiAJCWVtaXRfbGR4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgc2lnbl9leHQsIGN0eCk7CiAKLQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIHJkLCBjdHgpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChpbnNuX2lzX3Byb2JlX2xkeChpbnNuKSkgewomIzQzOwkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihyZCwgY3R4KTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQogCiAJCWlmIChCUEZfU0laRShjb2RlKSAhPSBCUEZfRFcgJmFtcDsmYW1wOyBpbnNuX2lzX3pleHQoJmFtcDtpbnNuWzFdKSkKIAkJCXJldHVybiAxOwpAQCAtMTk1OSw5ICYjNDM7MTk2MSwxMSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwKIAogCQllbWl0X3N0KHJkLCBvZmYsIGltbSwgQlBGX1NJWkUoY29kZSksIGN0eCk7CiAKLQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7CiYjNDM7CQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQogCQlicmVhazsKIAogCS8qIFNUWDogKihzaXplICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovCkBAIC0xOTgxLDkgJiM0MzsxOTg1LDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCiAJCWVtaXRfc3R4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgY3R4KTsKIAotCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHsKJiM0MzsJCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAJCWJyZWFrOwogCiAJLyogQXRvbWljcyAqLwpAQCAtMjAwMSw3ICYjNDM7MjAwNyw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCQkJcmV0ID0gZW1pdF9hdG9taWNfcm13KHJkLCBycywgaW5zbiwgY3R4KTsKIAogCQkvKiByZXQgY2FuIGJlIDEgKHNraXAtemV4dCk7IGV4dGFibGUgZW50cnkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi8KLQkJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7CiAJCQkvKgogCQkJICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZQogCQkJICogY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvciBpbnRvCkBAIC0yMDEwLDcgJiM0MzsyMDE2LDcgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAJCQkgKi8KIAkJCWludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7CiAKLQkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBsb2FkX3JlZyAmbHQ7IDAgPwomIzQzOwkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihsb2FkX3JlZyAmbHQ7IDAgPwogCQkJCQlSRUdfRE9OVF9DTEVBUl9NQVJLRVIgOiByZWdtYXBbbG9hZF9yZWddLAogCQkJCQljdHgpID86IHJldDsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDY2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGRvaW5nLiBMZXQmIzM5O3MgZGlnIGluLiBJdCYjMzk7cyB0b3VjaGluZyBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIFJJU0MtViBzcGVjaWZpYyBjb2RlIGZvciB0aGUgQlBGIEpJVCBjb21waWxlciwgdGFyZ2V0aW5nIDY0LWJpdC4KCkxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZyBvZiB0aGUgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgZnVuY3Rpb24uIFByZXZpb3VzbHksIHRoaXMgZnVuY3Rpb24gd2FzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyBpZiBhbiBpbnN0cnVjdGlvbiB3YXMgYSBwcm9iZSBtZW1vcnkgaW5zdHJ1Y3Rpb24gYW5kLCBpZiBzbywgYWRkaW5nIGFuIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeS4gTm93LCB0aGUgbG9naWMgZm9yIGRldGVybWluaW5nIHRoZSBwcm9iZSBpbnN0cnVjdGlvbiB0eXBlIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSAqY2FsbGVycyogb2YgYGFkZF9leGNlcHRpb25faGFuZGxlcmAuIFRoZSBmdW5jdGlvbiBpdHNlbGYgbm93IHRha2VzIGp1c3QgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGFuZCBjb250ZXh0LgoKU3BlY2lmaWNhbGx5LCBgYnBmX2ppdF9lbWl0X2luc25gIGlzIHdoZXJlIHRoZXNlIGNoYW5nZXMgYXJlIGhhcHBlbmluZy4gV2UmIzM5O3JlIG5vdyBjaGVja2luZyBjb25kaXRpb25zIGxpa2UgYGluc25faXNfcHJvYmVfbGR4KGluc24pYCBvciBgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gLi4uYCBiZWZvcmUgY2FsbGluZyBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYC4gRWZmZWN0aXZlbHksIHRoZSBwYXRjaCBpcyByZW9yZ2FuaXppbmcgaG93IHRoZSBleGNlcHRpb24gdGFibGUgZW50cmllcyBhcmUgY3JlYXRlZCBmb3IgdmFyaW91cyBCUEYgaW5zdHJ1Y3Rpb25zIHJlbGF0ZWQgdG8gcHJvYmUgbWVtb3J5IG9wZXJhdGlvbnMuCgpOb3csIGNvbnNpZGVyaW5nIEtNU0FOLCBJIGtub3cgdGhhdCBzdXBwb3J0IGlzIHByaW1hcmlseSBvbiB4ODZfNjQsIHdpdGggc29tZSBBUk02NCB3b3JrIGluIHByb2dyZXNzLCBidXQgZGVmaW5pdGVseSAqbm90KiBSSVNDLVYgYXQgdGhpcyBwb2ludC4gTmV2ZXJ0aGVsZXNzLCBsZXQmIzM5O3MgbG9vayBhdCB0aGlzIHBhdGNoIHNlbWFudGljYWxseS4gRG9lcyB0aGlzICpjaGFuZ2UqIHRoZSByaXNrIHByb2ZpbGU/CgpJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgS01TQU4tcmVsYXRlZCBwcm9ibGVtcy4gVGhpcyBpcyBCUEYgSklUIGVtaXNzaW9uIGxvZ2ljIHJlZmFjdG9yaW5nLCBwdXJlIGFuZCBzaW1wbGUuIFRoZXJlJiMzOTtzIG5vdGhpbmcgSSBjYW4gc2VlIGhlcmUgdGhhdCBjb3VsZCBsZWFkIHRvOgoKKiAgIEtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLgoqICAgVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuCiogICBNZW1vcnkgYWxsb2NhdGlvbiBvciBsZWFrcyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN0YWNrIG9yIGhlYXApLgoqICAgQW55IGluZm9ybWF0aW9uIGxlYWthZ2UgdG8gdXNlciBzcGFjZS4KCkl0JiMzOTtzIGp1c3Qgc2h1ZmZsaW5nIGFyb3VuZCB0aGUgbG9naWMgZm9yIHJlZ2lzdGVyaW5nIGV4Y2VwdGlvbiBoYW5kbGVycy4gSXQgc2VlbXMgcHJldHR5IGNvbnRhaW5lZCwgYW5kIHRoZSBjaGFuY2VzIG9mIGludHJvZHVjaW5nIGEgS01TQU4gaXNzdWUgc2VlbSBpbmNyZWRpYmx5IGxvdy4KCkkmIzM5O2xsIHF1aWNrbHkgZG8gYSBxdWljayBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY2hlY2sgb24gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIGJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHVubGlrZWx5IHRvIHJlcXVpcmUgYW55IHNwZWNpZmljIEtNU0FOIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF9leGNlcHRpb25faGFuZGxlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz03MjE9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTczNC0vKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSBmb3IgYSBmYXVsdGluZyBwcm9iZSBpbnNuICovXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjczNTpzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnQgZHN0X3JlZywgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTczNi17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYzPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTkzMi1cdFx0aWYgKGluc25faXNfcHJvYmVfbGR4KGluc24pKSB7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjE5MzM6XHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKHJkLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTM0LVx0XHRcdGlmIChyZXQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTY0LVx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTk2NTpcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTY2LVx0XHRcdGlmIChyZXQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTg4LVx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTk4OTpcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTkwLVx0XHRcdGlmIChyZXQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDE4LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMDE5Olx0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihsb2FkX3JlZyBcdTAwM2MgMCA/XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMjAtXHRcdFx0XHRcdFJFR19ET05UX0NMRUFSX01BUktFUiA6IHJlZ21hcFtsb2FkX3JlZ10sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDczMC03NjUgb2YgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzZWdtZW50IG9mIHRoZSBKSVQgY29tcGlsZXIuIEkgZXhwZWN0IHRvIHNlZSBzb21lIGxvdy1sZXZlbCBSSVNDLVYgYXNzZW1ibHkgZ2VuZXJhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBCUEYgaW5zdHJ1Y3Rpb25zIGFyZSBiZWluZyB0cmFuc2xhdGVkIGludG8gdGhlIG5hdGl2ZSBhcmNoaXRlY3R1cmUgY29kZS4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIEJQRiBKSVQgY29tcGlsZXJzLCBpdCYjMzk7cyBwcm9iYWJseSBoYW5kbGluZyA2NC1iaXQgb3BlcmF0aW9ucywgcG9zc2libHkgaW50ZWdlciBhcml0aG1ldGljLCBtZW1vcnkgYWNjZXNzLCBvciBzb21lIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgcmVnaXN0ZXJzIGFyZSBiZWluZyBhbGxvY2F0ZWQsIHdoYXQgaW1tZWRpYXRlIHZhbHVlcyBhcmUgYmVpbmcgdXNlZCwgYW5kIHRoZSBvdmVyYWxsIGluc3RydWN0aW9uIGZsb3cuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciBvcHRpbWl6YXRpb24gaGFwcGVuaW5nLCBzdWNoIGFzIGluc3RydWN0aW9uIHNjaGVkdWxpbmcgb3IgcGVlcGhvbGUgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGlzIHNlY3Rpb24uIFBlcmhhcHMgdGhlcmUmIzM5O3MgYW4gYXR0ZW1wdCB0byBtaW5pbWl6ZSBkZXBlbmRlbmNpZXMgb3IgdG8gcHJlZmV0Y2ggZGF0YS4gRnJvbSB0aGlzIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIHJvdXRpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMwOlx0XG4gNzMxOlx0XHRyZXR1cm4gdHJ1ZTtcbiA3MzI6XHR9XG4gNzMzOlx0XG4gNzM0Olx0LyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqL1xuIDczNTpcdHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiA3MzY6XHR7XG4gNzM3Olx0XHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcbiA3Mzg6XHRcdHVuc2lnbmVkIGxvbmcgcGM7XG4gNzM5Olx0XHRvZmZfdCBpbnNfb2Zmc2V0O1xuIDc0MDpcdFx0b2ZmX3QgZml4dXBfb2Zmc2V0O1xuIDc0MTpcdFxuIDc0MjpcdFx0aWYgKCFjdHgtXHUwMDNlaW5zbnMgfHwgIWN0eC1cdTAwM2Vyb19pbnNucyB8fCAhY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWV4dGFibGUgfHxcbiA3NDM6XHRcdCAgICBjdHgtXHUwMDNlZXhfaW5zbl9vZmYgXHUwMDNjPSAwIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzYz0gMClcbiA3NDQ6XHRcdFx0cmV0dXJuIDA7XG4gNzQ1Olx0XG4gNzQ2Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cdTAwM2VuZXhlbnRyaWVzIFx1MDAzZT0gY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMpKVxuIDc0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NDg6XHRcbiA3NDk6XHRcdGlmIChXQVJOX09OX09OQ0UoY3R4LVx1MDAzZWV4X2luc25fb2ZmIFx1MDAzZSBjdHgtXHUwMDNlbmluc25zIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzZSBjdHgtXHUwMDNlbmluc25zKSlcbiA3NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzUxOlx0XG4gNzUyOlx0XHRleCA9IFx1MDAyNmN0eC1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VleHRhYmxlW2N0eC1cdTAwM2VuZXhlbnRyaWVzXTtcbiA3NTM6XHRcdHBjID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3R4LVx1MDAzZXJvX2luc25zW2N0eC1cdTAwM2VleF9pbnNuX29mZl07XG4gNzU0Olx0XG4gNzU1Olx0XHQvKlxuIDc1NjpcdFx0ICogVGhpcyBpcyB0aGUgcmVsYXRpdmUgb2Zmc2V0IG9mIHRoZSBpbnN0cnVjdGlvbiB0aGF0IG1heSBmYXVsdCBmcm9tXG4gNzU3Olx0XHQgKiB0aGUgZXhjZXB0aW9uIHRhYmxlIGl0c2VsZi4gVGhpcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGV4Y2VwdGlvblxuIDc1ODpcdFx0ICogdGFibGUgYW5kIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2lsbFxuIDc1OTpcdFx0ICogYmUgc2V0IHRvICYjMzk7MCYjMzk7IGFuZCB0aGUgZXhlY3V0aW9uIHdpbGwganVtcCB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbi5cbiA3NjA6XHRcdCAqL1xuIDc2MTpcdFx0aW5zX29mZnNldCA9IHBjIC0gKGxvbmcpXHUwMDI2ZXgtXHUwMDNlaW5zbjtcbiA3NjI6XHRcdGlmIChXQVJOX09OX09OQ0UoaW5zX29mZnNldCBcdTAwM2U9IDAgfHwgaW5zX29mZnNldCBcdTAwM2MgSU5UX01JTikpXG4gNzYzOlx0XHRcdHJldHVybiAtRVJBTkdFO1xuIDc2NDpcdFxuIDc2NTpcdFx0LypcbiA3NjY6XHRcdCAqIFNpbmNlIHRoZSBleHRhYmxlIGZvbGxvd3MgdGhlIHByb2dyYW0sIHRoZSBmaXh1cCBvZmZzZXQgaXMgYWx3YXlzXG4gNzY3Olx0XHQgKiBuZWdhdGl2ZSBhbmQgbGltaXRlZCB0byBCUEZfSklUX1JFR0lPTl9TSVpFLiBTdG9yZSBhIHBvc2l0aXZlIHZhbHVlXG4gNzY4Olx0XHQgKiB0byBrZWVwIHRoaW5ncyBzaW1wbGUsIGFuZCBwdXQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSB1cHBlclxuIDc2OTpcdFx0ICogYml0cy4gV2UgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgYnVpbGR0aW1lIG9yIHJ1bnRpbWUgc29ydFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTIyCgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJJU0MtViBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlZmFjdG9yaW5nIGhvdyBleGNlcHRpb24gaGFuZGxpbmcgaXMgaW5zZXJ0ZWQgd2l0aGluIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBzaGlmdGluZyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgZGV0ZXJtaW5pbmcgd2hlbiB0byBhZGQgYW4gZXhjZXB0aW9uIGhhbmRsZXIuIEluc3RlYWQgb2YgYGFkZF9leGNlcHRpb25faGFuZGxlcigpYCBpbnNwZWN0aW5nIHRoZSBpbnN0cnVjdGlvbiBkaXJlY3RseSwgdGhlIGNvZGUgY2FsbGluZyBpdCwgbmFtZWx5IGBicGZfaml0X2VtaXRfaW5zbigpYCwgbm93IGRvZXMgdGhlIGNoZWNrIGZvciBwcm9iZSBpbnN0cnVjdGlvbnMuCgpNeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHZ1bG5lcmFiaWxpdGllcywgcGFydGljdWxhcmx5IGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4KCkFscmlnaHQsIHNvOgoKKiAgICoqTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzOioqIEl0IGRvZXNuJiMzOTt0IGFwcGVhciB0aGlzIGNoYW5nZSB0b3VjaGVzIGFueSBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIE5vdGhpbmcgaXMgYmVpbmcgYWxsb2NhdGVkIG9yIGFjY2Vzc2VkIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLgoqICAgKipObyBkYXRhIGxlYWtzOioqIFdlJiMzOTtyZSBub3QgY29weWluZyBhbnkgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIHNvIG5vIHJpc2sgdGhlcmUgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEuCiogICAqKk5vIGNvbmRpdGlvbmFsIHZ1bG5lcmFiaWxpdGllczoqKiBUaGVyZSBhcmVuJiMzOTt0IGFueSBjb25kaXRpb25hbHMgdGhhdCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCB3aGljaCBpcyBnb29kLiBUaGF0IGVsaW1pbmF0ZXMgYSBjbGFzc2ljIHNvdXJjZSBvZiBwcm9ibGVtcy4KKiAgICoqSklUIGVtaXNzaW9uIGJ1Z3M6KiogSWYgdGhlcmUgYXJlIGFueSBidWdzIGludHJvZHVjZWQsIHRoZXkmIzM5O3JlIG1vcmUgbGlrZWx5IHRvIG1hbmlmZXN0IGFzIGluY29ycmVjdCBtYWNoaW5lIGNvZGUgYmVpbmcgZ2VuZXJhdGVkIG9yIG91dHJpZ2h0IGtlcm5lbCBjcmFzaGVzLCBub3QgYnkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCiogICAqKktNU0FOIGlzIGlycmVsZXZhbnQ6KiogS01TQU4gaXNuJiMzOTt0IGluIHBsYXkgaGVyZSwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gY29uc2lkZXIgdGhhdCBhcyBhIGRpYWdub3N0aWMgdG9vbC4KCkdpdmVuIHRoZXNlIHBvaW50cywgSSYjMzk7bSBmZWVsaW5nIGNvbmZpZGVudCBhYm91dCB0aGlzIGNoYW5nZS4gV2UgY2FuIHNhZmVseSBtb3ZlIHRvIGZvcm11bGF0aW5nIHRoZSByZXNwb25zZSBhbmQgc2V0dGluZyB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleGNlcHRpb24gdGFibGUgcmVnaXN0cmF0aW9uIGxvZ2ljIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlciAoYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgKS4gSXQgbW92ZXMgb3Bjb2RlIGNoZWNrcyAoYGluc25faXNfcHJvYmVfbGR4KClgLCBgQlBGX1BST0JFX01FTTMyYCwgYEJQRl9QUk9CRV9BVE9NSUNgKSBmcm9tIHdpdGhpbiBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKClgIHRvIGl0cyBjYWxsZXJzIGluIGBicGZfaml0X2VtaXRfaW5zbigpYC5cblxuVGhpcyBpcyBwdXJlbHkgSklUIGNvZGUgZW1pc3Npb24gYW5kIGludGVybmFsIGV4Y2VwdGlvbiB0YWJsZSBib29ra2VlcGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyBoYW5kbGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGV4Y2VwdGlvbiB0YWJsZSByZWdpc3RyYXRpb24gbG9naWMgaW4gdGhlIFJJU0MtViBCUEYgSklUIGNvbXBpbGVyIChgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2ApLiBJdCBtb3ZlcyBvcGNvZGUgY2hlY2tzIChgaW5zbl9pc19wcm9iZV9sZHgoKWAsIGBCUEZfUFJPQkVfTUVNMzJgLCBgQlBGX1BST0JFX0FUT01JQ2ApIGZyb20gd2l0aGluIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoKWAgdG8gaXRzIGNhbGxlcnMgaW4gYGJwZl9qaXRfZW1pdF9pbnNuKClgLlxuXG5UaGlzIGlzIHB1cmVseSBKSVQgY29kZSBlbWlzc2lvbiBhbmQgaW50ZXJuYWwgZXhjZXB0aW9uIHRhYmxlIGJvb2trZWVwaW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBvciBkYXRhIHBhdGhzIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTY6NDkuMzY1NDg2MzI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYwOTA4MTU3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIjY0QklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXhjZXB0aW9uIHRhYmxlIHJlZ2lzdHJhdGlvbiBsb2dpYyBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgKGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCkuIEl0IG1vdmVzIG9wY29kZSBjaGVja3MgKGBpbnNuX2lzX3Byb2JlX2xkeCgpYCwgYEJQRl9QUk9CRV9NRU0zMmAsIGBCUEZfUFJPQkVfQVRPTUlDYCkgZnJvbSB3aXRoaW4gYGFkZF9leGNlcHRpb25faGFuZGxlcigpYCB0byBpdHMgY2FsbGVycyBpbiBgYnBmX2ppdF9lbWl0X2luc24oKWAuXFxuXFxuVGhpcyBpcyBwdXJlbHkgSklUIGNvZGUgZW1pc3Npb24gYW5kIGludGVybmFsIGV4Y2VwdGlvbiB0YWJsZSBib29ra2VlcGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyBoYW5kbGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciAoYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyksIHJlZmFjdG9yaW5nIGhvdyBhbmQgd2hlbiBleGNlcHRpb24gdGFibGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvIHByb2JlIGxvYWQsIHN0b3JlLCBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBhZmZlY3RzIGZ1bmN0aW9uYWwgQlBGIGNvZGUgZ2VuZXJhdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgaW4gUklTQy1WIEpJVCwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVSByaXNjdjY0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTY6NDkuMzY1NDkwOTk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDc0NzIzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZmIwNWY1NzI3OGU0ZTEwNjBlMzMwMTQ3N2U2MTlmMTJiNWQ1YTNkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMjM6NTY6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG5pbmRleCBlNzM3OGJlMTcxYTlmLi43MjZjMDE2OWZjNjBmIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuQEAgLTczMSw5ICs3MzEsOCBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tLyogRm9yIGFjY2Vzc2VzIHRvIEJURiBwb2ludGVycywgYWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgKi9cXG4tc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbisvKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSBmb3IgYSBmYXVsdGluZyBwcm9iZSBpbnNuICovXFxuK3N0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4ge1xcbiBcXHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcXG4gXFx0dW5zaWduZWQgbG9uZyBwYztcXG5AQCAtNzQ0LDE0ICs3NDMsNiBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxcbiBcXHQgICAgY3R4LVxcdTAwM2VleF9pbnNuX29mZiBcXHUwMDNjPSAwIHx8IGN0eC1cXHUwMDNlZXhfam1wX29mZiBcXHUwMDNjPSAwKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIShCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgICBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0xEWCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4gXFx0aWYgKFdBUk5fT05fT05DRShjdHgtXFx1MDAzZW5leGVudHJpZXMgXFx1MDAzZT0gY3R4LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW51bV9leGVudHJpZXMpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuQEAgLTEzNjAsNiArMTM1MSwxNSBAQCBpbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNjIDAgPyByZXQgOiBzaXplO1xcbiB9XFxuIFxcbisvKiBQcm9iZSBsb2FkcyBmYXVsdCBvbiB1bm1hcHBlZCBtZW1vcnkgYW5kIG5lZWQgYW4gZXhjZXB0aW9uIHRhYmxlIGVudHJ5ICovXFxuK3N0YXRpYyBib29sIGluc25faXNfcHJvYmVfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRyZXR1cm4gQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTSB8fFxcbitcXHQgICAgICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYIHx8XFxuK1xcdCAgICAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcXG4rXFx0ICAgICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYO1xcbit9XFxuK1xcbiBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0ICAgICAgYm9vbCBleHRyYV9wYXNzKVxcbiB7XFxuQEAgLTE5MjksOSArMTkyOSwxMSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4gXFxuIFxcdFxcdGVtaXRfbGR4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgc2lnbl9leHQsIGN0eCk7XFxuIFxcbi1cXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgcmQsIGN0eCk7XFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChpbnNuX2lzX3Byb2JlX2xkeChpbnNuKSkge1xcbitcXHRcXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIocmQsIGN0eCk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChCUEZfU0laRShjb2RlKSAhPSBCUEZfRFcgXFx1MDAyNlxcdTAwMjYgaW5zbl9pc196ZXh0KFxcdTAwMjZpbnNuWzFdKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDE7XFxuQEAgLTE5NTksOSArMTk2MSwxMSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4gXFxuIFxcdFxcdGVtaXRfc3QocmQsIG9mZiwgaW1tLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcXG4gXFxuLVxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHtcXG4rXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdC8qIFNUWDogKihzaXplICopKGRzdCArIG9mZikgPSBzcmMgKi9cXG5AQCAtMTk4MSw5ICsxOTg1LDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbiBcXG4gXFx0XFx0ZW1pdF9zdHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBjdHgpO1xcbiBcXG4tXFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMikge1xcbitcXHRcXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0LyogQXRvbWljcyAqL1xcbkBAIC0yMDAxLDcgKzIwMDcsNyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0XFx0cmV0ID0gZW1pdF9hdG9taWNfcm13KHJkLCBycywgaW5zbiwgY3R4KTtcXG4gXFxuIFxcdFxcdC8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqL1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxcbiBcXHRcXHRcXHQgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG9cXG5AQCAtMjAxMCw3ICsyMDE2LDcgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xcbiBcXG4tXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihsb2FkX3JlZyBcXHUwMDNjIDAgP1xcbiBcXHRcXHRcXHRcXHRcXHRSRUdfRE9OVF9DTEVBUl9NQVJLRVIgOiByZWdtYXBbbG9hZF9yZWddLFxcbiBcXHRcXHRcXHRcXHRcXHRjdHgpID86IHJldDtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1Njo0OS43NzM2Mzc1MzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxNTI0MjkxNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCI2NEJJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9qaXRfZW1pdF9pbnNuXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciAoYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyksIHJlZmFjdG9yaW5nIGhvdyBhbmQgd2hlbiBleGNlcHRpb24gdGFibGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvIHByb2JlIGxvYWQsIHN0b3JlLCBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBhZmZlY3RzIGZ1bmN0aW9uYWwgQlBGIGNvZGUgZ2VuZXJhdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgaW4gUklTQy1WIEpJVCwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVSByaXNjdjY0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2ZiMDVmNTcyNzhlNGUxMDYwZTMzMDE0NzdlNjE5ZjEyYjVkNWEzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjM6NTY6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggZTczNzhiZTE3MWE5Zi4uNzI2YzAxNjlmYzYwZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC03MzEsOSArNzMxLDggQEAgYm9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi0vKiBGb3IgYWNjZXNzZXMgdG8gQlRGIHBvaW50ZXJzLCBhZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSAqL1xuLXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsXG4tXHRcdFx0XHQgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4rLyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqL1xuK3N0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcbiBcdHVuc2lnbmVkIGxvbmcgcGM7XG5AQCAtNzQ0LDE0ICs3NDMsNiBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuIFx0ICAgIGN0eC1cdTAwM2VleF9pbnNuX29mZiBcdTAwM2M9IDAgfHwgY3R4LVx1MDAzZWV4X2ptcF9vZmYgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0gXHUwMDI2XHUwMDI2XG4tXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggXHUwMDI2XHUwMDI2XG4tXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgXHUwMDI2XHUwMDI2XG4tXHQgICAgIShCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0xEWCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKVxuLVx0XHRyZXR1cm4gMDtcbi1cbiBcdGlmIChXQVJOX09OX09OQ0UoY3R4LVx1MDAzZW5leGVudHJpZXMgXHUwMDNlPSBjdHgtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbnVtX2V4ZW50cmllcykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTEzNjAsNiArMTM1MSwxNSBAQCBpbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbiBcdHJldHVybiByZXQgXHUwMDNjIDAgPyByZXQgOiBzaXplO1xuIH1cbiBcbisvKiBQcm9iZSBsb2FkcyBmYXVsdCBvbiB1bm1hcHBlZCBtZW1vcnkgYW5kIG5lZWQgYW4gZXhjZXB0aW9uIHRhYmxlIGVudHJ5ICovXG4rc3RhdGljIGJvb2wgaW5zbl9pc19wcm9iZV9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuK3tcbitcdHJldHVybiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0gfHxcbitcdCAgICAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fFxuK1x0ICAgICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyIHx8XG4rXHQgICAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWDtcbit9XG4rXG4gaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbiB7XG5AQCAtMTkyOSw5ICsxOTI5LDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFxuIFx0XHRlbWl0X2xkeChyZCwgb2ZmLCBycywgQlBGX1NJWkUoY29kZSksIHNpZ25fZXh0LCBjdHgpO1xuIFxuLVx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgcmQsIGN0eCk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGluc25faXNfcHJvYmVfbGR4KGluc24pKSB7XG4rXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKHJkLCBjdHgpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGlmIChCUEZfU0laRShjb2RlKSAhPSBCUEZfRFcgXHUwMDI2XHUwMDI2IGluc25faXNfemV4dChcdTAwMjZpbnNuWzFdKSlcbiBcdFx0XHRyZXR1cm4gMTtcbkBAIC0xOTU5LDkgKzE5NjEsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXG4gXHRcdGVtaXRfc3QocmQsIG9mZiwgaW1tLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHtcbitcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXHRcdGJyZWFrO1xuIFxuIFx0LyogU1RYOiAqKHNpemUgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xuQEAgLTE5ODEsOSArMTk4NSwxMSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcbiBcdFx0ZW1pdF9zdHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBjdHgpO1xuIFxuLVx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMikge1xuK1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbiBcdFx0YnJlYWs7XG4gXG4gXHQvKiBBdG9taWNzICovXG5AQCAtMjAwMSw3ICsyMDA3LDcgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXHRcdFx0cmV0ID0gZW1pdF9hdG9taWNfcm13KHJkLCBycywgaW5zbiwgY3R4KTtcbiBcbiBcdFx0LyogcmV0IGNhbiBiZSAxIChza2lwLXpleHQpOyBleHRhYmxlIGVudHJ5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovXG4tXHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4rXHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEEgbG9hZC1hY3F1aXJlIHJlYWRzIGludG8gZHN0X3JlZywgYW5kIGEgcmVhZC1tb2RpZnktd3JpdGVcbiBcdFx0XHQgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG9cbkBAIC0yMDEwLDcgKzIwMTYsNyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdFx0XHQgKi9cbiBcdFx0XHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuIFxuLVx0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBsb2FkX3JlZyBcdTAwM2MgMCA/XG4rXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGxvYWRfcmVnIFx1MDAzYyAwID9cbiBcdFx0XHRcdFx0UkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSxcbiBcdFx0XHRcdFx0Y3R4KSA/OiByZXQ7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU2OjQ5Ljc3MzYzOTI2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMjg3NjI3NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIGEgcGF0Y2gsIHNwZWNpZmljYWxseSBvbmUgaW1wYWN0aW5nIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBcIndoYXRcIiDigJMgd2hhdCBpcyB0aGlzIHBhdGNoIGFjdHVhbGx5IGNoYW5naW5nIGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYD8gVGhpcyBmaWxlLCBiZWluZyB3aXRoaW4gdGhlIFJJU0MtViBuZXR3b3JrIHN0YWNrIGFuZCByZWxhdGVkIHRvIHRoZSBCUEYgSklUIGNvbXBpbGVyLCBpbW1lZGlhdGVseSBzaWduYWxzIGEgcG90ZW50aWFsbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBzb21lIGFjdHVhbCBpbmZvcm1hdGlvbi4gVGltZSB0byBicmluZyBvdXQgdGhlIHRvb2xzLiBJJ2xsIG5lZWQgdG8gZ2FpbiBzb21lIGNvbnRleHQgZnJvbSB0aGUgc3Vycm91bmRpbmcgY29kZS4gVG8gZG8gdGhhdCwgSSdsbCBsZXZlcmFnZSBgZ3JlcHBlcmAgKG9yIGByZWFkLWZpbGVgIGlmIHRoYXQncyBtb3JlIGFwcHJvcHJpYXRlKSwgdGFyZ2V0aW5nIGJvdGggdGhlIGBicGZfaml0X2NvbXA2NC5jYCBmaWxlIGl0c2VsZiAqYW5kKiB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBhbmQgYEtjb25maWdgIGZpbGVzIGxvY2F0ZWQgaW4gYGFyY2gvcmlzY3YvbmV0L2AuIFRoZXNlIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZmlsZSBpcyBidWlsdCwgbGlua2VkLCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGxhcmdlciBSSVNDLVYga2VybmVsIG1vZHVsZS4gVGhlbiwgSSBjYW4gc3RhcnQgdG8gZm9ybSBhbiBpZGVhIG9mIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgd2hlcmUgaXQgbGFuZHMsIHNvIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYW4gaW5mb3JtZWQgb3Bpbmlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU2OjUzLjAwMjQxNTY1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM1OTQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2NvbXA2NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbmV0L01ha2VmaWxlPTU9aWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSlcXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZTo2OlxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXA2NC5vIGJwZl90aW1lZF9tYXlfZ290by5vXFxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtNy1lbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU2OjUzLjA1MTc4MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQzNDE4MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgUklTQy1WIEJQRiBKSVQgQ29tcGlsZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgcGlucG9pbnQgYSBzcGVjaWZpYyBhcmVhLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSByZW1lbWJlciBpdCBob3VzZXMgdGhlIGNvcmUgSklUIGNvbXBpbGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBicGZfaml0X2VtaXRfaW5zbmAgZnVuY3Rpb24g4oCTIHRoYXQncyB3aGVyZSB0aGUgaW5kaXZpZHVhbCBCUEYgaW5zdHJ1Y3Rpb25zIGFyZSB0cmFuc2xhdGVkIGludG8gUklTQy1WIG1hY2hpbmUgY29kZSwgYW5kIHRoYXQncyB1c3VhbGx5IHRoZSBsb2N1cyBvZiBhbnkgb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBidWdzIGluIEpJVCBlbWlzc2lvbi4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgb3V0IGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLiBUaGF0J3Mgd2hlcmUgd2UgbWFuYWdlIHRoZSBoYW5kbGluZyBvZiBleGNlcHRpb25zIHRoYXQgbWlnaHQgb2NjdXIgZHVyaW5nIGV4ZWN1dGlvbiBvZiBKSVQgY29tcGlsZWQgY29kZTsgb2Z0ZW4gcmVsYXRlZCB0byBtZW1vcnkgYWNjZXNzIGlzc3VlcyBvciBkaXZpZGUgYnkgemVybyBlcnJvcnMuIEJvdGggb2YgdGhvc2UgYXJlIHByZXR0eSBjcml0aWNhbCBhcmVhcyB0aGF0IEkgd2FudCB0byBzdHVkeSBpbiBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBiZWluZyBsYWlkIG91dCwgaG93IGV4Y2VwdGlvbnMgYXJlIGhhbmRsZWQgd2l0aGluIHRoYXQgdHJhbnNsYXRlZCBjb2RlIGFuZCBob3cgdGhhdCBhbGwgdGllcyBpbiB3aXRoIHRoZSBvdmVyYWxsIGtlcm5lbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1Njo1NS42OTUyMDM2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHRcXG4gNzMxOlxcdFxcdHJldHVybiB0cnVlO1xcbiA3MzI6XFx0fVxcbiA3MzM6XFx0XFxuIDczNDpcXHQvKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSBmb3IgYSBmYXVsdGluZyBwcm9iZSBpbnNuICovXFxuIDczNTpcXHRzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnQgZHN0X3JlZywgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuIDczNjpcXHR7XFxuIDczNzpcXHRcXHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcXG4gNzM4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGM7XFxuIDczOTpcXHRcXHRvZmZfdCBpbnNfb2Zmc2V0O1xcbiA3NDA6XFx0XFx0b2ZmX3QgZml4dXBfb2Zmc2V0O1xcbiA3NDE6XFx0XFxuIDc0MjpcXHRcXHRpZiAoIWN0eC1cXHUwMDNlaW5zbnMgfHwgIWN0eC1cXHUwMDNlcm9faW5zbnMgfHwgIWN0eC1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VleHRhYmxlIHx8XFxuIDc0MzpcXHRcXHQgICAgY3R4LVxcdTAwM2VleF9pbnNuX29mZiBcXHUwMDNjPSAwIHx8IGN0eC1cXHUwMDNlZXhfam1wX29mZiBcXHUwMDNjPSAwKVxcbiA3NDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoY3R4LVxcdTAwM2VuZXhlbnRyaWVzIFxcdTAwM2U9IGN0eC1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VudW1fZXhlbnRyaWVzKSlcXG4gNzQ3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NDg6XFx0XFxuIDc0OTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cXHUwMDNlZXhfaW5zbl9vZmYgXFx1MDAzZSBjdHgtXFx1MDAzZW5pbnNucyB8fCBjdHgtXFx1MDAzZWV4X2ptcF9vZmYgXFx1MDAzZSBjdHgtXFx1MDAzZW5pbnNucykpXFxuIDc1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzUxOlxcdFxcbiA3NTI6XFx0XFx0ZXggPSBcXHUwMDI2Y3R4LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWV4dGFibGVbY3R4LVxcdTAwM2VuZXhlbnRyaWVzXTtcXG4gNzUzOlxcdFxcdHBjID0gKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmN0eC1cXHUwMDNlcm9faW5zbnNbY3R4LVxcdTAwM2VleF9pbnNuX29mZl07XFxuIDc1NDpcXHRcXG4gNzU1OlxcdFxcdC8qXFxuIDc1NjpcXHRcXHQgKiBUaGlzIGlzIHRoZSByZWxhdGl2ZSBvZmZzZXQgb2YgdGhlIGluc3RydWN0aW9uIHRoYXQgbWF5IGZhdWx0IGZyb21cXG4gNzU3OlxcdFxcdCAqIHRoZSBleGNlcHRpb24gdGFibGUgaXRzZWxmLiBUaGlzIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgZXhjZXB0aW9uXFxuIDc1ODpcXHRcXHQgKiB0YWJsZSBhbmQgaWYgdGhpcyBpbnN0cnVjdGlvbiBmYXVsdHMsIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciB3aWxsXFxuIDc1OTpcXHRcXHQgKiBiZSBzZXQgdG8gJzAnIGFuZCB0aGUgZXhlY3V0aW9uIHdpbGwganVtcCB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbi5cXG4gNzYwOlxcdFxcdCAqL1xcbiA3NjE6XFx0XFx0aW5zX29mZnNldCA9IHBjIC0gKGxvbmcpXFx1MDAyNmV4LVxcdTAwM2VpbnNuO1xcbiA3NjI6XFx0XFx0aWYgKFdBUk5fT05fT05DRShpbnNfb2Zmc2V0IFxcdTAwM2U9IDAgfHwgaW5zX29mZnNldCBcXHUwMDNjIElOVF9NSU4pKVxcbiA3NjM6XFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcdC8qXFxuIDc2NjpcXHRcXHQgKiBTaW5jZSB0aGUgZXh0YWJsZSBmb2xsb3dzIHRoZSBwcm9ncmFtLCB0aGUgZml4dXAgb2Zmc2V0IGlzIGFsd2F5c1xcbiA3Njc6XFx0XFx0ICogbmVnYXRpdmUgYW5kIGxpbWl0ZWQgdG8gQlBGX0pJVF9SRUdJT05fU0laRS4gU3RvcmUgYSBwb3NpdGl2ZSB2YWx1ZVxcbiA3Njg6XFx0XFx0ICogdG8ga2VlcCB0aGluZ3Mgc2ltcGxlLCBhbmQgcHV0IHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgdXBwZXJcXG4gNzY5OlxcdFxcdCAqIGJpdHMuIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgYnVpbGR0aW1lIG9yIHJ1bnRpbWUgc29ydFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1Njo1NS42OTUzMzA1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5ODI1MzQ3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIEV4Y2VwdGlvbiBIYW5kbGVyIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSByZWZhY3RvcmluZyBpbiBob3cgZXhjZXB0aW9uIGhhbmRsaW5nIGlzIG1hbmFnZWQgd2l0aGluIHRoZSBCUEYgSklUIGNvbXBpbGVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBwcm9iZSBpbnN0cnVjdGlvbnMuIFByZXZpb3VzbHksIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgIGhhZCB0aGUgcmVzcG9uc2liaWxpdHkgb2YgZGV0ZXJtaW5pbmcgaWYgYW4gaW5zdHJ1Y3Rpb24gd2FzIGEgcHJvYmUgaW5zdHJ1Y3Rpb24gYW5kIGhhbmRsaW5nIGFjY29yZGluZ2x5LiBUaGlzIHdhcyBkb25lICphZnRlciogc29tZSBwcmVsaW1pbmFyeSBjaGVja3Mgd2l0aGluIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLlxuXG5Ob3csIHRoZSBsb2dpYyBmb3IgaWRlbnRpZnlpbmcgcHJvYmUgaW5zdHJ1Y3Rpb25zIGhhcyBiZWVuICpwdXNoZWQgdXAqIGludG8gdGhlIGNhbGwgc2l0ZXMgd2l0aGluIGBicGZfaml0X2VtaXRfaW5zbmAuIFdlIHNlZSB0aGVzZSBjaGVja3MgZm9yIExEWCwgU1QsIFNUWCwgYW5kIGF0b21pYyBpbnN0cnVjdGlvbnM6IGBpbnNuX2lzX3Byb2JlX2xkeChpbnNuKWAsIGBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMmAsIGV0Yy4gIFRoaXMgbWVhbnMgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgaXMgbm93IG9ubHkgY2FsbGVkICpjb25kaXRpb25hbGx5Kiwgd2hlbiBhIHByb2JlIGluc3RydWN0aW9uIGlzIGRldGVjdGVkLCByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgYW5kIHRoZW4gY29uZGl0aW9uYWxseSB3aXRoaW4gdGhlIGZ1bmN0aW9uLlxuXG5UaGUgb2xkIGNvZGUsIGV2ZW4gZm9yIG5vbi1wcm9iZSBpbnN0cnVjdGlvbnMsIHdvdWxkIHNvbWV0aW1lcyBjYWxsIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLCB3aGVyZSBhIHNlcmllcyBvZiBjaGVja3MsIGluY2x1ZGluZyB0aGUgYGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VleHRhYmxlYCBjaGVjaywgd291bGQgYmUgcGVyZm9ybWVkLiAgVGhlbiwgaW5zaWRlIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLCB0aGUgQlBGIGluc3RydWN0aW9uIG1vZGUgd291bGQgYmUgY2hlY2tlZCBhZ2Fpbi4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gZWxpbWluYXRlcyB0aG9zZSByZWR1bmRhbnQgY2FsbHMsIG1ha2luZyB0aGUgZmxvdyBtb3JlIGRpcmVjdCBhbmQgaG9wZWZ1bGx5IG1vcmUgZWZmaWNpZW50LlxuXG5UaGUga2V5IGlzIHRoYXQgdGhlIHByb2JlIGluc3RydWN0aW9uIGRldGVjdGlvbiBpcyBub3cgZG9uZSAqYmVmb3JlKiB0aGUgY2FsbCB0byBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYCwgcmF0aGVyIHRoYW4gd2l0aGluIGl0IGFmdGVyIHNvbWUgY29uZGl0aW9uYWwgY2hlY2tzLiBUaGlzIGltcGxpZXMgZmV3ZXIgY2FsbHMgdG8gYGFkZF9leGNlcHRpb25faGFuZGxlcmAgYW5kIGEgbW9yZSBzdHJlYW1saW5lZCBwYXRoIGZvciBub24tcHJvYmUgaW5zdHJ1Y3Rpb25zLlxuXG5JcyB0aGlzIHJlbGV2YW50IGluIGEgcmVhbC13b3JsZCBzY2VuYXJpbz8gQWJzb2x1dGVseS4gIFJJU0MtViB3aXRoIFFFTVUgKGBxZW11LXN5c3RlbS1yaXNjdjY0YCkgaXMgYSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBwbGF0Zm9ybSwgc28gdGhpcyBjb2RlICppcyogZGVmaW5pdGVseSByZWFjaGFibGUuICBCUEYgSklUIGlzIGNvcmUgdG8gdGhlIGtlcm5lbCBvbiBSSVNDLVYgNjQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBCUEYgSklUIGVudHJ5IHBvaW50cyBhbmQgS2NvbmZpZyBvcHRpb25zLCBqdXN0IHRvIGJlIHN1cmUuIEknbGwgc2VhcmNoIHRob3NlIHJlbGV2YW50IEMgZmlsZXMgZm9yIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTY4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MDAuNjc3ODY4MDcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDUxMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0zOT1ib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDMtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6NDQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy00NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjAwLjcyODMyMzY0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzOTEyNDMxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFJJU0MtViBCUEYgSklUIENvbXBpbGVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBpbnN0cnVjdGlvbnMgYXJlIHRyYW5zbGF0ZWQgaW50byBuYXRpdmUgUklTQy1WIGNvZGUuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSdyZSBoYW5kbGluZyB0aGluZ3MgbGlrZSByZWdpc3RlciBhbGxvY2F0aW9uLCBpbnN0cnVjdGlvbiBzZWxlY3Rpb24sIGFuZCBwb3RlbnRpYWxseSwgYW55IG9wdGltaXphdGlvbnMgYmVpbmcgZW1wbG95ZWQuIFNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBob3cgaW1tZWRpYXRlIHZhbHVlcywgbWVtb3J5IGFjY2Vzc2VzLCBhbmQgY29udHJvbCBmbG93IGFyZSBtYW5hZ2VkLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29kZSBnZW5lcmF0aW9uIGRldGFpbHMuIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQ7IHRoaXMgc2VjdGlvbiBvZiB0aGUga2VybmVsIGNhbiBnZXQgcXVpdGUgY29tcGxleC4gSSdsbCBhbHNvIGNoZWNrIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmljIEJQRiBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIGhvdyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgY29tbW9uIGNvcmUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIEkgbmVlZCB0byBzZWUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDMsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzowMy4xMTk1Njk0MTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzQyOTc4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjAzLjE2MzkxODg0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk4MDk4MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipBbmFseXppbmcgUklTQy1WIEJQRiBKSVQgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBCUEYgSklUIGNvbXBpbGVyIGltcGxlbWVudGF0aW9uIGZvciBSSVNDLVYuIE15IGltbWVkaWF0ZSB0YXNrIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIG5vdCBzdGF0aWMgKGxpa2VseSBleHBvcnRlZCBvciBleHRlcm5hbGx5IHVzZWQpIG9yIGFyZSBzb21laG93IGNvbnNpZGVyZWQgKmtleSogdG8gdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgaXRzZWxmLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIG9uIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCBhbmQgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24uIEtub3dpbmcgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvcmUgbG9naWMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgYW55IHN5c3RlbS4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlc2UgZmlsZXMsIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IHRoZXkgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4OTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzowNS41NjIwMTkxMDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTIxNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fGJvb2x8dm9pZHxzdHJ1Y3R8dW5zaWduZWQpIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19jcmVnKHU4IHJlZylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC03MC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6NzE6c3RydWN0IHJ2X2ppdF9jb250ZXh0IHtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtNzItXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTkwPXN0YXRpYyBpbmxpbmUgaW50IG5pbnNuc19ydm9mZihpbnQgbmluc25zKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTk0LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaDo5NTpzdHJ1Y3QgcnZfaml0X2RhdGEge1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC05Ni1cXHRzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhlYWRlcjtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaD0xMjk0PXN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0X2NtcHhjaGcodTggcmQsIHU4IHJzLCB1OCByMCwgYm9vbCBpczY0LCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMzI0LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaDoxMzI1OnZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgYm9vbCBpc19zdWJwcm9nKTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyNjp2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMzI3LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaDoxMzI4OmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMzI5LVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcyk7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jPTk5Mj1zdGF0aWMgdm9pZCBlbWl0X3pleHQ2NChjb25zdCBzOCAqZHN0LCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTAwMS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjEwMDI6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMDAzLVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTM4MS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjEzODI6dm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMzgzLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQzMS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjE0MzI6dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQzMy17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTY4Nz1zdGF0aWMgaW50IHNpZ25fZXh0ZW5kKHU4IHJkLCB1OCBycywgdTggc3osIGJvb2wgc2lnbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTcyMC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjcyMTpib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNzIyLVxcdFxcdCAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9ODAwPXN0YXRpYyBpbnQgZ2VuX2p1bXBfb3Jfbm9wcyh2b2lkICp0YXJnZXQsIHZvaWQgKmlwLCB1MzIgKmluc25zLCBib29sIGlzX2NhbGwpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTgxNy1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjgxODppbnQgYnBmX2FyY2hfdGV4dF9wb2tlKHZvaWQgKmlwLCBlbnVtIGJwZl90ZXh0X3Bva2VfdHlwZSBvbGRfdCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTgxOS1cXHRcXHQgICAgICAgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgbmV3X3QsIHZvaWQgKm9sZF9hZGRyLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz05ODU9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI5MS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEyOTI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyOTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMwNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzMDc6dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMDgte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzExLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMxMjp2b2lkIGFyY2hfZnJlZV9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzEzLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMxNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzMTc6aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzE4LVxcdFxcdFxcdFxcdHZvaWQgKnJvX2ltYWdlX2VuZCwgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzU1PXN0YXRpYyBib29sIGluc25faXNfcHJvYmVfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2Mi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjM6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzY0LVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjAzNS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIwMzY6dm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDM3LXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEyNy1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMjg6dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEyOS17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMzItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTMzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTM0LXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzNy1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMzg6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX3JldF9yZWdfcGFpcih2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzOS17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNDItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTQzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0NC17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNDctXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTQ4OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0OS17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTUzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTQte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTY3LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE2ODpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNjkte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTcyLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE3Mzpib29sIGJwZl9qaXRfaW5saW5lc19oZWxwZXJfY2FsbChzMzIgaW1tKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE3NC17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxODQtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTg1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE4Ni17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxODktXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTkwOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE5MS17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxOTQtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTk1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290byh2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE5Ni17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0xOT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgZXh0cmFfcGFzcywgaW50ICpvZmZzZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0zOC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzozOTpib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQwLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQzLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jOjQ0OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDUte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM9MTk0PXU2NCBicGZfaml0X2FsbG9jX2V4ZWNfbGltaXQodm9pZClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTE5OC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzoxOTk6dm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTIwMC17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yMTItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6MjEzOmludCBicGZfYXJjaF90ZXh0X2ludmFsaWRhdGUodm9pZCAqZHN0LCBzaXplX3QgbGVuKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTIxNC17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yMjMtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6MjI0OnZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yMjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzowNS42MDkxNDUyMzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2NDQyMjg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSSVNDLVYgQlBGIEpJVCBLY29uZmlnIERlZXAgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZm9yIHRoZSBSSVNDLVYgQlBGIEpJVC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcyBvciBvdmVybG9va2VkIGFueSBwb3RlbnRpYWwgZ290Y2hhcy4gRmlyc3QsIEnigJlsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgcmVsZXZhbnQgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfSklUX1JJU0NWYCBvcHRpb25zIGFyZSBlbmFibGVkLCB0aGF0J3MgYmFzZWxpbmUsIG5vIHN1cnByaXNlcyB0aGVyZS4gVGhlbiwgbGV0J3MgbG9vayBhdCB0aGUgaW50cmljYWNpZXMgb2YgdGhlIFJJU0MtViBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgZXh0ZW5zaW9ucyBvciBhcmNoaXRlY3R1cmUgdmVyc2lvbnMgdGhhdCBhcmUgbWFuZGF0ZWQgb3IgcmVjb21tZW5kZWQ/IEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMsIGlmIGFueSBhcmUgdXNlZCwgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUgZGVmYXVsdCBSSVNDLVYgYmFzZWxpbmUgb3IgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBhbnkgYXNzb2NpYXRlZCBhcmNoaXRlY3R1cmUgbGV2ZWwgZmVhdHVyZSBzZWxlY3Rpb25zLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIEpJVCBpc24ndCBpbmFkdmVydGVudGx5IHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgb3IgbW9kZWxzLlxuXG5CZXlvbmQgdGhlIGNvcmUgb3B0aW9ucywgSSBoYXZlIHRvIGVuc3VyZSB0aGUgS2NvbmZpZyBpbmNsdWRlcyBvcHRpb25zIHRvIGhhbmRsZSB0aGluZ3MgbGlrZSB0aGUgcmVsb2NhdGlvbiBtb2RlbCwgbWVtb3J5IHJlZ2lvbnMsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHRoYXQgbWF5IGFyaXNlIHdpdGhpbiB0aGUgUklTQy1WIGNvbnRleHQuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGZsYWdzPyBXaGF0IGFib3V0IGRlYnVnIG9wdGlvbnMgb3IgZXJyb3IgaGFuZGxpbmc/IEkgc2hvdWxkIHNlZSBpZiB0aGVyZSdzIGFueSBzdXBwb3J0IGZvciB0aGluZ3MgbGlrZSBleGNlcHRpb24gaGFuZGxpbmcuIEkgYWxzbyBleHBlY3Qgb3B0aW9ucyB0byBiZSBleHBvc2VkIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIHRhcmdldGVkIGZvciBhIGJhcmUtbWV0YWwgZW52aXJvbm1lbnQgdmVyc3VzIGFuIG9wZXJhdGluZyBzeXN0ZW0uIEEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHRvIG90aGVyIFJJU0MtVi1zcGVjaWZpYyBLY29uZmlncyAoZS5nLiwgcmVsYXRlZCB0byB0aGUga2VybmVsIGl0c2VsZiBvciBvdGhlciBzdWJzeXN0ZW1zKSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBpcyBhIG11c3QuIEZpbmFsbHksIGxldCdzIGV4cGxvcmUgdGhlIG9wdGlvbiBkZXNjcmlwdGlvbnMgdGhvcm91Z2hseSB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBjb25maWd1cmF0aW9uIGNob2ljZS4gVGhpcyBLY29uZmlnIGludmVzdGlnYXRpb24gaXMgZ29pbmcgdG8gYmUgdGhvcm91Z2gsIEkgaGF2ZSBhIGxvdCBvZiBzcGVjaWZpYyBhc3BlY3RzIHRoYXQgSSdkIGxpa2UgdG8gY2hlY2sgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjA5LjM3MzU3MDI5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyOTk3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjgtXFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSIGlmIEhBVkVfRFlOQU1JQ19GVFJBQ0VcXG5hcmNoL3Jpc2N2L0tjb25maWc6MTY5OlxcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNzAtXFx0c2VsZWN0IEhBVkVfR0VORVJJQ19USUZfQklUU1xcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9leHRhYmxlLmg9Mzg9c3RhdGljIGlubGluZSBib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTQwLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oOjQxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfSklUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19BUkNIX1JWNjRJKVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTQyLWJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTQ2LVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjQ3OiNkZWZpbmUgQlBGX0pJVF9SRUdJT05fU0laRVxcdChTWl8xMjhNKVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTQ4LSNpZmRlZiBDT05GSUdfNjRCSVRcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo0OTojZGVmaW5lIEJQRl9KSVRfUkVHSU9OX1NUQVJUXFx0KEJQRl9KSVRfUkVHSU9OX0VORCAtIEJQRl9KSVRfUkVHSU9OX1NJWkUpXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6NTA6I2RlZmluZSBCUEZfSklUX1JFR0lPTl9FTkRcXHQoTU9EVUxFU19FTkQpXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNTEtI2Vsc2VcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo1MjojZGVmaW5lIEJQRl9KSVRfUkVHSU9OX1NUQVJUXFx0KFBBR0VfT0ZGU0VUIC0gQlBGX0pJVF9SRUdJT05fU0laRSlcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo1MzojZGVmaW5lIEJQRl9KSVRfUkVHSU9OX0VORFxcdChWTUFMTE9DX0VORClcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC01NC0jZW5kaWZcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jPTE0NTY9c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9pbml0LmMtMTQ3Mi1cXHRcXHRcXHRbRVhFQ01FTV9CUEZdID0ge1xcbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjE0NzM6XFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBCUEZfSklUX1JFR0lPTl9TVEFSVCxcXG5hcmNoL3Jpc2N2L21tL2luaXQuYzoxNDc0OlxcdFxcdFxcdFxcdC5lbmRcXHQ9IEJQRl9KSVRfUkVHSU9OX0VORCxcXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNDc1LVxcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IFBBR0VfS0VSTkVMLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtMi1cXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvcmUub1xcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlLTQtXFxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU9NT1pZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlOjY6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZS03LWVsc2VcXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZTo4OlxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAzMi5vXFxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtOS1lbmRpZlxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTgtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjk6I2lmbmRlZiBfQlBGX0pJVF9IXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjEwOiNkZWZpbmUgX0JQRl9KSVRfSFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMS1cXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaD0xMzI4PWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTEzMzAtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjEzMzE6I2VuZGlmIC8qIF9CUEZfSklUX0ggKi9cXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMzAtICogIEJQRl9SRUdfRlAgPVxcdTAwM2UgICstLS0tLS0tLS0tKyBcXHUwMDNjPSAoZnAgLSA0ICogTlJfU0FWRURfUkVHSVNURVJTXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzozMTogKiAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAtIDQgKiBCUEZfSklUX1NDUkFUQ0hfUkVHUylcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTMyLSAqICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM9NDM9ZW51bSB7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTU1LVxcdC8qIFN0YWNrIHNwYWNlIGZvciBCUEZfUkVHXzYgdGhyb3VnaCBCUEZfUkVHXzkgYW5kIEJQRl9SRUdfQVguICovXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzo1NjpcXHRCUEZfSklUX1NDUkFUQ0hfUkVHUyxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTU3LX07XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTY0LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6NjU6I2RlZmluZSBUTVBfUkVHXzFcXHQoTUFYX0JQRl9KSVRfUkVHICsgMClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjY2OiNkZWZpbmUgVE1QX1JFR18yXFx0KE1BWF9CUEZfSklUX1JFRyArIDEpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy02Ny1cXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTM4Mj12b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTM5Mi1cXHQvKiBNYWtlIHNwYWNlIGZvciBCUEYgcmVnaXN0ZXJzIG9uIHN0YWNrLiAqL1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTM5MzpcXHRzdGFja19hZGp1c3QgKz0gQlBGX0pJVF9TQ1JBVENIX1JFR1MgKiBzaXplb2YodTMyKTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTEzOTQtXFx0LyogTWFrZSBzcGFjZSBmb3IgQlBGIHN0YWNrLiAqL1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz03MzU9c3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW50IGRzdF9yZWcsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy03NjYtXFx0ICogU2luY2UgdGhlIGV4dGFibGUgZm9sbG93cyB0aGUgcHJvZ3JhbSwgdGhlIGZpeHVwIG9mZnNldCBpcyBhbHdheXNcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjc2NzpcXHQgKiBuZWdhdGl2ZSBhbmQgbGltaXRlZCB0byBCUEZfSklUX1JFR0lPTl9TSVpFLiBTdG9yZSBhIHBvc2l0aXZlIHZhbHVlXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy03NjgtXFx0ICogdG8ga2VlcCB0aGluZ3Mgc2ltcGxlLCBhbmQgcHV0IHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgdXBwZXJcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jPTE5ND11NjQgYnBmX2ppdF9hbGxvY19leGVjX2xpbWl0KHZvaWQpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtMTk1LXtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzoxOTY6XFx0cmV0dXJuIEJQRl9KSVRfUkVHSU9OX1NJWkU7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtMTk3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MDkuNDI0ODcyOTQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDA5Mjg0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCUEYgSklUIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVG8gdW5kZXJzdGFuZCBob3cgYEJQRl9KSVRgIGlzIGVuYWJsZWQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBhIGZldyBrZXkgZmlsZXMuIEknbGwgc3RhcnQgd2l0aCBgYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVgLCBhcyB0aGUgYXJjaGl0ZWN0dXJlIG1pZ2h0IGluZmx1ZW5jZSBob3cgSklUIGNvbXBpbGF0aW9uIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGVuLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlczogYGtlcm5lbC9icGYvS2NvbmZpZ2AsIGFuZCBwb3RlbnRpYWxseSBgbmV0L0tjb25maWdgIG9yIGV2ZW4gYGluaXQvS2NvbmZpZ2Ag4oCTIHRoZSBicm9hZGVyIEtjb25maWcgbGFuZHNjYXBlIHVzdWFsbHkgcmV2ZWFscyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBvcHRpb25zLiBUaG9zZSBzZWVtIGxpa2UgbG9naWNhbCBzdGFydGluZyBwb2ludHMsIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd291bGQgbGlrZWx5IHJlc2lkZS5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCBhbmQgcXVpY2tseSBpZGVudGlmeSBhbGwgaW5zdGFuY2VzLCBJJ2xsIGFsc28gcnVuIGEgcXVpY2sgZ3JlcCBhY3Jvc3MgdGhlIGVudGlyZSBzb3VyY2UgdHJlZSBmb3IgYGNvbmZpZyBCUEZfSklUYC4gVGhhdCBzaG91bGQgcXVpY2tseSB1bmNvdmVyIGFueSByZWZlcmVuY2VzIHRvIHRoZSBvcHRpb24gYW5kIGl0cyByZWxhdGlvbnNoaXBzLCByZWdhcmRsZXNzIG9mIHRoZSBmaWxlIGxvY2F0aW9uLiBUaGF0J3MgdXN1YWxseSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgYmlyZCdzLWV5ZSB2aWV3IG9mIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzoxMS43MjU4MDMyODlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDc1NDY3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNTctXFxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjEzLjI3MzM1NDgwNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTA2ODg3MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRXhhbWluaW5nIEJQRiBKSVQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGZvY3VzIGlzIG9uIHRoZSBgQlBGX0pJVGAgb3B0aW9uIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGRldGFpbCB0aGUgSklUIChKdXN0LUluLVRpbWUpIGNvbXBpbGVyIGZvciBCUEYgYnl0ZWNvZGUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBKSVQgaXMgZW5hYmxlZCwgd2hhdCBhcmNoaXRlY3R1cmVzIGl0J3Mgc3VwcG9ydGVkIG9uLCBhbmQgYW55IHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyB0aGF0IGFyZSBhZGRyZXNzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGJ1aWxkcyBhbmQgbWFuYWdlcyBCUEYgcHJvZ3JhbXMgYXQgcnVudGltZSwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbXkgd29yay4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgd2hlbiBkaWdnaW5nIGludG8gdGhlIEJQRiBKSVQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0OTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzoxNS43ODAyNDQwNzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzExODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDUwOlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTE6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU0OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1NTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDU2OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDU5OlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjA6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjM6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MTUuNzgwMzE2OTc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNjk5MTA3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUklTQy1WIEJQRiBKSVQgQ29tcGlsYXRpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBSSVNDLVYgQlBGIEpJVCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBJIHJlY2FsbCB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBjYWxscyBgYnVpbGRfYm9keWAsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGJwZl9qaXRfZW1pdF9pbnNuKGluc24sIGN0eCwgZXh0cmFfcGFzcylgLiBJdCBsb29rcyBsaWtlIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgY2FsbGVkIGJ5IHRoZSBCUEYgbG9hZGVyL2NvbXBpbGVyIHBpcGVsaW5lLCBzcGVjaWZpY2FsbHkgdmlhIGBicGZfcHJvZ19zZWxlY3RfcnVudGltZWAgYW5kIHRoZW4gdGhlIGBicGZfaW50X2ppdF9jb21waWxlYCBmdW5jdGlvbi4gSSBhbHNvIHNlZSB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgaXMgYSBub24tc3RhdGljIHN5bWJvbDsgdGhhdCdzIGdvb2QhIEl0J3MgZGVjbGFyZWQgaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaGAgYW5kIGRlZmluZWQgaW4gYGJwZl9qaXRfY29tcDY0LmNgLCBzbyBpdCBzaG91bGQgYmUgYWNjZXNzaWJsZS5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBleHBvcnQgc3RhdHVzLiBDaGVja2luZyBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIHRoZSBkZWNsYXJhdGlvbiBvZiBgYnBmX2ppdF9lbWl0X2luc25gIGlzIGV4YWN0bHkgYXMgZXhwZWN0ZWQsIGFuZCBpdCBhbHNvIGxpbmVzIHVwIHdpdGggdGhlIGRlY2xhcmF0aW9uIGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0LmhgLiAgSW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jYCwgSSBzZWUgYHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpYCB3aGljaCBpcyBhbHNvIHdoYXQgSSBleHBlY3RlZC5cblxuQWxyaWdodCwgbGV0J3MgYWxpZ24gdGhpcyB3aXRoIGEgZnV6emluZyBzdHJhdGVneS4gVGhlIGNyaXRlcmlhIHNlZW0gdG8gYWxpZ24gd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgSklUIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCBleGNlcHRpb24gdGFibGUgaGFuZGxpbmcgZm9yIFJJU0MtViA2NC4gIFBlcmZlY3QhIEFuZCB5ZXMsIGEgc3RhbmRhcmQgTGludXgga2VybmVsIHdpdGggQlBGIEpJVCBydW5zIHdpdGhpbiBRRU1VIG9uIFJJU0MtViA2NCwgbWFraW5nIGl0IHJlYWNoYWJsZS4gVGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQ6IEpJVCBjb2RlIGdlbmVyYXRpb24gYW5kIGV4Y2VwdGlvbiBoYW5kbGluZyBidWdzIGNhbiBkZWZpbml0ZWx5IGxlYWQgdG8gY3Jhc2hlcywgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRoYXQgbWFrZXMgaXQgYSBzdHJvbmcgY2FuZGlkYXRlLlxuXG5UaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qgb246IGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCBhcmUgZXhhY3RseSB0aGUgYXJlYXMgSSB3YW50IHRvIHRhcmdldC4gQXMgZm9yIHRoZSBgRW5hYmxlQ29uZmlnc2AsIGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBBUkNIX1JWNjRJYCBvciBlcXVpdmFsZW50IChgNjRCSVRgL2BSSVNDVmApIG1ha2Ugc2Vuc2UuICBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYEFSQ0hfUlY2NElgIGluIEtjb25maWcsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb25maWcgb3B0aW9ucyBhcmUgY29ycmVjdCBmb3IgbXkgdGVzdGluZyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzoyMS4xNTAyMjk4ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODY1OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX1JWNjRJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnPTQwNj1jb25maWcgQVJDSF9SVjMySVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMS1cXG5hcmNoL3Jpc2N2L0tjb25maWc6NDEyOmNvbmZpZyBBUkNIX1JWNjRJXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMy1cXHRib29sIFxcXCJSVjY0SVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MjEuMjAzMTAyMjUzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NzMwNjIwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBSSVNDLVYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSBzb21lIGtleSBSSVNDLVYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBMZXQncyBzZWUuLi5JJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IHN0dWZmIGlzIGxpa2VseSBpbiBgYXJjaC9yaXNjdi9LY29uZmlnYC4gUmlnaHQsIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gQW5kIGJhc2VkIG9uIHdoYXQgSSByZW1lbWJlciwgbGluZSA0MTAgc291bmRzIGxpa2UgYSByZWFzb25hYmxlIGFyZWEgdG8gemVybyBpbiBvbi4gSG9wZWZ1bGx5LCBJJ2xsIGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3Igc29tZXdoZXJlIGFyb3VuZCB0aGF0IGxvY2F0aW9uIGFuZCBxdWlja2x5IGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljcyBvZiB0aGUgdGFyZ2V0ZWQgY29uZmlndXJhdGlvbiBpdGVtLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTU3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MjIuODc2MTY4MzIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDA1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDA1OlxcdFxcbiA0MDY6XFx0Y29uZmlnIEFSQ0hfUlYzMklcXG4gNDA3OlxcdFxcdGJvb2wgXFxcIlJWMzJJXFxcIlxcbiA0MDg6XFx0XFx0ZGVwZW5kcyBvbiBOT05QT1JUQUJMRVxcbiA0MDk6XFx0XFx0c2VsZWN0IDMyQklUXFxuIDQxMDpcXHRcXHRzZWxlY3QgR0VORVJJQ19MSUJfVUNNUERJMlxcbiA0MTE6XFx0XFxuIDQxMjpcXHRjb25maWcgQVJDSF9SVjY0SVxcbiA0MTM6XFx0XFx0Ym9vbCBcXFwiUlY2NElcXFwiXFxuIDQxNDpcXHRcXHRzZWxlY3QgNjRCSVRcXG4gNDE1OlxcdFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0lOVDEyOCBpZiBDQ19IQVNfSU5UMTI4XFxuIDQxNjpcXHRcXHRzZWxlY3QgU1dJT1RMQiBpZiBNTVVcXG4gNDE3OlxcdFxcbiA0MTg6XFx0ZW5kY2hvaWNlXFxuIDQxOTpcXHRcXG4gNDIwOlxcdCMgV2UgbXVzdCBiZSBhYmxlIHRvIG1hcCBhbGwgcGh5c2ljYWwgbWVtb3J5IGludG8gdGhlIGtlcm5lbCwgYnV0IHRoZSBjb21waWxlclxcbiA0MjE6XFx0IyBpcyBzdGlsbCBhIGJpdCBtb3JlIGVmZmljaWVudCB3aGVuIGdlbmVyYXRpbmcgY29kZSBpZiBpdCdzIHNldHVwIGluIGEgbWFubmVyXFxuIDQyMjpcXHQjIHN1Y2ggdGhhdCBpdCBjYW4gb25seSBtYXAgMkdpQiBvZiBtZW1vcnkuXFxuIDQyMzpcXHRjaG9pY2VcXG4gNDI0OlxcdFxcdHByb21wdCBcXFwiS2VybmVsIENvZGUgTW9kZWxcXFwiXFxuIDQyNTpcXHRcXHRkZWZhdWx0IENNT0RFTF9NRURMT1cgaWYgMzJCSVRcXG4gNDI2OlxcdFxcdGRlZmF1bHQgQ01PREVMX01FREFOWSBpZiA2NEJJVFxcbiA0Mjc6XFx0XFxuIDQyODpcXHRcXHRjb25maWcgQ01PREVMX01FRExPV1xcbiA0Mjk6XFx0XFx0XFx0Ym9vbCBcXFwibWVkaXVtIGxvdyBjb2RlIG1vZGVsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzoyMi44NzYyOTU0NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ3NDk1NjQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIuIEkga25vdyBpbW1lZGlhdGVseSB0aGF0IHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYEFSQ0hfUlY2NElgLCBgQlBGX0pJVGAsIGFuZCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gZW5zdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgc3RyYWlnaHQgYmVmb3JlIEkgZGl2ZSBkZWVwZXIuXG5cbkkgc2VlIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yIHRoYXQgd2Ugc2hvdWxkIGV4cGxvcmUgdGhpcy4gSSd2ZSBhbHNvIGdvdCBhIGZvY3VzZWQgc3ltYm9sIGxpc3Q6IGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCwgd2hpY2ggZ2l2ZXMgbWUgYSBkaXJlY3QgbGluZSBvZiBzaWdodCB0byB0aGUgY3JpdGljYWwgY29kZSBzZWN0aW9ucy4gVGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzdW1wdGlvbnM6IGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGNydWNpYWxseSwgdGhlIFJJU0MtViA2NC1iaXQgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgKGBBUkNIX1JWNjRJYCkuXG5cblRoZSByZWFzb25pbmcgY2xhcmlmaWVzIHRoZSBwdXJwb3NlOiB0aGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLCBzcGVjaWZpY2FsbHkgaG93IGV4Y2VwdGlvbiB0YWJsZSBoYW5kbGVycyBhcmUgcmVnaXN0ZXJlZCBmb3IgcHJvYmUgbWVtb3J5IGxvYWQvc3RvcmUgYW5kIGF0b21pYyBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgZnVuY3Rpb25hbCwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEJQRiBKSVQgY29kZSwgbWVhbmluZyBpdCdzIHNvbWV0aGluZyBJIGNhbiB0ZXN0IGVmZmVjdGl2ZWx5IHdpdGhpbiBhIFFFTVUgcmlzY3Y2NCBlbnZpcm9ubWVudC4gR2l2ZW4gdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgYWNjZXNzLCBpdCB3YXJyYW50cyBjYXJlZnVsIGF0dGVudGlvbi5cblxuTm93LCBiZWZvcmUgSSBsYXVuY2ggYW55IGFuYWx5c2lzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSB0b29sIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AgdG8gbWFrZSBzdXJlIGl0J3MgY29uZmlndXJlZCBjb3JyZWN0bHkuIFRoaXMgc291bmRzIGxpa2UgYW4gYXJlYSByaXBlIGZvciBwb3RlbnRpYWwgY3Jhc2hlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91ciwgc28gZ2V0dGluZyB0aG9zZSBpbml0aWFsIHNldHRpbmdzIHJpZ2h0IHdpbGwgYmUgY3J1Y2lhbCB0byBnZXR0aW5nIHNvbGlkIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTE5LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjI2LjM1MTI1NDM3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjQyOTg3LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBUkNIX1JWNjRJIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJBUkNIX1JWNjRJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyIChhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jKSwgcmVmYWN0b3JpbmcgaG93IGFuZCB3aGVuIGV4Y2VwdGlvbiB0YWJsZSBoYW5kbGVycyBhcmUgYXR0YWNoZWQgdG8gcHJvYmUgbG9hZCwgc3RvcmUsIGFuZCBhdG9taWMgaW5zdHJ1Y3Rpb25zLiBUaGlzIGFmZmVjdHMgZnVuY3Rpb25hbCBCUEYgY29kZSBnZW5lcmF0aW9uIGFuZCBmYXVsdCBoYW5kbGluZyBpbiBSSVNDLVYgSklULCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VIHJpc2N2NjQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBUkNIX1JWNjRJXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjI2LjQyNTkwNjk3NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUxODg5ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbmZ1c2lvbioqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gd2hhdCdzIHRoaXM/IFRoZSBidWlsZCBzeXN0ZW0gaXMgY29tcGxhaW5pbmcgdGhhdCBgQVJDSF9SVjY0SWAgaXNuJ3QgZGVmaW5lZD8gSSBjb3VsZCBoYXZlIHN3b3JuIHRoYXQgYXJjaGl0ZWN0dXJlIHdhcyBzdXBwb3J0ZWQgYW5kIGluIHRoZSB0cmVlLiBUaGlzIGlzIHVudXN1YWwuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0IG1lIHF1aWNrbHkganVtcCBpbnRvIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgYSBzaW1wbGUgdHlwbyBvciBvdmVyc2lnaHQuIExldCBtZSB2ZXJpZnkgdGhlIGV4YWN0IHNwZWxsaW5nIGFuZCBkZWZpbml0aW9uIG9mIGBBUkNIX1JWNjRJYCB3aXRoaW4gdGhhdCBLY29uZmlnIGZpbGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdCB0aGVyZSwgZW5hYmxlZCBieSBzb21lIGBkZWZfYm9vbGAgb3IgYGJvb2xgIHN0YXRlbWVudCwgb3IgcGVyaGFwcyBjb25kaXRpb25lZCBvbiBzb21lIG90aGVyIHByZS1leGlzdGluZyBvcHRpb24uIFRpbWUgdG8gZWxpbWluYXRlIHRoZSBtb3N0IG9idmlvdXMgcG9zc2liaWxpdGllcy4gSXQncyBwcm9iYWJseSBqdXN0IGEgc21hbGwgZXJyb3IgdGhhdCBJIG92ZXJsb29rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTA3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjI4LjQ3Nzc5OTI1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwMTM2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9SVjY0SVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz0zOTk9Y2hvaWNlXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQwMC1cXHRwcm9tcHQgXFxcIkJhc2UgSVNBXFxcIlxcbmFyY2gvcmlzY3YvS2NvbmZpZzo0MDE6XFx0ZGVmYXVsdCBBUkNIX1JWNjRJXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQwMi1cXHRoZWxwXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9NDA2PWNvbmZpZyBBUkNIX1JWMzJJXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctNDExLVxcbmFyY2gvcmlzY3YvS2NvbmZpZzo0MTI6Y29uZmlnIEFSQ0hfUlY2NElcXG5hcmNoL3Jpc2N2L0tjb25maWctNDEzLVxcdGJvb2wgXFxcIlJWNjRJXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9NYWtlZmlsZT0yOD1leHBvcnQgQklUU1xcbmFyY2gvcmlzY3YvTWFrZWZpbGU6Mjk6aWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSlcXG5hcmNoL3Jpc2N2L01ha2VmaWxlLTMwLVxcdEJJVFMgOj0gNjRcXG4tLVxcbmFyY2gvcmlzY3YvTWFrZWZpbGU9NjE9cmlzY3YtbWFyY2gtJChDT05GSUdfQVJDSF9SVjMySSlcXHQ6PSBydjMyaW1hXFxuYXJjaC9yaXNjdi9NYWtlZmlsZTo2MjpyaXNjdi1tYXJjaC0kKENPTkZJR19BUkNIX1JWNjRJKVxcdDo9IHJ2NjRpbWFcXG5hcmNoL3Jpc2N2L01ha2VmaWxlLTYzLXJpc2N2LW1hcmNoLSQoQ09ORklHX0ZQVSlcXHRcXHQ6PSAkKHJpc2N2LW1hcmNoLXkpZmRcXG4tLVxcbmFyY2gvcmlzY3YvY29uZmlncy82NC1iaXQuY29uZmlnLTEtIyBIZWxwOiBCdWlsZCBhIDY0LWJpdCBpbWFnZVxcbmFyY2gvcmlzY3YvY29uZmlncy82NC1iaXQuY29uZmlnOjI6Q09ORklHX0FSQ0hfUlY2NEk9eVxcbmFyY2gvcmlzY3YvY29uZmlncy82NC1iaXQuY29uZmlnLTMtQ09ORklHXzY0QklUPXlcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oPTM4PXN0YXRpYyBpbmxpbmUgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIGZhbHNlOyB9XFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaC00MC1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaDo0MTojaWYgZGVmaW5lZChDT05GSUdfQlBGX0pJVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9SVjY0SSlcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaC00Mi1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvcmUub1xcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlLTQtXFxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU6NTppZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlLTYtXFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MjguNTI5ODE2Mzk2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2OTYwNzkzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRXJyb3IqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBXaHkgaXMgYHNldC1yZXN1bHRzYCB0ZWxsaW5nIG1lIHRoYXQgYEFSQ0hfUlY2NElgIGlzbid0IGZvdW5kIHdpdGhpbiB0aGUga2VybmVsIHRyZWU/IFRoYXQnc+KApiB1bmV4cGVjdGVkLiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzIGlzIGxpa2VseSBsb29raW5nIGF0IEtjb25maWcgZGVmaW5pdGlvbnMgZnJvbSBhIG1vcmUgY29tbW9uIGFyY2hpdGVjdHVyZSwgbGlrZSB4ODYsIG9yIG1heWJlIGl0J3MgY2hlY2tpbmcgZ2VuZXJhbCBLY29uZmlnIHN5bWJvbHMuIEl0IHNlZW1zIHVubGlrZWx5IHRoYXQgaXQga25vd3MgdGhlIGltcGxpY2F0aW9ucyBmb3IgUklTQy1WIHNwZWNpZmljYWxseSwgYW5kIHRodXMgaXMgYW4gaW5jb21wbGV0ZSB2aWV3LlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIHRlc3QgdGhlIHNpdHVhdGlvbiwga2VlcGluZyB0aGF0IGluIG1pbmQuIEluc3RlYWQgb2YgdHJ5aW5nIHRvIGZvcmNlIGBBUkNIX1JWNjRJYCByaWdodCBhd2F5LCBsZXQncyB0cnkgc29tZSBicm9hZGVyLCBtb3JlIGdlbmVyYWxseSByZWNvZ25pemVkIHN5bWJvbHMgdG8gY2hlY2sgaWYgdGhlIGVycm9yIGxpZXMgaW4gdGhlIHZhbGlkYXRpb24gcHJvY2VzcywgYW5kIGlmIHRob3NlIHN5bWJvbHMgYXJlIGF2YWlsYWJsZS4gVGhlIGFpbSBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGl0J3Mgc2F5aW5nIGBBUkNIX1JWNjRJYCBpc24ndCB0aGVyZSwgYW5kIGlmIGl0J3MgYSBmYWxzZSBuZWdhdGl2ZS4gSSdsbCB0ZXN0IHdpdGggYDY0QklUYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9TWVNDQUxMYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODI3LCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjMxLjIyNTkwMDExM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDI1NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiNjRCSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIgKGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMpLCByZWZhY3RvcmluZyBob3cgYW5kIHdoZW4gZXhjZXB0aW9uIHRhYmxlIGhhbmRsZXJzIGFyZSBhdHRhY2hlZCB0byBwcm9iZSBsb2FkLCBzdG9yZSwgYW5kIGF0b21pYyBpbnN0cnVjdGlvbnMuIFRoaXMgYWZmZWN0cyBmdW5jdGlvbmFsIEJQRiBjb2RlIGdlbmVyYXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGluIFJJU0MtViBKSVQsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUgcmlzY3Y2NCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIjY0QklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyIChhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jKSwgcmVmYWN0b3JpbmcgaG93IGFuZCB3aGVuIGV4Y2VwdGlvbiB0YWJsZSBoYW5kbGVycyBhcmUgYXR0YWNoZWQgdG8gcHJvYmUgbG9hZCwgc3RvcmUsIGFuZCBhdG9taWMgaW5zdHJ1Y3Rpb25zLiBUaGlzIGFmZmVjdHMgZnVuY3Rpb25hbCBCUEYgY29kZSBnZW5lcmF0aW9uIGFuZCBmYXVsdCBoYW5kbGluZyBpbiBSSVNDLVYgSklULCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VIHJpc2N2NjQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzozMS4yOTc5MzI4MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxNTgzNDkyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzozMS4yOTg0MzI2N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0MTU3ODQ0MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGV4Y2VwdGlvbiB0YWJsZSByZWdpc3RyYXRpb24gbG9naWMgaW4gdGhlIFJJU0MtViBCUEYgSklUIGNvbXBpbGVyIChgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2ApLiBJdCBtb3ZlcyBvcGNvZGUgY2hlY2tzIChgaW5zbl9pc19wcm9iZV9sZHgoKWAsIGBCUEZfUFJPQkVfTUVNMzJgLCBgQlBGX1BST0JFX0FUT01JQ2ApIGZyb20gd2l0aGluIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoKWAgdG8gaXRzIGNhbGxlcnMgaW4gYGJwZl9qaXRfZW1pdF9pbnNuKClgLlxcblxcblRoaXMgaXMgcHVyZWx5IEpJVCBjb2RlIGVtaXNzaW9uIGFuZCBpbnRlcm5hbCBleGNlcHRpb24gdGFibGUgYm9va2tlZXBpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgaGFuZGxpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNmYjA1ZjU3Mjc4ZTRlMTA2MGUzMzAxNDc3ZTYxOWYxMmI1ZDVhM2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDIzOjU2OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGU3Mzc4YmUxNzFhOWYuLjcyNmMwMTY5ZmM2MGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtNzMxLDkgKzczMSw4IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tLyogRm9yIGFjY2Vzc2VzIHRvIEJURiBwb2ludGVycywgYWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgKi9cbi1zdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuLVx0XHRcdFx0IHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuKy8qIEFkZCBhbiBlbnRyeSB0byB0aGUgZXhjZXB0aW9uIHRhYmxlIGZvciBhIGZhdWx0aW5nIHByb2JlIGluc24gKi9cbitzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnQgZHN0X3JlZywgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4ge1xuIFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG4gXHR1bnNpZ25lZCBsb25nIHBjO1xuQEAgLTc0NCwxNCArNzQzLDYgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcbiBcdCAgICBjdHgtXHUwMDNlZXhfaW5zbl9vZmYgXHUwMDNjPSAwIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTVNYIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCBcdTAwMjZcdTAwMjZcbi1cdCAgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MRFgpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cdTAwM2VuZXhlbnRyaWVzIFx1MDAzZT0gY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0xMzYwLDYgKzEzNTEsMTUgQEAgaW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG4gXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogc2l6ZTtcbiB9XG4gXG4rLyogUHJvYmUgbG9hZHMgZmF1bHQgb24gdW5tYXBwZWQgbWVtb3J5IGFuZCBuZWVkIGFuIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSAqL1xuK3N0YXRpYyBib29sIGluc25faXNfcHJvYmVfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRyZXR1cm4gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNIHx8XG4rXHQgICAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHxcbitcdCAgICAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMiB8fFxuK1x0ICAgICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7XG4rfVxuK1xuIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHQgICAgICBib29sIGV4dHJhX3Bhc3MpXG4ge1xuQEAgLTE5MjksOSArMTkyOSwxMSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcbiBcdFx0ZW1pdF9sZHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBzaWduX2V4dCwgY3R4KTtcbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIHJkLCBjdHgpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmIChpbnNuX2lzX3Byb2JlX2xkeChpbnNuKSkge1xuK1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihyZCwgY3R4KTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFxuIFx0XHRpZiAoQlBGX1NJWkUoY29kZSkgIT0gQlBGX0RXIFx1MDAyNlx1MDAyNiBpbnNuX2lzX3pleHQoXHUwMDI2aW5zblsxXSkpXG4gXHRcdFx0cmV0dXJuIDE7XG5AQCAtMTk1OSw5ICsxOTYxLDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFxuIFx0XHRlbWl0X3N0KHJkLCBvZmYsIGltbSwgQlBGX1NJWkUoY29kZSksIGN0eCk7XG4gXG4tXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4rXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0XHRicmVhaztcbiBcbiBcdC8qIFNUWDogKihzaXplICopKGRzdCArIG9mZikgPSBzcmMgKi9cbkBAIC0xOTgxLDkgKzE5ODUsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXG4gXHRcdGVtaXRfc3R4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHtcbitcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXHRcdGJyZWFrO1xuIFxuIFx0LyogQXRvbWljcyAqL1xuQEAgLTIwMDEsNyArMjAwNyw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHRcdHJldCA9IGVtaXRfYXRvbWljX3JtdyhyZCwgcnMsIGluc24sIGN0eCk7XG4gXG4gXHRcdC8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqL1xuLVx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBIGxvYWQtYWNxdWlyZSByZWFkcyBpbnRvIGRzdF9yZWcsIGFuZCBhIHJlYWQtbW9kaWZ5LXdyaXRlXG4gXHRcdFx0ICogY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvciBpbnRvXG5AQCAtMjAxMCw3ICsyMDE2LDcgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXHRcdFx0ICovXG4gXHRcdFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbiBcbi1cdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgbG9hZF9yZWcgXHUwMDNjIDAgP1xuK1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihsb2FkX3JlZyBcdTAwM2MgMCA/XG4gXHRcdFx0XHRcdFJFR19ET05UX0NMRUFSX01BUktFUiA6IHJlZ21hcFtsb2FkX3JlZ10sXG4gXHRcdFx0XHRcdGN0eCkgPzogcmV0O1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzozMS4yOTg0MzM4M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODM2MjQ4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBkb2luZy4gTGV0J3MgZGlnIGluLiBJdCdzIHRvdWNoaW5nIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCwgd2hpY2ggdGVsbHMgbWUgaXQncyBSSVNDLVYgc3BlY2lmaWMgY29kZSBmb3IgdGhlIEJQRiBKSVQgY29tcGlsZXIsIHRhcmdldGluZyA2NC1iaXQuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZyBvZiB0aGUgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgZnVuY3Rpb24uIFByZXZpb3VzbHksIHRoaXMgZnVuY3Rpb24gd2FzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyBpZiBhbiBpbnN0cnVjdGlvbiB3YXMgYSBwcm9iZSBtZW1vcnkgaW5zdHJ1Y3Rpb24gYW5kLCBpZiBzbywgYWRkaW5nIGFuIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeS4gTm93LCB0aGUgbG9naWMgZm9yIGRldGVybWluaW5nIHRoZSBwcm9iZSBpbnN0cnVjdGlvbiB0eXBlIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSAqY2FsbGVycyogb2YgYGFkZF9leGNlcHRpb25faGFuZGxlcmAuIFRoZSBmdW5jdGlvbiBpdHNlbGYgbm93IHRha2VzIGp1c3QgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGFuZCBjb250ZXh0LlxuXG5TcGVjaWZpY2FsbHksIGBicGZfaml0X2VtaXRfaW5zbmAgaXMgd2hlcmUgdGhlc2UgY2hhbmdlcyBhcmUgaGFwcGVuaW5nLiBXZSdyZSBub3cgY2hlY2tpbmcgY29uZGl0aW9ucyBsaWtlIGBpbnNuX2lzX3Byb2JlX2xkeChpbnNuKWAgb3IgYEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gLi4uYCBiZWZvcmUgY2FsbGluZyBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYC4gRWZmZWN0aXZlbHksIHRoZSBwYXRjaCBpcyByZW9yZ2FuaXppbmcgaG93IHRoZSBleGNlcHRpb24gdGFibGUgZW50cmllcyBhcmUgY3JlYXRlZCBmb3IgdmFyaW91cyBCUEYgaW5zdHJ1Y3Rpb25zIHJlbGF0ZWQgdG8gcHJvYmUgbWVtb3J5IG9wZXJhdGlvbnMuXG5cbk5vdywgY29uc2lkZXJpbmcgS01TQU4sIEkga25vdyB0aGF0IHN1cHBvcnQgaXMgcHJpbWFyaWx5IG9uIHg4Nl82NCwgd2l0aCBzb21lIEFSTTY0IHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBkZWZpbml0ZWx5ICpub3QqIFJJU0MtViBhdCB0aGlzIHBvaW50LiBOZXZlcnRoZWxlc3MsIGxldCdzIGxvb2sgYXQgdGhpcyBwYXRjaCBzZW1hbnRpY2FsbHkuIERvZXMgdGhpcyAqY2hhbmdlKiB0aGUgcmlzayBwcm9maWxlP1xuXG5JIGRvbid0IHNlZSBhbnkgb2J2aW91cyBLTVNBTi1yZWxhdGVkIHByb2JsZW1zLiBUaGlzIGlzIEJQRiBKSVQgZW1pc3Npb24gbG9naWMgcmVmYWN0b3JpbmcsIHB1cmUgYW5kIHNpbXBsZS4gVGhlcmUncyBub3RoaW5nIEkgY2FuIHNlZSBoZXJlIHRoYXQgY291bGQgbGVhZCB0bzpcblxuKiAgIEtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuKiAgIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuKiAgIE1lbW9yeSBhbGxvY2F0aW9uIG9yIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2sgb3IgaGVhcCkuXG4qICAgQW55IGluZm9ybWF0aW9uIGxlYWthZ2UgdG8gdXNlciBzcGFjZS5cblxuSXQncyBqdXN0IHNodWZmbGluZyBhcm91bmQgdGhlIGxvZ2ljIGZvciByZWdpc3RlcmluZyBleGNlcHRpb24gaGFuZGxlcnMuIEl0IHNlZW1zIHByZXR0eSBjb250YWluZWQsIGFuZCB0aGUgY2hhbmNlcyBvZiBpbnRyb2R1Y2luZyBhIEtNU0FOIGlzc3VlIHNlZW0gaW5jcmVkaWJseSBsb3cuXG5cbkknbGwgcXVpY2tseSBkbyBhIHF1aWNrIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjaGVjayBvbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AganVzdCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBidXQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB1bmxpa2VseSB0byByZXF1aXJlIGFueSBzcGVjaWZpYyBLTVNBTiBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MzcuMTM0Njg2MTQ2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzg4MzIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRfZXhjZXB0aW9uX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTcyMT1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy03MzQtLyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqL1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NzM1OnN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTczNi17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjM9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5MzItXFx0XFx0aWYgKGluc25faXNfcHJvYmVfbGR4KGluc24pKSB7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxOTMzOlxcdFxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihyZCwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5MzQtXFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTk2NC1cXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxOTY1OlxcdFxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTY2LVxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5ODgtXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMikge1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTk4OTpcXHRcXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTk5MC1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDE4LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjAxOTpcXHRcXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIobG9hZF9yZWcgXFx1MDAzYyAwID9cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMjAtXFx0XFx0XFx0XFx0XFx0UkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MzcuMTc4NTc2NDE0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzI1MjkwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgNzMwLTc2NSBvZiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgc3BlY2lmaWMgc2VnbWVudCBvZiB0aGUgSklUIGNvbXBpbGVyLiBJIGV4cGVjdCB0byBzZWUgc29tZSBsb3ctbGV2ZWwgUklTQy1WIGFzc2VtYmx5IGdlbmVyYXRpb24sIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgQlBGIGluc3RydWN0aW9ucyBhcmUgYmVpbmcgdHJhbnNsYXRlZCBpbnRvIHRoZSBuYXRpdmUgYXJjaGl0ZWN0dXJlIGNvZGUuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiBhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiBCUEYgSklUIGNvbXBpbGVycywgaXQncyBwcm9iYWJseSBoYW5kbGluZyA2NC1iaXQgb3BlcmF0aW9ucywgcG9zc2libHkgaW50ZWdlciBhcml0aG1ldGljLCBtZW1vcnkgYWNjZXNzLCBvciBzb21lIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyByZWdpc3RlcnMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgd2hhdCBpbW1lZGlhdGUgdmFsdWVzIGFyZSBiZWluZyB1c2VkLCBhbmQgdGhlIG92ZXJhbGwgaW5zdHJ1Y3Rpb24gZmxvdy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGlmIHRoZXJlJ3MgYW55IGNsZXZlciBvcHRpbWl6YXRpb24gaGFwcGVuaW5nLCBzdWNoIGFzIGluc3RydWN0aW9uIHNjaGVkdWxpbmcgb3IgcGVlcGhvbGUgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGlzIHNlY3Rpb24uIFBlcmhhcHMgdGhlcmUncyBhbiBhdHRlbXB0IHRvIG1pbmltaXplIGRlcGVuZGVuY2llcyBvciB0byBwcmVmZXRjaCBkYXRhLiBGcm9tIHRoaXMgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgcm91dGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUyNywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjM5LjU1MTEwODA0NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MzA6XFx0XFxuIDczMTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNzMyOlxcdH1cXG4gNzMzOlxcdFxcbiA3MzQ6XFx0LyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqL1xcbiA3MzU6XFx0c3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW50IGRzdF9yZWcsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbiA3MzY6XFx0e1xcbiA3Mzc6XFx0XFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XFxuIDczODpcXHRcXHR1bnNpZ25lZCBsb25nIHBjO1xcbiA3Mzk6XFx0XFx0b2ZmX3QgaW5zX29mZnNldDtcXG4gNzQwOlxcdFxcdG9mZl90IGZpeHVwX29mZnNldDtcXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aWYgKCFjdHgtXFx1MDAzZWluc25zIHx8ICFjdHgtXFx1MDAzZXJvX2luc25zIHx8ICFjdHgtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlZXh0YWJsZSB8fFxcbiA3NDM6XFx0XFx0ICAgIGN0eC1cXHUwMDNlZXhfaW5zbl9vZmYgXFx1MDAzYz0gMCB8fCBjdHgtXFx1MDAzZWV4X2ptcF9vZmYgXFx1MDAzYz0gMClcXG4gNzQ0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cXHUwMDNlbmV4ZW50cmllcyBcXHUwMDNlPSBjdHgtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbnVtX2V4ZW50cmllcykpXFxuIDc0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzQ4OlxcdFxcbiA3NDk6XFx0XFx0aWYgKFdBUk5fT05fT05DRShjdHgtXFx1MDAzZWV4X2luc25fb2ZmIFxcdTAwM2UgY3R4LVxcdTAwM2VuaW5zbnMgfHwgY3R4LVxcdTAwM2VleF9qbXBfb2ZmIFxcdTAwM2UgY3R4LVxcdTAwM2VuaW5zbnMpKVxcbiA3NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc1MTpcXHRcXG4gNzUyOlxcdFxcdGV4ID0gXFx1MDAyNmN0eC1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VleHRhYmxlW2N0eC1cXHUwMDNlbmV4ZW50cmllc107XFxuIDc1MzpcXHRcXHRwYyA9ICh1bnNpZ25lZCBsb25nKVxcdTAwMjZjdHgtXFx1MDAzZXJvX2luc25zW2N0eC1cXHUwMDNlZXhfaW5zbl9vZmZdO1xcbiA3NTQ6XFx0XFxuIDc1NTpcXHRcXHQvKlxcbiA3NTY6XFx0XFx0ICogVGhpcyBpcyB0aGUgcmVsYXRpdmUgb2Zmc2V0IG9mIHRoZSBpbnN0cnVjdGlvbiB0aGF0IG1heSBmYXVsdCBmcm9tXFxuIDc1NzpcXHRcXHQgKiB0aGUgZXhjZXB0aW9uIHRhYmxlIGl0c2VsZi4gVGhpcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGV4Y2VwdGlvblxcbiA3NTg6XFx0XFx0ICogdGFibGUgYW5kIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2lsbFxcbiA3NTk6XFx0XFx0ICogYmUgc2V0IHRvICcwJyBhbmQgdGhlIGV4ZWN1dGlvbiB3aWxsIGp1bXAgdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24uXFxuIDc2MDpcXHRcXHQgKi9cXG4gNzYxOlxcdFxcdGluc19vZmZzZXQgPSBwYyAtIChsb25nKVxcdTAwMjZleC1cXHUwMDNlaW5zbjtcXG4gNzYyOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoaW5zX29mZnNldCBcXHUwMDNlPSAwIHx8IGluc19vZmZzZXQgXFx1MDAzYyBJTlRfTUlOKSlcXG4gNzYzOlxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiA3NjQ6XFx0XFxuIDc2NTpcXHRcXHQvKlxcbiA3NjY6XFx0XFx0ICogU2luY2UgdGhlIGV4dGFibGUgZm9sbG93cyB0aGUgcHJvZ3JhbSwgdGhlIGZpeHVwIG9mZnNldCBpcyBhbHdheXNcXG4gNzY3OlxcdFxcdCAqIG5lZ2F0aXZlIGFuZCBsaW1pdGVkIHRvIEJQRl9KSVRfUkVHSU9OX1NJWkUuIFN0b3JlIGEgcG9zaXRpdmUgdmFsdWVcXG4gNzY4OlxcdFxcdCAqIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgYW5kIHB1dCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIHVwcGVyXFxuIDc2OTpcXHRcXHQgKiBiaXRzLiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGJ1aWxkdGltZSBvciBydW50aW1lIHNvcnRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MzkuNTUxMjI0NjI1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1OTA1MDMyMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUklTQy1WIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgcmVmYWN0b3JpbmcgaG93IGV4Y2VwdGlvbiBoYW5kbGluZyBpcyBpbnNlcnRlZCB3aXRoaW4gdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIHNoaWZ0aW5nIHRoZSByZXNwb25zaWJpbGl0eSBvZiBkZXRlcm1pbmluZyB3aGVuIHRvIGFkZCBhbiBleGNlcHRpb24gaGFuZGxlci4gSW5zdGVhZCBvZiBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKClgIGluc3BlY3RpbmcgdGhlIGluc3RydWN0aW9uIGRpcmVjdGx5LCB0aGUgY29kZSBjYWxsaW5nIGl0LCBuYW1lbHkgYGJwZl9qaXRfZW1pdF9pbnNuKClgLCBub3cgZG9lcyB0aGUgY2hlY2sgZm9yIHByb2JlIGluc3RydWN0aW9ucy5cblxuTXkgbWFpbiBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB2dWxuZXJhYmlsaXRpZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guXG5cbkFscmlnaHQsIHNvOlxuXG4qICAgKipObyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3M6KiogSXQgZG9lc24ndCBhcHBlYXIgdGhpcyBjaGFuZ2UgdG91Y2hlcyBhbnkgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHJlYWRzLiBOb3RoaW5nIGlzIGJlaW5nIGFsbG9jYXRlZCBvciBhY2Nlc3NlZCB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbi5cbiogICAqKk5vIGRhdGEgbGVha3M6KiogV2UncmUgbm90IGNvcHlpbmcgYW55IG1lbW9yeSB0byB1c2VyIHNwYWNlLCBzbyBubyByaXNrIHRoZXJlIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhLlxuKiAgICoqTm8gY29uZGl0aW9uYWwgdnVsbmVyYWJpbGl0aWVzOioqIFRoZXJlIGFyZW4ndCBhbnkgY29uZGl0aW9uYWxzIHRoYXQgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgd2hpY2ggaXMgZ29vZC4gVGhhdCBlbGltaW5hdGVzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgcHJvYmxlbXMuXG4qICAgKipKSVQgZW1pc3Npb24gYnVnczoqKiBJZiB0aGVyZSBhcmUgYW55IGJ1Z3MgaW50cm9kdWNlZCwgdGhleSdyZSBtb3JlIGxpa2VseSB0byBtYW5pZmVzdCBhcyBpbmNvcnJlY3QgbWFjaGluZSBjb2RlIGJlaW5nIGdlbmVyYXRlZCBvciBvdXRyaWdodCBrZXJuZWwgY3Jhc2hlcywgbm90IGJ5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgICoqS01TQU4gaXMgaXJyZWxldmFudDoqKiBLTVNBTiBpc24ndCBpbiBwbGF5IGhlcmUsIHNvIHdlIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgdGhhdCBhcyBhIGRpYWdub3N0aWMgdG9vbC5cblxuR2l2ZW4gdGhlc2UgcG9pbnRzLCBJJ20gZmVlbGluZyBjb25maWRlbnQgYWJvdXQgdGhpcyBjaGFuZ2UuIFdlIGNhbiBzYWZlbHkgbW92ZSB0byBmb3JtdWxhdGluZyB0aGUgcmVzcG9uc2UgYW5kIHNldHRpbmcgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MjIsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6NTUuNDU2MjU5MTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXhjZXB0aW9uIHRhYmxlIHJlZ2lzdHJhdGlvbiBsb2dpYyBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgKGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCkuIEl0IG1vdmVzIG9wY29kZSBjaGVja3MgKGBpbnNuX2lzX3Byb2JlX2xkeCgpYCwgYEJQRl9QUk9CRV9NRU0zMmAsIGBCUEZfUFJPQkVfQVRPTUlDYCkgZnJvbSB3aXRoaW4gYGFkZF9leGNlcHRpb25faGFuZGxlcigpYCB0byBpdHMgY2FsbGVycyBpbiBgYnBmX2ppdF9lbWl0X2luc24oKWAuXFxuXFxuVGhpcyBpcyBwdXJlbHkgSklUIGNvZGUgZW1pc3Npb24gYW5kIGludGVybmFsIGV4Y2VwdGlvbiB0YWJsZSBib29ra2VlcGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyBoYW5kbGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleGNlcHRpb24gdGFibGUgcmVnaXN0cmF0aW9uIGxvZ2ljIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlciAoYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgKS4gSXQgbW92ZXMgb3Bjb2RlIGNoZWNrcyAoYGluc25faXNfcHJvYmVfbGR4KClgLCBgQlBGX1BST0JFX01FTTMyYCwgYEJQRl9QUk9CRV9BVE9NSUNgKSBmcm9tIHdpdGhpbiBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKClgIHRvIGl0cyBjYWxsZXJzIGluIGBicGZfaml0X2VtaXRfaW5zbigpYC5cXG5cXG5UaGlzIGlzIHB1cmVseSBKSVQgY29kZSBlbWlzc2lvbiBhbmQgaW50ZXJuYWwgZXhjZXB0aW9uIHRhYmxlIGJvb2trZWVwaW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBvciBkYXRhIHBhdGhzIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2d9t2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 23:55:41 +0000 UTC FinishedAt: 2026-09-01 23:57:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "64BIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "64BIT" ], "series_id": "baeff589-2b84-4aa1-9616-3c5d6f805138" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_jit_emit_insn", "bpf_int_jit_compile" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7NjRCSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleGNlcHRpb24gdGFibGUgcmVnaXN0cmF0aW9uIGxvZ2ljIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlciAoYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgKS4gSXQgbW92ZXMgb3Bjb2RlIGNoZWNrcyAoYGluc25faXNfcHJvYmVfbGR4KClgLCBgQlBGX1BST0JFX01FTTMyYCwgYEJQRl9QUk9CRV9BVE9NSUNgKSBmcm9tIHdpdGhpbiBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKClgIHRvIGl0cyBjYWxsZXJzIGluIGBicGZfaml0X2VtaXRfaW5zbigpYC5cblxuVGhpcyBpcyBwdXJlbHkgSklUIGNvZGUgZW1pc3Npb24gYW5kIGludGVybmFsIGV4Y2VwdGlvbiB0YWJsZSBib29ra2VlcGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyBoYW5kbGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIgKGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMpLCByZWZhY3RvcmluZyBob3cgYW5kIHdoZW4gZXhjZXB0aW9uIHRhYmxlIGhhbmRsZXJzIGFyZSBhdHRhY2hlZCB0byBwcm9iZSBsb2FkLCBzdG9yZSwgYW5kIGF0b21pYyBpbnN0cnVjdGlvbnMuIFRoaXMgYWZmZWN0cyBmdW5jdGlvbmFsIEJQRiBjb2RlIGdlbmVyYXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGluIFJJU0MtViBKSVQsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUgcmlzY3Y2NCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZmIwNWY1NzI3OGU0ZTEwNjBlMzMwMTQ3N2U2MTlmMTJiNWQ1YTNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMzo1Njo0OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggZTczNzhiZTE3MWE5Zi4uNzI2YzAxNjlmYzYwZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC03MzEsOSAmIzQzOzczMSw4IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tLyogRm9yIGFjY2Vzc2VzIHRvIEJURiBwb2ludGVycywgYWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgKi9cbi1zdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuLVx0XHRcdFx0IHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuJiM0MzsvKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSBmb3IgYSBmYXVsdGluZyBwcm9iZSBpbnNuICovXG4mIzQzO3N0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcbiBcdHVuc2lnbmVkIGxvbmcgcGM7XG5AQCAtNzQ0LDE0ICYjNDM7NzQzLDYgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcbiBcdCAgICBjdHgtXHUwMDNlZXhfaW5zbl9vZmYgXHUwMDNjPSAwIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTVNYIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCBcdTAwMjZcdTAwMjZcbi1cdCAgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MRFgpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cdTAwM2VuZXhlbnRyaWVzIFx1MDAzZT0gY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0xMzYwLDYgJiM0MzsxMzUxLDE1IEBAIGludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLFxuIFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IHNpemU7XG4gfVxuIFxuJiM0MzsvKiBQcm9iZSBsb2FkcyBmYXVsdCBvbiB1bm1hcHBlZCBtZW1vcnkgYW5kIG5lZWQgYW4gZXhjZXB0aW9uIHRhYmxlIGVudHJ5ICovXG4mIzQzO3N0YXRpYyBib29sIGluc25faXNfcHJvYmVfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0gfHxcbiYjNDM7XHQgICAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHxcbiYjNDM7XHQgICAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcbiYjNDM7XHQgICAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdFx0ICAgICAgYm9vbCBleHRyYV9wYXNzKVxuIHtcbkBAIC0xOTI5LDkgJiM0MzsxOTI5LDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFxuIFx0XHRlbWl0X2xkeChyZCwgb2ZmLCBycywgQlBGX1NJWkUoY29kZSksIHNpZ25fZXh0LCBjdHgpO1xuIFxuLVx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgcmQsIGN0eCk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChpbnNuX2lzX3Byb2JlX2xkeChpbnNuKSkge1xuJiM0MztcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIocmQsIGN0eCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0aWYgKEJQRl9TSVpFKGNvZGUpICE9IEJQRl9EVyBcdTAwMjZcdTAwMjYgaW5zbl9pc196ZXh0KFx1MDAyNmluc25bMV0pKVxuIFx0XHRcdHJldHVybiAxO1xuQEAgLTE5NTksOSAmIzQzOzE5NjEsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXG4gXHRcdGVtaXRfc3QocmQsIG9mZiwgaW1tLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4mIzQzO1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXG4gXHQvKiBTVFg6ICooc2l6ZSAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyYyAqL1xuQEAgLTE5ODEsOSAmIzQzOzE5ODUsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXG4gXHRcdGVtaXRfc3R4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4mIzQzO1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXG4gXHQvKiBBdG9taWNzICovXG5AQCAtMjAwMSw3ICYjNDM7MjAwNyw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHRcdHJldCA9IGVtaXRfYXRvbWljX3JtdyhyZCwgcnMsIGluc24sIGN0eCk7XG4gXG4gXHRcdC8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqL1xuLVx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxuIFx0XHRcdCAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50b1xuQEAgLTIwMTAsNyAmIzQzOzIwMTYsNyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdFx0XHQgKi9cbiBcdFx0XHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuIFxuLVx0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBsb2FkX3JlZyBcdTAwM2MgMCA/XG4mIzQzO1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihsb2FkX3JlZyBcdTAwM2MgMCA/XG4gXHRcdFx0XHRcdFJFR19ET05UX0NMRUFSX01BUktFUiA6IHJlZ21hcFtsb2FkX3JlZ10sXG4gXHRcdFx0XHRcdGN0eCkgPzogcmV0O1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDs2NEJJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciAoYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyksIHJlZmFjdG9yaW5nIGhvdyBhbmQgd2hlbiBleGNlcHRpb24gdGFibGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvIHByb2JlIGxvYWQsIHN0b3JlLCBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBhZmZlY3RzIGZ1bmN0aW9uYWwgQlBGIGNvZGUgZ2VuZXJhdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgaW4gUklTQy1WIEpJVCwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVSByaXNjdjY0IGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNmYjA1ZjU3Mjc4ZTRlMTA2MGUzMzAxNDc3ZTYxOWYxMmI1ZDVhM2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjU2OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggZTczNzhiZTE3MWE5Zi4uNzI2YzAxNjlmYzYwZiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCkBAIC03MzEsOSAmIzQzOzczMSw4IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qIEZvciBhY2Nlc3NlcyB0byBCVEYgcG9pbnRlcnMsIGFkZCBhbiBlbnRyeSB0byB0aGUgZXhjZXB0aW9uIHRhYmxlICovCi1zdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLAotCQkJCSBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCkKJiM0MzsvKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSBmb3IgYSBmYXVsdGluZyBwcm9iZSBpbnNuICovCiYjNDM7c3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW50IGRzdF9yZWcsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4OwogCXVuc2lnbmVkIGxvbmcgcGM7CkBAIC03NDQsMTQgJiM0Mzs3NDMsNiBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLAogCSAgICBjdHgtJmd0O2V4X2luc25fb2ZmICZsdDs9IDAgfHwgY3R4LSZndDtleF9qbXBfb2ZmICZsdDs9IDApCiAJCXJldHVybiAwOwogCi0JaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0gJmFtcDsmYW1wOwotCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggJmFtcDsmYW1wOwotCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgJmFtcDsmYW1wOwotCSAgICAhKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYICZhbXA7JmFtcDsKLQkgICAgICBCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0xEWCkgJmFtcDsmYW1wOwotCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKQotCQlyZXR1cm4gMDsKLQogCWlmIChXQVJOX09OX09OQ0UoY3R4LSZndDtuZXhlbnRyaWVzICZndDs9IGN0eC0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDtudW1fZXhlbnRyaWVzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEzNjAsNiAmIzQzOzEzNTEsMTUgQEAgaW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsCiAJcmV0dXJuIHJldCAmbHQ7IDAgPyByZXQgOiBzaXplOwogfQogCiYjNDM7LyogUHJvYmUgbG9hZHMgZmF1bHQgb24gdW5tYXBwZWQgbWVtb3J5IGFuZCBuZWVkIGFuIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSAqLwomIzQzO3N0YXRpYyBib29sIGluc25faXNfcHJvYmVfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKJiM0Mzt7CiYjNDM7CXJldHVybiBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNIHx8CiYjNDM7CSAgICAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHwKJiM0MzsJICAgICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMiB8fAomIzQzOwkgICAgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7CiYjNDM7fQomIzQzOwogaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAJCSAgICAgIGJvb2wgZXh0cmFfcGFzcykKIHsKQEAgLTE5MjksOSAmIzQzOzE5MjksMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAKIAkJZW1pdF9sZHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBzaWduX2V4dCwgY3R4KTsKIAotCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgcmQsIGN0eCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKGluc25faXNfcHJvYmVfbGR4KGluc24pKSB7CiYjNDM7CQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKHJkLCBjdHgpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAKIAkJaWYgKEJQRl9TSVpFKGNvZGUpICE9IEJQRl9EVyAmYW1wOyZhbXA7IGluc25faXNfemV4dCgmYW1wO2luc25bMV0pKQogCQkJcmV0dXJuIDE7CkBAIC0xOTU5LDkgJiM0MzsxOTYxLDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCiAJCWVtaXRfc3QocmQsIG9mZiwgaW1tLCBCUEZfU0laRShjb2RlKSwgY3R4KTsKIAotCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHsKJiM0MzsJCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAJCWJyZWFrOwogCiAJLyogU1RYOiAqKHNpemUgKikoZHN0ICYjNDM7IG9mZikgPSBzcmMgKi8KQEAgLTE5ODEsOSAmIzQzOzE5ODUsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAKIAkJZW1pdF9zdHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBjdHgpOwogCi0JCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMikgewomIzQzOwkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAkJYnJlYWs7CiAKIAkvKiBBdG9taWNzICovCkBAIC0yMDAxLDcgJiM0MzsyMDA3LDcgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAJCQlyZXQgPSBlbWl0X2F0b21pY19ybXcocmQsIHJzLCBpbnNuLCBjdHgpOwogCiAJCS8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqLwotCQlpZiAocmV0ICZndDs9IDApIHsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHsKIAkJCS8qCiAJCQkgKiBBIGxvYWQtYWNxdWlyZSByZWFkcyBpbnRvIGRzdF9yZWcsIGFuZCBhIHJlYWQtbW9kaWZ5LXdyaXRlCiAJCQkgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG8KQEAgLTIwMTAsNyAmIzQzOzIwMTYsNyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwKIAkJCSAqLwogCQkJaW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTsKIAotCQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnICZsdDsgMCA/CiYjNDM7CQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGxvYWRfcmVnICZsdDsgMCA/CiAJCQkJCVJFR19ET05UX0NMRUFSX01BUktFUiA6IHJlZ21hcFtsb2FkX3JlZ10sCiAJCQkJCWN0eCkgPzogcmV0OwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgYSBwYXRjaCwgc3BlY2lmaWNhbGx5IG9uZSBpbXBhY3RpbmcgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlICYjMzQ7d2hhdCYjMzQ7IOKAkyB3aGF0IGlzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgY2hhbmdpbmcgaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgPyBUaGlzIGZpbGUsIGJlaW5nIHdpdGhpbiB0aGUgUklTQy1WIG5ldHdvcmsgc3RhY2sgYW5kIHJlbGF0ZWQgdG8gdGhlIEJQRiBKSVQgY29tcGlsZXIsIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcmVhLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBzb21lIGFjdHVhbCBpbmZvcm1hdGlvbi4gVGltZSB0byBicmluZyBvdXQgdGhlIHRvb2xzLiBJJiMzOTtsbCBuZWVkIHRvIGdhaW4gc29tZSBjb250ZXh0IGZyb20gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRvIGRvIHRoYXQsIEkmIzM5O2xsIGxldmVyYWdlIGBncmVwcGVyYCAob3IgYHJlYWQtZmlsZWAgaWYgdGhhdCYjMzk7cyBtb3JlIGFwcHJvcHJpYXRlKSwgdGFyZ2V0aW5nIGJvdGggdGhlIGBicGZfaml0X2NvbXA2NC5jYCBmaWxlIGl0c2VsZiAqYW5kKiB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBhbmQgYEtjb25maWdgIGZpbGVzIGxvY2F0ZWQgaW4gYGFyY2gvcmlzY3YvbmV0L2AuIFRoZXNlIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZmlsZSBpcyBidWlsdCwgbGlua2VkLCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGxhcmdlciBSSVNDLVYga2VybmVsIG1vZHVsZS4gVGhlbiwgSSBjYW4gc3RhcnQgdG8gZm9ybSBhbiBpZGVhIG9mIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgd2hlcmUgaXQgbGFuZHMsIHNvIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYW4gaW5mb3JtZWQgb3Bpbmlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXA2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU9NT1pZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU6NjpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wNjQubyBicGZfdGltZWRfbWF5X2dvdG8ub1xuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtNy1lbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlcioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgcGlucG9pbnQgYSBzcGVjaWZpYyBhcmVhLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgcmVtZW1iZXIgaXQgaG91c2VzIHRoZSBjb3JlIEpJVCBjb21waWxhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgYnBmX2ppdF9lbWl0X2luc25gIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbmRpdmlkdWFsIEJQRiBpbnN0cnVjdGlvbnMgYXJlIHRyYW5zbGF0ZWQgaW50byBSSVNDLVYgbWFjaGluZSBjb2RlLCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBsb2N1cyBvZiBhbnkgb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBidWdzIGluIEpJVCBlbWlzc2lvbi4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgb3V0IGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLiBUaGF0JiMzOTtzIHdoZXJlIHdlIG1hbmFnZSB0aGUgaGFuZGxpbmcgb2YgZXhjZXB0aW9ucyB0aGF0IG1pZ2h0IG9jY3VyIGR1cmluZyBleGVjdXRpb24gb2YgSklUIGNvbXBpbGVkIGNvZGU7IG9mdGVuIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBpc3N1ZXMgb3IgZGl2aWRlIGJ5IHplcm8gZXJyb3JzLiBCb3RoIG9mIHRob3NlIGFyZSBwcmV0dHkgY3JpdGljYWwgYXJlYXMgdGhhdCBJIHdhbnQgdG8gc3R1ZHkgaW4gZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGluc3RydWN0aW9ucyBhcmUgYmVpbmcgbGFpZCBvdXQsIGhvdyBleGNlcHRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGF0IHRyYW5zbGF0ZWQgY29kZSBhbmQgaG93IHRoYXQgYWxsIHRpZXMgaW4gd2l0aCB0aGUgb3ZlcmFsbCBrZXJuZWwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMwOlx0XG4gNzMxOlx0XHRyZXR1cm4gdHJ1ZTtcbiA3MzI6XHR9XG4gNzMzOlx0XG4gNzM0Olx0LyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqL1xuIDczNTpcdHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiA3MzY6XHR7XG4gNzM3Olx0XHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcbiA3Mzg6XHRcdHVuc2lnbmVkIGxvbmcgcGM7XG4gNzM5Olx0XHRvZmZfdCBpbnNfb2Zmc2V0O1xuIDc0MDpcdFx0b2ZmX3QgZml4dXBfb2Zmc2V0O1xuIDc0MTpcdFxuIDc0MjpcdFx0aWYgKCFjdHgtXHUwMDNlaW5zbnMgfHwgIWN0eC1cdTAwM2Vyb19pbnNucyB8fCAhY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWV4dGFibGUgfHxcbiA3NDM6XHRcdCAgICBjdHgtXHUwMDNlZXhfaW5zbl9vZmYgXHUwMDNjPSAwIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzYz0gMClcbiA3NDQ6XHRcdFx0cmV0dXJuIDA7XG4gNzQ1Olx0XG4gNzQ2Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cdTAwM2VuZXhlbnRyaWVzIFx1MDAzZT0gY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMpKVxuIDc0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NDg6XHRcbiA3NDk6XHRcdGlmIChXQVJOX09OX09OQ0UoY3R4LVx1MDAzZWV4X2luc25fb2ZmIFx1MDAzZSBjdHgtXHUwMDNlbmluc25zIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzZSBjdHgtXHUwMDNlbmluc25zKSlcbiA3NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzUxOlx0XG4gNzUyOlx0XHRleCA9IFx1MDAyNmN0eC1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VleHRhYmxlW2N0eC1cdTAwM2VuZXhlbnRyaWVzXTtcbiA3NTM6XHRcdHBjID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3R4LVx1MDAzZXJvX2luc25zW2N0eC1cdTAwM2VleF9pbnNuX29mZl07XG4gNzU0Olx0XG4gNzU1Olx0XHQvKlxuIDc1NjpcdFx0ICogVGhpcyBpcyB0aGUgcmVsYXRpdmUgb2Zmc2V0IG9mIHRoZSBpbnN0cnVjdGlvbiB0aGF0IG1heSBmYXVsdCBmcm9tXG4gNzU3Olx0XHQgKiB0aGUgZXhjZXB0aW9uIHRhYmxlIGl0c2VsZi4gVGhpcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGV4Y2VwdGlvblxuIDc1ODpcdFx0ICogdGFibGUgYW5kIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2lsbFxuIDc1OTpcdFx0ICogYmUgc2V0IHRvICYjMzk7MCYjMzk7IGFuZCB0aGUgZXhlY3V0aW9uIHdpbGwganVtcCB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbi5cbiA3NjA6XHRcdCAqL1xuIDc2MTpcdFx0aW5zX29mZnNldCA9IHBjIC0gKGxvbmcpXHUwMDI2ZXgtXHUwMDNlaW5zbjtcbiA3NjI6XHRcdGlmIChXQVJOX09OX09OQ0UoaW5zX29mZnNldCBcdTAwM2U9IDAgfHwgaW5zX29mZnNldCBcdTAwM2MgSU5UX01JTikpXG4gNzYzOlx0XHRcdHJldHVybiAtRVJBTkdFO1xuIDc2NDpcdFxuIDc2NTpcdFx0LypcbiA3NjY6XHRcdCAqIFNpbmNlIHRoZSBleHRhYmxlIGZvbGxvd3MgdGhlIHByb2dyYW0sIHRoZSBmaXh1cCBvZmZzZXQgaXMgYWx3YXlzXG4gNzY3Olx0XHQgKiBuZWdhdGl2ZSBhbmQgbGltaXRlZCB0byBCUEZfSklUX1JFR0lPTl9TSVpFLiBTdG9yZSBhIHBvc2l0aXZlIHZhbHVlXG4gNzY4Olx0XHQgKiB0byBrZWVwIHRoaW5ncyBzaW1wbGUsIGFuZCBwdXQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSB1cHBlclxuIDc2OTpcdFx0ICogYml0cy4gV2UgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgYnVpbGR0aW1lIG9yIHJ1bnRpbWUgc29ydFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIEV4Y2VwdGlvbiBIYW5kbGVyIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSByZWZhY3RvcmluZyBpbiBob3cgZXhjZXB0aW9uIGhhbmRsaW5nIGlzIG1hbmFnZWQgd2l0aGluIHRoZSBCUEYgSklUIGNvbXBpbGVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBwcm9iZSBpbnN0cnVjdGlvbnMuIFByZXZpb3VzbHksIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgIGhhZCB0aGUgcmVzcG9uc2liaWxpdHkgb2YgZGV0ZXJtaW5pbmcgaWYgYW4gaW5zdHJ1Y3Rpb24gd2FzIGEgcHJvYmUgaW5zdHJ1Y3Rpb24gYW5kIGhhbmRsaW5nIGFjY29yZGluZ2x5LiBUaGlzIHdhcyBkb25lICphZnRlciogc29tZSBwcmVsaW1pbmFyeSBjaGVja3Mgd2l0aGluIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLgoKTm93LCB0aGUgbG9naWMgZm9yIGlkZW50aWZ5aW5nIHByb2JlIGluc3RydWN0aW9ucyBoYXMgYmVlbiAqcHVzaGVkIHVwKiBpbnRvIHRoZSBjYWxsIHNpdGVzIHdpdGhpbiBgYnBmX2ppdF9lbWl0X2luc25gLiBXZSBzZWUgdGhlc2UgY2hlY2tzIGZvciBMRFgsIFNULCBTVFgsIGFuZCBhdG9taWMgaW5zdHJ1Y3Rpb25zOiBgaW5zbl9pc19wcm9iZV9sZHgoaW5zbilgLCBgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTTMyYCwgZXRjLiAgVGhpcyBtZWFucyBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYCBpcyBub3cgb25seSBjYWxsZWQgKmNvbmRpdGlvbmFsbHkqLCB3aGVuIGEgcHJvYmUgaW5zdHJ1Y3Rpb24gaXMgZGV0ZWN0ZWQsIHJhdGhlciB0aGFuIHVuY29uZGl0aW9uYWxseSBhbmQgdGhlbiBjb25kaXRpb25hbGx5IHdpdGhpbiB0aGUgZnVuY3Rpb24uCgpUaGUgb2xkIGNvZGUsIGV2ZW4gZm9yIG5vbi1wcm9iZSBpbnN0cnVjdGlvbnMsIHdvdWxkIHNvbWV0aW1lcyBjYWxsIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLCB3aGVyZSBhIHNlcmllcyBvZiBjaGVja3MsIGluY2x1ZGluZyB0aGUgYGN0eC0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDtleHRhYmxlYCBjaGVjaywgd291bGQgYmUgcGVyZm9ybWVkLiAgVGhlbiwgaW5zaWRlIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLCB0aGUgQlBGIGluc3RydWN0aW9uIG1vZGUgd291bGQgYmUgY2hlY2tlZCBhZ2Fpbi4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gZWxpbWluYXRlcyB0aG9zZSByZWR1bmRhbnQgY2FsbHMsIG1ha2luZyB0aGUgZmxvdyBtb3JlIGRpcmVjdCBhbmQgaG9wZWZ1bGx5IG1vcmUgZWZmaWNpZW50LgoKVGhlIGtleSBpcyB0aGF0IHRoZSBwcm9iZSBpbnN0cnVjdGlvbiBkZXRlY3Rpb24gaXMgbm93IGRvbmUgKmJlZm9yZSogdGhlIGNhbGwgdG8gYGFkZF9leGNlcHRpb25faGFuZGxlcmAsIHJhdGhlciB0aGFuIHdpdGhpbiBpdCBhZnRlciBzb21lIGNvbmRpdGlvbmFsIGNoZWNrcy4gVGhpcyBpbXBsaWVzIGZld2VyIGNhbGxzIHRvIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgIGFuZCBhIG1vcmUgc3RyZWFtbGluZWQgcGF0aCBmb3Igbm9uLXByb2JlIGluc3RydWN0aW9ucy4KCklzIHRoaXMgcmVsZXZhbnQgaW4gYSByZWFsLXdvcmxkIHNjZW5hcmlvPyBBYnNvbHV0ZWx5LiAgUklTQy1WIHdpdGggUUVNVSAoYHFlbXUtc3lzdGVtLXJpc2N2NjRgKSBpcyBhIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIHBsYXRmb3JtLCBzbyB0aGlzIGNvZGUgKmlzKiBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gIEJQRiBKSVQgaXMgY29yZSB0byB0aGUga2VybmVsIG9uIFJJU0MtViA2NC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIEJQRiBKSVQgZW50cnkgcG9pbnRzIGFuZCBLY29uZmlnIG9wdGlvbnMsIGp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7bGwgc2VhcmNoIHRob3NlIHJlbGV2YW50IEMgZmlsZXMgZm9yIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jPTM5PWJvb2wgYnBmX2ppdF9uZWVkc196ZXh0KHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDMtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzo0NDpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDMKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlciBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIGluc3RydWN0aW9ucyBhcmUgdHJhbnNsYXRlZCBpbnRvIG5hdGl2ZSBSSVNDLVYgY29kZS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpbmdzIGxpa2UgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uLCBhbmQgcG90ZW50aWFsbHksIGFueSBvcHRpbWl6YXRpb25zIGJlaW5nIGVtcGxveWVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpbW1lZGlhdGUgdmFsdWVzLCBtZW1vcnkgYWNjZXNzZXMsIGFuZCBjb250cm9sIGZsb3cgYXJlIG1hbmFnZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29kZSBnZW5lcmF0aW9uIGRldGFpbHMuIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQ7IHRoaXMgc2VjdGlvbiBvZiB0aGUga2VybmVsIGNhbiBnZXQgcXVpdGUgY29tcGxleC4gSSYjMzk7bGwgYWxzbyBjaGVjayBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgZ2VuZXJpYyBCUEYgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBjaGVja2luZyBob3cgdGhvc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGNvbW1vbiBjb3JlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCBJIG5lZWQgdG8gc2VlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4OTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqQW5hbHl6aW5nIFJJU0MtViBCUEYgSklUIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIEJQRiBKSVQgY29tcGlsZXIgaW1wbGVtZW50YXRpb24gZm9yIFJJU0MtVi4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgbm90IHN0YXRpYyAobGlrZWx5IGV4cG9ydGVkIG9yIGV4dGVybmFsbHkgdXNlZCkgb3IgYXJlIHNvbWVob3cgY29uc2lkZXJlZCAqa2V5KiB0byB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyBpdHNlbGYuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIG9uIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCBhbmQgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24uIEtub3dpbmcgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvcmUgbG9naWMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgYW55IHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IHRoZXNlIGZpbGVzLCBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGV5IGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHxib29sfHZvaWR8c3RydWN0fHVuc2lnbmVkKSAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19jcmVnKHU4IHJlZylcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtNzAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6NzE6c3RydWN0IHJ2X2ppdF9jb250ZXh0IHtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC03Mi1cdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg9OTA9c3RhdGljIGlubGluZSBpbnQgbmluc25zX3J2b2ZmKGludCBuaW5zbnMpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTk0LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjk1OnN0cnVjdCBydl9qaXRfZGF0YSB7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtOTYtXHRzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhlYWRlcjtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg9MTI5ND1zdGF0aWMgaW5saW5lIHZvaWQgZW1pdF9jbXB4Y2hnKHU4IHJkLCB1OCBycywgdTggcjAsIGJvb2wgaXM2NCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTEzMjQtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyNTp2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZyk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyNjp2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTEzMjctXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyODppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMzI5LVx0XHQgICAgICBib29sIGV4dHJhX3Bhc3MpO1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM9OTkyPXN0YXRpYyB2b2lkIGVtaXRfemV4dDY0KGNvbnN0IHM4ICpkc3QsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTAwMS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTAwMjppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTAwMy1cdFx0ICAgICAgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTM4MS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTM4Mjp2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTM4My17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNDMxLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNDMyOnZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQzMy17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz02ODc9c3RhdGljIGludCBzaWduX2V4dGVuZCh1OCByZCwgdTggcnMsIHU4IHN6LCBib29sIHNpZ24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNzIwLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo3MjE6Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNzIyLVx0XHQgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz04MDA9c3RhdGljIGludCBnZW5fanVtcF9vcl9ub3BzKHZvaWQgKnRhcmdldCwgdm9pZCAqaXAsIHUzMiAqaW5zbnMsIGJvb2wgaXNfY2FsbClcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTgxNy1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6ODE4OmludCBicGZfYXJjaF90ZXh0X3Bva2Uodm9pZCAqaXAsIGVudW0gYnBmX3RleHRfcG9rZV90eXBlIG9sZF90LFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy04MTktXHRcdCAgICAgICBlbnVtIGJwZl90ZXh0X3Bva2VfdHlwZSBuZXdfdCwgdm9pZCAqb2xkX2FkZHIsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz05ODU9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyOTEtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEyOTI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI5My1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMwNi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMwNzp2b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzA4LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMTEtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzMTI6dm9pZCBhcmNoX2ZyZWVfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzEzLXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMTYtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzMTc6aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMTgtXHRcdFx0XHR2b2lkICpyb19pbWFnZV9lbmQsIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNTU9c3RhdGljIGJvb2wgaW5zbl9pc19wcm9iZV9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2Mi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM2MzppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2NC1cdFx0ICAgICAgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjAzNS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjAzNjp2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjAzNy17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTI3LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTI4OnZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEyOS17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTMyLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTMzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMzQte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzNy1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEzODpib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfcmV0X3JlZ19wYWlyKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMzkte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0Mi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE0Mzpib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0NC17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTQ3LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTQ4OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTQ5LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTItXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxNTM6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTU0LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNjctXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxNjg6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNjkte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE3Mi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE3Mzpib29sIGJwZl9qaXRfaW5saW5lc19oZWxwZXJfY2FsbChzMzIgaW1tKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTc0LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxODQtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxODU6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxODYte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE4OS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE5MDpib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE5MS17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTk0LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTk1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290byh2b2lkKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTk2LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0xOT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgZXh0cmFfcGFzcywgaW50ICpvZmZzZXQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtMzgtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzozOTpib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDAte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQzLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6NDQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQ1LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0xOTQ9dTY0IGJwZl9qaXRfYWxsb2NfZXhlY19saW1pdCh2b2lkKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTE5OC1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jOjE5OTp2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yMDAte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTIxMi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jOjIxMzppbnQgYnBmX2FyY2hfdGV4dF9pbnZhbGlkYXRlKHZvaWQgKmRzdCwgc2l6ZV90IGxlbilcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTIxNC17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtMjIzLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6MjI0OnZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTIyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTkxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipSSVNDLVYgQlBGIEpJVCBLY29uZmlnIERlZXAgRGl2ZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZvciB0aGUgUklTQy1WIEJQRiBKSVQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzIG9yIG92ZXJsb29rZWQgYW55IHBvdGVudGlhbCBnb3RjaGFzLiBGaXJzdCwgSeKAmWxsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSByZWxldmFudCBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9KSVRfUklTQ1ZgIG9wdGlvbnMgYXJlIGVuYWJsZWQsIHRoYXQmIzM5O3MgYmFzZWxpbmUsIG5vIHN1cnByaXNlcyB0aGVyZS4gVGhlbiwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBSSVNDLVYgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIGFueSBwYXJ0aWN1bGFyIGV4dGVuc2lvbnMgb3IgYXJjaGl0ZWN0dXJlIHZlcnNpb25zIHRoYXQgYXJlIG1hbmRhdGVkIG9yIHJlY29tbWVuZGVkPyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgZ2VuZXJhdGlvbiBzdHJhdGVnaWVzLCBpZiBhbnkgYXJlIHVzZWQsIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIGRlZmF1bHQgUklTQy1WIGJhc2VsaW5lIG9yIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIGFueSBhc3NvY2lhdGVkIGFyY2hpdGVjdHVyZSBsZXZlbCBmZWF0dXJlIHNlbGVjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIEpJVCBpc24mIzM5O3QgaW5hZHZlcnRlbnRseSB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIG9yIG1vZGVscy4KCkJleW9uZCB0aGUgY29yZSBvcHRpb25zLCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBLY29uZmlnIGluY2x1ZGVzIG9wdGlvbnMgdG8gaGFuZGxlIHRoaW5ncyBsaWtlIHRoZSByZWxvY2F0aW9uIG1vZGVsLCBtZW1vcnkgcmVnaW9ucywgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgdGhhdCBtYXkgYXJpc2Ugd2l0aGluIHRoZSBSSVNDLVYgY29udGV4dC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gZmxhZ3M/IFdoYXQgYWJvdXQgZGVidWcgb3B0aW9ucyBvciBlcnJvciBoYW5kbGluZz8gSSBzaG91bGQgc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBzdXBwb3J0IGZvciB0aGluZ3MgbGlrZSBleGNlcHRpb24gaGFuZGxpbmcuIEkgYWxzbyBleHBlY3Qgb3B0aW9ucyB0byBiZSBleHBvc2VkIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIHRhcmdldGVkIGZvciBhIGJhcmUtbWV0YWwgZW52aXJvbm1lbnQgdmVyc3VzIGFuIG9wZXJhdGluZyBzeXN0ZW0uIEEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHRvIG90aGVyIFJJU0MtVi1zcGVjaWZpYyBLY29uZmlncyAoZS5nLiwgcmVsYXRlZCB0byB0aGUga2VybmVsIGl0c2VsZiBvciBvdGhlciBzdWJzeXN0ZW1zKSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBpcyBhIG11c3QuIEZpbmFsbHksIGxldCYjMzk7cyBleHBsb3JlIHRoZSBvcHRpb24gZGVzY3JpcHRpb25zIHRob3JvdWdobHkgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggY29uZmlndXJhdGlvbiBjaG9pY2UuIFRoaXMgS2NvbmZpZyBpbnZlc3RpZ2F0aW9uIGlzIGdvaW5nIHRvIGJlIHRob3JvdWdoLCBJIGhhdmUgYSBsb3Qgb2Ygc3BlY2lmaWMgYXNwZWN0cyB0aGF0IEkmIzM5O2QgbGlrZSB0byBjaGVjayBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMTY4LVx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSIGlmIEhBVkVfRFlOQU1JQ19GVFJBQ0VcbmFyY2gvcmlzY3YvS2NvbmZpZzoxNjk6XHRzZWxlY3QgSEFWRV9FQlBGX0pJVCBpZiBNTVVcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNzAtXHRzZWxlY3QgSEFWRV9HRU5FUklDX1RJRl9CSVRTXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9leHRhYmxlLmg9Mzg9c3RhdGljIGlubGluZSBib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gZmFsc2U7IH1cbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaC00MC1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oOjQxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfSklUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9SVjY0SSlcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTQyLWJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC00Ni1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjQ3OiNkZWZpbmUgQlBGX0pJVF9SRUdJT05fU0laRVx0KFNaXzEyOE0pXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC00OC0jaWZkZWYgQ09ORklHXzY0QklUXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo0OTojZGVmaW5lIEJQRl9KSVRfUkVHSU9OX1NUQVJUXHQoQlBGX0pJVF9SRUdJT05fRU5EIC0gQlBGX0pJVF9SRUdJT05fU0laRSlcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjUwOiNkZWZpbmUgQlBGX0pJVF9SRUdJT05fRU5EXHQoTU9EVUxFU19FTkQpXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC01MS0jZWxzZVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6NTI6I2RlZmluZSBCUEZfSklUX1JFR0lPTl9TVEFSVFx0KFBBR0VfT0ZGU0VUIC0gQlBGX0pJVF9SRUdJT05fU0laRSlcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjUzOiNkZWZpbmUgQlBGX0pJVF9SRUdJT05fRU5EXHQoVk1BTExPQ19FTkQpXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC01NC0jZW5kaWZcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0xNDU2PXN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNDcyLVx0XHRcdFtFWEVDTUVNX0JQRl0gPSB7XG5hcmNoL3Jpc2N2L21tL2luaXQuYzoxNDczOlx0XHRcdFx0LnN0YXJ0XHQ9IEJQRl9KSVRfUkVHSU9OX1NUQVJULFxuYXJjaC9yaXNjdi9tbS9pbml0LmM6MTQ3NDpcdFx0XHRcdC5lbmRcdD0gQlBGX0pJVF9SRUdJT05fRU5ELFxuYXJjaC9yaXNjdi9tbS9pbml0LmMtMTQ3NS1cdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4tLVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtMi1cbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvcmUub1xuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtNC1cbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlPTU9aWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSlcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlOjY6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlLTctZWxzZVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU6ODpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wMzIub1xuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtOS1lbmRpZlxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC04LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjk6I2lmbmRlZiBfQlBGX0pJVF9IXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTA6I2RlZmluZSBfQlBGX0pJVF9IXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTEtXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTEzMjg9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTEzMzAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMzMTojZW5kaWYgLyogX0JQRl9KSVRfSCAqL1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMzAtICogIEJQRl9SRUdfRlAgPVx1MDAzZSAgJiM0MzstLS0tLS0tLS0tJiM0MzsgXHUwMDNjPSAoZnAgLSA0ICogTlJfU0FWRURfUkVHSVNURVJTXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjMxOiAqICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgIC0gNCAqIEJQRl9KSVRfU0NSQVRDSF9SRUdTKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0zMi0gKiAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYz00Mz1lbnVtIHtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTU1LVx0LyogU3RhY2sgc3BhY2UgZm9yIEJQRl9SRUdfNiB0aHJvdWdoIEJQRl9SRUdfOSBhbmQgQlBGX1JFR19BWC4gKi9cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6NTY6XHRCUEZfSklUX1NDUkFUQ0hfUkVHUyxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtNTctfTtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTY0LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzo2NTojZGVmaW5lIFRNUF9SRUdfMVx0KE1BWF9CUEZfSklUX1JFRyAmIzQzOyAwKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzo2NjojZGVmaW5lIFRNUF9SRUdfMlx0KE1BWF9CUEZfSklUX1JFRyAmIzQzOyAxKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy02Ny1cbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jPTEzODI9dm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMzkyLVx0LyogTWFrZSBzcGFjZSBmb3IgQlBGIHJlZ2lzdGVycyBvbiBzdGFjay4gKi9cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTM5MzpcdHN0YWNrX2FkanVzdCAmIzQzOz0gQlBGX0pJVF9TQ1JBVENIX1JFR1MgKiBzaXplb2YodTMyKTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTM5NC1cdC8qIE1ha2Ugc3BhY2UgZm9yIEJQRiBzdGFjay4gKi9cbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTczNT1zdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnQgZHN0X3JlZywgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy03NjYtXHQgKiBTaW5jZSB0aGUgZXh0YWJsZSBmb2xsb3dzIHRoZSBwcm9ncmFtLCB0aGUgZml4dXAgb2Zmc2V0IGlzIGFsd2F5c1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo3Njc6XHQgKiBuZWdhdGl2ZSBhbmQgbGltaXRlZCB0byBCUEZfSklUX1JFR0lPTl9TSVpFLiBTdG9yZSBhIHBvc2l0aXZlIHZhbHVlXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTc2OC1cdCAqIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgYW5kIHB1dCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIHVwcGVyXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM9MTk0PXU2NCBicGZfaml0X2FsbG9jX2V4ZWNfbGltaXQodm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTE5NS17XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzoxOTY6XHRyZXR1cm4gQlBGX0pJVF9SRUdJT05fU0laRTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTE5Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTYxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCUEYgSklUIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUbyB1bmRlcnN0YW5kIGhvdyBgQlBGX0pJVGAgaXMgZW5hYmxlZCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGEgZmV3IGtleSBmaWxlcy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVgLCBhcyB0aGUgYXJjaGl0ZWN0dXJlIG1pZ2h0IGluZmx1ZW5jZSBob3cgSklUIGNvbXBpbGF0aW9uIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZXM6IGBrZXJuZWwvYnBmL0tjb25maWdgLCBhbmQgcG90ZW50aWFsbHkgYG5ldC9LY29uZmlnYCBvciBldmVuIGBpbml0L0tjb25maWdgIOKAkyB0aGUgYnJvYWRlciBLY29uZmlnIGxhbmRzY2FwZSB1c3VhbGx5IHJldmVhbHMgdGhlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucy4gVGhvc2Ugc2VlbSBsaWtlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzLCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdvdWxkIGxpa2VseSByZXNpZGUuCgpKdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBxdWlja2x5IGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMsIEkmIzM5O2xsIGFsc28gcnVuIGEgcXVpY2sgZ3JlcCBhY3Jvc3MgdGhlIGVudGlyZSBzb3VyY2UgdHJlZSBmb3IgYGNvbmZpZyBCUEZfSklUYC4gVGhhdCBzaG91bGQgcXVpY2tseSB1bmNvdmVyIGFueSByZWZlcmVuY2VzIHRvIHRoZSBvcHRpb24gYW5kIGl0cyByZWxhdGlvbnNoaXBzLCByZWdhcmRsZXNzIG9mIHRoZSBmaWxlIGxvY2F0aW9uLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIGJpcmQmIzM5O3MtZXllIHZpZXcgb2YgaG93IHRoaXMgY29uZmlndXJhdGlvbiBpcyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDk5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkV4YW1pbmluZyBCUEYgSklUIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGZvY3VzIGlzIG9uIHRoZSBgQlBGX0pJVGAgb3B0aW9uIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBkZXRhaWwgdGhlIEpJVCAoSnVzdC1Jbi1UaW1lKSBjb21waWxlciBmb3IgQlBGIGJ5dGVjb2RlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIEpJVCBpcyBlbmFibGVkLCB3aGF0IGFyY2hpdGVjdHVyZXMgaXQmIzM5O3Mgc3VwcG9ydGVkIG9uLCBhbmQgYW55IHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyB0aGF0IGFyZSBhZGRyZXNzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGJ1aWxkcyBhbmQgbWFuYWdlcyBCUEYgcHJvZ3JhbXMgYXQgcnVudGltZSwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbXkgd29yay4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgd2hlbiBkaWdnaW5nIGludG8gdGhlIEJQRiBKSVQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTA6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1MTpcdFx0ICBwcm9ncmFtcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU0Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1NTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4gIDU2Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbiAgNTk6XHRcdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbiAgNjA6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxuICA2MzpcdFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXG4gIDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJJU0MtViBCUEYgSklUIENvbXBpbGF0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBSSVNDLVYgQlBGIEpJVCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBJIHJlY2FsbCB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBjYWxscyBgYnVpbGRfYm9keWAsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGJwZl9qaXRfZW1pdF9pbnNuKGluc24sIGN0eCwgZXh0cmFfcGFzcylgLiBJdCBsb29rcyBsaWtlIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgY2FsbGVkIGJ5IHRoZSBCUEYgbG9hZGVyL2NvbXBpbGVyIHBpcGVsaW5lLCBzcGVjaWZpY2FsbHkgdmlhIGBicGZfcHJvZ19zZWxlY3RfcnVudGltZWAgYW5kIHRoZW4gdGhlIGBicGZfaW50X2ppdF9jb21waWxlYCBmdW5jdGlvbi4gSSBhbHNvIHNlZSB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgaXMgYSBub24tc3RhdGljIHN5bWJvbDsgdGhhdCYjMzk7cyBnb29kISBJdCYjMzk7cyBkZWNsYXJlZCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oYCBhbmQgZGVmaW5lZCBpbiBgYnBmX2ppdF9jb21wNjQuY2AsIHNvIGl0IHNob3VsZCBiZSBhY2Nlc3NpYmxlLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZXhwb3J0IHN0YXR1cy4gQ2hlY2tpbmcgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLCB0aGUgZGVjbGFyYXRpb24gb2YgYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyBleGFjdGx5IGFzIGV4cGVjdGVkLCBhbmQgaXQgYWxzbyBsaW5lcyB1cCB3aXRoIHRoZSBkZWNsYXJhdGlvbiBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oYC4gIEluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuY2AsIEkgc2VlIGBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKWAgd2hpY2ggaXMgYWxzbyB3aGF0IEkgZXhwZWN0ZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYWxpZ24gdGhpcyB3aXRoIGEgZnV6emluZyBzdHJhdGVneS4gVGhlIGNyaXRlcmlhIHNlZW0gdG8gYWxpZ24gd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgSklUIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCBleGNlcHRpb24gdGFibGUgaGFuZGxpbmcgZm9yIFJJU0MtViA2NC4gIFBlcmZlY3QhIEFuZCB5ZXMsIGEgc3RhbmRhcmQgTGludXgga2VybmVsIHdpdGggQlBGIEpJVCBydW5zIHdpdGhpbiBRRU1VIG9uIFJJU0MtViA2NCwgbWFraW5nIGl0IHJlYWNoYWJsZS4gVGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQ6IEpJVCBjb2RlIGdlbmVyYXRpb24gYW5kIGV4Y2VwdGlvbiBoYW5kbGluZyBidWdzIGNhbiBkZWZpbml0ZWx5IGxlYWQgdG8gY3Jhc2hlcywgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRoYXQgbWFrZXMgaXQgYSBzdHJvbmcgY2FuZGlkYXRlLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90IG9uOiBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgYXJlIGV4YWN0bHkgdGhlIGFyZWFzIEkgd2FudCB0byB0YXJnZXQuIEFzIGZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgLCBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQVJDSF9SVjY0SWAgb3IgZXF1aXZhbGVudCAoYDY0QklUYC9gUklTQ1ZgKSBtYWtlIHNlbnNlLiAgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBBUkNIX1JWNjRJYCBpbiBLY29uZmlnLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29uZmlnIG9wdGlvbnMgYXJlIGNvcnJlY3QgZm9yIG15IHRlc3RpbmcgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX1JWNjRJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWc9NDA2PWNvbmZpZyBBUkNIX1JWMzJJXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMS1cbmFyY2gvcmlzY3YvS2NvbmZpZzo0MTI6Y29uZmlnIEFSQ0hfUlY2NElcbmFyY2gvcmlzY3YvS2NvbmZpZy00MTMtXHRib29sIFwmIzM0O1JWNjRJXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFJJU0MtViBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSBzb21lIGtleSBSSVNDLVYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBMZXQmIzM5O3Mgc2VlLi4uSSYjMzk7bSB0aGlua2luZyB0aGUgcmVsZXZhbnQgc3R1ZmYgaXMgbGlrZWx5IGluIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gQW5kIGJhc2VkIG9uIHdoYXQgSSByZW1lbWJlciwgbGluZSA0MTAgc291bmRzIGxpa2UgYSByZWFzb25hYmxlIGFyZWEgdG8gemVybyBpbiBvbi4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBzb21ld2hlcmUgYXJvdW5kIHRoYXQgbG9jYXRpb24gYW5kIHF1aWNrbHkgZmlndXJlIG91dCB0aGUgc3BlY2lmaWNzIG9mIHRoZSB0YXJnZXRlZCBjb25maWd1cmF0aW9uIGl0ZW0uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDU6XHRcbiA0MDY6XHRjb25maWcgQVJDSF9SVjMySVxuIDQwNzpcdFx0Ym9vbCBcJiMzNDtSVjMySVwmIzM0O1xuIDQwODpcdFx0ZGVwZW5kcyBvbiBOT05QT1JUQUJMRVxuIDQwOTpcdFx0c2VsZWN0IDMyQklUXG4gNDEwOlx0XHRzZWxlY3QgR0VORVJJQ19MSUJfVUNNUERJMlxuIDQxMTpcdFxuIDQxMjpcdGNvbmZpZyBBUkNIX1JWNjRJXG4gNDEzOlx0XHRib29sIFwmIzM0O1JWNjRJXCYjMzQ7XG4gNDE0Olx0XHRzZWxlY3QgNjRCSVRcbiA0MTU6XHRcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0lOVDEyOCBpZiBDQ19IQVNfSU5UMTI4XG4gNDE2Olx0XHRzZWxlY3QgU1dJT1RMQiBpZiBNTVVcbiA0MTc6XHRcbiA0MTg6XHRlbmRjaG9pY2VcbiA0MTk6XHRcbiA0MjA6XHQjIFdlIG11c3QgYmUgYWJsZSB0byBtYXAgYWxsIHBoeXNpY2FsIG1lbW9yeSBpbnRvIHRoZSBrZXJuZWwsIGJ1dCB0aGUgY29tcGlsZXJcbiA0MjE6XHQjIGlzIHN0aWxsIGEgYml0IG1vcmUgZWZmaWNpZW50IHdoZW4gZ2VuZXJhdGluZyBjb2RlIGlmIGl0JiMzOTtzIHNldHVwIGluIGEgbWFubmVyXG4gNDIyOlx0IyBzdWNoIHRoYXQgaXQgY2FuIG9ubHkgbWFwIDJHaUIgb2YgbWVtb3J5LlxuIDQyMzpcdGNob2ljZVxuIDQyNDpcdFx0cHJvbXB0IFwmIzM0O0tlcm5lbCBDb2RlIE1vZGVsXCYjMzQ7XG4gNDI1Olx0XHRkZWZhdWx0IENNT0RFTF9NRURMT1cgaWYgMzJCSVRcbiA0MjY6XHRcdGRlZmF1bHQgQ01PREVMX01FREFOWSBpZiA2NEJJVFxuIDQyNzpcdFxuIDQyODpcdFx0Y29uZmlnIENNT0RFTF9NRURMT1dcbiA0Mjk6XHRcdFx0Ym9vbCBcJiMzNDttZWRpdW0gbG93IGNvZGUgbW9kZWxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMTkKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyLiBJIGtub3cgaW1tZWRpYXRlbHkgdGhhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBBUkNIX1JWNjRJYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBzdHJhaWdodCBiZWZvcmUgSSBkaXZlIGRlZXBlci4KCkkgc2VlIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yIHRoYXQgd2Ugc2hvdWxkIGV4cGxvcmUgdGhpcy4gSSYjMzk7dmUgYWxzbyBnb3QgYSBmb2N1c2VkIHN5bWJvbCBsaXN0OiBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIHdoaWNoIGdpdmVzIG1lIGEgZGlyZWN0IGxpbmUgb2Ygc2lnaHQgdG8gdGhlIGNyaXRpY2FsIGNvZGUgc2VjdGlvbnMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBjb25maXJtcyBteSBpbml0aWFsIGFzc3VtcHRpb25zOiBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBjcnVjaWFsbHksIHRoZSBSSVNDLVYgNjQtYml0IGFyY2hpdGVjdHVyZSBzdXBwb3J0IChgQVJDSF9SVjY0SWApLgoKVGhlIHJlYXNvbmluZyBjbGFyaWZpZXMgdGhlIHB1cnBvc2U6IHRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIHNwZWNpZmljYWxseSBob3cgZXhjZXB0aW9uIHRhYmxlIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkIGZvciBwcm9iZSBtZW1vcnkgbG9hZC9zdG9yZSBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBpcyBmdW5jdGlvbmFsLCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgQlBGIEpJVCBjb2RlLCBtZWFuaW5nIGl0JiMzOTtzIHNvbWV0aGluZyBJIGNhbiB0ZXN0IGVmZmVjdGl2ZWx5IHdpdGhpbiBhIFFFTVUgcmlzY3Y2NCBlbnZpcm9ubWVudC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGFjY2VzcywgaXQgd2FycmFudHMgY2FyZWZ1bCBhdHRlbnRpb24uCgpOb3csIGJlZm9yZSBJIGxhdW5jaCBhbnkgYW5hbHlzaXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHRvb2wgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgY29uZmlndXJlZCBjb3JyZWN0bHkuIFRoaXMgc291bmRzIGxpa2UgYW4gYXJlYSByaXBlIGZvciBwb3RlbnRpYWwgY3Jhc2hlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91ciwgc28gZ2V0dGluZyB0aG9zZSBpbml0aWFsIHNldHRpbmdzIHJpZ2h0IHdpbGwgYmUgY3J1Y2lhbCB0byBnZXR0aW5nIHNvbGlkIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQVJDSF9SVjY0STwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0FSQ0hfUlY2NEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIgKGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMpLCByZWZhY3RvcmluZyBob3cgYW5kIHdoZW4gZXhjZXB0aW9uIHRhYmxlIGhhbmRsZXJzIGFyZSBhdHRhY2hlZCB0byBwcm9iZSBsb2FkLCBzdG9yZSwgYW5kIGF0b21pYyBpbnN0cnVjdGlvbnMuIFRoaXMgYWZmZWN0cyBmdW5jdGlvbmFsIEJQRiBjb2RlIGdlbmVyYXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGluIFJJU0MtViBKSVQsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUgcmlzY3Y2NCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQVJDSF9SVjY0SSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbmZ1c2lvbioqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQmIzM5O3MgdGhpcz8gVGhlIGJ1aWxkIHN5c3RlbSBpcyBjb21wbGFpbmluZyB0aGF0IGBBUkNIX1JWNjRJYCBpc24mIzM5O3QgZGVmaW5lZD8gSSBjb3VsZCBoYXZlIHN3b3JuIHRoYXQgYXJjaGl0ZWN0dXJlIHdhcyBzdXBwb3J0ZWQgYW5kIGluIHRoZSB0cmVlLiBUaGlzIGlzIHVudXN1YWwuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0IG1lIHF1aWNrbHkganVtcCBpbnRvIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGEgc2ltcGxlIHR5cG8gb3Igb3ZlcnNpZ2h0LiBMZXQgbWUgdmVyaWZ5IHRoZSBleGFjdCBzcGVsbGluZyBhbmQgZGVmaW5pdGlvbiBvZiBgQVJDSF9SVjY0SWAgd2l0aGluIHRoYXQgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGl0IHRoZXJlLCBlbmFibGVkIGJ5IHNvbWUgYGRlZl9ib29sYCBvciBgYm9vbGAgc3RhdGVtZW50LCBvciBwZXJoYXBzIGNvbmRpdGlvbmVkIG9uIHNvbWUgb3RoZXIgcHJlLWV4aXN0aW5nIG9wdGlvbi4gVGltZSB0byBlbGltaW5hdGUgdGhlIG1vc3Qgb2J2aW91cyBwb3NzaWJpbGl0aWVzLiBJdCYjMzk7cyBwcm9iYWJseSBqdXN0IGEgc21hbGwgZXJyb3IgdGhhdCBJIG92ZXJsb29rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FSQ0hfUlY2NEkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz0zOTk9Y2hvaWNlXG5hcmNoL3Jpc2N2L0tjb25maWctNDAwLVx0cHJvbXB0IFwmIzM0O0Jhc2UgSVNBXCYjMzQ7XG5hcmNoL3Jpc2N2L0tjb25maWc6NDAxOlx0ZGVmYXVsdCBBUkNIX1JWNjRJXG5hcmNoL3Jpc2N2L0tjb25maWctNDAyLVx0aGVscFxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz00MDY9Y29uZmlnIEFSQ0hfUlYzMklcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctNDExLVxuYXJjaC9yaXNjdi9LY29uZmlnOjQxMjpjb25maWcgQVJDSF9SVjY0SVxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMy1cdGJvb2wgXCYjMzQ7UlY2NElcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L01ha2VmaWxlPTI4PWV4cG9ydCBCSVRTXG5hcmNoL3Jpc2N2L01ha2VmaWxlOjI5OmlmZXEgKCQoQ09ORklHX0FSQ0hfUlY2NEkpLHkpXG5hcmNoL3Jpc2N2L01ha2VmaWxlLTMwLVx0QklUUyA6PSA2NFxuLS1cbmFyY2gvcmlzY3YvTWFrZWZpbGU9NjE9cmlzY3YtbWFyY2gtJChDT05GSUdfQVJDSF9SVjMySSlcdDo9IHJ2MzJpbWFcbmFyY2gvcmlzY3YvTWFrZWZpbGU6NjI6cmlzY3YtbWFyY2gtJChDT05GSUdfQVJDSF9SVjY0SSlcdDo9IHJ2NjRpbWFcbmFyY2gvcmlzY3YvTWFrZWZpbGUtNjMtcmlzY3YtbWFyY2gtJChDT05GSUdfRlBVKVx0XHQ6PSAkKHJpc2N2LW1hcmNoLXkpZmRcbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvNjQtYml0LmNvbmZpZy0xLSMgSGVscDogQnVpbGQgYSA2NC1iaXQgaW1hZ2VcbmFyY2gvcmlzY3YvY29uZmlncy82NC1iaXQuY29uZmlnOjI6Q09ORklHX0FSQ0hfUlY2NEk9eVxuYXJjaC9yaXNjdi9jb25maWdzLzY0LWJpdC5jb25maWctMy1DT05GSUdfNjRCSVQ9eVxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oPTM4PXN0YXRpYyBpbmxpbmUgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9leHRhYmxlLmgtNDAtXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaDo0MTojaWYgZGVmaW5lZChDT05GSUdfQlBGX0pJVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfUlY2NEkpXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaC00Mi1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tLVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29yZS5vXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZS00LVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU6NTppZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtNi1cdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wNjQubyBicGZfdGltZWRfbWF5X2dvdG8ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgyNwoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBFcnJvcioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBXaHkgaXMgYHNldC1yZXN1bHRzYCB0ZWxsaW5nIG1lIHRoYXQgYEFSQ0hfUlY2NElgIGlzbiYjMzk7dCBmb3VuZCB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlPyBUaGF0JiMzOTtz4oCmIHVuZXhwZWN0ZWQuIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MgaXMgbGlrZWx5IGxvb2tpbmcgYXQgS2NvbmZpZyBkZWZpbml0aW9ucyBmcm9tIGEgbW9yZSBjb21tb24gYXJjaGl0ZWN0dXJlLCBsaWtlIHg4Niwgb3IgbWF5YmUgaXQmIzM5O3MgY2hlY2tpbmcgZ2VuZXJhbCBLY29uZmlnIHN5bWJvbHMuIEl0IHNlZW1zIHVubGlrZWx5IHRoYXQgaXQga25vd3MgdGhlIGltcGxpY2F0aW9ucyBmb3IgUklTQy1WIHNwZWNpZmljYWxseSwgYW5kIHRodXMgaXMgYW4gaW5jb21wbGV0ZSB2aWV3LgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgdGVzdCB0aGUgc2l0dWF0aW9uLCBrZWVwaW5nIHRoYXQgaW4gbWluZC4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gZm9yY2UgYEFSQ0hfUlY2NElgIHJpZ2h0IGF3YXksIGxldCYjMzk7cyB0cnkgc29tZSBicm9hZGVyLCBtb3JlIGdlbmVyYWxseSByZWNvZ25pemVkIHN5bWJvbHMgdG8gY2hlY2sgaWYgdGhlIGVycm9yIGxpZXMgaW4gdGhlIHZhbGlkYXRpb24gcHJvY2VzcywgYW5kIGlmIHRob3NlIHN5bWJvbHMgYXJlIGF2YWlsYWJsZS4gVGhlIGFpbSBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGl0JiMzOTtzIHNheWluZyBgQVJDSF9SVjY0SWAgaXNuJiMzOTt0IHRoZXJlLCBhbmQgaWYgaXQmIzM5O3MgYSBmYWxzZSBuZWdhdGl2ZS4gSSYjMzk7bGwgdGVzdCB3aXRoIGA2NEJJVGAsIGBCUEZfSklUYCwgYW5kIGBCUEZfU1lTQ0FMTGAgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc2l0dWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDs2NEJJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciAoYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyksIHJlZmFjdG9yaW5nIGhvdyBhbmQgd2hlbiBleGNlcHRpb24gdGFibGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvIHByb2JlIGxvYWQsIHN0b3JlLCBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBhZmZlY3RzIGZ1bmN0aW9uYWwgQlBGIGNvZGUgZ2VuZXJhdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgaW4gUklTQy1WIEpJVCwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVSByaXNjdjY0IGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDs2NEJJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciAoYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyksIHJlZmFjdG9yaW5nIGhvdyBhbmQgd2hlbiBleGNlcHRpb24gdGFibGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvIHByb2JlIGxvYWQsIHN0b3JlLCBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBhZmZlY3RzIGZ1bmN0aW9uYWwgQlBGIGNvZGUgZ2VuZXJhdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgaW4gUklTQy1WIEpJVCwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVSByaXNjdjY0IGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXhjZXB0aW9uIHRhYmxlIHJlZ2lzdHJhdGlvbiBsb2dpYyBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgKGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCkuIEl0IG1vdmVzIG9wY29kZSBjaGVja3MgKGBpbnNuX2lzX3Byb2JlX2xkeCgpYCwgYEJQRl9QUk9CRV9NRU0zMmAsIGBCUEZfUFJPQkVfQVRPTUlDYCkgZnJvbSB3aXRoaW4gYGFkZF9leGNlcHRpb25faGFuZGxlcigpYCB0byBpdHMgY2FsbGVycyBpbiBgYnBmX2ppdF9lbWl0X2luc24oKWAuXG5cblRoaXMgaXMgcHVyZWx5IEpJVCBjb2RlIGVtaXNzaW9uIGFuZCBpbnRlcm5hbCBleGNlcHRpb24gdGFibGUgYm9va2tlZXBpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgaGFuZGxpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZmIwNWY1NzI3OGU0ZTEwNjBlMzMwMTQ3N2U2MTlmMTJiNWQ1YTNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAyMzo1Njo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCmluZGV4IGU3Mzc4YmUxNzFhOWYuLjcyNmMwMTY5ZmM2MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwpAQCAtNzMxLDkgJiM0Mzs3MzEsOCBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LAogCXJldHVybiB0cnVlOwogfQogCi0vKiBGb3IgYWNjZXNzZXMgdG8gQlRGIHBvaW50ZXJzLCBhZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSAqLwotc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZywKLQkJCQkgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpCiYjNDM7LyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqLwomIzQzO3N0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDsKIAl1bnNpZ25lZCBsb25nIHBjOwpAQCAtNzQ0LDE0ICYjNDM7NzQzLDYgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZywKIAkgICAgY3R4LSZndDtleF9pbnNuX29mZiAmbHQ7PSAwIHx8IGN0eC0mZ3Q7ZXhfam1wX29mZiAmbHQ7PSAwKQogCQlyZXR1cm4gMDsKIAotCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNICZhbXA7JmFtcDsKLQkgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX01FTVNYICZhbXA7JmFtcDsKLQkgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX01FTTMyICZhbXA7JmFtcDsKLQkgICAgIShCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCAmYW1wOyZhbXA7Ci0JICAgICAgQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9MRFgpICZhbXA7JmFtcDsKLQkgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoV0FSTl9PTl9PTkNFKGN0eC0mZ3Q7bmV4ZW50cmllcyAmZ3Q7PSBjdHgtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7bnVtX2V4ZW50cmllcykpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMzYwLDYgJiM0MzsxMzUxLDE1IEBAIGludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLAogCXJldHVybiByZXQgJmx0OyAwID8gcmV0IDogc2l6ZTsKIH0KIAomIzQzOy8qIFByb2JlIGxvYWRzIGZhdWx0IG9uIHVubWFwcGVkIG1lbW9yeSBhbmQgbmVlZCBhbiBleGNlcHRpb24gdGFibGUgZW50cnkgKi8KJiM0MztzdGF0aWMgYm9vbCBpbnNuX2lzX3Byb2JlX2xkeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiYjNDM7ewomIzQzOwlyZXR1cm4gQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTSB8fAomIzQzOwkgICAgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTVNYIHx8CiYjNDM7CSAgICAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHwKJiM0MzsJICAgICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYOwomIzQzO30KJiM0MzsKIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCQkgICAgICBib29sIGV4dHJhX3Bhc3MpCiB7CkBAIC0xOTI5LDkgJiM0MzsxOTI5LDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCiAJCWVtaXRfbGR4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgc2lnbl9leHQsIGN0eCk7CiAKLQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIHJkLCBjdHgpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChpbnNuX2lzX3Byb2JlX2xkeChpbnNuKSkgewomIzQzOwkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihyZCwgY3R4KTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQogCiAJCWlmIChCUEZfU0laRShjb2RlKSAhPSBCUEZfRFcgJmFtcDsmYW1wOyBpbnNuX2lzX3pleHQoJmFtcDtpbnNuWzFdKSkKIAkJCXJldHVybiAxOwpAQCAtMTk1OSw5ICYjNDM7MTk2MSwxMSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwKIAogCQllbWl0X3N0KHJkLCBvZmYsIGltbSwgQlBGX1NJWkUoY29kZSksIGN0eCk7CiAKLQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7CiYjNDM7CQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQogCQlicmVhazsKIAogCS8qIFNUWDogKihzaXplICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovCkBAIC0xOTgxLDkgJiM0MzsxOTg1LDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCiAJCWVtaXRfc3R4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgY3R4KTsKIAotCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHsKJiM0MzsJCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAJCWJyZWFrOwogCiAJLyogQXRvbWljcyAqLwpAQCAtMjAwMSw3ICYjNDM7MjAwNyw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCQkJcmV0ID0gZW1pdF9hdG9taWNfcm13KHJkLCBycywgaW5zbiwgY3R4KTsKIAogCQkvKiByZXQgY2FuIGJlIDEgKHNraXAtemV4dCk7IGV4dGFibGUgZW50cnkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi8KLQkJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7CiAJCQkvKgogCQkJICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZQogCQkJICogY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvciBpbnRvCkBAIC0yMDEwLDcgJiM0MzsyMDE2LDcgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAJCQkgKi8KIAkJCWludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7CiAKLQkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBsb2FkX3JlZyAmbHQ7IDAgPwomIzQzOwkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihsb2FkX3JlZyAmbHQ7IDAgPwogCQkJCQlSRUdfRE9OVF9DTEVBUl9NQVJLRVIgOiByZWdtYXBbbG9hZF9yZWddLAogCQkJCQljdHgpID86IHJldDsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDY2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGRvaW5nLiBMZXQmIzM5O3MgZGlnIGluLiBJdCYjMzk7cyB0b3VjaGluZyBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIFJJU0MtViBzcGVjaWZpYyBjb2RlIGZvciB0aGUgQlBGIEpJVCBjb21waWxlciwgdGFyZ2V0aW5nIDY0LWJpdC4KCkxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZyBvZiB0aGUgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgZnVuY3Rpb24uIFByZXZpb3VzbHksIHRoaXMgZnVuY3Rpb24gd2FzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyBpZiBhbiBpbnN0cnVjdGlvbiB3YXMgYSBwcm9iZSBtZW1vcnkgaW5zdHJ1Y3Rpb24gYW5kLCBpZiBzbywgYWRkaW5nIGFuIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeS4gTm93LCB0aGUgbG9naWMgZm9yIGRldGVybWluaW5nIHRoZSBwcm9iZSBpbnN0cnVjdGlvbiB0eXBlIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSAqY2FsbGVycyogb2YgYGFkZF9leGNlcHRpb25faGFuZGxlcmAuIFRoZSBmdW5jdGlvbiBpdHNlbGYgbm93IHRha2VzIGp1c3QgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGFuZCBjb250ZXh0LgoKU3BlY2lmaWNhbGx5LCBgYnBmX2ppdF9lbWl0X2luc25gIGlzIHdoZXJlIHRoZXNlIGNoYW5nZXMgYXJlIGhhcHBlbmluZy4gV2UmIzM5O3JlIG5vdyBjaGVja2luZyBjb25kaXRpb25zIGxpa2UgYGluc25faXNfcHJvYmVfbGR4KGluc24pYCBvciBgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gLi4uYCBiZWZvcmUgY2FsbGluZyBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYC4gRWZmZWN0aXZlbHksIHRoZSBwYXRjaCBpcyByZW9yZ2FuaXppbmcgaG93IHRoZSBleGNlcHRpb24gdGFibGUgZW50cmllcyBhcmUgY3JlYXRlZCBmb3IgdmFyaW91cyBCUEYgaW5zdHJ1Y3Rpb25zIHJlbGF0ZWQgdG8gcHJvYmUgbWVtb3J5IG9wZXJhdGlvbnMuCgpOb3csIGNvbnNpZGVyaW5nIEtNU0FOLCBJIGtub3cgdGhhdCBzdXBwb3J0IGlzIHByaW1hcmlseSBvbiB4ODZfNjQsIHdpdGggc29tZSBBUk02NCB3b3JrIGluIHByb2dyZXNzLCBidXQgZGVmaW5pdGVseSAqbm90KiBSSVNDLVYgYXQgdGhpcyBwb2ludC4gTmV2ZXJ0aGVsZXNzLCBsZXQmIzM5O3MgbG9vayBhdCB0aGlzIHBhdGNoIHNlbWFudGljYWxseS4gRG9lcyB0aGlzICpjaGFuZ2UqIHRoZSByaXNrIHByb2ZpbGU/CgpJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgS01TQU4tcmVsYXRlZCBwcm9ibGVtcy4gVGhpcyBpcyBCUEYgSklUIGVtaXNzaW9uIGxvZ2ljIHJlZmFjdG9yaW5nLCBwdXJlIGFuZCBzaW1wbGUuIFRoZXJlJiMzOTtzIG5vdGhpbmcgSSBjYW4gc2VlIGhlcmUgdGhhdCBjb3VsZCBsZWFkIHRvOgoKKiAgIEtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLgoqICAgVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuCiogICBNZW1vcnkgYWxsb2NhdGlvbiBvciBsZWFrcyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN0YWNrIG9yIGhlYXApLgoqICAgQW55IGluZm9ybWF0aW9uIGxlYWthZ2UgdG8gdXNlciBzcGFjZS4KCkl0JiMzOTtzIGp1c3Qgc2h1ZmZsaW5nIGFyb3VuZCB0aGUgbG9naWMgZm9yIHJlZ2lzdGVyaW5nIGV4Y2VwdGlvbiBoYW5kbGVycy4gSXQgc2VlbXMgcHJldHR5IGNvbnRhaW5lZCwgYW5kIHRoZSBjaGFuY2VzIG9mIGludHJvZHVjaW5nIGEgS01TQU4gaXNzdWUgc2VlbSBpbmNyZWRpYmx5IGxvdy4KCkkmIzM5O2xsIHF1aWNrbHkgZG8gYSBxdWljayBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY2hlY2sgb24gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIGJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHVubGlrZWx5IHRvIHJlcXVpcmUgYW55IHNwZWNpZmljIEtNU0FOIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF9leGNlcHRpb25faGFuZGxlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz03MjE9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTczNC0vKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSBmb3IgYSBmYXVsdGluZyBwcm9iZSBpbnNuICovXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjczNTpzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnQgZHN0X3JlZywgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTczNi17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYzPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTkzMi1cdFx0aWYgKGluc25faXNfcHJvYmVfbGR4KGluc24pKSB7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjE5MzM6XHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKHJkLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTM0LVx0XHRcdGlmIChyZXQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTY0LVx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTk2NTpcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTY2LVx0XHRcdGlmIChyZXQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTg4LVx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTk4OTpcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTkwLVx0XHRcdGlmIChyZXQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDE4LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMDE5Olx0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihsb2FkX3JlZyBcdTAwM2MgMCA/XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMjAtXHRcdFx0XHRcdFJFR19ET05UX0NMRUFSX01BUktFUiA6IHJlZ21hcFtsb2FkX3JlZ10sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDczMC03NjUgb2YgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzZWdtZW50IG9mIHRoZSBKSVQgY29tcGlsZXIuIEkgZXhwZWN0IHRvIHNlZSBzb21lIGxvdy1sZXZlbCBSSVNDLVYgYXNzZW1ibHkgZ2VuZXJhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBCUEYgaW5zdHJ1Y3Rpb25zIGFyZSBiZWluZyB0cmFuc2xhdGVkIGludG8gdGhlIG5hdGl2ZSBhcmNoaXRlY3R1cmUgY29kZS4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIEJQRiBKSVQgY29tcGlsZXJzLCBpdCYjMzk7cyBwcm9iYWJseSBoYW5kbGluZyA2NC1iaXQgb3BlcmF0aW9ucywgcG9zc2libHkgaW50ZWdlciBhcml0aG1ldGljLCBtZW1vcnkgYWNjZXNzLCBvciBzb21lIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgcmVnaXN0ZXJzIGFyZSBiZWluZyBhbGxvY2F0ZWQsIHdoYXQgaW1tZWRpYXRlIHZhbHVlcyBhcmUgYmVpbmcgdXNlZCwgYW5kIHRoZSBvdmVyYWxsIGluc3RydWN0aW9uIGZsb3cuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciBvcHRpbWl6YXRpb24gaGFwcGVuaW5nLCBzdWNoIGFzIGluc3RydWN0aW9uIHNjaGVkdWxpbmcgb3IgcGVlcGhvbGUgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGlzIHNlY3Rpb24uIFBlcmhhcHMgdGhlcmUmIzM5O3MgYW4gYXR0ZW1wdCB0byBtaW5pbWl6ZSBkZXBlbmRlbmNpZXMgb3IgdG8gcHJlZmV0Y2ggZGF0YS4gRnJvbSB0aGlzIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIHJvdXRpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMwOlx0XG4gNzMxOlx0XHRyZXR1cm4gdHJ1ZTtcbiA3MzI6XHR9XG4gNzMzOlx0XG4gNzM0Olx0LyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqL1xuIDczNTpcdHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiA3MzY6XHR7XG4gNzM3Olx0XHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcbiA3Mzg6XHRcdHVuc2lnbmVkIGxvbmcgcGM7XG4gNzM5Olx0XHRvZmZfdCBpbnNfb2Zmc2V0O1xuIDc0MDpcdFx0b2ZmX3QgZml4dXBfb2Zmc2V0O1xuIDc0MTpcdFxuIDc0MjpcdFx0aWYgKCFjdHgtXHUwMDNlaW5zbnMgfHwgIWN0eC1cdTAwM2Vyb19pbnNucyB8fCAhY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWV4dGFibGUgfHxcbiA3NDM6XHRcdCAgICBjdHgtXHUwMDNlZXhfaW5zbl9vZmYgXHUwMDNjPSAwIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzYz0gMClcbiA3NDQ6XHRcdFx0cmV0dXJuIDA7XG4gNzQ1Olx0XG4gNzQ2Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cdTAwM2VuZXhlbnRyaWVzIFx1MDAzZT0gY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMpKVxuIDc0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NDg6XHRcbiA3NDk6XHRcdGlmIChXQVJOX09OX09OQ0UoY3R4LVx1MDAzZWV4X2luc25fb2ZmIFx1MDAzZSBjdHgtXHUwMDNlbmluc25zIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzZSBjdHgtXHUwMDNlbmluc25zKSlcbiA3NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzUxOlx0XG4gNzUyOlx0XHRleCA9IFx1MDAyNmN0eC1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VleHRhYmxlW2N0eC1cdTAwM2VuZXhlbnRyaWVzXTtcbiA3NTM6XHRcdHBjID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3R4LVx1MDAzZXJvX2luc25zW2N0eC1cdTAwM2VleF9pbnNuX29mZl07XG4gNzU0Olx0XG4gNzU1Olx0XHQvKlxuIDc1NjpcdFx0ICogVGhpcyBpcyB0aGUgcmVsYXRpdmUgb2Zmc2V0IG9mIHRoZSBpbnN0cnVjdGlvbiB0aGF0IG1heSBmYXVsdCBmcm9tXG4gNzU3Olx0XHQgKiB0aGUgZXhjZXB0aW9uIHRhYmxlIGl0c2VsZi4gVGhpcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGV4Y2VwdGlvblxuIDc1ODpcdFx0ICogdGFibGUgYW5kIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2lsbFxuIDc1OTpcdFx0ICogYmUgc2V0IHRvICYjMzk7MCYjMzk7IGFuZCB0aGUgZXhlY3V0aW9uIHdpbGwganVtcCB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbi5cbiA3NjA6XHRcdCAqL1xuIDc2MTpcdFx0aW5zX29mZnNldCA9IHBjIC0gKGxvbmcpXHUwMDI2ZXgtXHUwMDNlaW5zbjtcbiA3NjI6XHRcdGlmIChXQVJOX09OX09OQ0UoaW5zX29mZnNldCBcdTAwM2U9IDAgfHwgaW5zX29mZnNldCBcdTAwM2MgSU5UX01JTikpXG4gNzYzOlx0XHRcdHJldHVybiAtRVJBTkdFO1xuIDc2NDpcdFxuIDc2NTpcdFx0LypcbiA3NjY6XHRcdCAqIFNpbmNlIHRoZSBleHRhYmxlIGZvbGxvd3MgdGhlIHByb2dyYW0sIHRoZSBmaXh1cCBvZmZzZXQgaXMgYWx3YXlzXG4gNzY3Olx0XHQgKiBuZWdhdGl2ZSBhbmQgbGltaXRlZCB0byBCUEZfSklUX1JFR0lPTl9TSVpFLiBTdG9yZSBhIHBvc2l0aXZlIHZhbHVlXG4gNzY4Olx0XHQgKiB0byBrZWVwIHRoaW5ncyBzaW1wbGUsIGFuZCBwdXQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSB1cHBlclxuIDc2OTpcdFx0ICogYml0cy4gV2UgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgYnVpbGR0aW1lIG9yIHJ1bnRpbWUgc29ydFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTIyCgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJJU0MtViBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlZmFjdG9yaW5nIGhvdyBleGNlcHRpb24gaGFuZGxpbmcgaXMgaW5zZXJ0ZWQgd2l0aGluIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBzaGlmdGluZyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgZGV0ZXJtaW5pbmcgd2hlbiB0byBhZGQgYW4gZXhjZXB0aW9uIGhhbmRsZXIuIEluc3RlYWQgb2YgYGFkZF9leGNlcHRpb25faGFuZGxlcigpYCBpbnNwZWN0aW5nIHRoZSBpbnN0cnVjdGlvbiBkaXJlY3RseSwgdGhlIGNvZGUgY2FsbGluZyBpdCwgbmFtZWx5IGBicGZfaml0X2VtaXRfaW5zbigpYCwgbm93IGRvZXMgdGhlIGNoZWNrIGZvciBwcm9iZSBpbnN0cnVjdGlvbnMuCgpNeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHZ1bG5lcmFiaWxpdGllcywgcGFydGljdWxhcmx5IGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4KCkFscmlnaHQsIHNvOgoKKiAgICoqTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzOioqIEl0IGRvZXNuJiMzOTt0IGFwcGVhciB0aGlzIGNoYW5nZSB0b3VjaGVzIGFueSBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIE5vdGhpbmcgaXMgYmVpbmcgYWxsb2NhdGVkIG9yIGFjY2Vzc2VkIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLgoqICAgKipObyBkYXRhIGxlYWtzOioqIFdlJiMzOTtyZSBub3QgY29weWluZyBhbnkgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIHNvIG5vIHJpc2sgdGhlcmUgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEuCiogICAqKk5vIGNvbmRpdGlvbmFsIHZ1bG5lcmFiaWxpdGllczoqKiBUaGVyZSBhcmVuJiMzOTt0IGFueSBjb25kaXRpb25hbHMgdGhhdCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCB3aGljaCBpcyBnb29kLiBUaGF0IGVsaW1pbmF0ZXMgYSBjbGFzc2ljIHNvdXJjZSBvZiBwcm9ibGVtcy4KKiAgICoqSklUIGVtaXNzaW9uIGJ1Z3M6KiogSWYgdGhlcmUgYXJlIGFueSBidWdzIGludHJvZHVjZWQsIHRoZXkmIzM5O3JlIG1vcmUgbGlrZWx5IHRvIG1hbmlmZXN0IGFzIGluY29ycmVjdCBtYWNoaW5lIGNvZGUgYmVpbmcgZ2VuZXJhdGVkIG9yIG91dHJpZ2h0IGtlcm5lbCBjcmFzaGVzLCBub3QgYnkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCiogICAqKktNU0FOIGlzIGlycmVsZXZhbnQ6KiogS01TQU4gaXNuJiMzOTt0IGluIHBsYXkgaGVyZSwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gY29uc2lkZXIgdGhhdCBhcyBhIGRpYWdub3N0aWMgdG9vbC4KCkdpdmVuIHRoZXNlIHBvaW50cywgSSYjMzk7bSBmZWVsaW5nIGNvbmZpZGVudCBhYm91dCB0aGlzIGNoYW5nZS4gV2UgY2FuIHNhZmVseSBtb3ZlIHRvIGZvcm11bGF0aW5nIHRoZSByZXNwb25zZSBhbmQgc2V0dGluZyB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleGNlcHRpb24gdGFibGUgcmVnaXN0cmF0aW9uIGxvZ2ljIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlciAoYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgKS4gSXQgbW92ZXMgb3Bjb2RlIGNoZWNrcyAoYGluc25faXNfcHJvYmVfbGR4KClgLCBgQlBGX1BST0JFX01FTTMyYCwgYEJQRl9QUk9CRV9BVE9NSUNgKSBmcm9tIHdpdGhpbiBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKClgIHRvIGl0cyBjYWxsZXJzIGluIGBicGZfaml0X2VtaXRfaW5zbigpYC5cblxuVGhpcyBpcyBwdXJlbHkgSklUIGNvZGUgZW1pc3Npb24gYW5kIGludGVybmFsIGV4Y2VwdGlvbiB0YWJsZSBib29ra2VlcGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyBoYW5kbGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGV4Y2VwdGlvbiB0YWJsZSByZWdpc3RyYXRpb24gbG9naWMgaW4gdGhlIFJJU0MtViBCUEYgSklUIGNvbXBpbGVyIChgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2ApLiBJdCBtb3ZlcyBvcGNvZGUgY2hlY2tzIChgaW5zbl9pc19wcm9iZV9sZHgoKWAsIGBCUEZfUFJPQkVfTUVNMzJgLCBgQlBGX1BST0JFX0FUT01JQ2ApIGZyb20gd2l0aGluIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoKWAgdG8gaXRzIGNhbGxlcnMgaW4gYGJwZl9qaXRfZW1pdF9pbnNuKClgLlxuXG5UaGlzIGlzIHB1cmVseSBKSVQgY29kZSBlbWlzc2lvbiBhbmQgaW50ZXJuYWwgZXhjZXB0aW9uIHRhYmxlIGJvb2trZWVwaW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBvciBkYXRhIHBhdGhzIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTY6NDkuMzY1NDg2MzI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYwOTA4MTU3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIjY0QklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXhjZXB0aW9uIHRhYmxlIHJlZ2lzdHJhdGlvbiBsb2dpYyBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgKGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCkuIEl0IG1vdmVzIG9wY29kZSBjaGVja3MgKGBpbnNuX2lzX3Byb2JlX2xkeCgpYCwgYEJQRl9QUk9CRV9NRU0zMmAsIGBCUEZfUFJPQkVfQVRPTUlDYCkgZnJvbSB3aXRoaW4gYGFkZF9leGNlcHRpb25faGFuZGxlcigpYCB0byBpdHMgY2FsbGVycyBpbiBgYnBmX2ppdF9lbWl0X2luc24oKWAuXFxuXFxuVGhpcyBpcyBwdXJlbHkgSklUIGNvZGUgZW1pc3Npb24gYW5kIGludGVybmFsIGV4Y2VwdGlvbiB0YWJsZSBib29ra2VlcGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyBoYW5kbGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciAoYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyksIHJlZmFjdG9yaW5nIGhvdyBhbmQgd2hlbiBleGNlcHRpb24gdGFibGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvIHByb2JlIGxvYWQsIHN0b3JlLCBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBhZmZlY3RzIGZ1bmN0aW9uYWwgQlBGIGNvZGUgZ2VuZXJhdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgaW4gUklTQy1WIEpJVCwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVSByaXNjdjY0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTY6NDkuMzY1NDkwOTk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDc0NzIzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZmIwNWY1NzI3OGU0ZTEwNjBlMzMwMTQ3N2U2MTlmMTJiNWQ1YTNkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMjM6NTY6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG5pbmRleCBlNzM3OGJlMTcxYTlmLi43MjZjMDE2OWZjNjBmIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuQEAgLTczMSw5ICs3MzEsOCBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tLyogRm9yIGFjY2Vzc2VzIHRvIEJURiBwb2ludGVycywgYWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgKi9cXG4tc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbisvKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSBmb3IgYSBmYXVsdGluZyBwcm9iZSBpbnNuICovXFxuK3N0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4ge1xcbiBcXHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcXG4gXFx0dW5zaWduZWQgbG9uZyBwYztcXG5AQCAtNzQ0LDE0ICs3NDMsNiBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxcbiBcXHQgICAgY3R4LVxcdTAwM2VleF9pbnNuX29mZiBcXHUwMDNjPSAwIHx8IGN0eC1cXHUwMDNlZXhfam1wX29mZiBcXHUwMDNjPSAwKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIShCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgICBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0xEWCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4gXFx0aWYgKFdBUk5fT05fT05DRShjdHgtXFx1MDAzZW5leGVudHJpZXMgXFx1MDAzZT0gY3R4LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW51bV9leGVudHJpZXMpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuQEAgLTEzNjAsNiArMTM1MSwxNSBAQCBpbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNjIDAgPyByZXQgOiBzaXplO1xcbiB9XFxuIFxcbisvKiBQcm9iZSBsb2FkcyBmYXVsdCBvbiB1bm1hcHBlZCBtZW1vcnkgYW5kIG5lZWQgYW4gZXhjZXB0aW9uIHRhYmxlIGVudHJ5ICovXFxuK3N0YXRpYyBib29sIGluc25faXNfcHJvYmVfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRyZXR1cm4gQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTSB8fFxcbitcXHQgICAgICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYIHx8XFxuK1xcdCAgICAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcXG4rXFx0ICAgICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYO1xcbit9XFxuK1xcbiBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0ICAgICAgYm9vbCBleHRyYV9wYXNzKVxcbiB7XFxuQEAgLTE5MjksOSArMTkyOSwxMSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4gXFxuIFxcdFxcdGVtaXRfbGR4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgc2lnbl9leHQsIGN0eCk7XFxuIFxcbi1cXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgcmQsIGN0eCk7XFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChpbnNuX2lzX3Byb2JlX2xkeChpbnNuKSkge1xcbitcXHRcXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIocmQsIGN0eCk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChCUEZfU0laRShjb2RlKSAhPSBCUEZfRFcgXFx1MDAyNlxcdTAwMjYgaW5zbl9pc196ZXh0KFxcdTAwMjZpbnNuWzFdKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDE7XFxuQEAgLTE5NTksOSArMTk2MSwxMSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4gXFxuIFxcdFxcdGVtaXRfc3QocmQsIG9mZiwgaW1tLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcXG4gXFxuLVxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHtcXG4rXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdC8qIFNUWDogKihzaXplICopKGRzdCArIG9mZikgPSBzcmMgKi9cXG5AQCAtMTk4MSw5ICsxOTg1LDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbiBcXG4gXFx0XFx0ZW1pdF9zdHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBjdHgpO1xcbiBcXG4tXFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMikge1xcbitcXHRcXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0LyogQXRvbWljcyAqL1xcbkBAIC0yMDAxLDcgKzIwMDcsNyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0XFx0cmV0ID0gZW1pdF9hdG9taWNfcm13KHJkLCBycywgaW5zbiwgY3R4KTtcXG4gXFxuIFxcdFxcdC8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqL1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxcbiBcXHRcXHRcXHQgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG9cXG5AQCAtMjAxMCw3ICsyMDE2LDcgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xcbiBcXG4tXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihsb2FkX3JlZyBcXHUwMDNjIDAgP1xcbiBcXHRcXHRcXHRcXHRcXHRSRUdfRE9OVF9DTEVBUl9NQVJLRVIgOiByZWdtYXBbbG9hZF9yZWddLFxcbiBcXHRcXHRcXHRcXHRcXHRjdHgpID86IHJldDtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1Njo0OS43NzM2Mzc1MzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxNTI0MjkxNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCI2NEJJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9qaXRfZW1pdF9pbnNuXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciAoYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyksIHJlZmFjdG9yaW5nIGhvdyBhbmQgd2hlbiBleGNlcHRpb24gdGFibGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvIHByb2JlIGxvYWQsIHN0b3JlLCBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4gVGhpcyBhZmZlY3RzIGZ1bmN0aW9uYWwgQlBGIGNvZGUgZ2VuZXJhdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgaW4gUklTQy1WIEpJVCwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVSByaXNjdjY0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2ZiMDVmNTcyNzhlNGUxMDYwZTMzMDE0NzdlNjE5ZjEyYjVkNWEzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjM6NTY6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggZTczNzhiZTE3MWE5Zi4uNzI2YzAxNjlmYzYwZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC03MzEsOSArNzMxLDggQEAgYm9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi0vKiBGb3IgYWNjZXNzZXMgdG8gQlRGIHBvaW50ZXJzLCBhZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSAqL1xuLXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsXG4tXHRcdFx0XHQgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4rLyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqL1xuK3N0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcbiBcdHVuc2lnbmVkIGxvbmcgcGM7XG5AQCAtNzQ0LDE0ICs3NDMsNiBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuIFx0ICAgIGN0eC1cdTAwM2VleF9pbnNuX29mZiBcdTAwM2M9IDAgfHwgY3R4LVx1MDAzZWV4X2ptcF9vZmYgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0gXHUwMDI2XHUwMDI2XG4tXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggXHUwMDI2XHUwMDI2XG4tXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgXHUwMDI2XHUwMDI2XG4tXHQgICAgIShCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0xEWCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKVxuLVx0XHRyZXR1cm4gMDtcbi1cbiBcdGlmIChXQVJOX09OX09OQ0UoY3R4LVx1MDAzZW5leGVudHJpZXMgXHUwMDNlPSBjdHgtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbnVtX2V4ZW50cmllcykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTEzNjAsNiArMTM1MSwxNSBAQCBpbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbiBcdHJldHVybiByZXQgXHUwMDNjIDAgPyByZXQgOiBzaXplO1xuIH1cbiBcbisvKiBQcm9iZSBsb2FkcyBmYXVsdCBvbiB1bm1hcHBlZCBtZW1vcnkgYW5kIG5lZWQgYW4gZXhjZXB0aW9uIHRhYmxlIGVudHJ5ICovXG4rc3RhdGljIGJvb2wgaW5zbl9pc19wcm9iZV9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuK3tcbitcdHJldHVybiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0gfHxcbitcdCAgICAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fFxuK1x0ICAgICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyIHx8XG4rXHQgICAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWDtcbit9XG4rXG4gaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbiB7XG5AQCAtMTkyOSw5ICsxOTI5LDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFxuIFx0XHRlbWl0X2xkeChyZCwgb2ZmLCBycywgQlBGX1NJWkUoY29kZSksIHNpZ25fZXh0LCBjdHgpO1xuIFxuLVx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgcmQsIGN0eCk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGluc25faXNfcHJvYmVfbGR4KGluc24pKSB7XG4rXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKHJkLCBjdHgpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGlmIChCUEZfU0laRShjb2RlKSAhPSBCUEZfRFcgXHUwMDI2XHUwMDI2IGluc25faXNfemV4dChcdTAwMjZpbnNuWzFdKSlcbiBcdFx0XHRyZXR1cm4gMTtcbkBAIC0xOTU5LDkgKzE5NjEsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXG4gXHRcdGVtaXRfc3QocmQsIG9mZiwgaW1tLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHtcbitcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXHRcdGJyZWFrO1xuIFxuIFx0LyogU1RYOiAqKHNpemUgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xuQEAgLTE5ODEsOSArMTk4NSwxMSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcbiBcdFx0ZW1pdF9zdHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBjdHgpO1xuIFxuLVx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMikge1xuK1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbiBcdFx0YnJlYWs7XG4gXG4gXHQvKiBBdG9taWNzICovXG5AQCAtMjAwMSw3ICsyMDA3LDcgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXHRcdFx0cmV0ID0gZW1pdF9hdG9taWNfcm13KHJkLCBycywgaW5zbiwgY3R4KTtcbiBcbiBcdFx0LyogcmV0IGNhbiBiZSAxIChza2lwLXpleHQpOyBleHRhYmxlIGVudHJ5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovXG4tXHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4rXHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEEgbG9hZC1hY3F1aXJlIHJlYWRzIGludG8gZHN0X3JlZywgYW5kIGEgcmVhZC1tb2RpZnktd3JpdGVcbiBcdFx0XHQgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG9cbkBAIC0yMDEwLDcgKzIwMTYsNyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdFx0XHQgKi9cbiBcdFx0XHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuIFxuLVx0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBsb2FkX3JlZyBcdTAwM2MgMCA/XG4rXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGxvYWRfcmVnIFx1MDAzYyAwID9cbiBcdFx0XHRcdFx0UkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSxcbiBcdFx0XHRcdFx0Y3R4KSA/OiByZXQ7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU2OjQ5Ljc3MzYzOTI2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMjg3NjI3NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIGEgcGF0Y2gsIHNwZWNpZmljYWxseSBvbmUgaW1wYWN0aW5nIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBcIndoYXRcIiDigJMgd2hhdCBpcyB0aGlzIHBhdGNoIGFjdHVhbGx5IGNoYW5naW5nIGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYD8gVGhpcyBmaWxlLCBiZWluZyB3aXRoaW4gdGhlIFJJU0MtViBuZXR3b3JrIHN0YWNrIGFuZCByZWxhdGVkIHRvIHRoZSBCUEYgSklUIGNvbXBpbGVyLCBpbW1lZGlhdGVseSBzaWduYWxzIGEgcG90ZW50aWFsbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBzb21lIGFjdHVhbCBpbmZvcm1hdGlvbi4gVGltZSB0byBicmluZyBvdXQgdGhlIHRvb2xzLiBJJ2xsIG5lZWQgdG8gZ2FpbiBzb21lIGNvbnRleHQgZnJvbSB0aGUgc3Vycm91bmRpbmcgY29kZS4gVG8gZG8gdGhhdCwgSSdsbCBsZXZlcmFnZSBgZ3JlcHBlcmAgKG9yIGByZWFkLWZpbGVgIGlmIHRoYXQncyBtb3JlIGFwcHJvcHJpYXRlKSwgdGFyZ2V0aW5nIGJvdGggdGhlIGBicGZfaml0X2NvbXA2NC5jYCBmaWxlIGl0c2VsZiAqYW5kKiB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBhbmQgYEtjb25maWdgIGZpbGVzIGxvY2F0ZWQgaW4gYGFyY2gvcmlzY3YvbmV0L2AuIFRoZXNlIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZmlsZSBpcyBidWlsdCwgbGlua2VkLCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGxhcmdlciBSSVNDLVYga2VybmVsIG1vZHVsZS4gVGhlbiwgSSBjYW4gc3RhcnQgdG8gZm9ybSBhbiBpZGVhIG9mIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgd2hlcmUgaXQgbGFuZHMsIHNvIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYW4gaW5mb3JtZWQgb3Bpbmlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU2OjUzLjAwMjQxNTY1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM1OTQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2NvbXA2NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbmV0L01ha2VmaWxlPTU9aWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSlcXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZTo2OlxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXA2NC5vIGJwZl90aW1lZF9tYXlfZ290by5vXFxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtNy1lbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU2OjUzLjA1MTc4MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQzNDE4MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgUklTQy1WIEJQRiBKSVQgQ29tcGlsZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgcGlucG9pbnQgYSBzcGVjaWZpYyBhcmVhLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSByZW1lbWJlciBpdCBob3VzZXMgdGhlIGNvcmUgSklUIGNvbXBpbGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBicGZfaml0X2VtaXRfaW5zbmAgZnVuY3Rpb24g4oCTIHRoYXQncyB3aGVyZSB0aGUgaW5kaXZpZHVhbCBCUEYgaW5zdHJ1Y3Rpb25zIGFyZSB0cmFuc2xhdGVkIGludG8gUklTQy1WIG1hY2hpbmUgY29kZSwgYW5kIHRoYXQncyB1c3VhbGx5IHRoZSBsb2N1cyBvZiBhbnkgb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBidWdzIGluIEpJVCBlbWlzc2lvbi4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgb3V0IGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLiBUaGF0J3Mgd2hlcmUgd2UgbWFuYWdlIHRoZSBoYW5kbGluZyBvZiBleGNlcHRpb25zIHRoYXQgbWlnaHQgb2NjdXIgZHVyaW5nIGV4ZWN1dGlvbiBvZiBKSVQgY29tcGlsZWQgY29kZTsgb2Z0ZW4gcmVsYXRlZCB0byBtZW1vcnkgYWNjZXNzIGlzc3VlcyBvciBkaXZpZGUgYnkgemVybyBlcnJvcnMuIEJvdGggb2YgdGhvc2UgYXJlIHByZXR0eSBjcml0aWNhbCBhcmVhcyB0aGF0IEkgd2FudCB0byBzdHVkeSBpbiBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBiZWluZyBsYWlkIG91dCwgaG93IGV4Y2VwdGlvbnMgYXJlIGhhbmRsZWQgd2l0aGluIHRoYXQgdHJhbnNsYXRlZCBjb2RlIGFuZCBob3cgdGhhdCBhbGwgdGllcyBpbiB3aXRoIHRoZSBvdmVyYWxsIGtlcm5lbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1Njo1NS42OTUyMDM2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHRcXG4gNzMxOlxcdFxcdHJldHVybiB0cnVlO1xcbiA3MzI6XFx0fVxcbiA3MzM6XFx0XFxuIDczNDpcXHQvKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSBmb3IgYSBmYXVsdGluZyBwcm9iZSBpbnNuICovXFxuIDczNTpcXHRzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnQgZHN0X3JlZywgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuIDczNjpcXHR7XFxuIDczNzpcXHRcXHRzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcXG4gNzM4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGM7XFxuIDczOTpcXHRcXHRvZmZfdCBpbnNfb2Zmc2V0O1xcbiA3NDA6XFx0XFx0b2ZmX3QgZml4dXBfb2Zmc2V0O1xcbiA3NDE6XFx0XFxuIDc0MjpcXHRcXHRpZiAoIWN0eC1cXHUwMDNlaW5zbnMgfHwgIWN0eC1cXHUwMDNlcm9faW5zbnMgfHwgIWN0eC1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VleHRhYmxlIHx8XFxuIDc0MzpcXHRcXHQgICAgY3R4LVxcdTAwM2VleF9pbnNuX29mZiBcXHUwMDNjPSAwIHx8IGN0eC1cXHUwMDNlZXhfam1wX29mZiBcXHUwMDNjPSAwKVxcbiA3NDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoY3R4LVxcdTAwM2VuZXhlbnRyaWVzIFxcdTAwM2U9IGN0eC1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VudW1fZXhlbnRyaWVzKSlcXG4gNzQ3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NDg6XFx0XFxuIDc0OTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cXHUwMDNlZXhfaW5zbl9vZmYgXFx1MDAzZSBjdHgtXFx1MDAzZW5pbnNucyB8fCBjdHgtXFx1MDAzZWV4X2ptcF9vZmYgXFx1MDAzZSBjdHgtXFx1MDAzZW5pbnNucykpXFxuIDc1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzUxOlxcdFxcbiA3NTI6XFx0XFx0ZXggPSBcXHUwMDI2Y3R4LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWV4dGFibGVbY3R4LVxcdTAwM2VuZXhlbnRyaWVzXTtcXG4gNzUzOlxcdFxcdHBjID0gKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmN0eC1cXHUwMDNlcm9faW5zbnNbY3R4LVxcdTAwM2VleF9pbnNuX29mZl07XFxuIDc1NDpcXHRcXG4gNzU1OlxcdFxcdC8qXFxuIDc1NjpcXHRcXHQgKiBUaGlzIGlzIHRoZSByZWxhdGl2ZSBvZmZzZXQgb2YgdGhlIGluc3RydWN0aW9uIHRoYXQgbWF5IGZhdWx0IGZyb21cXG4gNzU3OlxcdFxcdCAqIHRoZSBleGNlcHRpb24gdGFibGUgaXRzZWxmLiBUaGlzIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgZXhjZXB0aW9uXFxuIDc1ODpcXHRcXHQgKiB0YWJsZSBhbmQgaWYgdGhpcyBpbnN0cnVjdGlvbiBmYXVsdHMsIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciB3aWxsXFxuIDc1OTpcXHRcXHQgKiBiZSBzZXQgdG8gJzAnIGFuZCB0aGUgZXhlY3V0aW9uIHdpbGwganVtcCB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbi5cXG4gNzYwOlxcdFxcdCAqL1xcbiA3NjE6XFx0XFx0aW5zX29mZnNldCA9IHBjIC0gKGxvbmcpXFx1MDAyNmV4LVxcdTAwM2VpbnNuO1xcbiA3NjI6XFx0XFx0aWYgKFdBUk5fT05fT05DRShpbnNfb2Zmc2V0IFxcdTAwM2U9IDAgfHwgaW5zX29mZnNldCBcXHUwMDNjIElOVF9NSU4pKVxcbiA3NjM6XFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcdC8qXFxuIDc2NjpcXHRcXHQgKiBTaW5jZSB0aGUgZXh0YWJsZSBmb2xsb3dzIHRoZSBwcm9ncmFtLCB0aGUgZml4dXAgb2Zmc2V0IGlzIGFsd2F5c1xcbiA3Njc6XFx0XFx0ICogbmVnYXRpdmUgYW5kIGxpbWl0ZWQgdG8gQlBGX0pJVF9SRUdJT05fU0laRS4gU3RvcmUgYSBwb3NpdGl2ZSB2YWx1ZVxcbiA3Njg6XFx0XFx0ICogdG8ga2VlcCB0aGluZ3Mgc2ltcGxlLCBhbmQgcHV0IHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgdXBwZXJcXG4gNzY5OlxcdFxcdCAqIGJpdHMuIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgYnVpbGR0aW1lIG9yIHJ1bnRpbWUgc29ydFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1Njo1NS42OTUzMzA1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5ODI1MzQ3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIEV4Y2VwdGlvbiBIYW5kbGVyIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSByZWZhY3RvcmluZyBpbiBob3cgZXhjZXB0aW9uIGhhbmRsaW5nIGlzIG1hbmFnZWQgd2l0aGluIHRoZSBCUEYgSklUIGNvbXBpbGVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBwcm9iZSBpbnN0cnVjdGlvbnMuIFByZXZpb3VzbHksIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgIGhhZCB0aGUgcmVzcG9uc2liaWxpdHkgb2YgZGV0ZXJtaW5pbmcgaWYgYW4gaW5zdHJ1Y3Rpb24gd2FzIGEgcHJvYmUgaW5zdHJ1Y3Rpb24gYW5kIGhhbmRsaW5nIGFjY29yZGluZ2x5LiBUaGlzIHdhcyBkb25lICphZnRlciogc29tZSBwcmVsaW1pbmFyeSBjaGVja3Mgd2l0aGluIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLlxuXG5Ob3csIHRoZSBsb2dpYyBmb3IgaWRlbnRpZnlpbmcgcHJvYmUgaW5zdHJ1Y3Rpb25zIGhhcyBiZWVuICpwdXNoZWQgdXAqIGludG8gdGhlIGNhbGwgc2l0ZXMgd2l0aGluIGBicGZfaml0X2VtaXRfaW5zbmAuIFdlIHNlZSB0aGVzZSBjaGVja3MgZm9yIExEWCwgU1QsIFNUWCwgYW5kIGF0b21pYyBpbnN0cnVjdGlvbnM6IGBpbnNuX2lzX3Byb2JlX2xkeChpbnNuKWAsIGBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMmAsIGV0Yy4gIFRoaXMgbWVhbnMgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgaXMgbm93IG9ubHkgY2FsbGVkICpjb25kaXRpb25hbGx5Kiwgd2hlbiBhIHByb2JlIGluc3RydWN0aW9uIGlzIGRldGVjdGVkLCByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgYW5kIHRoZW4gY29uZGl0aW9uYWxseSB3aXRoaW4gdGhlIGZ1bmN0aW9uLlxuXG5UaGUgb2xkIGNvZGUsIGV2ZW4gZm9yIG5vbi1wcm9iZSBpbnN0cnVjdGlvbnMsIHdvdWxkIHNvbWV0aW1lcyBjYWxsIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLCB3aGVyZSBhIHNlcmllcyBvZiBjaGVja3MsIGluY2x1ZGluZyB0aGUgYGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VleHRhYmxlYCBjaGVjaywgd291bGQgYmUgcGVyZm9ybWVkLiAgVGhlbiwgaW5zaWRlIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLCB0aGUgQlBGIGluc3RydWN0aW9uIG1vZGUgd291bGQgYmUgY2hlY2tlZCBhZ2Fpbi4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gZWxpbWluYXRlcyB0aG9zZSByZWR1bmRhbnQgY2FsbHMsIG1ha2luZyB0aGUgZmxvdyBtb3JlIGRpcmVjdCBhbmQgaG9wZWZ1bGx5IG1vcmUgZWZmaWNpZW50LlxuXG5UaGUga2V5IGlzIHRoYXQgdGhlIHByb2JlIGluc3RydWN0aW9uIGRldGVjdGlvbiBpcyBub3cgZG9uZSAqYmVmb3JlKiB0aGUgY2FsbCB0byBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYCwgcmF0aGVyIHRoYW4gd2l0aGluIGl0IGFmdGVyIHNvbWUgY29uZGl0aW9uYWwgY2hlY2tzLiBUaGlzIGltcGxpZXMgZmV3ZXIgY2FsbHMgdG8gYGFkZF9leGNlcHRpb25faGFuZGxlcmAgYW5kIGEgbW9yZSBzdHJlYW1saW5lZCBwYXRoIGZvciBub24tcHJvYmUgaW5zdHJ1Y3Rpb25zLlxuXG5JcyB0aGlzIHJlbGV2YW50IGluIGEgcmVhbC13b3JsZCBzY2VuYXJpbz8gQWJzb2x1dGVseS4gIFJJU0MtViB3aXRoIFFFTVUgKGBxZW11LXN5c3RlbS1yaXNjdjY0YCkgaXMgYSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBwbGF0Zm9ybSwgc28gdGhpcyBjb2RlICppcyogZGVmaW5pdGVseSByZWFjaGFibGUuICBCUEYgSklUIGlzIGNvcmUgdG8gdGhlIGtlcm5lbCBvbiBSSVNDLVYgNjQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBCUEYgSklUIGVudHJ5IHBvaW50cyBhbmQgS2NvbmZpZyBvcHRpb25zLCBqdXN0IHRvIGJlIHN1cmUuIEknbGwgc2VhcmNoIHRob3NlIHJlbGV2YW50IEMgZmlsZXMgZm9yIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTY4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MDAuNjc3ODY4MDcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDUxMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0zOT1ib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDMtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6NDQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy00NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjAwLjcyODMyMzY0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzOTEyNDMxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFJJU0MtViBCUEYgSklUIENvbXBpbGVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBpbnN0cnVjdGlvbnMgYXJlIHRyYW5zbGF0ZWQgaW50byBuYXRpdmUgUklTQy1WIGNvZGUuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSdyZSBoYW5kbGluZyB0aGluZ3MgbGlrZSByZWdpc3RlciBhbGxvY2F0aW9uLCBpbnN0cnVjdGlvbiBzZWxlY3Rpb24sIGFuZCBwb3RlbnRpYWxseSwgYW55IG9wdGltaXphdGlvbnMgYmVpbmcgZW1wbG95ZWQuIFNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBob3cgaW1tZWRpYXRlIHZhbHVlcywgbWVtb3J5IGFjY2Vzc2VzLCBhbmQgY29udHJvbCBmbG93IGFyZSBtYW5hZ2VkLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29kZSBnZW5lcmF0aW9uIGRldGFpbHMuIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQ7IHRoaXMgc2VjdGlvbiBvZiB0aGUga2VybmVsIGNhbiBnZXQgcXVpdGUgY29tcGxleC4gSSdsbCBhbHNvIGNoZWNrIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmljIEJQRiBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIGhvdyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgY29tbW9uIGNvcmUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIEkgbmVlZCB0byBzZWUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDMsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzowMy4xMTk1Njk0MTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzQyOTc4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjAzLjE2MzkxODg0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk4MDk4MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipBbmFseXppbmcgUklTQy1WIEJQRiBKSVQgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBCUEYgSklUIGNvbXBpbGVyIGltcGxlbWVudGF0aW9uIGZvciBSSVNDLVYuIE15IGltbWVkaWF0ZSB0YXNrIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIG5vdCBzdGF0aWMgKGxpa2VseSBleHBvcnRlZCBvciBleHRlcm5hbGx5IHVzZWQpIG9yIGFyZSBzb21laG93IGNvbnNpZGVyZWQgKmtleSogdG8gdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgaXRzZWxmLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIG9uIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCBhbmQgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24uIEtub3dpbmcgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvcmUgbG9naWMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgYW55IHN5c3RlbS4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlc2UgZmlsZXMsIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IHRoZXkgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4OTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzowNS41NjIwMTkxMDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTIxNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fGJvb2x8dm9pZHxzdHJ1Y3R8dW5zaWduZWQpIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19jcmVnKHU4IHJlZylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC03MC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6NzE6c3RydWN0IHJ2X2ppdF9jb250ZXh0IHtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtNzItXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTkwPXN0YXRpYyBpbmxpbmUgaW50IG5pbnNuc19ydm9mZihpbnQgbmluc25zKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTk0LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaDo5NTpzdHJ1Y3QgcnZfaml0X2RhdGEge1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC05Ni1cXHRzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhlYWRlcjtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaD0xMjk0PXN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0X2NtcHhjaGcodTggcmQsIHU4IHJzLCB1OCByMCwgYm9vbCBpczY0LCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMzI0LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaDoxMzI1OnZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgYm9vbCBpc19zdWJwcm9nKTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyNjp2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMzI3LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaDoxMzI4OmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMzI5LVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcyk7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jPTk5Mj1zdGF0aWMgdm9pZCBlbWl0X3pleHQ2NChjb25zdCBzOCAqZHN0LCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTAwMS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjEwMDI6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMDAzLVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTM4MS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjEzODI6dm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMzgzLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQzMS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjE0MzI6dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQzMy17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTY4Nz1zdGF0aWMgaW50IHNpZ25fZXh0ZW5kKHU4IHJkLCB1OCBycywgdTggc3osIGJvb2wgc2lnbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTcyMC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjcyMTpib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNzIyLVxcdFxcdCAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9ODAwPXN0YXRpYyBpbnQgZ2VuX2p1bXBfb3Jfbm9wcyh2b2lkICp0YXJnZXQsIHZvaWQgKmlwLCB1MzIgKmluc25zLCBib29sIGlzX2NhbGwpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTgxNy1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjgxODppbnQgYnBmX2FyY2hfdGV4dF9wb2tlKHZvaWQgKmlwLCBlbnVtIGJwZl90ZXh0X3Bva2VfdHlwZSBvbGRfdCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTgxOS1cXHRcXHQgICAgICAgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgbmV3X3QsIHZvaWQgKm9sZF9hZGRyLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz05ODU9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI5MS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEyOTI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyOTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMwNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzMDc6dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMDgte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzExLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMxMjp2b2lkIGFyY2hfZnJlZV9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzEzLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMxNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzMTc6aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzE4LVxcdFxcdFxcdFxcdHZvaWQgKnJvX2ltYWdlX2VuZCwgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzU1PXN0YXRpYyBib29sIGluc25faXNfcHJvYmVfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2Mi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjM6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzY0LVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjAzNS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIwMzY6dm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDM3LXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEyNy1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMjg6dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEyOS17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMzItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTMzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTM0LXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzNy1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMzg6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX3JldF9yZWdfcGFpcih2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzOS17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNDItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTQzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0NC17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNDctXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTQ4OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0OS17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTUzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTQte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTY3LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE2ODpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNjkte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTcyLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE3Mzpib29sIGJwZl9qaXRfaW5saW5lc19oZWxwZXJfY2FsbChzMzIgaW1tKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE3NC17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxODQtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTg1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE4Ni17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxODktXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTkwOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE5MS17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxOTQtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTk1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290byh2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE5Ni17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0xOT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgZXh0cmFfcGFzcywgaW50ICpvZmZzZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0zOC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzozOTpib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQwLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQzLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jOjQ0OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDUte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM9MTk0PXU2NCBicGZfaml0X2FsbG9jX2V4ZWNfbGltaXQodm9pZClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTE5OC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzoxOTk6dm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTIwMC17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yMTItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6MjEzOmludCBicGZfYXJjaF90ZXh0X2ludmFsaWRhdGUodm9pZCAqZHN0LCBzaXplX3QgbGVuKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTIxNC17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yMjMtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6MjI0OnZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yMjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzowNS42MDkxNDUyMzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2NDQyMjg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSSVNDLVYgQlBGIEpJVCBLY29uZmlnIERlZXAgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZm9yIHRoZSBSSVNDLVYgQlBGIEpJVC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcyBvciBvdmVybG9va2VkIGFueSBwb3RlbnRpYWwgZ290Y2hhcy4gRmlyc3QsIEnigJlsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgcmVsZXZhbnQgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfSklUX1JJU0NWYCBvcHRpb25zIGFyZSBlbmFibGVkLCB0aGF0J3MgYmFzZWxpbmUsIG5vIHN1cnByaXNlcyB0aGVyZS4gVGhlbiwgbGV0J3MgbG9vayBhdCB0aGUgaW50cmljYWNpZXMgb2YgdGhlIFJJU0MtViBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgZXh0ZW5zaW9ucyBvciBhcmNoaXRlY3R1cmUgdmVyc2lvbnMgdGhhdCBhcmUgbWFuZGF0ZWQgb3IgcmVjb21tZW5kZWQ/IEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMsIGlmIGFueSBhcmUgdXNlZCwgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUgZGVmYXVsdCBSSVNDLVYgYmFzZWxpbmUgb3IgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBhbnkgYXNzb2NpYXRlZCBhcmNoaXRlY3R1cmUgbGV2ZWwgZmVhdHVyZSBzZWxlY3Rpb25zLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIEpJVCBpc24ndCBpbmFkdmVydGVudGx5IHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgb3IgbW9kZWxzLlxuXG5CZXlvbmQgdGhlIGNvcmUgb3B0aW9ucywgSSBoYXZlIHRvIGVuc3VyZSB0aGUgS2NvbmZpZyBpbmNsdWRlcyBvcHRpb25zIHRvIGhhbmRsZSB0aGluZ3MgbGlrZSB0aGUgcmVsb2NhdGlvbiBtb2RlbCwgbWVtb3J5IHJlZ2lvbnMsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHRoYXQgbWF5IGFyaXNlIHdpdGhpbiB0aGUgUklTQy1WIGNvbnRleHQuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGZsYWdzPyBXaGF0IGFib3V0IGRlYnVnIG9wdGlvbnMgb3IgZXJyb3IgaGFuZGxpbmc/IEkgc2hvdWxkIHNlZSBpZiB0aGVyZSdzIGFueSBzdXBwb3J0IGZvciB0aGluZ3MgbGlrZSBleGNlcHRpb24gaGFuZGxpbmcuIEkgYWxzbyBleHBlY3Qgb3B0aW9ucyB0byBiZSBleHBvc2VkIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIHRhcmdldGVkIGZvciBhIGJhcmUtbWV0YWwgZW52aXJvbm1lbnQgdmVyc3VzIGFuIG9wZXJhdGluZyBzeXN0ZW0uIEEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHRvIG90aGVyIFJJU0MtVi1zcGVjaWZpYyBLY29uZmlncyAoZS5nLiwgcmVsYXRlZCB0byB0aGUga2VybmVsIGl0c2VsZiBvciBvdGhlciBzdWJzeXN0ZW1zKSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBpcyBhIG11c3QuIEZpbmFsbHksIGxldCdzIGV4cGxvcmUgdGhlIG9wdGlvbiBkZXNjcmlwdGlvbnMgdGhvcm91Z2hseSB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBjb25maWd1cmF0aW9uIGNob2ljZS4gVGhpcyBLY29uZmlnIGludmVzdGlnYXRpb24gaXMgZ29pbmcgdG8gYmUgdGhvcm91Z2gsIEkgaGF2ZSBhIGxvdCBvZiBzcGVjaWZpYyBhc3BlY3RzIHRoYXQgSSdkIGxpa2UgdG8gY2hlY2sgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjA5LjM3MzU3MDI5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyOTk3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjgtXFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSIGlmIEhBVkVfRFlOQU1JQ19GVFJBQ0VcXG5hcmNoL3Jpc2N2L0tjb25maWc6MTY5OlxcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNzAtXFx0c2VsZWN0IEhBVkVfR0VORVJJQ19USUZfQklUU1xcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9leHRhYmxlLmg9Mzg9c3RhdGljIGlubGluZSBib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTQwLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oOjQxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfSklUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19BUkNIX1JWNjRJKVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTQyLWJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTQ2LVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjQ3OiNkZWZpbmUgQlBGX0pJVF9SRUdJT05fU0laRVxcdChTWl8xMjhNKVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTQ4LSNpZmRlZiBDT05GSUdfNjRCSVRcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo0OTojZGVmaW5lIEJQRl9KSVRfUkVHSU9OX1NUQVJUXFx0KEJQRl9KSVRfUkVHSU9OX0VORCAtIEJQRl9KSVRfUkVHSU9OX1NJWkUpXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6NTA6I2RlZmluZSBCUEZfSklUX1JFR0lPTl9FTkRcXHQoTU9EVUxFU19FTkQpXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNTEtI2Vsc2VcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo1MjojZGVmaW5lIEJQRl9KSVRfUkVHSU9OX1NUQVJUXFx0KFBBR0VfT0ZGU0VUIC0gQlBGX0pJVF9SRUdJT05fU0laRSlcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo1MzojZGVmaW5lIEJQRl9KSVRfUkVHSU9OX0VORFxcdChWTUFMTE9DX0VORClcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC01NC0jZW5kaWZcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jPTE0NTY9c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9pbml0LmMtMTQ3Mi1cXHRcXHRcXHRbRVhFQ01FTV9CUEZdID0ge1xcbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjE0NzM6XFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBCUEZfSklUX1JFR0lPTl9TVEFSVCxcXG5hcmNoL3Jpc2N2L21tL2luaXQuYzoxNDc0OlxcdFxcdFxcdFxcdC5lbmRcXHQ9IEJQRl9KSVRfUkVHSU9OX0VORCxcXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNDc1LVxcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IFBBR0VfS0VSTkVMLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtMi1cXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvcmUub1xcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlLTQtXFxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU9NT1pZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlOjY6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZS03LWVsc2VcXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZTo4OlxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAzMi5vXFxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUtOS1lbmRpZlxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTgtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjk6I2lmbmRlZiBfQlBGX0pJVF9IXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjEwOiNkZWZpbmUgX0JQRl9KSVRfSFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMS1cXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaD0xMzI4PWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTEzMzAtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjEzMzE6I2VuZGlmIC8qIF9CUEZfSklUX0ggKi9cXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMzAtICogIEJQRl9SRUdfRlAgPVxcdTAwM2UgICstLS0tLS0tLS0tKyBcXHUwMDNjPSAoZnAgLSA0ICogTlJfU0FWRURfUkVHSVNURVJTXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzozMTogKiAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAtIDQgKiBCUEZfSklUX1NDUkFUQ0hfUkVHUylcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTMyLSAqICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM9NDM9ZW51bSB7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTU1LVxcdC8qIFN0YWNrIHNwYWNlIGZvciBCUEZfUkVHXzYgdGhyb3VnaCBCUEZfUkVHXzkgYW5kIEJQRl9SRUdfQVguICovXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzo1NjpcXHRCUEZfSklUX1NDUkFUQ0hfUkVHUyxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTU3LX07XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTY0LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6NjU6I2RlZmluZSBUTVBfUkVHXzFcXHQoTUFYX0JQRl9KSVRfUkVHICsgMClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjY2OiNkZWZpbmUgVE1QX1JFR18yXFx0KE1BWF9CUEZfSklUX1JFRyArIDEpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy02Ny1cXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTM4Mj12b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTM5Mi1cXHQvKiBNYWtlIHNwYWNlIGZvciBCUEYgcmVnaXN0ZXJzIG9uIHN0YWNrLiAqL1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTM5MzpcXHRzdGFja19hZGp1c3QgKz0gQlBGX0pJVF9TQ1JBVENIX1JFR1MgKiBzaXplb2YodTMyKTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTEzOTQtXFx0LyogTWFrZSBzcGFjZSBmb3IgQlBGIHN0YWNrLiAqL1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz03MzU9c3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW50IGRzdF9yZWcsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy03NjYtXFx0ICogU2luY2UgdGhlIGV4dGFibGUgZm9sbG93cyB0aGUgcHJvZ3JhbSwgdGhlIGZpeHVwIG9mZnNldCBpcyBhbHdheXNcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjc2NzpcXHQgKiBuZWdhdGl2ZSBhbmQgbGltaXRlZCB0byBCUEZfSklUX1JFR0lPTl9TSVpFLiBTdG9yZSBhIHBvc2l0aXZlIHZhbHVlXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy03NjgtXFx0ICogdG8ga2VlcCB0aGluZ3Mgc2ltcGxlLCBhbmQgcHV0IHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgdXBwZXJcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jPTE5ND11NjQgYnBmX2ppdF9hbGxvY19leGVjX2xpbWl0KHZvaWQpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtMTk1LXtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzoxOTY6XFx0cmV0dXJuIEJQRl9KSVRfUkVHSU9OX1NJWkU7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtMTk3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MDkuNDI0ODcyOTQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDA5Mjg0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCUEYgSklUIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVG8gdW5kZXJzdGFuZCBob3cgYEJQRl9KSVRgIGlzIGVuYWJsZWQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBhIGZldyBrZXkgZmlsZXMuIEknbGwgc3RhcnQgd2l0aCBgYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVgLCBhcyB0aGUgYXJjaGl0ZWN0dXJlIG1pZ2h0IGluZmx1ZW5jZSBob3cgSklUIGNvbXBpbGF0aW9uIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGVuLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlczogYGtlcm5lbC9icGYvS2NvbmZpZ2AsIGFuZCBwb3RlbnRpYWxseSBgbmV0L0tjb25maWdgIG9yIGV2ZW4gYGluaXQvS2NvbmZpZ2Ag4oCTIHRoZSBicm9hZGVyIEtjb25maWcgbGFuZHNjYXBlIHVzdWFsbHkgcmV2ZWFscyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBvcHRpb25zLiBUaG9zZSBzZWVtIGxpa2UgbG9naWNhbCBzdGFydGluZyBwb2ludHMsIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd291bGQgbGlrZWx5IHJlc2lkZS5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCBhbmQgcXVpY2tseSBpZGVudGlmeSBhbGwgaW5zdGFuY2VzLCBJJ2xsIGFsc28gcnVuIGEgcXVpY2sgZ3JlcCBhY3Jvc3MgdGhlIGVudGlyZSBzb3VyY2UgdHJlZSBmb3IgYGNvbmZpZyBCUEZfSklUYC4gVGhhdCBzaG91bGQgcXVpY2tseSB1bmNvdmVyIGFueSByZWZlcmVuY2VzIHRvIHRoZSBvcHRpb24gYW5kIGl0cyByZWxhdGlvbnNoaXBzLCByZWdhcmRsZXNzIG9mIHRoZSBmaWxlIGxvY2F0aW9uLiBUaGF0J3MgdXN1YWxseSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgYmlyZCdzLWV5ZSB2aWV3IG9mIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzoxMS43MjU4MDMyODlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDc1NDY3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNTctXFxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjEzLjI3MzM1NDgwNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTA2ODg3MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRXhhbWluaW5nIEJQRiBKSVQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGZvY3VzIGlzIG9uIHRoZSBgQlBGX0pJVGAgb3B0aW9uIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGRldGFpbCB0aGUgSklUIChKdXN0LUluLVRpbWUpIGNvbXBpbGVyIGZvciBCUEYgYnl0ZWNvZGUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBKSVQgaXMgZW5hYmxlZCwgd2hhdCBhcmNoaXRlY3R1cmVzIGl0J3Mgc3VwcG9ydGVkIG9uLCBhbmQgYW55IHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyB0aGF0IGFyZSBhZGRyZXNzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGJ1aWxkcyBhbmQgbWFuYWdlcyBCUEYgcHJvZ3JhbXMgYXQgcnVudGltZSwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbXkgd29yay4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgd2hlbiBkaWdnaW5nIGludG8gdGhlIEJQRiBKSVQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0OTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzoxNS43ODAyNDQwNzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzExODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDUwOlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTE6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU0OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1NTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDU2OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDU5OlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjA6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjM6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MTUuNzgwMzE2OTc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNjk5MTA3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUklTQy1WIEJQRiBKSVQgQ29tcGlsYXRpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBSSVNDLVYgQlBGIEpJVCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBJIHJlY2FsbCB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBjYWxscyBgYnVpbGRfYm9keWAsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGJwZl9qaXRfZW1pdF9pbnNuKGluc24sIGN0eCwgZXh0cmFfcGFzcylgLiBJdCBsb29rcyBsaWtlIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgY2FsbGVkIGJ5IHRoZSBCUEYgbG9hZGVyL2NvbXBpbGVyIHBpcGVsaW5lLCBzcGVjaWZpY2FsbHkgdmlhIGBicGZfcHJvZ19zZWxlY3RfcnVudGltZWAgYW5kIHRoZW4gdGhlIGBicGZfaW50X2ppdF9jb21waWxlYCBmdW5jdGlvbi4gSSBhbHNvIHNlZSB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgaXMgYSBub24tc3RhdGljIHN5bWJvbDsgdGhhdCdzIGdvb2QhIEl0J3MgZGVjbGFyZWQgaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaGAgYW5kIGRlZmluZWQgaW4gYGJwZl9qaXRfY29tcDY0LmNgLCBzbyBpdCBzaG91bGQgYmUgYWNjZXNzaWJsZS5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBleHBvcnQgc3RhdHVzLiBDaGVja2luZyBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIHRoZSBkZWNsYXJhdGlvbiBvZiBgYnBmX2ppdF9lbWl0X2luc25gIGlzIGV4YWN0bHkgYXMgZXhwZWN0ZWQsIGFuZCBpdCBhbHNvIGxpbmVzIHVwIHdpdGggdGhlIGRlY2xhcmF0aW9uIGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0LmhgLiAgSW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jYCwgSSBzZWUgYHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpYCB3aGljaCBpcyBhbHNvIHdoYXQgSSBleHBlY3RlZC5cblxuQWxyaWdodCwgbGV0J3MgYWxpZ24gdGhpcyB3aXRoIGEgZnV6emluZyBzdHJhdGVneS4gVGhlIGNyaXRlcmlhIHNlZW0gdG8gYWxpZ24gd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgSklUIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCBleGNlcHRpb24gdGFibGUgaGFuZGxpbmcgZm9yIFJJU0MtViA2NC4gIFBlcmZlY3QhIEFuZCB5ZXMsIGEgc3RhbmRhcmQgTGludXgga2VybmVsIHdpdGggQlBGIEpJVCBydW5zIHdpdGhpbiBRRU1VIG9uIFJJU0MtViA2NCwgbWFraW5nIGl0IHJlYWNoYWJsZS4gVGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQ6IEpJVCBjb2RlIGdlbmVyYXRpb24gYW5kIGV4Y2VwdGlvbiBoYW5kbGluZyBidWdzIGNhbiBkZWZpbml0ZWx5IGxlYWQgdG8gY3Jhc2hlcywgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRoYXQgbWFrZXMgaXQgYSBzdHJvbmcgY2FuZGlkYXRlLlxuXG5UaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qgb246IGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCBhcmUgZXhhY3RseSB0aGUgYXJlYXMgSSB3YW50IHRvIHRhcmdldC4gQXMgZm9yIHRoZSBgRW5hYmxlQ29uZmlnc2AsIGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBBUkNIX1JWNjRJYCBvciBlcXVpdmFsZW50IChgNjRCSVRgL2BSSVNDVmApIG1ha2Ugc2Vuc2UuICBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYEFSQ0hfUlY2NElgIGluIEtjb25maWcsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb25maWcgb3B0aW9ucyBhcmUgY29ycmVjdCBmb3IgbXkgdGVzdGluZyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzoyMS4xNTAyMjk4ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODY1OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX1JWNjRJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnPTQwNj1jb25maWcgQVJDSF9SVjMySVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMS1cXG5hcmNoL3Jpc2N2L0tjb25maWc6NDEyOmNvbmZpZyBBUkNIX1JWNjRJXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMy1cXHRib29sIFxcXCJSVjY0SVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MjEuMjAzMTAyMjUzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NzMwNjIwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBSSVNDLVYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSBzb21lIGtleSBSSVNDLVYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBMZXQncyBzZWUuLi5JJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IHN0dWZmIGlzIGxpa2VseSBpbiBgYXJjaC9yaXNjdi9LY29uZmlnYC4gUmlnaHQsIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gQW5kIGJhc2VkIG9uIHdoYXQgSSByZW1lbWJlciwgbGluZSA0MTAgc291bmRzIGxpa2UgYSByZWFzb25hYmxlIGFyZWEgdG8gemVybyBpbiBvbi4gSG9wZWZ1bGx5LCBJJ2xsIGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3Igc29tZXdoZXJlIGFyb3VuZCB0aGF0IGxvY2F0aW9uIGFuZCBxdWlja2x5IGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljcyBvZiB0aGUgdGFyZ2V0ZWQgY29uZmlndXJhdGlvbiBpdGVtLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTU3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MjIuODc2MTY4MzIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDA1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDA1OlxcdFxcbiA0MDY6XFx0Y29uZmlnIEFSQ0hfUlYzMklcXG4gNDA3OlxcdFxcdGJvb2wgXFxcIlJWMzJJXFxcIlxcbiA0MDg6XFx0XFx0ZGVwZW5kcyBvbiBOT05QT1JUQUJMRVxcbiA0MDk6XFx0XFx0c2VsZWN0IDMyQklUXFxuIDQxMDpcXHRcXHRzZWxlY3QgR0VORVJJQ19MSUJfVUNNUERJMlxcbiA0MTE6XFx0XFxuIDQxMjpcXHRjb25maWcgQVJDSF9SVjY0SVxcbiA0MTM6XFx0XFx0Ym9vbCBcXFwiUlY2NElcXFwiXFxuIDQxNDpcXHRcXHRzZWxlY3QgNjRCSVRcXG4gNDE1OlxcdFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0lOVDEyOCBpZiBDQ19IQVNfSU5UMTI4XFxuIDQxNjpcXHRcXHRzZWxlY3QgU1dJT1RMQiBpZiBNTVVcXG4gNDE3OlxcdFxcbiA0MTg6XFx0ZW5kY2hvaWNlXFxuIDQxOTpcXHRcXG4gNDIwOlxcdCMgV2UgbXVzdCBiZSBhYmxlIHRvIG1hcCBhbGwgcGh5c2ljYWwgbWVtb3J5IGludG8gdGhlIGtlcm5lbCwgYnV0IHRoZSBjb21waWxlclxcbiA0MjE6XFx0IyBpcyBzdGlsbCBhIGJpdCBtb3JlIGVmZmljaWVudCB3aGVuIGdlbmVyYXRpbmcgY29kZSBpZiBpdCdzIHNldHVwIGluIGEgbWFubmVyXFxuIDQyMjpcXHQjIHN1Y2ggdGhhdCBpdCBjYW4gb25seSBtYXAgMkdpQiBvZiBtZW1vcnkuXFxuIDQyMzpcXHRjaG9pY2VcXG4gNDI0OlxcdFxcdHByb21wdCBcXFwiS2VybmVsIENvZGUgTW9kZWxcXFwiXFxuIDQyNTpcXHRcXHRkZWZhdWx0IENNT0RFTF9NRURMT1cgaWYgMzJCSVRcXG4gNDI2OlxcdFxcdGRlZmF1bHQgQ01PREVMX01FREFOWSBpZiA2NEJJVFxcbiA0Mjc6XFx0XFxuIDQyODpcXHRcXHRjb25maWcgQ01PREVMX01FRExPV1xcbiA0Mjk6XFx0XFx0XFx0Ym9vbCBcXFwibWVkaXVtIGxvdyBjb2RlIG1vZGVsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzoyMi44NzYyOTU0NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ3NDk1NjQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIuIEkga25vdyBpbW1lZGlhdGVseSB0aGF0IHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYEFSQ0hfUlY2NElgLCBgQlBGX0pJVGAsIGFuZCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gZW5zdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgc3RyYWlnaHQgYmVmb3JlIEkgZGl2ZSBkZWVwZXIuXG5cbkkgc2VlIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yIHRoYXQgd2Ugc2hvdWxkIGV4cGxvcmUgdGhpcy4gSSd2ZSBhbHNvIGdvdCBhIGZvY3VzZWQgc3ltYm9sIGxpc3Q6IGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCwgd2hpY2ggZ2l2ZXMgbWUgYSBkaXJlY3QgbGluZSBvZiBzaWdodCB0byB0aGUgY3JpdGljYWwgY29kZSBzZWN0aW9ucy4gVGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzdW1wdGlvbnM6IGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGNydWNpYWxseSwgdGhlIFJJU0MtViA2NC1iaXQgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgKGBBUkNIX1JWNjRJYCkuXG5cblRoZSByZWFzb25pbmcgY2xhcmlmaWVzIHRoZSBwdXJwb3NlOiB0aGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLCBzcGVjaWZpY2FsbHkgaG93IGV4Y2VwdGlvbiB0YWJsZSBoYW5kbGVycyBhcmUgcmVnaXN0ZXJlZCBmb3IgcHJvYmUgbWVtb3J5IGxvYWQvc3RvcmUgYW5kIGF0b21pYyBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgZnVuY3Rpb25hbCwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEJQRiBKSVQgY29kZSwgbWVhbmluZyBpdCdzIHNvbWV0aGluZyBJIGNhbiB0ZXN0IGVmZmVjdGl2ZWx5IHdpdGhpbiBhIFFFTVUgcmlzY3Y2NCBlbnZpcm9ubWVudC4gR2l2ZW4gdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgYWNjZXNzLCBpdCB3YXJyYW50cyBjYXJlZnVsIGF0dGVudGlvbi5cblxuTm93LCBiZWZvcmUgSSBsYXVuY2ggYW55IGFuYWx5c2lzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSB0b29sIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AgdG8gbWFrZSBzdXJlIGl0J3MgY29uZmlndXJlZCBjb3JyZWN0bHkuIFRoaXMgc291bmRzIGxpa2UgYW4gYXJlYSByaXBlIGZvciBwb3RlbnRpYWwgY3Jhc2hlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91ciwgc28gZ2V0dGluZyB0aG9zZSBpbml0aWFsIHNldHRpbmdzIHJpZ2h0IHdpbGwgYmUgY3J1Y2lhbCB0byBnZXR0aW5nIHNvbGlkIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTE5LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjI2LjM1MTI1NDM3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjQyOTg3LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBUkNIX1JWNjRJIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJBUkNIX1JWNjRJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyIChhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jKSwgcmVmYWN0b3JpbmcgaG93IGFuZCB3aGVuIGV4Y2VwdGlvbiB0YWJsZSBoYW5kbGVycyBhcmUgYXR0YWNoZWQgdG8gcHJvYmUgbG9hZCwgc3RvcmUsIGFuZCBhdG9taWMgaW5zdHJ1Y3Rpb25zLiBUaGlzIGFmZmVjdHMgZnVuY3Rpb25hbCBCUEYgY29kZSBnZW5lcmF0aW9uIGFuZCBmYXVsdCBoYW5kbGluZyBpbiBSSVNDLVYgSklULCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VIHJpc2N2NjQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBUkNIX1JWNjRJXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjI2LjQyNTkwNjk3NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUxODg5ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbmZ1c2lvbioqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gd2hhdCdzIHRoaXM/IFRoZSBidWlsZCBzeXN0ZW0gaXMgY29tcGxhaW5pbmcgdGhhdCBgQVJDSF9SVjY0SWAgaXNuJ3QgZGVmaW5lZD8gSSBjb3VsZCBoYXZlIHN3b3JuIHRoYXQgYXJjaGl0ZWN0dXJlIHdhcyBzdXBwb3J0ZWQgYW5kIGluIHRoZSB0cmVlLiBUaGlzIGlzIHVudXN1YWwuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0IG1lIHF1aWNrbHkganVtcCBpbnRvIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgYSBzaW1wbGUgdHlwbyBvciBvdmVyc2lnaHQuIExldCBtZSB2ZXJpZnkgdGhlIGV4YWN0IHNwZWxsaW5nIGFuZCBkZWZpbml0aW9uIG9mIGBBUkNIX1JWNjRJYCB3aXRoaW4gdGhhdCBLY29uZmlnIGZpbGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdCB0aGVyZSwgZW5hYmxlZCBieSBzb21lIGBkZWZfYm9vbGAgb3IgYGJvb2xgIHN0YXRlbWVudCwgb3IgcGVyaGFwcyBjb25kaXRpb25lZCBvbiBzb21lIG90aGVyIHByZS1leGlzdGluZyBvcHRpb24uIFRpbWUgdG8gZWxpbWluYXRlIHRoZSBtb3N0IG9idmlvdXMgcG9zc2liaWxpdGllcy4gSXQncyBwcm9iYWJseSBqdXN0IGEgc21hbGwgZXJyb3IgdGhhdCBJIG92ZXJsb29rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTA3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjI4LjQ3Nzc5OTI1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwMTM2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9SVjY0SVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz0zOTk9Y2hvaWNlXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQwMC1cXHRwcm9tcHQgXFxcIkJhc2UgSVNBXFxcIlxcbmFyY2gvcmlzY3YvS2NvbmZpZzo0MDE6XFx0ZGVmYXVsdCBBUkNIX1JWNjRJXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQwMi1cXHRoZWxwXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9NDA2PWNvbmZpZyBBUkNIX1JWMzJJXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctNDExLVxcbmFyY2gvcmlzY3YvS2NvbmZpZzo0MTI6Y29uZmlnIEFSQ0hfUlY2NElcXG5hcmNoL3Jpc2N2L0tjb25maWctNDEzLVxcdGJvb2wgXFxcIlJWNjRJXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9NYWtlZmlsZT0yOD1leHBvcnQgQklUU1xcbmFyY2gvcmlzY3YvTWFrZWZpbGU6Mjk6aWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSlcXG5hcmNoL3Jpc2N2L01ha2VmaWxlLTMwLVxcdEJJVFMgOj0gNjRcXG4tLVxcbmFyY2gvcmlzY3YvTWFrZWZpbGU9NjE9cmlzY3YtbWFyY2gtJChDT05GSUdfQVJDSF9SVjMySSlcXHQ6PSBydjMyaW1hXFxuYXJjaC9yaXNjdi9NYWtlZmlsZTo2MjpyaXNjdi1tYXJjaC0kKENPTkZJR19BUkNIX1JWNjRJKVxcdDo9IHJ2NjRpbWFcXG5hcmNoL3Jpc2N2L01ha2VmaWxlLTYzLXJpc2N2LW1hcmNoLSQoQ09ORklHX0ZQVSlcXHRcXHQ6PSAkKHJpc2N2LW1hcmNoLXkpZmRcXG4tLVxcbmFyY2gvcmlzY3YvY29uZmlncy82NC1iaXQuY29uZmlnLTEtIyBIZWxwOiBCdWlsZCBhIDY0LWJpdCBpbWFnZVxcbmFyY2gvcmlzY3YvY29uZmlncy82NC1iaXQuY29uZmlnOjI6Q09ORklHX0FSQ0hfUlY2NEk9eVxcbmFyY2gvcmlzY3YvY29uZmlncy82NC1iaXQuY29uZmlnLTMtQ09ORklHXzY0QklUPXlcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vZXh0YWJsZS5oPTM4PXN0YXRpYyBpbmxpbmUgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIGZhbHNlOyB9XFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaC00MC1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaDo0MTojaWYgZGVmaW5lZChDT05GSUdfQlBGX0pJVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9SVjY0SSlcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2V4dGFibGUuaC00Mi1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvcmUub1xcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlLTQtXFxuYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU6NTppZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlLTYtXFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MjguNTI5ODE2Mzk2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2OTYwNzkzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRXJyb3IqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBXaHkgaXMgYHNldC1yZXN1bHRzYCB0ZWxsaW5nIG1lIHRoYXQgYEFSQ0hfUlY2NElgIGlzbid0IGZvdW5kIHdpdGhpbiB0aGUga2VybmVsIHRyZWU/IFRoYXQnc+KApiB1bmV4cGVjdGVkLiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzIGlzIGxpa2VseSBsb29raW5nIGF0IEtjb25maWcgZGVmaW5pdGlvbnMgZnJvbSBhIG1vcmUgY29tbW9uIGFyY2hpdGVjdHVyZSwgbGlrZSB4ODYsIG9yIG1heWJlIGl0J3MgY2hlY2tpbmcgZ2VuZXJhbCBLY29uZmlnIHN5bWJvbHMuIEl0IHNlZW1zIHVubGlrZWx5IHRoYXQgaXQga25vd3MgdGhlIGltcGxpY2F0aW9ucyBmb3IgUklTQy1WIHNwZWNpZmljYWxseSwgYW5kIHRodXMgaXMgYW4gaW5jb21wbGV0ZSB2aWV3LlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIHRlc3QgdGhlIHNpdHVhdGlvbiwga2VlcGluZyB0aGF0IGluIG1pbmQuIEluc3RlYWQgb2YgdHJ5aW5nIHRvIGZvcmNlIGBBUkNIX1JWNjRJYCByaWdodCBhd2F5LCBsZXQncyB0cnkgc29tZSBicm9hZGVyLCBtb3JlIGdlbmVyYWxseSByZWNvZ25pemVkIHN5bWJvbHMgdG8gY2hlY2sgaWYgdGhlIGVycm9yIGxpZXMgaW4gdGhlIHZhbGlkYXRpb24gcHJvY2VzcywgYW5kIGlmIHRob3NlIHN5bWJvbHMgYXJlIGF2YWlsYWJsZS4gVGhlIGFpbSBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGl0J3Mgc2F5aW5nIGBBUkNIX1JWNjRJYCBpc24ndCB0aGVyZSwgYW5kIGlmIGl0J3MgYSBmYWxzZSBuZWdhdGl2ZS4gSSdsbCB0ZXN0IHdpdGggYDY0QklUYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9TWVNDQUxMYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODI3LCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjMxLjIyNTkwMDExM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDI1NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiNjRCSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIgKGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMpLCByZWZhY3RvcmluZyBob3cgYW5kIHdoZW4gZXhjZXB0aW9uIHRhYmxlIGhhbmRsZXJzIGFyZSBhdHRhY2hlZCB0byBwcm9iZSBsb2FkLCBzdG9yZSwgYW5kIGF0b21pYyBpbnN0cnVjdGlvbnMuIFRoaXMgYWZmZWN0cyBmdW5jdGlvbmFsIEJQRiBjb2RlIGdlbmVyYXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGluIFJJU0MtViBKSVQsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUgcmlzY3Y2NCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIjY0QklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyIChhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jKSwgcmVmYWN0b3JpbmcgaG93IGFuZCB3aGVuIGV4Y2VwdGlvbiB0YWJsZSBoYW5kbGVycyBhcmUgYXR0YWNoZWQgdG8gcHJvYmUgbG9hZCwgc3RvcmUsIGFuZCBhdG9taWMgaW5zdHJ1Y3Rpb25zLiBUaGlzIGFmZmVjdHMgZnVuY3Rpb25hbCBCUEYgY29kZSBnZW5lcmF0aW9uIGFuZCBmYXVsdCBoYW5kbGluZyBpbiBSSVNDLVYgSklULCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VIHJpc2N2NjQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzozMS4yOTc5MzI4MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxNTgzNDkyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzozMS4yOTg0MzI2N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0MTU3ODQ0MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGV4Y2VwdGlvbiB0YWJsZSByZWdpc3RyYXRpb24gbG9naWMgaW4gdGhlIFJJU0MtViBCUEYgSklUIGNvbXBpbGVyIChgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2ApLiBJdCBtb3ZlcyBvcGNvZGUgY2hlY2tzIChgaW5zbl9pc19wcm9iZV9sZHgoKWAsIGBCUEZfUFJPQkVfTUVNMzJgLCBgQlBGX1BST0JFX0FUT01JQ2ApIGZyb20gd2l0aGluIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoKWAgdG8gaXRzIGNhbGxlcnMgaW4gYGJwZl9qaXRfZW1pdF9pbnNuKClgLlxcblxcblRoaXMgaXMgcHVyZWx5IEpJVCBjb2RlIGVtaXNzaW9uIGFuZCBpbnRlcm5hbCBleGNlcHRpb24gdGFibGUgYm9va2tlZXBpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgaGFuZGxpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNmYjA1ZjU3Mjc4ZTRlMTA2MGUzMzAxNDc3ZTYxOWYxMmI1ZDVhM2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDIzOjU2OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGU3Mzc4YmUxNzFhOWYuLjcyNmMwMTY5ZmM2MGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtNzMxLDkgKzczMSw4IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tLyogRm9yIGFjY2Vzc2VzIHRvIEJURiBwb2ludGVycywgYWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgKi9cbi1zdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuLVx0XHRcdFx0IHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuKy8qIEFkZCBhbiBlbnRyeSB0byB0aGUgZXhjZXB0aW9uIHRhYmxlIGZvciBhIGZhdWx0aW5nIHByb2JlIGluc24gKi9cbitzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnQgZHN0X3JlZywgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4ge1xuIFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG4gXHR1bnNpZ25lZCBsb25nIHBjO1xuQEAgLTc0NCwxNCArNzQzLDYgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcbiBcdCAgICBjdHgtXHUwMDNlZXhfaW5zbl9vZmYgXHUwMDNjPSAwIHx8IGN0eC1cdTAwM2VleF9qbXBfb2ZmIFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTVNYIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCBcdTAwMjZcdTAwMjZcbi1cdCAgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MRFgpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cdTAwM2VuZXhlbnRyaWVzIFx1MDAzZT0gY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0xMzYwLDYgKzEzNTEsMTUgQEAgaW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG4gXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogc2l6ZTtcbiB9XG4gXG4rLyogUHJvYmUgbG9hZHMgZmF1bHQgb24gdW5tYXBwZWQgbWVtb3J5IGFuZCBuZWVkIGFuIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSAqL1xuK3N0YXRpYyBib29sIGluc25faXNfcHJvYmVfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRyZXR1cm4gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNIHx8XG4rXHQgICAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHxcbitcdCAgICAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMiB8fFxuK1x0ICAgICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7XG4rfVxuK1xuIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHQgICAgICBib29sIGV4dHJhX3Bhc3MpXG4ge1xuQEAgLTE5MjksOSArMTkyOSwxMSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcbiBcdFx0ZW1pdF9sZHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBzaWduX2V4dCwgY3R4KTtcbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIHJkLCBjdHgpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmIChpbnNuX2lzX3Byb2JlX2xkeChpbnNuKSkge1xuK1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihyZCwgY3R4KTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFxuIFx0XHRpZiAoQlBGX1NJWkUoY29kZSkgIT0gQlBGX0RXIFx1MDAyNlx1MDAyNiBpbnNuX2lzX3pleHQoXHUwMDI2aW5zblsxXSkpXG4gXHRcdFx0cmV0dXJuIDE7XG5AQCAtMTk1OSw5ICsxOTYxLDExIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFxuIFx0XHRlbWl0X3N0KHJkLCBvZmYsIGltbSwgQlBGX1NJWkUoY29kZSksIGN0eCk7XG4gXG4tXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4rXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0XHRicmVhaztcbiBcbiBcdC8qIFNUWDogKihzaXplICopKGRzdCArIG9mZikgPSBzcmMgKi9cbkBAIC0xOTgxLDkgKzE5ODUsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXG4gXHRcdGVtaXRfc3R4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIFJFR19ET05UX0NMRUFSX01BUktFUiwgY3R4KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHtcbitcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXHRcdGJyZWFrO1xuIFxuIFx0LyogQXRvbWljcyAqL1xuQEAgLTIwMDEsNyArMjAwNyw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHRcdHJldCA9IGVtaXRfYXRvbWljX3JtdyhyZCwgcnMsIGluc24sIGN0eCk7XG4gXG4gXHRcdC8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqL1xuLVx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBIGxvYWQtYWNxdWlyZSByZWFkcyBpbnRvIGRzdF9yZWcsIGFuZCBhIHJlYWQtbW9kaWZ5LXdyaXRlXG4gXHRcdFx0ICogY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvciBpbnRvXG5AQCAtMjAxMCw3ICsyMDE2LDcgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXHRcdFx0ICovXG4gXHRcdFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbiBcbi1cdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgbG9hZF9yZWcgXHUwMDNjIDAgP1xuK1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihsb2FkX3JlZyBcdTAwM2MgMCA/XG4gXHRcdFx0XHRcdFJFR19ET05UX0NMRUFSX01BUktFUiA6IHJlZ21hcFtsb2FkX3JlZ10sXG4gXHRcdFx0XHRcdGN0eCkgPzogcmV0O1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo1NzozMS4yOTg0MzM4M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODM2MjQ4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBkb2luZy4gTGV0J3MgZGlnIGluLiBJdCdzIHRvdWNoaW5nIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCwgd2hpY2ggdGVsbHMgbWUgaXQncyBSSVNDLVYgc3BlY2lmaWMgY29kZSBmb3IgdGhlIEJQRiBKSVQgY29tcGlsZXIsIHRhcmdldGluZyA2NC1iaXQuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZyBvZiB0aGUgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgZnVuY3Rpb24uIFByZXZpb3VzbHksIHRoaXMgZnVuY3Rpb24gd2FzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyBpZiBhbiBpbnN0cnVjdGlvbiB3YXMgYSBwcm9iZSBtZW1vcnkgaW5zdHJ1Y3Rpb24gYW5kLCBpZiBzbywgYWRkaW5nIGFuIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeS4gTm93LCB0aGUgbG9naWMgZm9yIGRldGVybWluaW5nIHRoZSBwcm9iZSBpbnN0cnVjdGlvbiB0eXBlIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSAqY2FsbGVycyogb2YgYGFkZF9leGNlcHRpb25faGFuZGxlcmAuIFRoZSBmdW5jdGlvbiBpdHNlbGYgbm93IHRha2VzIGp1c3QgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGFuZCBjb250ZXh0LlxuXG5TcGVjaWZpY2FsbHksIGBicGZfaml0X2VtaXRfaW5zbmAgaXMgd2hlcmUgdGhlc2UgY2hhbmdlcyBhcmUgaGFwcGVuaW5nLiBXZSdyZSBub3cgY2hlY2tpbmcgY29uZGl0aW9ucyBsaWtlIGBpbnNuX2lzX3Byb2JlX2xkeChpbnNuKWAgb3IgYEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gLi4uYCBiZWZvcmUgY2FsbGluZyBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYC4gRWZmZWN0aXZlbHksIHRoZSBwYXRjaCBpcyByZW9yZ2FuaXppbmcgaG93IHRoZSBleGNlcHRpb24gdGFibGUgZW50cmllcyBhcmUgY3JlYXRlZCBmb3IgdmFyaW91cyBCUEYgaW5zdHJ1Y3Rpb25zIHJlbGF0ZWQgdG8gcHJvYmUgbWVtb3J5IG9wZXJhdGlvbnMuXG5cbk5vdywgY29uc2lkZXJpbmcgS01TQU4sIEkga25vdyB0aGF0IHN1cHBvcnQgaXMgcHJpbWFyaWx5IG9uIHg4Nl82NCwgd2l0aCBzb21lIEFSTTY0IHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBkZWZpbml0ZWx5ICpub3QqIFJJU0MtViBhdCB0aGlzIHBvaW50LiBOZXZlcnRoZWxlc3MsIGxldCdzIGxvb2sgYXQgdGhpcyBwYXRjaCBzZW1hbnRpY2FsbHkuIERvZXMgdGhpcyAqY2hhbmdlKiB0aGUgcmlzayBwcm9maWxlP1xuXG5JIGRvbid0IHNlZSBhbnkgb2J2aW91cyBLTVNBTi1yZWxhdGVkIHByb2JsZW1zLiBUaGlzIGlzIEJQRiBKSVQgZW1pc3Npb24gbG9naWMgcmVmYWN0b3JpbmcsIHB1cmUgYW5kIHNpbXBsZS4gVGhlcmUncyBub3RoaW5nIEkgY2FuIHNlZSBoZXJlIHRoYXQgY291bGQgbGVhZCB0bzpcblxuKiAgIEtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuKiAgIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuKiAgIE1lbW9yeSBhbGxvY2F0aW9uIG9yIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2sgb3IgaGVhcCkuXG4qICAgQW55IGluZm9ybWF0aW9uIGxlYWthZ2UgdG8gdXNlciBzcGFjZS5cblxuSXQncyBqdXN0IHNodWZmbGluZyBhcm91bmQgdGhlIGxvZ2ljIGZvciByZWdpc3RlcmluZyBleGNlcHRpb24gaGFuZGxlcnMuIEl0IHNlZW1zIHByZXR0eSBjb250YWluZWQsIGFuZCB0aGUgY2hhbmNlcyBvZiBpbnRyb2R1Y2luZyBhIEtNU0FOIGlzc3VlIHNlZW0gaW5jcmVkaWJseSBsb3cuXG5cbkknbGwgcXVpY2tseSBkbyBhIHF1aWNrIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjaGVjayBvbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AganVzdCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBidXQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB1bmxpa2VseSB0byByZXF1aXJlIGFueSBzcGVjaWZpYyBLTVNBTiBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MzcuMTM0Njg2MTQ2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzg4MzIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRfZXhjZXB0aW9uX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTcyMT1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy03MzQtLyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqL1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NzM1OnN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGludCBkc3RfcmVnLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTczNi17XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjM9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5MzItXFx0XFx0aWYgKGluc25faXNfcHJvYmVfbGR4KGluc24pKSB7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxOTMzOlxcdFxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihyZCwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5MzQtXFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTk2NC1cXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxOTY1OlxcdFxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihSRUdfRE9OVF9DTEVBUl9NQVJLRVIsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTY2LVxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5ODgtXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMikge1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTk4OTpcXHRcXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTk5MC1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDE4LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjAxOTpcXHRcXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIobG9hZF9yZWcgXFx1MDAzYyAwID9cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMjAtXFx0XFx0XFx0XFx0XFx0UkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MzcuMTc4NTc2NDE0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzI1MjkwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgNzMwLTc2NSBvZiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgc3BlY2lmaWMgc2VnbWVudCBvZiB0aGUgSklUIGNvbXBpbGVyLiBJIGV4cGVjdCB0byBzZWUgc29tZSBsb3ctbGV2ZWwgUklTQy1WIGFzc2VtYmx5IGdlbmVyYXRpb24sIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgQlBGIGluc3RydWN0aW9ucyBhcmUgYmVpbmcgdHJhbnNsYXRlZCBpbnRvIHRoZSBuYXRpdmUgYXJjaGl0ZWN0dXJlIGNvZGUuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiBhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiBCUEYgSklUIGNvbXBpbGVycywgaXQncyBwcm9iYWJseSBoYW5kbGluZyA2NC1iaXQgb3BlcmF0aW9ucywgcG9zc2libHkgaW50ZWdlciBhcml0aG1ldGljLCBtZW1vcnkgYWNjZXNzLCBvciBzb21lIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyByZWdpc3RlcnMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgd2hhdCBpbW1lZGlhdGUgdmFsdWVzIGFyZSBiZWluZyB1c2VkLCBhbmQgdGhlIG92ZXJhbGwgaW5zdHJ1Y3Rpb24gZmxvdy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGlmIHRoZXJlJ3MgYW55IGNsZXZlciBvcHRpbWl6YXRpb24gaGFwcGVuaW5nLCBzdWNoIGFzIGluc3RydWN0aW9uIHNjaGVkdWxpbmcgb3IgcGVlcGhvbGUgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGlzIHNlY3Rpb24uIFBlcmhhcHMgdGhlcmUncyBhbiBhdHRlbXB0IHRvIG1pbmltaXplIGRlcGVuZGVuY2llcyBvciB0byBwcmVmZXRjaCBkYXRhLiBGcm9tIHRoaXMgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgcm91dGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUyNywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjU3OjM5LjU1MTEwODA0NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MzA6XFx0XFxuIDczMTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNzMyOlxcdH1cXG4gNzMzOlxcdFxcbiA3MzQ6XFx0LyogQWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgZm9yIGEgZmF1bHRpbmcgcHJvYmUgaW5zbiAqL1xcbiA3MzU6XFx0c3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW50IGRzdF9yZWcsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbiA3MzY6XFx0e1xcbiA3Mzc6XFx0XFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XFxuIDczODpcXHRcXHR1bnNpZ25lZCBsb25nIHBjO1xcbiA3Mzk6XFx0XFx0b2ZmX3QgaW5zX29mZnNldDtcXG4gNzQwOlxcdFxcdG9mZl90IGZpeHVwX29mZnNldDtcXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aWYgKCFjdHgtXFx1MDAzZWluc25zIHx8ICFjdHgtXFx1MDAzZXJvX2luc25zIHx8ICFjdHgtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlZXh0YWJsZSB8fFxcbiA3NDM6XFx0XFx0ICAgIGN0eC1cXHUwMDNlZXhfaW5zbl9vZmYgXFx1MDAzYz0gMCB8fCBjdHgtXFx1MDAzZWV4X2ptcF9vZmYgXFx1MDAzYz0gMClcXG4gNzQ0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGN0eC1cXHUwMDNlbmV4ZW50cmllcyBcXHUwMDNlPSBjdHgtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbnVtX2V4ZW50cmllcykpXFxuIDc0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzQ4OlxcdFxcbiA3NDk6XFx0XFx0aWYgKFdBUk5fT05fT05DRShjdHgtXFx1MDAzZWV4X2luc25fb2ZmIFxcdTAwM2UgY3R4LVxcdTAwM2VuaW5zbnMgfHwgY3R4LVxcdTAwM2VleF9qbXBfb2ZmIFxcdTAwM2UgY3R4LVxcdTAwM2VuaW5zbnMpKVxcbiA3NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc1MTpcXHRcXG4gNzUyOlxcdFxcdGV4ID0gXFx1MDAyNmN0eC1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VleHRhYmxlW2N0eC1cXHUwMDNlbmV4ZW50cmllc107XFxuIDc1MzpcXHRcXHRwYyA9ICh1bnNpZ25lZCBsb25nKVxcdTAwMjZjdHgtXFx1MDAzZXJvX2luc25zW2N0eC1cXHUwMDNlZXhfaW5zbl9vZmZdO1xcbiA3NTQ6XFx0XFxuIDc1NTpcXHRcXHQvKlxcbiA3NTY6XFx0XFx0ICogVGhpcyBpcyB0aGUgcmVsYXRpdmUgb2Zmc2V0IG9mIHRoZSBpbnN0cnVjdGlvbiB0aGF0IG1heSBmYXVsdCBmcm9tXFxuIDc1NzpcXHRcXHQgKiB0aGUgZXhjZXB0aW9uIHRhYmxlIGl0c2VsZi4gVGhpcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGV4Y2VwdGlvblxcbiA3NTg6XFx0XFx0ICogdGFibGUgYW5kIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2lsbFxcbiA3NTk6XFx0XFx0ICogYmUgc2V0IHRvICcwJyBhbmQgdGhlIGV4ZWN1dGlvbiB3aWxsIGp1bXAgdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24uXFxuIDc2MDpcXHRcXHQgKi9cXG4gNzYxOlxcdFxcdGluc19vZmZzZXQgPSBwYyAtIChsb25nKVxcdTAwMjZleC1cXHUwMDNlaW5zbjtcXG4gNzYyOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoaW5zX29mZnNldCBcXHUwMDNlPSAwIHx8IGluc19vZmZzZXQgXFx1MDAzYyBJTlRfTUlOKSlcXG4gNzYzOlxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiA3NjQ6XFx0XFxuIDc2NTpcXHRcXHQvKlxcbiA3NjY6XFx0XFx0ICogU2luY2UgdGhlIGV4dGFibGUgZm9sbG93cyB0aGUgcHJvZ3JhbSwgdGhlIGZpeHVwIG9mZnNldCBpcyBhbHdheXNcXG4gNzY3OlxcdFxcdCAqIG5lZ2F0aXZlIGFuZCBsaW1pdGVkIHRvIEJQRl9KSVRfUkVHSU9OX1NJWkUuIFN0b3JlIGEgcG9zaXRpdmUgdmFsdWVcXG4gNzY4OlxcdFxcdCAqIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgYW5kIHB1dCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIHVwcGVyXFxuIDc2OTpcXHRcXHQgKiBiaXRzLiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGJ1aWxkdGltZSBvciBydW50aW1lIHNvcnRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6MzkuNTUxMjI0NjI1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1OTA1MDMyMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUklTQy1WIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgcmVmYWN0b3JpbmcgaG93IGV4Y2VwdGlvbiBoYW5kbGluZyBpcyBpbnNlcnRlZCB3aXRoaW4gdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIHNoaWZ0aW5nIHRoZSByZXNwb25zaWJpbGl0eSBvZiBkZXRlcm1pbmluZyB3aGVuIHRvIGFkZCBhbiBleGNlcHRpb24gaGFuZGxlci4gSW5zdGVhZCBvZiBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKClgIGluc3BlY3RpbmcgdGhlIGluc3RydWN0aW9uIGRpcmVjdGx5LCB0aGUgY29kZSBjYWxsaW5nIGl0LCBuYW1lbHkgYGJwZl9qaXRfZW1pdF9pbnNuKClgLCBub3cgZG9lcyB0aGUgY2hlY2sgZm9yIHByb2JlIGluc3RydWN0aW9ucy5cblxuTXkgbWFpbiBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB2dWxuZXJhYmlsaXRpZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guXG5cbkFscmlnaHQsIHNvOlxuXG4qICAgKipObyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3M6KiogSXQgZG9lc24ndCBhcHBlYXIgdGhpcyBjaGFuZ2UgdG91Y2hlcyBhbnkgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHJlYWRzLiBOb3RoaW5nIGlzIGJlaW5nIGFsbG9jYXRlZCBvciBhY2Nlc3NlZCB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbi5cbiogICAqKk5vIGRhdGEgbGVha3M6KiogV2UncmUgbm90IGNvcHlpbmcgYW55IG1lbW9yeSB0byB1c2VyIHNwYWNlLCBzbyBubyByaXNrIHRoZXJlIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhLlxuKiAgICoqTm8gY29uZGl0aW9uYWwgdnVsbmVyYWJpbGl0aWVzOioqIFRoZXJlIGFyZW4ndCBhbnkgY29uZGl0aW9uYWxzIHRoYXQgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgd2hpY2ggaXMgZ29vZC4gVGhhdCBlbGltaW5hdGVzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgcHJvYmxlbXMuXG4qICAgKipKSVQgZW1pc3Npb24gYnVnczoqKiBJZiB0aGVyZSBhcmUgYW55IGJ1Z3MgaW50cm9kdWNlZCwgdGhleSdyZSBtb3JlIGxpa2VseSB0byBtYW5pZmVzdCBhcyBpbmNvcnJlY3QgbWFjaGluZSBjb2RlIGJlaW5nIGdlbmVyYXRlZCBvciBvdXRyaWdodCBrZXJuZWwgY3Jhc2hlcywgbm90IGJ5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgICoqS01TQU4gaXMgaXJyZWxldmFudDoqKiBLTVNBTiBpc24ndCBpbiBwbGF5IGhlcmUsIHNvIHdlIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgdGhhdCBhcyBhIGRpYWdub3N0aWMgdG9vbC5cblxuR2l2ZW4gdGhlc2UgcG9pbnRzLCBJJ20gZmVlbGluZyBjb25maWRlbnQgYWJvdXQgdGhpcyBjaGFuZ2UuIFdlIGNhbiBzYWZlbHkgbW92ZSB0byBmb3JtdWxhdGluZyB0aGUgcmVzcG9uc2UgYW5kIHNldHRpbmcgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MjIsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NTc6NTUuNDU2MjU5MTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXhjZXB0aW9uIHRhYmxlIHJlZ2lzdHJhdGlvbiBsb2dpYyBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgKGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCkuIEl0IG1vdmVzIG9wY29kZSBjaGVja3MgKGBpbnNuX2lzX3Byb2JlX2xkeCgpYCwgYEJQRl9QUk9CRV9NRU0zMmAsIGBCUEZfUFJPQkVfQVRPTUlDYCkgZnJvbSB3aXRoaW4gYGFkZF9leGNlcHRpb25faGFuZGxlcigpYCB0byBpdHMgY2FsbGVycyBpbiBgYnBmX2ppdF9lbWl0X2luc24oKWAuXFxuXFxuVGhpcyBpcyBwdXJlbHkgSklUIGNvZGUgZW1pc3Npb24gYW5kIGludGVybmFsIGV4Y2VwdGlvbiB0YWJsZSBib29ra2VlcGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyBoYW5kbGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleGNlcHRpb24gdGFibGUgcmVnaXN0cmF0aW9uIGxvZ2ljIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlciAoYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgKS4gSXQgbW92ZXMgb3Bjb2RlIGNoZWNrcyAoYGluc25faXNfcHJvYmVfbGR4KClgLCBgQlBGX1BST0JFX01FTTMyYCwgYEJQRl9QUk9CRV9BVE9NSUNgKSBmcm9tIHdpdGhpbiBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKClgIHRvIGl0cyBjYWxsZXJzIGluIGBicGZfaml0X2VtaXRfaW5zbigpYC5cXG5cXG5UaGlzIGlzIHB1cmVseSBKSVQgY29kZSBlbWlzc2lvbiBhbmQgaW50ZXJuYWwgZXhjZXB0aW9uIHRhYmxlIGJvb2trZWVwaW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBvciBkYXRhIHBhdGhzIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2d9t2[1] Phase: Succeeded StartedAt: 2026-09-01 23:58:07 +0000 UTC FinishedAt: 2026-09-01 23:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 23:58:07 +0000 UTC FinishedAt: 2026-09-01 23:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2] Phase: Succeeded StartedAt: 2026-09-01 23:58:07 +0000 UTC FinishedAt: 2026-09-02 00:43:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-01 23:58:07 +0000 UTC FinishedAt: 2026-09-02 00:43:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-01 23:58:07 +0000 UTC FinishedAt: 2026-09-01 23:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-01 23:58:07 +0000 UTC FinishedAt: 2026-09-01 23:58:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2d9t2/series-workflow2d9t2-convert-artifact-1936236570/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-01 23:58:17 +0000 UTC FinishedAt: 2026-09-02 00:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-01 23:58:17 +0000 UTC FinishedAt: 2026-09-02 00:17:56 +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:*8b9382c3-5c26-4373-815d-d86fb4653d5c,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-workflow2d9t2/series-workflow2d9t2-convert-artifact-1936236570/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": "f3bf1bf8-9fa6-4635-bca5-e5cbbc9fc013", "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-workflow2d9t2/series-workflow2d9t2-build-action-675803336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-01 23:58:17 +0000 UTC FinishedAt: 2026-09-02 00:17:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8b9382c3-5c26-4373-815d-d86fb4653d5c,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-workflow2d9t2/series-workflow2d9t2-convert-artifact-1936236570/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": "f3bf1bf8-9fa6-4635-bca5-e5cbbc9fc013", "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-workflow2d9t2/series-workflow2d9t2-build-action-675803336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 00:17:56 +0000 UTC FinishedAt: 2026-09-02 00:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 00:17:56 +0000 UTC FinishedAt: 2026-09-02 00:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 00:17:56 +0000 UTC FinishedAt: 2026-09-02 00:18:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 00:17:56 +0000 UTC FinishedAt: 2026-09-02 00:18:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2d9t2/series-workflow2d9t2-convert-artifact-1481811061/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 00:18:06 +0000 UTC FinishedAt: 2026-09-02 00:19:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 00:18:06 +0000 UTC FinishedAt: 2026-09-02 00:19:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f3bf1bf8-9fa6-4635-bca5-e5cbbc9fc013,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-workflow2d9t2/series-workflow2d9t2-build-action-675803336/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-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 00:19:58 +0000 UTC FinishedAt: 2026-09-02 00:19:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 00:19:58 +0000 UTC FinishedAt: 2026-09-02 00:19:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 00:19:58 +0000 UTC FinishedAt: 2026-09-02 00:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 00:19:58 +0000 UTC FinishedAt: 2026-09-02 00:40:38 +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:*8b9382c3-5c26-4373-815d-d86fb4653d5c,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-workflow2d9t2/series-workflow2d9t2-convert-artifact-1481811061/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": "2f3a2338-329a-4666-8fa1-7cb668711958", "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-workflow2d9t2/series-workflow2d9t2-build-action-3978536577/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 00:19:58 +0000 UTC FinishedAt: 2026-09-02 00:40:07 +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:*8b9382c3-5c26-4373-815d-d86fb4653d5c,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-workflow2d9t2/series-workflow2d9t2-convert-artifact-1481811061/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": "2f3a2338-329a-4666-8fa1-7cb668711958", "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-workflow2d9t2/series-workflow2d9t2-build-action-3978536577/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 00:40:38 +0000 UTC FinishedAt: 2026-09-02 00:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 00:40:38 +0000 UTC FinishedAt: 2026-09-02 00:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 00:40:38 +0000 UTC FinishedAt: 2026-09-02 00:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 00:40:38 +0000 UTC FinishedAt: 2026-09-02 00:42:28 +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:*2f3a2338-329a-4666-8fa1-7cb668711958,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-workflow2d9t2/series-workflow2d9t2-build-action-3978536577/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-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 00:42:38 +0000 UTC FinishedAt: 2026-09-02 00:43:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 00:42:38 +0000 UTC FinishedAt: 2026-09-02 00:43:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"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:*f3bf1bf8-9fa6-4635-bca5-e5cbbc9fc013,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2f3a2338-329a-4666-8fa1-7cb668711958,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-workflow2d9t2/series-workflow2d9t2-build-action-675803336/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-workflow2d9t2/series-workflow2d9t2-build-action-3978536577/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 00:42:38 +0000 UTC FinishedAt: 2026-09-02 00:42:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 00:42:38 +0000 UTC FinishedAt: 2026-09-02 00:42:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"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-workflow2d9t2/series-workflow2d9t2-convert-artifact-2129806682/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 00:42:38 +0000 UTC FinishedAt: 2026-09-02 00:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 00:42:38 +0000 UTC FinishedAt: 2026-09-02 00:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 00:42:38 +0000 UTC FinishedAt: 2026-09-02 00:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 00:42:48 +0000 UTC FinishedAt: 2026-09-02 00:43:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2d9t2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","64BIT"],"series_id":"baeff589-2b84-4aa1-9616-3c5d6f805138","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 00:42:48 +0000 UTC FinishedAt: 2026-09-02 00:43:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f3bf1bf8-9fa6-4635-bca5-e5cbbc9fc013,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2f3a2338-329a-4666-8fa1-7cb668711958,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-workflow2d9t2/series-workflow2d9t2-build-action-675803336/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-workflow2d9t2/series-workflow2d9t2-build-action-3978536577/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-workflow2d9t2/series-workflow2d9t2-convert-artifact-2129806682/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,}